/** * End-users analytics (#149) * * Route: /users * * Per end-user (metadata.userId) cost/usage breakdown with a single-user * drill-down. Users are attributed from event metadata (SDK-supplied or verified). */ import React, { useState } from 'react'; import { useApi } from '../hooks/useApi'; import { getUserAnalytics, type UserAnalytics } from '../api/analytics'; export function Users(): React.ReactElement { const [selected, setSelected] = useState(undefined); const { data, loading, error } = useApi(() => getUserAnalytics({ userId: selected }), [selected]); const users: UserAnalytics[] = data?.users ?? []; return (

End users

Cost and usage attributed to each end-user over the last 30 days.

{selected && ( )}
{loading &&
Loading…
} {error &&
Failed to load: {error}
} {!loading && !error && users.length === 0 && (
No end-user attribution yet. Set metadata.userId on your events (SDK) to see per-user cost here.
)} {users.length > 0 && (
{users.map((u) => ( setSelected(u.userId)} className="hover:bg-gray-50 cursor-pointer" > ))}
User Cost Sessions Events
{u.userId} ${u.totalCostUsd.toFixed(4)} {u.sessionCount} {u.eventCount}
)}
); } export default Users;