- Add global SWR config with exponential backoff retry (swr-config.ts) - Add ErrorBoundary component for React crash recovery (error-boundary.tsx) - Standardize ErrorState onRetry on all 6 dashboard views (dashboard, media, messages, moderation, recordings, voice) - Fix useAction: expose resetError + onError callback - Refactor useSpeakers to SWR-backed state (was local useState) for consistent cache/revalidate semantics with other hooks - Remove polling in useReview (15s refreshInterval); replace with useReviewWsSync subscribing to WS moderation_action events - Extract hashUserId to lib/hash.ts (de-dup with ambient-canvas) - WS context: add reconnect/error toast feedback via onStatusChange - WS connection: expose reconnectAttemptCount getter All typecheck + lint clean, Next 16 build passes.
13 lines
357 B
TypeScript
13 lines
357 B
TypeScript
/**
|
|
* FNV-1a 32-bit hash — same hash the gateway uses to tag PCM frames.
|
|
* Shared between use-voice hooks and ambient-canvas.
|
|
*/
|
|
export function hashUserId(userId: string): number {
|
|
let hash = 0x811c9dc5;
|
|
for (let i = 0; i < userId.length; i++) {
|
|
hash ^= userId.charCodeAt(i);
|
|
hash = Math.imul(hash, 0x01000193);
|
|
}
|
|
return hash >>> 0;
|
|
}
|