react-realtime-hooks 1.3.0 → 1.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +3 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -446,7 +446,9 @@ var createReconnectAttempt = (attempt, trigger, options, lastDelayMs, config = {
|
|
|
446
446
|
};
|
|
447
447
|
var useStableCallback = (callback) => {
|
|
448
448
|
const callbackRef = react.useRef(callback);
|
|
449
|
-
|
|
449
|
+
react.useInsertionEffect(() => {
|
|
450
|
+
callbackRef.current = callback;
|
|
451
|
+
});
|
|
450
452
|
return react.useCallback((...args) => callbackRef.current(...args), []);
|
|
451
453
|
};
|
|
452
454
|
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/env.ts","../src/hooks/useOnlineStatus.ts","../src/hooks/usePageVisibility.ts","../src/core/timers.ts","../src/hooks/useConnectionGate.ts","../src/core/reconnect.ts","../src/hooks/useStableCallback.ts","../src/hooks/useReconnect.ts","../src/hooks/useHeartbeat.ts","../src/core/connection-state.ts","../src/core/errors.ts","../src/core/url.ts","../src/hooks/useWebSocket.ts","../src/hooks/useEventSource.ts"],"names":["useSyncExternalStore","useRef","useState","useEffect","createEmptyTransitionState","useCallback","startTransition","createInitialState","useMemo","socket","defaultParseMessage"],"mappings":"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","file":"index.cjs","sourcesContent":["export interface RuntimeFeatureSupport {\n eventSource: boolean;\n navigatorOnLine: boolean;\n webSocket: boolean;\n}\n\nexport const isBrowserRuntime = (): boolean =>\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n\nexport const isWebSocketSupported = (): boolean =>\n typeof WebSocket !== \"undefined\";\n\nexport const isEventSourceSupported = (): boolean =>\n typeof EventSource !== \"undefined\";\n\nexport const hasNavigatorOnLineSupport = (): boolean =>\n typeof navigator !== \"undefined\" && typeof navigator.onLine === \"boolean\";\n\nexport const hasDocumentVisibilitySupport = (): boolean =>\n typeof document !== \"undefined\" && typeof document.visibilityState === \"string\";\n\nexport const readOnlineStatus = (initialOnline = true): {\n isOnline: boolean;\n isSupported: boolean;\n} => {\n if (!hasNavigatorOnLineSupport()) {\n return {\n isOnline: initialOnline,\n isSupported: false\n };\n }\n\n return {\n isOnline: navigator.onLine,\n isSupported: true\n };\n};\n\nexport const readPageVisibility = (initialVisible = true): {\n isVisible: boolean;\n isSupported: boolean;\n visibilityState: DocumentVisibilityState | \"visible\";\n} => {\n if (!hasDocumentVisibilitySupport()) {\n return {\n isVisible: initialVisible,\n isSupported: false,\n visibilityState: initialVisible ? \"visible\" : \"hidden\"\n };\n }\n\n return {\n isVisible: document.visibilityState === \"visible\",\n isSupported: true,\n visibilityState: document.visibilityState\n };\n};\n\nexport const getRuntimeFeatureSupport = (): RuntimeFeatureSupport => ({\n eventSource: isEventSourceSupported(),\n navigatorOnLine: hasNavigatorOnLineSupport(),\n webSocket: isWebSocketSupported()\n});\n","import { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\n\nimport { hasNavigatorOnLineSupport, readOnlineStatus } from \"../core/env\";\nimport type {\n UseOnlineStatusHook,\n UseOnlineStatusOptions,\n UseOnlineStatusResult\n} from \"../types/useOnlineStatus\";\n\nconst subscribeToOnlineStatus = (onStoreChange: () => void): (() => void) => {\n if (typeof window === \"undefined\") {\n return () => {};\n }\n\n window.addEventListener(\"online\", onStoreChange);\n window.addEventListener(\"offline\", onStoreChange);\n\n return () => {\n window.removeEventListener(\"online\", onStoreChange);\n window.removeEventListener(\"offline\", onStoreChange);\n };\n};\n\nconst createEmptyTransitionState = (): Pick<\n UseOnlineStatusResult,\n \"lastChangedAt\" | \"wentOfflineAt\" | \"wentOnlineAt\"\n> => ({\n lastChangedAt: null,\n wentOfflineAt: null,\n wentOnlineAt: null\n});\n\nexport const useOnlineStatus: UseOnlineStatusHook = (\n options: UseOnlineStatusOptions = {}\n) => {\n const initialOnline = options.initialOnline ?? true;\n const trackTransitions = options.trackTransitions ?? true;\n\n const isOnline = useSyncExternalStore(\n subscribeToOnlineStatus,\n () => readOnlineStatus(initialOnline).isOnline,\n () => initialOnline\n );\n\n const previousOnlineRef = useRef(isOnline);\n const [transitions, setTransitions] = useState(createEmptyTransitionState);\n\n useEffect(() => {\n if (!trackTransitions) {\n previousOnlineRef.current = isOnline;\n setTransitions(createEmptyTransitionState);\n return;\n }\n\n if (previousOnlineRef.current === isOnline) {\n return;\n }\n\n const changedAt = Date.now();\n previousOnlineRef.current = isOnline;\n\n setTransitions((current) => ({\n lastChangedAt: changedAt,\n wentOfflineAt: isOnline ? current.wentOfflineAt : changedAt,\n wentOnlineAt: isOnline ? changedAt : current.wentOnlineAt\n }));\n }, [isOnline, trackTransitions]);\n\n return {\n isOnline,\n isSupported: hasNavigatorOnLineSupport(),\n ...transitions\n };\n};\n","import { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\n\nimport {\n hasDocumentVisibilitySupport,\n readPageVisibility\n} from \"../core/env\";\nimport type {\n UsePageVisibilityHook,\n UsePageVisibilityOptions,\n UsePageVisibilityResult\n} from \"../types/usePageVisibility\";\n\nconst subscribeToPageVisibility = (\n onStoreChange: () => void\n): (() => void) => {\n if (typeof document === \"undefined\" || !hasDocumentVisibilitySupport()) {\n return () => {};\n }\n\n document.addEventListener(\"visibilitychange\", onStoreChange);\n\n return () => {\n document.removeEventListener(\"visibilitychange\", onStoreChange);\n };\n};\n\nconst createEmptyTransitionState = (): Pick<\n UsePageVisibilityResult,\n \"lastChangedAt\" | \"becameVisibleAt\" | \"becameHiddenAt\"\n> => ({\n lastChangedAt: null,\n becameHiddenAt: null,\n becameVisibleAt: null\n});\n\nexport const usePageVisibility: UsePageVisibilityHook = (\n options: UsePageVisibilityOptions = {}\n) => {\n const initialVisible = options.initialVisible ?? true;\n const trackTransitions = options.trackTransitions ?? true;\n\n const visibilityState = useSyncExternalStore(\n subscribeToPageVisibility,\n () => readPageVisibility(initialVisible).visibilityState,\n () => (initialVisible ? \"visible\" : \"hidden\")\n );\n\n const isVisible = visibilityState === \"visible\";\n const previousVisibleRef = useRef(isVisible);\n const [transitions, setTransitions] = useState(createEmptyTransitionState);\n\n useEffect(() => {\n if (!trackTransitions) {\n previousVisibleRef.current = isVisible;\n setTransitions(createEmptyTransitionState);\n return;\n }\n\n if (previousVisibleRef.current === isVisible) {\n return;\n }\n\n const changedAt = Date.now();\n previousVisibleRef.current = isVisible;\n\n setTransitions((current) => ({\n lastChangedAt: changedAt,\n becameHiddenAt: isVisible ? current.becameHiddenAt : changedAt,\n becameVisibleAt: isVisible ? changedAt : current.becameVisibleAt\n }));\n }, [isVisible, trackTransitions]);\n\n return {\n isSupported: hasDocumentVisibilitySupport(),\n isVisible,\n visibilityState,\n ...transitions\n };\n};\n","export interface ManagedTimeout {\n cancel: () => void;\n isActive: () => boolean;\n schedule: (callback: () => void, delayMs: number) => void;\n}\n\nexport interface ManagedInterval {\n cancel: () => void;\n isActive: () => boolean;\n start: (callback: () => void, intervalMs: number) => void;\n}\n\nconst sanitizeTimerDelay = (delayMs: number): number => {\n if (!Number.isFinite(delayMs)) {\n return 0;\n }\n\n return Math.max(0, Math.round(delayMs));\n};\n\nexport const createManagedTimeout = (): ManagedTimeout => {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n return {\n cancel() {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n },\n isActive() {\n return timeoutId !== null;\n },\n schedule(callback, delayMs) {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => {\n timeoutId = null;\n callback();\n }, sanitizeTimerDelay(delayMs));\n }\n };\n};\n\nexport const createManagedInterval = (): ManagedInterval => {\n let intervalId: ReturnType<typeof setInterval> | null = null;\n\n return {\n cancel() {\n if (intervalId !== null) {\n clearInterval(intervalId);\n intervalId = null;\n }\n },\n isActive() {\n return intervalId !== null;\n },\n start(callback, intervalMs) {\n if (intervalId !== null) {\n clearInterval(intervalId);\n }\n\n intervalId = setInterval(callback, sanitizeTimerDelay(intervalMs));\n }\n };\n};\n","import { useEffect, useRef, useState } from \"react\";\n\nimport { createManagedTimeout } from \"../core/timers\";\nimport { useOnlineStatus } from \"./useOnlineStatus\";\nimport { usePageVisibility } from \"./usePageVisibility\";\nimport type {\n ConnectionGateReason,\n UseConnectionGateHook,\n UseConnectionGateResult\n} from \"../types/useConnectionGate\";\n\ntype ConnectionGateTransitionState = Pick<\n UseConnectionGateResult,\n \"becameBlockedAt\" | \"becameReadyAt\" | \"lastChangedAt\"\n>;\n\nconst createEmptyTransitionState = (): ConnectionGateTransitionState => ({\n becameBlockedAt: null,\n becameReadyAt: null,\n lastChangedAt: null\n});\n\nconst normalizeHiddenGraceMs = (value: number | undefined): number => {\n if (value === undefined || !Number.isFinite(value)) {\n return 0;\n }\n\n return Math.max(0, value);\n};\n\nexport const useConnectionGate: UseConnectionGateHook = (options = {}) => {\n const enabled = options.enabled ?? true;\n const requireOnline = options.requireOnline ?? true;\n const requireVisible = options.requireVisible ?? false;\n const hiddenGraceMs = normalizeHiddenGraceMs(options.hiddenGraceMs);\n const trackTransitions = options.trackTransitions ?? true;\n const onlineStatus = useOnlineStatus({\n ...(options.initialOnline === undefined\n ? {}\n : { initialOnline: options.initialOnline }),\n trackTransitions: false\n });\n const pageVisibility = usePageVisibility({\n ...(options.initialVisible === undefined\n ? {}\n : { initialVisible: options.initialVisible }),\n trackTransitions: false\n });\n const hiddenGraceTimeoutRef = useRef(createManagedTimeout());\n const hiddenSinceRef = useRef<number | null>(null);\n const previousStateRef = useRef<{\n connect: boolean;\n reason: ConnectionGateReason;\n } | null>(null);\n const [hasExceededHiddenGrace, setHasExceededHiddenGrace] = useState(false);\n const [isWaitingForVisibleGrace, setIsWaitingForVisibleGrace] = useState(false);\n const [transitions, setTransitions] = useState(createEmptyTransitionState);\n\n useEffect(() => () => {\n hiddenGraceTimeoutRef.current.cancel();\n }, []);\n\n useEffect(() => {\n hiddenGraceTimeoutRef.current.cancel();\n\n if (!requireVisible || pageVisibility.isVisible) {\n hiddenSinceRef.current = null;\n setHasExceededHiddenGrace(false);\n setIsWaitingForVisibleGrace(false);\n return;\n }\n\n const hiddenSince = hiddenSinceRef.current ?? Date.now();\n hiddenSinceRef.current = hiddenSince;\n\n if (hiddenGraceMs <= 0) {\n setHasExceededHiddenGrace(true);\n setIsWaitingForVisibleGrace(false);\n return;\n }\n\n const elapsedMs = Date.now() - hiddenSince;\n\n if (elapsedMs >= hiddenGraceMs) {\n setHasExceededHiddenGrace(true);\n setIsWaitingForVisibleGrace(false);\n return;\n }\n\n setHasExceededHiddenGrace(false);\n setIsWaitingForVisibleGrace(true);\n hiddenGraceTimeoutRef.current.schedule(() => {\n setHasExceededHiddenGrace(true);\n setIsWaitingForVisibleGrace(false);\n }, hiddenGraceMs - elapsedMs);\n }, [hiddenGraceMs, pageVisibility.isVisible, requireVisible]);\n\n let reason: ConnectionGateReason = \"ready\";\n\n if (!enabled) {\n reason = \"manual\";\n } else if (requireOnline && !onlineStatus.isOnline) {\n reason = \"offline\";\n } else if (\n requireVisible &&\n !pageVisibility.isVisible &&\n hasExceededHiddenGrace\n ) {\n reason = \"hidden\";\n }\n\n const connect = reason === \"ready\";\n const isBlocked = !connect;\n\n useEffect(() => {\n if (!trackTransitions) {\n previousStateRef.current = {\n connect,\n reason\n };\n setTransitions(createEmptyTransitionState);\n return;\n }\n\n const previousState = previousStateRef.current;\n\n if (previousState === null) {\n previousStateRef.current = {\n connect,\n reason\n };\n return;\n }\n\n if (\n previousState.connect === connect &&\n previousState.reason === reason\n ) {\n return;\n }\n\n const changedAt = Date.now();\n previousStateRef.current = {\n connect,\n reason\n };\n\n setTransitions((current) => ({\n becameBlockedAt: connect ? current.becameBlockedAt : changedAt,\n becameReadyAt: connect ? changedAt : current.becameReadyAt,\n lastChangedAt: changedAt\n }));\n }, [connect, reason, trackTransitions]);\n\n return {\n becameBlockedAt: transitions.becameBlockedAt,\n becameReadyAt: transitions.becameReadyAt,\n connect,\n isBlocked,\n isOnline: onlineStatus.isOnline,\n isOnlineSupported: onlineStatus.isSupported,\n isVisibilitySupported: pageVisibility.isSupported,\n isVisible: pageVisibility.isVisible,\n isWaitingForVisibleGrace,\n lastChangedAt: transitions.lastChangedAt,\n reason,\n visibilityState: pageVisibility.visibilityState\n };\n};\n","import type {\n ReconnectAttempt,\n ReconnectDelayContext,\n ReconnectDelayStrategy,\n ReconnectTrigger,\n UseReconnectOptions\n} from \"../types/useReconnect\";\n\nexport interface NormalizedReconnectOptions {\n backoffFactor: number;\n enabled: boolean;\n getDelayMs?: ReconnectDelayStrategy;\n initialDelayMs: number;\n jitterRatio: number;\n maxAttempts: number | null;\n maxDelayMs: number;\n onCancel?: () => void;\n onReset?: () => void;\n onSchedule?: (attempt: ReconnectAttempt) => void;\n resetOnSuccess: boolean;\n}\n\nexport interface ReconnectDelayCalculationOptions {\n random?: () => number;\n strategy?: ReconnectDelayStrategy;\n}\n\nexport interface CreateReconnectAttemptOptions\n extends ReconnectDelayCalculationOptions {\n now?: number;\n}\n\nexport const DEFAULT_RECONNECT_OPTIONS: Readonly<\n Omit<NormalizedReconnectOptions, \"getDelayMs\" | \"onCancel\" | \"onReset\" | \"onSchedule\">\n> = {\n backoffFactor: 2,\n enabled: true,\n initialDelayMs: 1_000,\n jitterRatio: 0.2,\n maxAttempts: null,\n maxDelayMs: 30_000,\n resetOnSuccess: true\n};\n\nconst clampNumber = (value: number, min: number, max: number): number =>\n Math.min(max, Math.max(min, value));\n\nconst sanitizeDelay = (value: number): number => {\n if (!Number.isFinite(value)) {\n return 0;\n }\n\n return Math.max(0, Math.round(value));\n};\n\nconst sanitizeBackoffFactor = (value: number): number => {\n if (!Number.isFinite(value)) {\n return DEFAULT_RECONNECT_OPTIONS.backoffFactor;\n }\n\n return Math.max(1, value);\n};\n\nconst sanitizeMaxAttempts = (\n value: number | null | undefined\n): number | null => {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (!Number.isFinite(value)) {\n return null;\n }\n\n return Math.max(0, Math.floor(value));\n};\n\nconst sanitizeJitterRatio = (value: number): number => {\n if (!Number.isFinite(value)) {\n return DEFAULT_RECONNECT_OPTIONS.jitterRatio;\n }\n\n return clampNumber(value, 0, 1);\n};\n\nexport const normalizeReconnectOptions = (\n options?: false | UseReconnectOptions\n): NormalizedReconnectOptions | null => {\n if (options === false) {\n return null;\n }\n\n const initialDelayMs = sanitizeDelay(\n options?.initialDelayMs ?? DEFAULT_RECONNECT_OPTIONS.initialDelayMs\n );\n const maxDelayMs = Math.max(\n initialDelayMs,\n sanitizeDelay(options?.maxDelayMs ?? DEFAULT_RECONNECT_OPTIONS.maxDelayMs)\n );\n\n const normalized: NormalizedReconnectOptions = {\n backoffFactor: sanitizeBackoffFactor(\n options?.backoffFactor ?? DEFAULT_RECONNECT_OPTIONS.backoffFactor\n ),\n enabled: options?.enabled ?? DEFAULT_RECONNECT_OPTIONS.enabled,\n initialDelayMs,\n jitterRatio: sanitizeJitterRatio(\n options?.jitterRatio ?? DEFAULT_RECONNECT_OPTIONS.jitterRatio\n ),\n maxAttempts: sanitizeMaxAttempts(options?.maxAttempts),\n maxDelayMs,\n resetOnSuccess: options?.resetOnSuccess ?? DEFAULT_RECONNECT_OPTIONS.resetOnSuccess\n };\n\n if (options?.getDelayMs !== undefined) {\n normalized.getDelayMs = options.getDelayMs;\n }\n\n if (options?.onCancel !== undefined) {\n normalized.onCancel = options.onCancel;\n }\n\n if (options?.onReset !== undefined) {\n normalized.onReset = options.onReset;\n }\n\n if (options?.onSchedule !== undefined) {\n normalized.onSchedule = options.onSchedule;\n }\n\n return normalized;\n};\n\nexport const createReconnectDelayContext = (\n attempt: number,\n options: Pick<\n NormalizedReconnectOptions,\n \"backoffFactor\" | \"initialDelayMs\" | \"jitterRatio\" | \"maxDelayMs\"\n >,\n lastDelayMs: number | null\n): ReconnectDelayContext => ({\n attempt: Math.max(1, Math.floor(attempt)),\n backoffFactor: options.backoffFactor,\n initialDelayMs: options.initialDelayMs,\n jitterRatio: options.jitterRatio,\n lastDelayMs,\n maxDelayMs: options.maxDelayMs\n});\n\nexport const defaultReconnectDelayStrategy = (\n context: ReconnectDelayContext\n): number => {\n const exponent = Math.max(0, context.attempt - 1);\n const baseDelay = context.initialDelayMs * context.backoffFactor ** exponent;\n return Math.min(context.maxDelayMs, sanitizeDelay(baseDelay));\n};\n\nexport const applyJitterToDelay = (\n delayMs: number,\n jitterRatio: number,\n random: () => number = Math.random\n): number => {\n if (delayMs === 0 || jitterRatio === 0) {\n return delayMs;\n }\n\n const safeRandom = clampNumber(random(), 0, 1);\n const variance = delayMs * jitterRatio;\n const offset = (safeRandom * 2 - 1) * variance;\n return sanitizeDelay(delayMs + offset);\n};\n\nexport const calculateReconnectDelay = (\n context: ReconnectDelayContext,\n options: ReconnectDelayCalculationOptions = {}\n): number => {\n const baseDelay = sanitizeDelay(\n (options.strategy ?? defaultReconnectDelayStrategy)(context)\n );\n const cappedDelay = Math.min(context.maxDelayMs, baseDelay);\n return Math.min(\n context.maxDelayMs,\n applyJitterToDelay(cappedDelay, context.jitterRatio, options.random)\n );\n};\n\nexport const canScheduleReconnectAttempt = (\n attempt: number,\n options: Pick<NormalizedReconnectOptions, \"enabled\" | \"maxAttempts\">\n): boolean => {\n if (!options.enabled) {\n return false;\n }\n\n if (attempt < 1) {\n return false;\n }\n\n return options.maxAttempts === null || attempt <= options.maxAttempts;\n};\n\nexport const createReconnectAttempt = (\n attempt: number,\n trigger: ReconnectTrigger,\n options: Pick<\n NormalizedReconnectOptions,\n \"backoffFactor\" | \"enabled\" | \"getDelayMs\" | \"initialDelayMs\" | \"jitterRatio\" | \"maxAttempts\" | \"maxDelayMs\"\n >,\n lastDelayMs: number | null,\n config: CreateReconnectAttemptOptions = {}\n): ReconnectAttempt | null => {\n if (!canScheduleReconnectAttempt(attempt, options)) {\n return null;\n }\n\n const context = createReconnectDelayContext(attempt, options, lastDelayMs);\n const calculationOptions: ReconnectDelayCalculationOptions = {};\n\n if (config.random !== undefined) {\n calculationOptions.random = config.random;\n }\n\n if (options.getDelayMs !== undefined) {\n calculationOptions.strategy = options.getDelayMs;\n }\n\n return {\n attempt,\n delayMs: calculateReconnectDelay(context, calculationOptions),\n scheduledAt: config.now ?? Date.now(),\n trigger\n };\n};\n","import { useCallback, useRef } from \"react\";\n\nexport const useStableCallback = <TArgs extends unknown[], TResult>(\n callback: (...args: TArgs) => TResult\n): ((...args: TArgs) => TResult) => {\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n return useCallback((...args: TArgs) => callbackRef.current(...args), []);\n};\n","import { startTransition, useEffect, useRef, useState } from \"react\";\n\nimport {\n createReconnectAttempt,\n normalizeReconnectOptions\n} from \"../core/reconnect\";\nimport { createManagedTimeout } from \"../core/timers\";\nimport { useStableCallback } from \"./useStableCallback\";\nimport type {\n ReconnectAttempt,\n ReconnectTrigger,\n UseReconnectHook,\n UseReconnectResult\n} from \"../types/useReconnect\";\n\ntype ReconnectState = Pick<\n UseReconnectResult,\n \"attempt\" | \"nextDelayMs\" | \"status\"\n>;\n\nconst createInitialState = (enabled: boolean): ReconnectState => ({\n attempt: 0,\n nextDelayMs: null,\n status: enabled ? \"idle\" : \"stopped\"\n});\n\nexport const useReconnect: UseReconnectHook = (options = {}) => {\n const normalizedOptions = normalizeReconnectOptions(options) ??\n normalizeReconnectOptions()!;\n const timeoutRef = useRef(createManagedTimeout());\n const lastDelayRef = useRef<number | null>(null);\n const [state, setState] = useState<ReconnectState>(() =>\n createInitialState(normalizedOptions.enabled)\n );\n const stateRef = useRef(state);\n\n stateRef.current = state;\n\n const commitState = (\n next:\n | ReconnectState\n | ((current: ReconnectState) => ReconnectState)\n ): void => {\n const resolved =\n typeof next === \"function\"\n ? next(stateRef.current)\n : next;\n\n stateRef.current = resolved;\n startTransition(() => {\n setState(resolved);\n });\n };\n\n const runAttempt = useStableCallback((attempt: number) => {\n commitState({\n attempt,\n nextDelayMs: null,\n status: \"running\"\n });\n });\n\n const emitSchedule = useStableCallback((attempt: ReconnectAttempt) => {\n normalizedOptions.onSchedule?.(attempt);\n });\n\n const emitCancel = useStableCallback(() => {\n normalizedOptions.onCancel?.();\n });\n\n const emitReset = useStableCallback(() => {\n normalizedOptions.onReset?.();\n });\n\n useEffect(() => {\n if (!normalizedOptions.enabled) {\n timeoutRef.current.cancel();\n commitState((current) => ({\n ...current,\n nextDelayMs: null,\n status: \"stopped\"\n }));\n return;\n }\n\n commitState((current) =>\n current.status === \"stopped\"\n ? {\n ...current,\n status: \"idle\"\n }\n : current\n );\n }, [normalizedOptions.enabled]);\n\n useEffect(() => () => {\n timeoutRef.current.cancel();\n }, []);\n\n const schedule = useStableCallback((trigger: ReconnectTrigger = \"manual\"): void => {\n const current = stateRef.current;\n const nextAttempt = current.attempt + 1;\n const attempt = createReconnectAttempt(\n nextAttempt,\n trigger,\n normalizedOptions,\n lastDelayRef.current\n );\n\n timeoutRef.current.cancel();\n\n if (attempt === null) {\n commitState((snapshot) => ({\n ...snapshot,\n nextDelayMs: null,\n status: \"stopped\"\n }));\n return;\n }\n\n lastDelayRef.current = attempt.delayMs;\n timeoutRef.current.schedule(() => {\n runAttempt(attempt.attempt);\n }, attempt.delayMs);\n\n commitState({\n attempt: attempt.attempt,\n nextDelayMs: attempt.delayMs,\n status: \"scheduled\"\n });\n\n emitSchedule(attempt);\n });\n\n const cancel = useStableCallback((): void => {\n const current = stateRef.current;\n const shouldEmitCancel =\n timeoutRef.current.isActive() ||\n current.status === \"scheduled\" ||\n current.status === \"running\";\n\n timeoutRef.current.cancel();\n commitState((snapshot) => ({\n ...snapshot,\n nextDelayMs: null,\n status: \"stopped\"\n }));\n\n if (shouldEmitCancel) {\n emitCancel();\n }\n });\n\n const reset = useStableCallback((): void => {\n timeoutRef.current.cancel();\n lastDelayRef.current = null;\n commitState(createInitialState(normalizedOptions.enabled));\n emitReset();\n });\n\n const markConnected = useStableCallback((): void => {\n timeoutRef.current.cancel();\n\n if (normalizedOptions.resetOnSuccess) {\n lastDelayRef.current = null;\n commitState(createInitialState(normalizedOptions.enabled));\n emitReset();\n return;\n }\n\n commitState((current) => ({\n ...current,\n nextDelayMs: null,\n status: normalizedOptions.enabled ? \"idle\" : \"stopped\"\n }));\n });\n\n return {\n attempt: state.attempt,\n cancel,\n isActive: state.status === \"scheduled\" || state.status === \"running\",\n isScheduled: state.status === \"scheduled\",\n markConnected,\n nextDelayMs: state.nextDelayMs,\n reset,\n schedule,\n status: state.status\n };\n};\n","import { useEffect, useRef, useState } from \"react\";\n\nimport {\n createManagedInterval,\n createManagedTimeout\n} from \"../core/timers\";\nimport { useStableCallback } from \"./useStableCallback\";\nimport type {\n UseHeartbeatOptions,\n UseHeartbeatHook,\n UseHeartbeatResult\n} from \"../types/useHeartbeat\";\n\ntype HeartbeatState = Pick<\n UseHeartbeatResult,\n \"hasTimedOut\" | \"isRunning\" | \"lastAckAt\" | \"lastBeatAt\" | \"latencyMs\"\n>;\n\nconst createInitialState = (isRunning: boolean): HeartbeatState => ({\n hasTimedOut: false,\n isRunning,\n lastAckAt: null,\n lastBeatAt: null,\n latencyMs: null\n});\n\nexport const useHeartbeat = <\n TOutgoing = unknown,\n TIncoming = TOutgoing\n>(\n options: UseHeartbeatOptions<TOutgoing, TIncoming>\n): UseHeartbeatResult<TIncoming> => {\n const enabled = options.enabled ?? true;\n const startOnMount = options.startOnMount ?? true;\n const intervalRef = useRef(createManagedInterval());\n const timeoutRef = useRef(createManagedTimeout());\n const generationRef = useRef(0);\n const [state, setState] = useState<HeartbeatState>(() =>\n createInitialState(enabled && startOnMount)\n );\n const stateRef = useRef(state);\n\n stateRef.current = state;\n\n const commitState = (\n next:\n | HeartbeatState\n | ((current: HeartbeatState) => HeartbeatState)\n ): void => {\n const resolved =\n typeof next === \"function\" ? next(stateRef.current) : next;\n\n stateRef.current = resolved;\n setState(resolved);\n };\n\n const handleTimeout = useStableCallback(() => {\n commitState((current) => ({\n ...current,\n hasTimedOut: true\n }));\n options.onTimeout?.();\n });\n\n const scheduleTimeout = useStableCallback(() => {\n if (options.timeoutMs === undefined) {\n timeoutRef.current.cancel();\n return;\n }\n\n timeoutRef.current.schedule(() => {\n handleTimeout();\n }, options.timeoutMs);\n });\n\n const handleBeatSuccess = useStableCallback((performedAt: number) => {\n commitState((current) => ({\n ...current,\n hasTimedOut: false,\n lastBeatAt: performedAt\n }));\n\n scheduleTimeout();\n options.onBeat?.();\n });\n\n const handleBeatError = useStableCallback((error: unknown) => {\n timeoutRef.current.cancel();\n options.onError?.(error);\n });\n\n const runBeat = useStableCallback(() => {\n const generation = generationRef.current;\n\n const completeBeat = (result: void | boolean): void => {\n if (generation !== generationRef.current || result === false) {\n return;\n }\n\n handleBeatSuccess(Date.now());\n };\n\n const failBeat = (error: unknown): void => {\n if (generation !== generationRef.current) {\n return;\n }\n\n handleBeatError(error);\n };\n\n try {\n const result = options.beat?.();\n\n if (result !== null && typeof result === \"object\" && \"then\" in result) {\n void Promise.resolve(result).then(completeBeat, failBeat);\n return;\n }\n\n completeBeat(result);\n } catch (error) {\n failBeat(error);\n }\n });\n\n const start = useStableCallback((): void => {\n if (!enabled) {\n return;\n }\n\n if (!intervalRef.current.isActive()) {\n intervalRef.current.start(() => {\n runBeat();\n }, options.intervalMs);\n }\n\n commitState((current) => ({\n ...current,\n hasTimedOut: false,\n isRunning: true\n }));\n });\n\n const stop = useStableCallback((): void => {\n generationRef.current += 1;\n intervalRef.current.cancel();\n timeoutRef.current.cancel();\n commitState(createInitialState(false));\n });\n\n const beat = useStableCallback((): void => {\n if (!enabled) {\n return;\n }\n\n runBeat();\n });\n\n const notifyAck = useStableCallback((message: TIncoming): boolean => {\n if (stateRef.current.lastBeatAt === null) {\n return false;\n }\n\n const matchesAck =\n options.matchesAck === undefined || options.matchesAck(message);\n\n if (!matchesAck) {\n return false;\n }\n\n const acknowledgedAt = Date.now();\n timeoutRef.current.cancel();\n\n commitState((current) => ({\n ...current,\n hasTimedOut: false,\n lastAckAt: acknowledgedAt,\n latencyMs:\n current.lastBeatAt === null\n ? null\n : acknowledgedAt - current.lastBeatAt\n }));\n\n return true;\n });\n\n useEffect(() => {\n if (!enabled) {\n stop();\n return;\n }\n\n if (startOnMount) {\n start();\n return stop;\n }\n\n stop();\n return undefined;\n }, [enabled, options.intervalMs, start, startOnMount, stop]);\n\n useEffect(() => () => {\n generationRef.current += 1;\n intervalRef.current.cancel();\n timeoutRef.current.cancel();\n }, []);\n\n return {\n beat,\n hasTimedOut: state.hasTimedOut,\n isRunning: state.isRunning,\n lastAckAt: state.lastAckAt,\n lastBeatAt: state.lastBeatAt,\n latencyMs: state.latencyMs,\n notifyAck,\n start,\n stop\n };\n};\n\nconst _useHeartbeatTypecheck: UseHeartbeatHook = useHeartbeat;\nvoid _useHeartbeatTypecheck;\n","import type {\n ConnectionStateSnapshot,\n RealtimeConnectionStatus\n} from \"../types/common\";\n\nexport const isConnectedStatus = (\n status: RealtimeConnectionStatus\n): boolean => status === \"open\";\n\nexport const isConnectingStatus = (\n status: RealtimeConnectionStatus\n): boolean => status === \"connecting\" || status === \"reconnecting\";\n\nexport const isClosedStatus = (\n status: RealtimeConnectionStatus\n): boolean => status === \"closed\" || status === \"idle\" || status === \"error\";\n\nexport const createConnectionStateSnapshot = (\n status: RealtimeConnectionStatus,\n config: {\n isSupported?: boolean;\n lastChangedAt?: number | null;\n } = {}\n): ConnectionStateSnapshot => {\n const base = {\n isSupported: config.isSupported ?? true,\n lastChangedAt: config.lastChangedAt ?? null\n };\n\n switch (status) {\n case \"open\":\n return {\n ...base,\n isClosed: false,\n isConnected: true,\n isConnecting: false,\n status\n };\n case \"connecting\":\n case \"reconnecting\":\n return {\n ...base,\n isClosed: false,\n isConnected: false,\n isConnecting: true,\n status\n };\n case \"closing\":\n return {\n ...base,\n isClosed: false,\n isConnected: false,\n isConnecting: false,\n status\n };\n case \"idle\":\n case \"closed\":\n case \"error\":\n return {\n ...base,\n isClosed: true,\n isConnected: false,\n isConnecting: false,\n status\n };\n }\n};\n","export type RealtimeErrorKind =\n | \"heartbeat-error\"\n | \"heartbeat-timeout\"\n | \"parse-error\";\n\nexport interface RealtimeErrorEventInit extends EventInit {\n cause?: unknown;\n kind: RealtimeErrorKind;\n}\n\nexport class RealtimeErrorEvent extends Event {\n readonly cause: unknown;\n readonly kind: RealtimeErrorKind;\n\n constructor(type: string, init: RealtimeErrorEventInit) {\n super(type, init);\n this.cause = init.cause;\n this.kind = init.kind;\n }\n}\n","import type { UrlProvider } from \"../types/common\";\n\nconst normalizeResolvedUrl = (value: string | URL | null): string | null => {\n if (value === null) {\n return null;\n }\n\n if (value instanceof URL) {\n return value.toString();\n }\n\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n};\n\nexport const resolveUrlProvider = (url: UrlProvider): string | null => {\n const resolved = typeof url === \"function\" ? url() : url;\n return normalizeResolvedUrl(resolved ?? null);\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { createConnectionStateSnapshot } from \"../core/connection-state\";\nimport { RealtimeErrorEvent } from \"../core/errors\";\nimport { isWebSocketSupported } from \"../core/env\";\nimport { resolveUrlProvider } from \"../core/url\";\nimport { useHeartbeat } from \"./useHeartbeat\";\nimport { useReconnect } from \"./useReconnect\";\nimport { useStableCallback } from \"./useStableCallback\";\nimport type { UseHeartbeatOptions } from \"../types/useHeartbeat\";\nimport type {\n UseWebSocketHook,\n WebSocketHeartbeatAction,\n UseWebSocketHeartbeatOptions,\n UseWebSocketOptions,\n UseWebSocketResult\n} from \"../types/useWebSocket\";\n\ntype WebSocketState<TIncoming> = {\n bufferedAmount: number;\n lastChangedAt: number | null;\n lastCloseEvent: CloseEvent | null;\n lastError: Event | null;\n lastMessage: TIncoming | null;\n lastMessageEvent: MessageEvent<unknown> | null;\n status: UseWebSocketResult<TIncoming>[\"status\"];\n};\n\nconst createInitialState = <TIncoming,>(\n status: UseWebSocketResult<TIncoming>[\"status\"] = \"idle\"\n): WebSocketState<TIncoming> => ({\n bufferedAmount: 0,\n lastChangedAt: null,\n lastCloseEvent: null,\n lastError: null,\n lastMessage: null,\n lastMessageEvent: null,\n status\n});\n\nconst defaultParseMessage = <TIncoming,>(\n event: MessageEvent<unknown>\n): TIncoming => event.data as TIncoming;\n\nconst defaultSerializeMessage = <TOutgoing,>(message: TOutgoing) => {\n if (\n typeof message === \"string\" ||\n message instanceof Blob ||\n message instanceof ArrayBuffer\n ) {\n return message;\n }\n\n if (ArrayBuffer.isView(message)) {\n return message;\n }\n\n return JSON.stringify(message);\n};\n\nconst resolveFactoryValue = <TValue,>(\n value: TValue | (() => TValue)\n): TValue =>\n typeof value === \"function\"\n ? (value as () => TValue)()\n : value;\n\nconst toProtocolsDependency = (protocols: string | string[] | undefined): string => {\n if (protocols === undefined) {\n return \"\";\n }\n\n return JSON.stringify(protocols);\n};\n\nconst parseProtocolsDependency = (\n protocolsDependency: string\n): string | string[] | undefined =>\n protocolsDependency === \"\"\n ? undefined\n : JSON.parse(protocolsDependency) as string | string[];\n\nconst toHeartbeatConfig = <TOutgoing, TIncoming>(\n heartbeat: UseWebSocketOptions<TIncoming, TOutgoing>[\"heartbeat\"]\n): UseWebSocketHeartbeatOptions<TOutgoing, TIncoming> | null =>\n heartbeat === undefined || heartbeat === false ? null : heartbeat;\n\nconst isSocketActive = (socket: WebSocket): boolean =>\n socket.readyState === WebSocket.OPEN || socket.readyState === WebSocket.CONNECTING;\n\nexport const useWebSocket: UseWebSocketHook = <\n TIncoming = unknown,\n TOutgoing = TIncoming\n>(\n options: UseWebSocketOptions<TIncoming, TOutgoing>\n): UseWebSocketResult<TIncoming, TOutgoing> => {\n const connect = options.connect ?? true;\n const supported = isWebSocketSupported();\n const resolvedUrl = useMemo(() => resolveUrlProvider(options.url), [options.url]);\n const protocolsDependency = toProtocolsDependency(options.protocols);\n const protocols = useMemo(\n () => parseProtocolsDependency(protocolsDependency),\n [protocolsDependency]\n );\n\n const socketRef = useRef<WebSocket | null>(null);\n const socketKeyRef = useRef<string | null>(null);\n const activeSocketEpochRef = useRef<number | null>(null);\n const closingSocketEpochRef = useRef<number | null>(null);\n const nextSocketEpochRef = useRef(0);\n const manualCloseRef = useRef(false);\n const manualOpenRef = useRef(false);\n const skipCloseReconnectRef = useRef(false);\n const suppressReconnectRef = useRef(false);\n const pendingCloseActionRef = useRef<{\n error: Event | null;\n reconnectTrigger: \"heartbeat-timeout\" | \"error\" | null;\n } | null>(null);\n const terminalErrorRef = useRef<Event | null>(null);\n const [openNonce, setOpenNonce] = useState(0);\n const [state, setState] = useState<WebSocketState<TIncoming>>(() =>\n createInitialState(connect ? \"connecting\" : \"idle\")\n );\n const stateRef = useRef(state);\n stateRef.current = state;\n\n const reconnectEnabled =\n options.reconnect !== false && supported && resolvedUrl !== null;\n const reconnect = useReconnect(\n options.reconnect === false\n ? { enabled: false }\n : {\n ...options.reconnect,\n enabled: reconnectEnabled && (options.reconnect?.enabled ?? true)\n }\n );\n\n const heartbeatEnabled =\n options.heartbeat !== false && supported && resolvedUrl !== null;\n const heartbeatConfig = toHeartbeatConfig<TOutgoing, TIncoming>(\n options.heartbeat\n );\n const defaultHeartbeatAction: WebSocketHeartbeatAction =\n options.reconnect === false ? \"close\" : \"reconnect\";\n const heartbeatHookOptions: UseHeartbeatOptions<TOutgoing, TIncoming> =\n heartbeatConfig === null\n ? {\n enabled: false,\n intervalMs: 1_000,\n startOnMount: false\n }\n : {\n beat: () => {\n const socket = socketRef.current;\n if (socket === null || socket.readyState !== WebSocket.OPEN) {\n return false;\n }\n\n const heartbeatMessage = heartbeatConfig.message;\n\n if (heartbeatMessage !== undefined) {\n const serialized = (options.serializeMessage ?? defaultSerializeMessage)(\n resolveFactoryValue(heartbeatMessage)\n );\n socket.send(serialized);\n }\n\n return heartbeatConfig.beat?.() ?? true;\n },\n enabled: heartbeatEnabled && (heartbeatConfig.enabled ?? true),\n intervalMs: heartbeatConfig.intervalMs,\n startOnMount: false\n };\n\n if (heartbeatConfig !== null && heartbeatConfig.timeoutMs !== undefined) {\n heartbeatHookOptions.timeoutMs = heartbeatConfig.timeoutMs;\n }\n\n if (heartbeatConfig !== null && heartbeatConfig.matchesAck !== undefined) {\n heartbeatHookOptions.matchesAck = heartbeatConfig.matchesAck;\n }\n\n if (heartbeatConfig !== null && heartbeatConfig.onBeat !== undefined) {\n heartbeatHookOptions.onBeat = heartbeatConfig.onBeat;\n }\n\n if (heartbeatConfig !== null && heartbeatConfig.onTimeout !== undefined) {\n heartbeatHookOptions.onTimeout = heartbeatConfig.onTimeout;\n }\n\n if (heartbeatConfig !== null) {\n const onTimeout = heartbeatHookOptions.onTimeout;\n heartbeatHookOptions.onTimeout = () => {\n applyHeartbeatAction(\n heartbeatConfig.timeoutAction ?? defaultHeartbeatAction,\n new RealtimeErrorEvent(\"heartbeat-timeout\", {\n kind: \"heartbeat-timeout\"\n }),\n \"heartbeat-timeout\"\n );\n onTimeout?.();\n };\n\n const onError = heartbeatConfig.onError;\n heartbeatHookOptions.onError = (error) => {\n const event = new RealtimeErrorEvent(\"heartbeat-error\", {\n cause: error,\n kind: \"heartbeat-error\"\n });\n\n applyHeartbeatAction(\n heartbeatConfig.errorAction ??\n heartbeatConfig.timeoutAction ??\n defaultHeartbeatAction,\n event,\n \"error\"\n );\n onError?.(error);\n };\n }\n\n const heartbeat = useHeartbeat<TOutgoing, TIncoming>(\n heartbeatHookOptions\n );\n\n const commitState = useStableCallback((\n next:\n | WebSocketState<TIncoming>\n | ((current: WebSocketState<TIncoming>) => WebSocketState<TIncoming>)\n ): void => {\n const resolved = typeof next === \"function\" ? next(stateRef.current) : next;\n stateRef.current = resolved;\n setState(resolved);\n });\n\n const isActiveSocketEvent = useStableCallback((socketEpoch: number) => {\n return activeSocketEpochRef.current === socketEpoch;\n });\n\n const shouldHandleSocketClose = useStableCallback((socketEpoch: number) => {\n return (\n activeSocketEpochRef.current === socketEpoch ||\n closingSocketEpochRef.current === socketEpoch\n );\n });\n\n const closeSocket = useStableCallback(\n (\n config: {\n code?: number | undefined;\n reason?: string | undefined;\n trackClose?: boolean;\n } = {}\n ) => {\n const socket = socketRef.current;\n const socketEpoch = activeSocketEpochRef.current;\n\n if (socket === null || socketEpoch === null) {\n return;\n }\n\n socketRef.current = null;\n socketKeyRef.current = null;\n activeSocketEpochRef.current = null;\n closingSocketEpochRef.current = config.trackClose ? socketEpoch : null;\n\n if (isSocketActive(socket)) {\n socket.close(config.code, config.reason);\n }\n }\n );\n\n const applyHeartbeatAction = useStableCallback(\n (\n action: WebSocketHeartbeatAction,\n error: Event,\n reconnectTrigger: \"heartbeat-timeout\" | \"error\"\n ) => {\n heartbeat.stop();\n options.onError?.(error);\n\n if (action === \"none\") {\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastError: error\n }));\n return;\n }\n\n const shouldReconnect =\n action === \"reconnect\" &&\n reconnectEnabled &&\n (options.shouldReconnect?.(error) ?? true);\n manualOpenRef.current = false;\n terminalErrorRef.current = shouldReconnect ? null : error;\n const socket = socketRef.current;\n\n if (socket === null || !isSocketActive(socket)) {\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastError: error,\n status: shouldReconnect ? \"reconnecting\" : \"error\"\n }));\n\n if (shouldReconnect) {\n reconnect.schedule(reconnectTrigger);\n }\n\n return;\n }\n\n pendingCloseActionRef.current = {\n error,\n reconnectTrigger: shouldReconnect ? reconnectTrigger : null\n };\n skipCloseReconnectRef.current = true;\n suppressReconnectRef.current = true;\n closeSocket({ trackClose: true });\n }\n );\n\n const parseMessage = useStableCallback((event: MessageEvent<unknown>) => {\n const parser = options.parseMessage ?? defaultParseMessage<TIncoming>;\n return parser(event);\n });\n\n const updateBufferedAmount = useStableCallback(() => {\n commitState((current) => ({\n ...current,\n bufferedAmount: socketRef.current?.bufferedAmount ?? 0\n }));\n });\n\n const handleOpen = useStableCallback((event: Event, socket: WebSocket) => {\n manualCloseRef.current = false;\n manualOpenRef.current = false;\n suppressReconnectRef.current = false;\n terminalErrorRef.current = null;\n reconnect.markConnected();\n heartbeat.start();\n\n commitState((current) => ({\n ...current,\n bufferedAmount: socket.bufferedAmount,\n lastChangedAt: Date.now(),\n status: \"open\"\n }));\n\n options.onOpen?.(event, socket);\n });\n\n const handleMessage = useStableCallback((event: MessageEvent<unknown>) => {\n try {\n const message = parseMessage(event);\n heartbeat.notifyAck(message);\n\n commitState((current) => ({\n ...current,\n bufferedAmount: socketRef.current?.bufferedAmount ?? current.bufferedAmount,\n lastMessage: message,\n lastMessageEvent: event\n }));\n\n options.onMessage?.(message, event);\n } catch (error) {\n const parseError = new RealtimeErrorEvent(\"error\", {\n cause: error,\n kind: \"parse-error\"\n });\n terminalErrorRef.current = parseError;\n manualOpenRef.current = false;\n skipCloseReconnectRef.current = true;\n suppressReconnectRef.current = true;\n reconnect.cancel();\n heartbeat.stop();\n options.onError?.(parseError);\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastError: parseError,\n status: \"error\"\n }));\n closeSocket({\n code: 1003,\n reason: \"parse-error\",\n trackClose: true\n });\n }\n });\n\n const handleError = useStableCallback((event: Event, socketEpoch: number) => {\n if (!isActiveSocketEvent(socketEpoch)) {\n return;\n }\n\n heartbeat.stop();\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastError: event,\n status: \"error\"\n }));\n\n options.onError?.(event);\n });\n\n const handleClose = useStableCallback((event: CloseEvent, socketEpoch: number) => {\n if (!shouldHandleSocketClose(socketEpoch)) {\n return;\n }\n\n if (activeSocketEpochRef.current === socketEpoch) {\n socketRef.current = null;\n socketKeyRef.current = null;\n activeSocketEpochRef.current = null;\n }\n\n if (closingSocketEpochRef.current === socketEpoch) {\n closingSocketEpochRef.current = null;\n }\n\n heartbeat.stop();\n updateBufferedAmount();\n const pendingCloseAction = pendingCloseActionRef.current;\n pendingCloseActionRef.current = null;\n const terminalError = terminalErrorRef.current;\n const skipCloseReconnect = skipCloseReconnectRef.current;\n skipCloseReconnectRef.current = false;\n\n if (pendingCloseAction !== null) {\n suppressReconnectRef.current = false;\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastCloseEvent: event,\n lastError: pendingCloseAction.error ?? current.lastError,\n status:\n pendingCloseAction.reconnectTrigger === null ? \"error\" : \"reconnecting\"\n }));\n\n options.onClose?.(event);\n\n if (pendingCloseAction.reconnectTrigger !== null) {\n reconnect.schedule(pendingCloseAction.reconnectTrigger);\n }\n\n return;\n }\n\n if (terminalError !== null) {\n suppressReconnectRef.current = false;\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastCloseEvent: event,\n lastError: terminalError,\n status: \"error\"\n }));\n\n options.onClose?.(event);\n return;\n }\n\n const shouldReconnect =\n !suppressReconnectRef.current &&\n !skipCloseReconnect &&\n reconnectEnabled &&\n (options.shouldReconnect?.(event) ?? true);\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastCloseEvent: event,\n status: shouldReconnect ? \"reconnecting\" : \"closed\"\n }));\n\n options.onClose?.(event);\n\n if (shouldReconnect) {\n reconnect.schedule(\"close\");\n } else {\n suppressReconnectRef.current = false;\n }\n });\n\n const open = useStableCallback((): void => {\n manualCloseRef.current = false;\n manualOpenRef.current = true;\n suppressReconnectRef.current = false;\n terminalErrorRef.current = null;\n reconnect.cancel();\n setOpenNonce((current) => current + 1);\n });\n\n const reconnectNow = useStableCallback((): void => {\n manualCloseRef.current = false;\n manualOpenRef.current = true;\n skipCloseReconnectRef.current = true;\n suppressReconnectRef.current = true;\n terminalErrorRef.current = null;\n heartbeat.stop();\n closeSocket();\n suppressReconnectRef.current = false;\n reconnect.schedule(\"manual\");\n });\n\n const close = useStableCallback((code?: number, reason?: string): void => {\n manualCloseRef.current = true;\n manualOpenRef.current = false;\n suppressReconnectRef.current = true;\n terminalErrorRef.current = null;\n reconnect.cancel();\n heartbeat.stop();\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n status: \"closing\"\n }));\n\n closeSocket({\n code,\n reason,\n trackClose: true\n });\n });\n\n const send = useStableCallback((message: TOutgoing): boolean => {\n const socket = socketRef.current;\n\n if (socket === null || socket.readyState !== WebSocket.OPEN) {\n return false;\n }\n\n const serializer = options.serializeMessage ?? defaultSerializeMessage<TOutgoing>;\n socket.send(serializer(message));\n updateBufferedAmount();\n return true;\n });\n\n useEffect(() => {\n if (!supported) {\n socketKeyRef.current = null;\n commitState((current) => ({\n ...current,\n status: \"closed\"\n }));\n return;\n }\n\n if (resolvedUrl === null) {\n socketKeyRef.current = null;\n closeSocket();\n commitState((current) => ({\n ...current,\n status: \"closed\"\n }));\n return;\n }\n\n const shouldConnect =\n terminalErrorRef.current === null &&\n ((connect && !manualCloseRef.current) ||\n manualOpenRef.current ||\n reconnect.status === \"running\");\n const nextSocketKey = `${resolvedUrl}::${protocolsDependency}::${options.binaryType ?? \"blob\"}`;\n\n if (!shouldConnect) {\n if (socketRef.current !== null) {\n suppressReconnectRef.current = true;\n closeSocket();\n }\n\n socketKeyRef.current = null;\n commitState((current) => ({\n ...current,\n status:\n terminalErrorRef.current !== null\n ? \"error\"\n : manualCloseRef.current\n ? \"closed\"\n : \"idle\"\n }));\n return;\n }\n\n if (socketRef.current !== null && socketKeyRef.current !== nextSocketKey) {\n suppressReconnectRef.current = true;\n closeSocket();\n }\n\n if (socketRef.current !== null) {\n return;\n }\n\n const socket = new WebSocket(resolvedUrl, protocols);\n const socketEpoch = nextSocketEpochRef.current + 1;\n socketRef.current = socket;\n socketKeyRef.current = nextSocketKey;\n activeSocketEpochRef.current = socketEpoch;\n closingSocketEpochRef.current = null;\n nextSocketEpochRef.current = socketEpoch;\n socket.binaryType = options.binaryType ?? \"blob\";\n\n commitState((current) => ({\n ...current,\n bufferedAmount: socket.bufferedAmount,\n lastChangedAt: Date.now(),\n status:\n reconnect.status === \"running\" || reconnect.status === \"scheduled\"\n ? \"reconnecting\"\n : \"connecting\"\n }));\n\n const handleSocketOpen = (event: Event): void => {\n if (!isActiveSocketEvent(socketEpoch)) {\n return;\n }\n\n handleOpen(event, socket);\n };\n const handleSocketMessage = (event: MessageEvent<unknown>): void => {\n if (!isActiveSocketEvent(socketEpoch)) {\n return;\n }\n\n handleMessage(event);\n };\n const handleSocketError = (event: Event): void => {\n handleError(event, socketEpoch);\n };\n const handleSocketClose = (event: CloseEvent): void => {\n handleClose(event, socketEpoch);\n };\n\n socket.addEventListener(\"open\", handleSocketOpen);\n socket.addEventListener(\"message\", handleSocketMessage);\n socket.addEventListener(\"error\", handleSocketError);\n socket.addEventListener(\"close\", handleSocketClose);\n\n return () => {\n socket.removeEventListener(\"open\", handleSocketOpen);\n socket.removeEventListener(\"message\", handleSocketMessage);\n socket.removeEventListener(\"error\", handleSocketError);\n socket.removeEventListener(\"close\", handleSocketClose);\n };\n }, [\n closeSocket,\n commitState,\n connect,\n handleClose,\n handleError,\n handleMessage,\n handleOpen,\n isActiveSocketEvent,\n openNonce,\n options.binaryType,\n protocols,\n protocolsDependency,\n reconnect.status,\n resolvedUrl,\n supported\n ]);\n\n useEffect(() => () => {\n suppressReconnectRef.current = true;\n socketKeyRef.current = null;\n activeSocketEpochRef.current = null;\n closingSocketEpochRef.current = null;\n terminalErrorRef.current = null;\n\n const socket = socketRef.current;\n socketRef.current = null;\n\n if (socket === null) {\n return;\n }\n\n if (isSocketActive(socket)) {\n socket.close();\n }\n }, []);\n\n const stopHeartbeat = heartbeat.stop;\n\n useEffect(() => {\n if (state.status !== \"open\") {\n stopHeartbeat();\n }\n }, [state.status, stopHeartbeat]);\n\n const status =\n (reconnect.status === \"scheduled\" || reconnect.status === \"running\") &&\n state.status !== \"open\"\n ? \"reconnecting\"\n : state.status;\n\n const snapshot = createConnectionStateSnapshot(status, {\n isSupported: supported,\n lastChangedAt: state.lastChangedAt\n });\n const heartbeatState =\n options.heartbeat === false\n ? null\n : {\n hasTimedOut: heartbeat.hasTimedOut,\n isRunning: heartbeat.isRunning,\n lastAckAt: heartbeat.lastAckAt,\n lastBeatAt: heartbeat.lastBeatAt,\n latencyMs: heartbeat.latencyMs\n };\n const reconnectState =\n options.reconnect === false\n ? null\n : {\n attempt: reconnect.attempt,\n isScheduled: reconnect.isScheduled,\n nextDelayMs: reconnect.nextDelayMs,\n status: reconnect.status\n };\n const commonResult = {\n bufferedAmount: state.bufferedAmount,\n close,\n heartbeatState,\n lastCloseEvent: state.lastCloseEvent,\n lastError: state.lastError,\n lastMessage: state.lastMessage,\n lastMessageEvent: state.lastMessageEvent,\n open,\n reconnect: reconnectNow,\n reconnectState,\n send,\n transport: \"websocket\" as const\n };\n const socket = socketRef.current;\n\n if (snapshot.status === \"open\") {\n return {\n ...snapshot,\n ...commonResult,\n socket: socket as WebSocket\n };\n }\n\n return {\n ...snapshot,\n ...commonResult,\n socket\n };\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { createConnectionStateSnapshot } from \"../core/connection-state\";\nimport { RealtimeErrorEvent } from \"../core/errors\";\nimport { isEventSourceSupported } from \"../core/env\";\nimport { resolveUrlProvider } from \"../core/url\";\nimport { useReconnect } from \"./useReconnect\";\nimport { useStableCallback } from \"./useStableCallback\";\nimport type {\n UseEventSourceHook,\n UseEventSourceOptions,\n UseEventSourceResult\n} from \"../types/useEventSource\";\n\ntype EventSourceState<TMessage> = {\n lastChangedAt: number | null;\n lastError: Event | null;\n lastEventName: string | null;\n lastMessage: TMessage | null;\n lastMessageEvent: MessageEvent<string> | null;\n status: UseEventSourceResult<TMessage>[\"status\"];\n};\n\nconst createInitialState = <TMessage,>(\n status: UseEventSourceResult<TMessage>[\"status\"] = \"idle\"\n): EventSourceState<TMessage> => ({\n lastChangedAt: null,\n lastError: null,\n lastEventName: null,\n lastMessage: null,\n lastMessageEvent: null,\n status\n});\n\nconst defaultParseMessage = <TMessage,>(\n event: MessageEvent<string>\n): TMessage => event.data as TMessage;\n\nconst normalizeNamedEvents = (\n events: readonly string[] | undefined\n): string[] => {\n if (events === undefined || events.length === 0) {\n return [];\n }\n\n return [...new Set(events)]\n .filter((eventName) => eventName !== \"message\")\n .sort();\n};\n\nconst toEventsDependency = (events: readonly string[] | undefined): string =>\n JSON.stringify(normalizeNamedEvents(events));\n\nconst parseEventsDependency = (eventsDependency: string): string[] =>\n JSON.parse(eventsDependency) as string[];\n\nexport const useEventSource: UseEventSourceHook = <TMessage = unknown>(\n options: UseEventSourceOptions<TMessage>\n): UseEventSourceResult<TMessage> => {\n const connect = options.connect ?? true;\n const supported = isEventSourceSupported();\n const resolvedUrl = useMemo(() => resolveUrlProvider(options.url), [options.url]);\n const eventsDependency = toEventsDependency(options.events);\n const namedEvents = useMemo(\n () => parseEventsDependency(eventsDependency),\n [eventsDependency]\n );\n\n const eventSourceRef = useRef<EventSource | null>(null);\n const eventSourceKeyRef = useRef<string | null>(null);\n const activeEventSourceEpochRef = useRef<number | null>(null);\n const nextEventSourceEpochRef = useRef(0);\n const manualCloseRef = useRef(false);\n const manualOpenRef = useRef(false);\n const skipErrorReconnectRef = useRef(false);\n const suppressReconnectRef = useRef(false);\n const terminalErrorRef = useRef<Event | null>(null);\n const [openNonce, setOpenNonce] = useState(0);\n const [state, setState] = useState<EventSourceState<TMessage>>(() =>\n createInitialState(connect ? \"connecting\" : \"idle\")\n );\n const stateRef = useRef(state);\n stateRef.current = state;\n\n const reconnectEnabled =\n options.reconnect !== false && supported && resolvedUrl !== null;\n const reconnect = useReconnect(\n options.reconnect === false\n ? { enabled: false }\n : {\n ...options.reconnect,\n enabled: reconnectEnabled && (options.reconnect?.enabled ?? true)\n }\n );\n\n const commitState = useStableCallback((\n next:\n | EventSourceState<TMessage>\n | ((current: EventSourceState<TMessage>) => EventSourceState<TMessage>)\n ): void => {\n const resolved = typeof next === \"function\" ? next(stateRef.current) : next;\n stateRef.current = resolved;\n setState(resolved);\n });\n\n const closeEventSource = useStableCallback(() => {\n const source = eventSourceRef.current;\n\n if (source === null) {\n return;\n }\n\n eventSourceRef.current = null;\n eventSourceKeyRef.current = null;\n activeEventSourceEpochRef.current = null;\n source.close();\n });\n\n const isActiveEventSourceEvent = useStableCallback((sourceEpoch: number) => {\n return activeEventSourceEpochRef.current === sourceEpoch;\n });\n\n const parseMessage = useStableCallback((event: MessageEvent<string>) => {\n const parser = options.parseMessage ?? defaultParseMessage<TMessage>;\n return parser(event);\n });\n\n const handleOpen = useStableCallback((event: Event, source: EventSource) => {\n manualCloseRef.current = false;\n manualOpenRef.current = false;\n suppressReconnectRef.current = false;\n terminalErrorRef.current = null;\n reconnect.markConnected();\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n status: \"open\"\n }));\n\n options.onOpen?.(event, source);\n });\n\n const commitParsedMessage = useStableCallback(\n (eventName: string, event: MessageEvent<string>, isNamedEvent: boolean) => {\n try {\n const message = parseMessage(event);\n\n commitState((current) => ({\n ...current,\n lastEventName: eventName,\n lastMessage: message,\n lastMessageEvent: event\n }));\n\n if (isNamedEvent) {\n options.onEvent?.(eventName, message, event);\n return;\n }\n\n options.onMessage?.(message, event);\n } catch (error) {\n const parseError = new RealtimeErrorEvent(\"error\", {\n cause: error,\n kind: \"parse-error\"\n });\n terminalErrorRef.current = parseError;\n manualOpenRef.current = false;\n suppressReconnectRef.current = true;\n reconnect.cancel();\n closeEventSource();\n options.onError?.(parseError);\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastError: parseError,\n status: \"error\"\n }));\n }\n }\n );\n\n const handleError = useStableCallback((\n event: Event,\n source: EventSource,\n sourceEpoch: number\n ) => {\n if (!isActiveEventSourceEvent(sourceEpoch)) {\n return;\n }\n\n const terminalError = terminalErrorRef.current;\n\n if (terminalError !== null) {\n suppressReconnectRef.current = false;\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastError: terminalError,\n status: \"error\"\n }));\n\n return;\n }\n\n const skipErrorReconnect = skipErrorReconnectRef.current;\n skipErrorReconnectRef.current = false;\n const shouldReconnect =\n !suppressReconnectRef.current &&\n !skipErrorReconnect &&\n reconnectEnabled &&\n (options.shouldReconnect?.(event) ?? true);\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastError: event,\n status: shouldReconnect ? \"reconnecting\" : \"closed\"\n }));\n\n options.onError?.(event);\n\n if (!shouldReconnect) {\n suppressReconnectRef.current = false;\n closeEventSource();\n return;\n }\n\n closeEventSource();\n reconnect.schedule(\"error\");\n });\n\n const open = useStableCallback((): void => {\n manualCloseRef.current = false;\n manualOpenRef.current = true;\n suppressReconnectRef.current = false;\n terminalErrorRef.current = null;\n reconnect.cancel();\n setOpenNonce((current) => current + 1);\n });\n\n const reconnectNow = useStableCallback((): void => {\n manualCloseRef.current = false;\n manualOpenRef.current = true;\n skipErrorReconnectRef.current = true;\n suppressReconnectRef.current = true;\n terminalErrorRef.current = null;\n closeEventSource();\n suppressReconnectRef.current = false;\n reconnect.schedule(\"manual\");\n });\n\n const close = useStableCallback((): void => {\n manualCloseRef.current = true;\n manualOpenRef.current = false;\n suppressReconnectRef.current = true;\n terminalErrorRef.current = null;\n reconnect.cancel();\n closeEventSource();\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n status: \"closed\"\n }));\n });\n\n useEffect(() => {\n if (!supported) {\n eventSourceKeyRef.current = null;\n commitState((current) => ({\n ...current,\n status: \"closed\"\n }));\n return;\n }\n\n if (resolvedUrl === null) {\n eventSourceKeyRef.current = null;\n closeEventSource();\n commitState((current) => ({\n ...current,\n status: \"closed\"\n }));\n return;\n }\n\n const shouldConnect =\n terminalErrorRef.current === null &&\n (reconnect.status === \"running\" ||\n (reconnect.status !== \"scheduled\" &&\n ((connect && !manualCloseRef.current) || manualOpenRef.current)));\n const nextEventSourceKey = [\n resolvedUrl,\n options.withCredentials ? \"credentials\" : \"anonymous\",\n eventsDependency\n ].join(\"::\");\n\n if (!shouldConnect) {\n if (eventSourceRef.current !== null) {\n suppressReconnectRef.current = true;\n closeEventSource();\n }\n\n eventSourceKeyRef.current = null;\n commitState((current) => ({\n ...current,\n status:\n terminalErrorRef.current !== null\n ? \"error\"\n : manualCloseRef.current\n ? \"closed\"\n : \"idle\"\n }));\n return;\n }\n\n if (\n eventSourceRef.current !== null &&\n eventSourceKeyRef.current !== nextEventSourceKey\n ) {\n suppressReconnectRef.current = true;\n closeEventSource();\n }\n\n if (eventSourceRef.current !== null) {\n return;\n }\n\n const source = new EventSource(resolvedUrl, {\n withCredentials: options.withCredentials ?? false\n });\n const sourceEpoch = nextEventSourceEpochRef.current + 1;\n\n eventSourceRef.current = source;\n eventSourceKeyRef.current = nextEventSourceKey;\n activeEventSourceEpochRef.current = sourceEpoch;\n nextEventSourceEpochRef.current = sourceEpoch;\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n status:\n reconnect.status === \"running\" || reconnect.status === \"scheduled\"\n ? \"reconnecting\"\n : \"connecting\"\n }));\n\n const handleSourceOpen = (event: Event): void => {\n if (!isActiveEventSourceEvent(sourceEpoch)) {\n return;\n }\n\n handleOpen(event, source);\n };\n const handleSourceMessage = (event: Event): void => {\n if (!isActiveEventSourceEvent(sourceEpoch)) {\n return;\n }\n\n commitParsedMessage(\"message\", event as MessageEvent<string>, false);\n };\n const namedEventHandlers = new Map<\n string,\n (event: Event) => void\n >();\n const handleSourceError = (event: Event): void => {\n handleError(event, source, sourceEpoch);\n };\n\n source.addEventListener(\"open\", handleSourceOpen);\n source.addEventListener(\"message\", handleSourceMessage);\n\n for (const eventName of namedEvents) {\n const handler = (event: Event): void => {\n if (!isActiveEventSourceEvent(sourceEpoch)) {\n return;\n }\n\n commitParsedMessage(eventName, event as MessageEvent<string>, true);\n };\n\n namedEventHandlers.set(eventName, handler);\n source.addEventListener(eventName, handler);\n }\n\n source.addEventListener(\"error\", handleSourceError);\n\n return () => {\n source.removeEventListener(\"open\", handleSourceOpen);\n source.removeEventListener(\"message\", handleSourceMessage);\n\n for (const [eventName, handler] of namedEventHandlers) {\n source.removeEventListener(eventName, handler);\n }\n\n source.removeEventListener(\"error\", handleSourceError);\n };\n }, [\n closeEventSource,\n commitParsedMessage,\n commitState,\n connect,\n eventsDependency,\n handleError,\n handleOpen,\n isActiveEventSourceEvent,\n namedEvents,\n openNonce,\n options.withCredentials,\n reconnect.status,\n resolvedUrl,\n supported\n ]);\n\n useEffect(() => () => {\n suppressReconnectRef.current = true;\n eventSourceKeyRef.current = null;\n activeEventSourceEpochRef.current = null;\n terminalErrorRef.current = null;\n\n const source = eventSourceRef.current;\n eventSourceRef.current = null;\n\n if (source !== null) {\n source.close();\n }\n }, []);\n\n const status =\n (reconnect.status === \"scheduled\" || reconnect.status === \"running\") &&\n state.status !== \"open\"\n ? \"reconnecting\"\n : state.status;\n\n const snapshot = createConnectionStateSnapshot(status, {\n isSupported: supported,\n lastChangedAt: state.lastChangedAt\n });\n const reconnectState =\n options.reconnect === false\n ? null\n : {\n attempt: reconnect.attempt,\n isScheduled: reconnect.isScheduled,\n nextDelayMs: reconnect.nextDelayMs,\n status: reconnect.status\n };\n const commonResult = {\n close,\n lastError: state.lastError,\n lastEventName: state.lastEventName,\n lastMessage: state.lastMessage,\n lastMessageEvent: state.lastMessageEvent,\n open,\n reconnect: reconnectNow,\n reconnectState,\n transport: \"eventsource\" as const\n };\n const eventSource = eventSourceRef.current;\n\n if (snapshot.status === \"open\") {\n return {\n ...snapshot,\n ...commonResult,\n eventSource: eventSource as EventSource\n };\n }\n\n return {\n ...snapshot,\n ...commonResult,\n eventSource\n };\n};\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/env.ts","../src/hooks/useOnlineStatus.ts","../src/hooks/usePageVisibility.ts","../src/core/timers.ts","../src/hooks/useConnectionGate.ts","../src/core/reconnect.ts","../src/hooks/useStableCallback.ts","../src/hooks/useReconnect.ts","../src/hooks/useHeartbeat.ts","../src/core/connection-state.ts","../src/core/errors.ts","../src/core/url.ts","../src/hooks/useWebSocket.ts","../src/hooks/useEventSource.ts"],"names":["useSyncExternalStore","useRef","useState","useEffect","createEmptyTransitionState","useInsertionEffect","useCallback","startTransition","createInitialState","useMemo","socket","defaultParseMessage"],"mappings":"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","file":"index.cjs","sourcesContent":["export interface RuntimeFeatureSupport {\n eventSource: boolean;\n navigatorOnLine: boolean;\n webSocket: boolean;\n}\n\nexport const isBrowserRuntime = (): boolean =>\n typeof window !== \"undefined\" && typeof document !== \"undefined\";\n\nexport const isWebSocketSupported = (): boolean =>\n typeof WebSocket !== \"undefined\";\n\nexport const isEventSourceSupported = (): boolean =>\n typeof EventSource !== \"undefined\";\n\nexport const hasNavigatorOnLineSupport = (): boolean =>\n typeof navigator !== \"undefined\" && typeof navigator.onLine === \"boolean\";\n\nexport const hasDocumentVisibilitySupport = (): boolean =>\n typeof document !== \"undefined\" && typeof document.visibilityState === \"string\";\n\nexport const readOnlineStatus = (initialOnline = true): {\n isOnline: boolean;\n isSupported: boolean;\n} => {\n if (!hasNavigatorOnLineSupport()) {\n return {\n isOnline: initialOnline,\n isSupported: false\n };\n }\n\n return {\n isOnline: navigator.onLine,\n isSupported: true\n };\n};\n\nexport const readPageVisibility = (initialVisible = true): {\n isVisible: boolean;\n isSupported: boolean;\n visibilityState: DocumentVisibilityState | \"visible\";\n} => {\n if (!hasDocumentVisibilitySupport()) {\n return {\n isVisible: initialVisible,\n isSupported: false,\n visibilityState: initialVisible ? \"visible\" : \"hidden\"\n };\n }\n\n return {\n isVisible: document.visibilityState === \"visible\",\n isSupported: true,\n visibilityState: document.visibilityState\n };\n};\n\nexport const getRuntimeFeatureSupport = (): RuntimeFeatureSupport => ({\n eventSource: isEventSourceSupported(),\n navigatorOnLine: hasNavigatorOnLineSupport(),\n webSocket: isWebSocketSupported()\n});\n","import { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\n\nimport { hasNavigatorOnLineSupport, readOnlineStatus } from \"../core/env\";\nimport type {\n UseOnlineStatusHook,\n UseOnlineStatusOptions,\n UseOnlineStatusResult\n} from \"../types/useOnlineStatus\";\n\nconst subscribeToOnlineStatus = (onStoreChange: () => void): (() => void) => {\n if (typeof window === \"undefined\") {\n return () => {};\n }\n\n window.addEventListener(\"online\", onStoreChange);\n window.addEventListener(\"offline\", onStoreChange);\n\n return () => {\n window.removeEventListener(\"online\", onStoreChange);\n window.removeEventListener(\"offline\", onStoreChange);\n };\n};\n\nconst createEmptyTransitionState = (): Pick<\n UseOnlineStatusResult,\n \"lastChangedAt\" | \"wentOfflineAt\" | \"wentOnlineAt\"\n> => ({\n lastChangedAt: null,\n wentOfflineAt: null,\n wentOnlineAt: null\n});\n\nexport const useOnlineStatus: UseOnlineStatusHook = (\n options: UseOnlineStatusOptions = {}\n) => {\n const initialOnline = options.initialOnline ?? true;\n const trackTransitions = options.trackTransitions ?? true;\n\n const isOnline = useSyncExternalStore(\n subscribeToOnlineStatus,\n () => readOnlineStatus(initialOnline).isOnline,\n () => initialOnline\n );\n\n const previousOnlineRef = useRef(isOnline);\n const [transitions, setTransitions] = useState(createEmptyTransitionState);\n\n useEffect(() => {\n if (!trackTransitions) {\n previousOnlineRef.current = isOnline;\n setTransitions(createEmptyTransitionState);\n return;\n }\n\n if (previousOnlineRef.current === isOnline) {\n return;\n }\n\n const changedAt = Date.now();\n previousOnlineRef.current = isOnline;\n\n setTransitions((current) => ({\n lastChangedAt: changedAt,\n wentOfflineAt: isOnline ? current.wentOfflineAt : changedAt,\n wentOnlineAt: isOnline ? changedAt : current.wentOnlineAt\n }));\n }, [isOnline, trackTransitions]);\n\n return {\n isOnline,\n isSupported: hasNavigatorOnLineSupport(),\n ...transitions\n };\n};\n","import { useEffect, useRef, useState, useSyncExternalStore } from \"react\";\n\nimport {\n hasDocumentVisibilitySupport,\n readPageVisibility\n} from \"../core/env\";\nimport type {\n UsePageVisibilityHook,\n UsePageVisibilityOptions,\n UsePageVisibilityResult\n} from \"../types/usePageVisibility\";\n\nconst subscribeToPageVisibility = (\n onStoreChange: () => void\n): (() => void) => {\n if (typeof document === \"undefined\" || !hasDocumentVisibilitySupport()) {\n return () => {};\n }\n\n document.addEventListener(\"visibilitychange\", onStoreChange);\n\n return () => {\n document.removeEventListener(\"visibilitychange\", onStoreChange);\n };\n};\n\nconst createEmptyTransitionState = (): Pick<\n UsePageVisibilityResult,\n \"lastChangedAt\" | \"becameVisibleAt\" | \"becameHiddenAt\"\n> => ({\n lastChangedAt: null,\n becameHiddenAt: null,\n becameVisibleAt: null\n});\n\nexport const usePageVisibility: UsePageVisibilityHook = (\n options: UsePageVisibilityOptions = {}\n) => {\n const initialVisible = options.initialVisible ?? true;\n const trackTransitions = options.trackTransitions ?? true;\n\n const visibilityState = useSyncExternalStore(\n subscribeToPageVisibility,\n () => readPageVisibility(initialVisible).visibilityState,\n () => (initialVisible ? \"visible\" : \"hidden\")\n );\n\n const isVisible = visibilityState === \"visible\";\n const previousVisibleRef = useRef(isVisible);\n const [transitions, setTransitions] = useState(createEmptyTransitionState);\n\n useEffect(() => {\n if (!trackTransitions) {\n previousVisibleRef.current = isVisible;\n setTransitions(createEmptyTransitionState);\n return;\n }\n\n if (previousVisibleRef.current === isVisible) {\n return;\n }\n\n const changedAt = Date.now();\n previousVisibleRef.current = isVisible;\n\n setTransitions((current) => ({\n lastChangedAt: changedAt,\n becameHiddenAt: isVisible ? current.becameHiddenAt : changedAt,\n becameVisibleAt: isVisible ? changedAt : current.becameVisibleAt\n }));\n }, [isVisible, trackTransitions]);\n\n return {\n isSupported: hasDocumentVisibilitySupport(),\n isVisible,\n visibilityState,\n ...transitions\n };\n};\n","export interface ManagedTimeout {\n cancel: () => void;\n isActive: () => boolean;\n schedule: (callback: () => void, delayMs: number) => void;\n}\n\nexport interface ManagedInterval {\n cancel: () => void;\n isActive: () => boolean;\n start: (callback: () => void, intervalMs: number) => void;\n}\n\nconst sanitizeTimerDelay = (delayMs: number): number => {\n if (!Number.isFinite(delayMs)) {\n return 0;\n }\n\n return Math.max(0, Math.round(delayMs));\n};\n\nexport const createManagedTimeout = (): ManagedTimeout => {\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n return {\n cancel() {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n timeoutId = null;\n }\n },\n isActive() {\n return timeoutId !== null;\n },\n schedule(callback, delayMs) {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n\n timeoutId = setTimeout(() => {\n timeoutId = null;\n callback();\n }, sanitizeTimerDelay(delayMs));\n }\n };\n};\n\nexport const createManagedInterval = (): ManagedInterval => {\n let intervalId: ReturnType<typeof setInterval> | null = null;\n\n return {\n cancel() {\n if (intervalId !== null) {\n clearInterval(intervalId);\n intervalId = null;\n }\n },\n isActive() {\n return intervalId !== null;\n },\n start(callback, intervalMs) {\n if (intervalId !== null) {\n clearInterval(intervalId);\n }\n\n intervalId = setInterval(callback, sanitizeTimerDelay(intervalMs));\n }\n };\n};\n","import { useEffect, useRef, useState } from \"react\";\n\nimport { createManagedTimeout } from \"../core/timers\";\nimport { useOnlineStatus } from \"./useOnlineStatus\";\nimport { usePageVisibility } from \"./usePageVisibility\";\nimport type {\n ConnectionGateReason,\n UseConnectionGateHook,\n UseConnectionGateResult\n} from \"../types/useConnectionGate\";\n\ntype ConnectionGateTransitionState = Pick<\n UseConnectionGateResult,\n \"becameBlockedAt\" | \"becameReadyAt\" | \"lastChangedAt\"\n>;\n\nconst createEmptyTransitionState = (): ConnectionGateTransitionState => ({\n becameBlockedAt: null,\n becameReadyAt: null,\n lastChangedAt: null\n});\n\nconst normalizeHiddenGraceMs = (value: number | undefined): number => {\n if (value === undefined || !Number.isFinite(value)) {\n return 0;\n }\n\n return Math.max(0, value);\n};\n\nexport const useConnectionGate: UseConnectionGateHook = (options = {}) => {\n const enabled = options.enabled ?? true;\n const requireOnline = options.requireOnline ?? true;\n const requireVisible = options.requireVisible ?? false;\n const hiddenGraceMs = normalizeHiddenGraceMs(options.hiddenGraceMs);\n const trackTransitions = options.trackTransitions ?? true;\n const onlineStatus = useOnlineStatus({\n ...(options.initialOnline === undefined\n ? {}\n : { initialOnline: options.initialOnline }),\n trackTransitions: false\n });\n const pageVisibility = usePageVisibility({\n ...(options.initialVisible === undefined\n ? {}\n : { initialVisible: options.initialVisible }),\n trackTransitions: false\n });\n const hiddenGraceTimeoutRef = useRef(createManagedTimeout());\n const hiddenSinceRef = useRef<number | null>(null);\n const previousStateRef = useRef<{\n connect: boolean;\n reason: ConnectionGateReason;\n } | null>(null);\n const [hasExceededHiddenGrace, setHasExceededHiddenGrace] = useState(false);\n const [isWaitingForVisibleGrace, setIsWaitingForVisibleGrace] = useState(false);\n const [transitions, setTransitions] = useState(createEmptyTransitionState);\n\n useEffect(() => () => {\n hiddenGraceTimeoutRef.current.cancel();\n }, []);\n\n useEffect(() => {\n hiddenGraceTimeoutRef.current.cancel();\n\n if (!requireVisible || pageVisibility.isVisible) {\n hiddenSinceRef.current = null;\n setHasExceededHiddenGrace(false);\n setIsWaitingForVisibleGrace(false);\n return;\n }\n\n const hiddenSince = hiddenSinceRef.current ?? Date.now();\n hiddenSinceRef.current = hiddenSince;\n\n if (hiddenGraceMs <= 0) {\n setHasExceededHiddenGrace(true);\n setIsWaitingForVisibleGrace(false);\n return;\n }\n\n const elapsedMs = Date.now() - hiddenSince;\n\n if (elapsedMs >= hiddenGraceMs) {\n setHasExceededHiddenGrace(true);\n setIsWaitingForVisibleGrace(false);\n return;\n }\n\n setHasExceededHiddenGrace(false);\n setIsWaitingForVisibleGrace(true);\n hiddenGraceTimeoutRef.current.schedule(() => {\n setHasExceededHiddenGrace(true);\n setIsWaitingForVisibleGrace(false);\n }, hiddenGraceMs - elapsedMs);\n }, [hiddenGraceMs, pageVisibility.isVisible, requireVisible]);\n\n let reason: ConnectionGateReason = \"ready\";\n\n if (!enabled) {\n reason = \"manual\";\n } else if (requireOnline && !onlineStatus.isOnline) {\n reason = \"offline\";\n } else if (\n requireVisible &&\n !pageVisibility.isVisible &&\n hasExceededHiddenGrace\n ) {\n reason = \"hidden\";\n }\n\n const connect = reason === \"ready\";\n const isBlocked = !connect;\n\n useEffect(() => {\n if (!trackTransitions) {\n previousStateRef.current = {\n connect,\n reason\n };\n setTransitions(createEmptyTransitionState);\n return;\n }\n\n const previousState = previousStateRef.current;\n\n if (previousState === null) {\n previousStateRef.current = {\n connect,\n reason\n };\n return;\n }\n\n if (\n previousState.connect === connect &&\n previousState.reason === reason\n ) {\n return;\n }\n\n const changedAt = Date.now();\n previousStateRef.current = {\n connect,\n reason\n };\n\n setTransitions((current) => ({\n becameBlockedAt: connect ? current.becameBlockedAt : changedAt,\n becameReadyAt: connect ? changedAt : current.becameReadyAt,\n lastChangedAt: changedAt\n }));\n }, [connect, reason, trackTransitions]);\n\n return {\n becameBlockedAt: transitions.becameBlockedAt,\n becameReadyAt: transitions.becameReadyAt,\n connect,\n isBlocked,\n isOnline: onlineStatus.isOnline,\n isOnlineSupported: onlineStatus.isSupported,\n isVisibilitySupported: pageVisibility.isSupported,\n isVisible: pageVisibility.isVisible,\n isWaitingForVisibleGrace,\n lastChangedAt: transitions.lastChangedAt,\n reason,\n visibilityState: pageVisibility.visibilityState\n };\n};\n","import type {\n ReconnectAttempt,\n ReconnectDelayContext,\n ReconnectDelayStrategy,\n ReconnectTrigger,\n UseReconnectOptions\n} from \"../types/useReconnect\";\n\nexport interface NormalizedReconnectOptions {\n backoffFactor: number;\n enabled: boolean;\n getDelayMs?: ReconnectDelayStrategy;\n initialDelayMs: number;\n jitterRatio: number;\n maxAttempts: number | null;\n maxDelayMs: number;\n onCancel?: () => void;\n onReset?: () => void;\n onSchedule?: (attempt: ReconnectAttempt) => void;\n resetOnSuccess: boolean;\n}\n\nexport interface ReconnectDelayCalculationOptions {\n random?: () => number;\n strategy?: ReconnectDelayStrategy;\n}\n\nexport interface CreateReconnectAttemptOptions\n extends ReconnectDelayCalculationOptions {\n now?: number;\n}\n\nexport const DEFAULT_RECONNECT_OPTIONS: Readonly<\n Omit<NormalizedReconnectOptions, \"getDelayMs\" | \"onCancel\" | \"onReset\" | \"onSchedule\">\n> = {\n backoffFactor: 2,\n enabled: true,\n initialDelayMs: 1_000,\n jitterRatio: 0.2,\n maxAttempts: null,\n maxDelayMs: 30_000,\n resetOnSuccess: true\n};\n\nconst clampNumber = (value: number, min: number, max: number): number =>\n Math.min(max, Math.max(min, value));\n\nconst sanitizeDelay = (value: number): number => {\n if (!Number.isFinite(value)) {\n return 0;\n }\n\n return Math.max(0, Math.round(value));\n};\n\nconst sanitizeBackoffFactor = (value: number): number => {\n if (!Number.isFinite(value)) {\n return DEFAULT_RECONNECT_OPTIONS.backoffFactor;\n }\n\n return Math.max(1, value);\n};\n\nconst sanitizeMaxAttempts = (\n value: number | null | undefined\n): number | null => {\n if (value === null || value === undefined) {\n return null;\n }\n\n if (!Number.isFinite(value)) {\n return null;\n }\n\n return Math.max(0, Math.floor(value));\n};\n\nconst sanitizeJitterRatio = (value: number): number => {\n if (!Number.isFinite(value)) {\n return DEFAULT_RECONNECT_OPTIONS.jitterRatio;\n }\n\n return clampNumber(value, 0, 1);\n};\n\nexport const normalizeReconnectOptions = (\n options?: false | UseReconnectOptions\n): NormalizedReconnectOptions | null => {\n if (options === false) {\n return null;\n }\n\n const initialDelayMs = sanitizeDelay(\n options?.initialDelayMs ?? DEFAULT_RECONNECT_OPTIONS.initialDelayMs\n );\n const maxDelayMs = Math.max(\n initialDelayMs,\n sanitizeDelay(options?.maxDelayMs ?? DEFAULT_RECONNECT_OPTIONS.maxDelayMs)\n );\n\n const normalized: NormalizedReconnectOptions = {\n backoffFactor: sanitizeBackoffFactor(\n options?.backoffFactor ?? DEFAULT_RECONNECT_OPTIONS.backoffFactor\n ),\n enabled: options?.enabled ?? DEFAULT_RECONNECT_OPTIONS.enabled,\n initialDelayMs,\n jitterRatio: sanitizeJitterRatio(\n options?.jitterRatio ?? DEFAULT_RECONNECT_OPTIONS.jitterRatio\n ),\n maxAttempts: sanitizeMaxAttempts(options?.maxAttempts),\n maxDelayMs,\n resetOnSuccess: options?.resetOnSuccess ?? DEFAULT_RECONNECT_OPTIONS.resetOnSuccess\n };\n\n if (options?.getDelayMs !== undefined) {\n normalized.getDelayMs = options.getDelayMs;\n }\n\n if (options?.onCancel !== undefined) {\n normalized.onCancel = options.onCancel;\n }\n\n if (options?.onReset !== undefined) {\n normalized.onReset = options.onReset;\n }\n\n if (options?.onSchedule !== undefined) {\n normalized.onSchedule = options.onSchedule;\n }\n\n return normalized;\n};\n\nexport const createReconnectDelayContext = (\n attempt: number,\n options: Pick<\n NormalizedReconnectOptions,\n \"backoffFactor\" | \"initialDelayMs\" | \"jitterRatio\" | \"maxDelayMs\"\n >,\n lastDelayMs: number | null\n): ReconnectDelayContext => ({\n attempt: Math.max(1, Math.floor(attempt)),\n backoffFactor: options.backoffFactor,\n initialDelayMs: options.initialDelayMs,\n jitterRatio: options.jitterRatio,\n lastDelayMs,\n maxDelayMs: options.maxDelayMs\n});\n\nexport const defaultReconnectDelayStrategy = (\n context: ReconnectDelayContext\n): number => {\n const exponent = Math.max(0, context.attempt - 1);\n const baseDelay = context.initialDelayMs * context.backoffFactor ** exponent;\n return Math.min(context.maxDelayMs, sanitizeDelay(baseDelay));\n};\n\nexport const applyJitterToDelay = (\n delayMs: number,\n jitterRatio: number,\n random: () => number = Math.random\n): number => {\n if (delayMs === 0 || jitterRatio === 0) {\n return delayMs;\n }\n\n const safeRandom = clampNumber(random(), 0, 1);\n const variance = delayMs * jitterRatio;\n const offset = (safeRandom * 2 - 1) * variance;\n return sanitizeDelay(delayMs + offset);\n};\n\nexport const calculateReconnectDelay = (\n context: ReconnectDelayContext,\n options: ReconnectDelayCalculationOptions = {}\n): number => {\n const baseDelay = sanitizeDelay(\n (options.strategy ?? defaultReconnectDelayStrategy)(context)\n );\n const cappedDelay = Math.min(context.maxDelayMs, baseDelay);\n return Math.min(\n context.maxDelayMs,\n applyJitterToDelay(cappedDelay, context.jitterRatio, options.random)\n );\n};\n\nexport const canScheduleReconnectAttempt = (\n attempt: number,\n options: Pick<NormalizedReconnectOptions, \"enabled\" | \"maxAttempts\">\n): boolean => {\n if (!options.enabled) {\n return false;\n }\n\n if (attempt < 1) {\n return false;\n }\n\n return options.maxAttempts === null || attempt <= options.maxAttempts;\n};\n\nexport const createReconnectAttempt = (\n attempt: number,\n trigger: ReconnectTrigger,\n options: Pick<\n NormalizedReconnectOptions,\n \"backoffFactor\" | \"enabled\" | \"getDelayMs\" | \"initialDelayMs\" | \"jitterRatio\" | \"maxAttempts\" | \"maxDelayMs\"\n >,\n lastDelayMs: number | null,\n config: CreateReconnectAttemptOptions = {}\n): ReconnectAttempt | null => {\n if (!canScheduleReconnectAttempt(attempt, options)) {\n return null;\n }\n\n const context = createReconnectDelayContext(attempt, options, lastDelayMs);\n const calculationOptions: ReconnectDelayCalculationOptions = {};\n\n if (config.random !== undefined) {\n calculationOptions.random = config.random;\n }\n\n if (options.getDelayMs !== undefined) {\n calculationOptions.strategy = options.getDelayMs;\n }\n\n return {\n attempt,\n delayMs: calculateReconnectDelay(context, calculationOptions),\n scheduledAt: config.now ?? Date.now(),\n trigger\n };\n};\n","import { useCallback, useInsertionEffect, useRef } from \"react\";\n\n/**\n * Returns a referentially stable wrapper around `callback` that always\n * invokes the most recent version of the function passed in.\n *\n * The latest reference is committed via `useInsertionEffect` instead of\n * being mutated during render. Mutating refs during render is unsafe\n * under concurrent rendering: a render may be discarded after writing\n * to the ref, leaving the ref out of sync with the committed tree.\n * `useInsertionEffect` runs synchronously after commit, before any\n * layout effect or paint, so the ref always matches the committed\n * callback by the time any effect, event handler, or subscription\n * reads from it.\n *\n * The returned wrapper itself never changes identity, which makes it\n * safe to pass into `useEffect` dependency arrays or to add as an\n * event listener without forcing teardown on every render.\n *\n * Note: the returned wrapper must not be invoked during render. It is\n * intended for event handlers, effects, and subscription callbacks.\n */\nexport const useStableCallback = <TArgs extends unknown[], TResult>(\n callback: (...args: TArgs) => TResult\n): ((...args: TArgs) => TResult) => {\n const callbackRef = useRef(callback);\n\n useInsertionEffect(() => {\n callbackRef.current = callback;\n });\n\n return useCallback((...args: TArgs) => callbackRef.current(...args), []);\n};\n","import { startTransition, useEffect, useRef, useState } from \"react\";\n\nimport {\n createReconnectAttempt,\n normalizeReconnectOptions\n} from \"../core/reconnect\";\nimport { createManagedTimeout } from \"../core/timers\";\nimport { useStableCallback } from \"./useStableCallback\";\nimport type {\n ReconnectAttempt,\n ReconnectTrigger,\n UseReconnectHook,\n UseReconnectResult\n} from \"../types/useReconnect\";\n\ntype ReconnectState = Pick<\n UseReconnectResult,\n \"attempt\" | \"nextDelayMs\" | \"status\"\n>;\n\nconst createInitialState = (enabled: boolean): ReconnectState => ({\n attempt: 0,\n nextDelayMs: null,\n status: enabled ? \"idle\" : \"stopped\"\n});\n\nexport const useReconnect: UseReconnectHook = (options = {}) => {\n const normalizedOptions = normalizeReconnectOptions(options) ??\n normalizeReconnectOptions()!;\n const timeoutRef = useRef(createManagedTimeout());\n const lastDelayRef = useRef<number | null>(null);\n const [state, setState] = useState<ReconnectState>(() =>\n createInitialState(normalizedOptions.enabled)\n );\n const stateRef = useRef(state);\n\n stateRef.current = state;\n\n const commitState = (\n next:\n | ReconnectState\n | ((current: ReconnectState) => ReconnectState)\n ): void => {\n const resolved =\n typeof next === \"function\"\n ? next(stateRef.current)\n : next;\n\n stateRef.current = resolved;\n startTransition(() => {\n setState(resolved);\n });\n };\n\n const runAttempt = useStableCallback((attempt: number) => {\n commitState({\n attempt,\n nextDelayMs: null,\n status: \"running\"\n });\n });\n\n const emitSchedule = useStableCallback((attempt: ReconnectAttempt) => {\n normalizedOptions.onSchedule?.(attempt);\n });\n\n const emitCancel = useStableCallback(() => {\n normalizedOptions.onCancel?.();\n });\n\n const emitReset = useStableCallback(() => {\n normalizedOptions.onReset?.();\n });\n\n useEffect(() => {\n if (!normalizedOptions.enabled) {\n timeoutRef.current.cancel();\n commitState((current) => ({\n ...current,\n nextDelayMs: null,\n status: \"stopped\"\n }));\n return;\n }\n\n commitState((current) =>\n current.status === \"stopped\"\n ? {\n ...current,\n status: \"idle\"\n }\n : current\n );\n }, [normalizedOptions.enabled]);\n\n useEffect(() => () => {\n timeoutRef.current.cancel();\n }, []);\n\n const schedule = useStableCallback((trigger: ReconnectTrigger = \"manual\"): void => {\n const current = stateRef.current;\n const nextAttempt = current.attempt + 1;\n const attempt = createReconnectAttempt(\n nextAttempt,\n trigger,\n normalizedOptions,\n lastDelayRef.current\n );\n\n timeoutRef.current.cancel();\n\n if (attempt === null) {\n commitState((snapshot) => ({\n ...snapshot,\n nextDelayMs: null,\n status: \"stopped\"\n }));\n return;\n }\n\n lastDelayRef.current = attempt.delayMs;\n timeoutRef.current.schedule(() => {\n runAttempt(attempt.attempt);\n }, attempt.delayMs);\n\n commitState({\n attempt: attempt.attempt,\n nextDelayMs: attempt.delayMs,\n status: \"scheduled\"\n });\n\n emitSchedule(attempt);\n });\n\n const cancel = useStableCallback((): void => {\n const current = stateRef.current;\n const shouldEmitCancel =\n timeoutRef.current.isActive() ||\n current.status === \"scheduled\" ||\n current.status === \"running\";\n\n timeoutRef.current.cancel();\n commitState((snapshot) => ({\n ...snapshot,\n nextDelayMs: null,\n status: \"stopped\"\n }));\n\n if (shouldEmitCancel) {\n emitCancel();\n }\n });\n\n const reset = useStableCallback((): void => {\n timeoutRef.current.cancel();\n lastDelayRef.current = null;\n commitState(createInitialState(normalizedOptions.enabled));\n emitReset();\n });\n\n const markConnected = useStableCallback((): void => {\n timeoutRef.current.cancel();\n\n if (normalizedOptions.resetOnSuccess) {\n lastDelayRef.current = null;\n commitState(createInitialState(normalizedOptions.enabled));\n emitReset();\n return;\n }\n\n commitState((current) => ({\n ...current,\n nextDelayMs: null,\n status: normalizedOptions.enabled ? \"idle\" : \"stopped\"\n }));\n });\n\n return {\n attempt: state.attempt,\n cancel,\n isActive: state.status === \"scheduled\" || state.status === \"running\",\n isScheduled: state.status === \"scheduled\",\n markConnected,\n nextDelayMs: state.nextDelayMs,\n reset,\n schedule,\n status: state.status\n };\n};\n","import { useEffect, useRef, useState } from \"react\";\n\nimport {\n createManagedInterval,\n createManagedTimeout\n} from \"../core/timers\";\nimport { useStableCallback } from \"./useStableCallback\";\nimport type {\n UseHeartbeatOptions,\n UseHeartbeatHook,\n UseHeartbeatResult\n} from \"../types/useHeartbeat\";\n\ntype HeartbeatState = Pick<\n UseHeartbeatResult,\n \"hasTimedOut\" | \"isRunning\" | \"lastAckAt\" | \"lastBeatAt\" | \"latencyMs\"\n>;\n\nconst createInitialState = (isRunning: boolean): HeartbeatState => ({\n hasTimedOut: false,\n isRunning,\n lastAckAt: null,\n lastBeatAt: null,\n latencyMs: null\n});\n\nexport const useHeartbeat = <\n TOutgoing = unknown,\n TIncoming = TOutgoing\n>(\n options: UseHeartbeatOptions<TOutgoing, TIncoming>\n): UseHeartbeatResult<TIncoming> => {\n const enabled = options.enabled ?? true;\n const startOnMount = options.startOnMount ?? true;\n const intervalRef = useRef(createManagedInterval());\n const timeoutRef = useRef(createManagedTimeout());\n const generationRef = useRef(0);\n const [state, setState] = useState<HeartbeatState>(() =>\n createInitialState(enabled && startOnMount)\n );\n const stateRef = useRef(state);\n\n stateRef.current = state;\n\n const commitState = (\n next:\n | HeartbeatState\n | ((current: HeartbeatState) => HeartbeatState)\n ): void => {\n const resolved =\n typeof next === \"function\" ? next(stateRef.current) : next;\n\n stateRef.current = resolved;\n setState(resolved);\n };\n\n const handleTimeout = useStableCallback(() => {\n commitState((current) => ({\n ...current,\n hasTimedOut: true\n }));\n options.onTimeout?.();\n });\n\n const scheduleTimeout = useStableCallback(() => {\n if (options.timeoutMs === undefined) {\n timeoutRef.current.cancel();\n return;\n }\n\n timeoutRef.current.schedule(() => {\n handleTimeout();\n }, options.timeoutMs);\n });\n\n const handleBeatSuccess = useStableCallback((performedAt: number) => {\n commitState((current) => ({\n ...current,\n hasTimedOut: false,\n lastBeatAt: performedAt\n }));\n\n scheduleTimeout();\n options.onBeat?.();\n });\n\n const handleBeatError = useStableCallback((error: unknown) => {\n timeoutRef.current.cancel();\n options.onError?.(error);\n });\n\n const runBeat = useStableCallback(() => {\n const generation = generationRef.current;\n\n const completeBeat = (result: void | boolean): void => {\n if (generation !== generationRef.current || result === false) {\n return;\n }\n\n handleBeatSuccess(Date.now());\n };\n\n const failBeat = (error: unknown): void => {\n if (generation !== generationRef.current) {\n return;\n }\n\n handleBeatError(error);\n };\n\n try {\n const result = options.beat?.();\n\n if (result !== null && typeof result === \"object\" && \"then\" in result) {\n void Promise.resolve(result).then(completeBeat, failBeat);\n return;\n }\n\n completeBeat(result);\n } catch (error) {\n failBeat(error);\n }\n });\n\n const start = useStableCallback((): void => {\n if (!enabled) {\n return;\n }\n\n if (!intervalRef.current.isActive()) {\n intervalRef.current.start(() => {\n runBeat();\n }, options.intervalMs);\n }\n\n commitState((current) => ({\n ...current,\n hasTimedOut: false,\n isRunning: true\n }));\n });\n\n const stop = useStableCallback((): void => {\n generationRef.current += 1;\n intervalRef.current.cancel();\n timeoutRef.current.cancel();\n commitState(createInitialState(false));\n });\n\n const beat = useStableCallback((): void => {\n if (!enabled) {\n return;\n }\n\n runBeat();\n });\n\n const notifyAck = useStableCallback((message: TIncoming): boolean => {\n if (stateRef.current.lastBeatAt === null) {\n return false;\n }\n\n const matchesAck =\n options.matchesAck === undefined || options.matchesAck(message);\n\n if (!matchesAck) {\n return false;\n }\n\n const acknowledgedAt = Date.now();\n timeoutRef.current.cancel();\n\n commitState((current) => ({\n ...current,\n hasTimedOut: false,\n lastAckAt: acknowledgedAt,\n latencyMs:\n current.lastBeatAt === null\n ? null\n : acknowledgedAt - current.lastBeatAt\n }));\n\n return true;\n });\n\n useEffect(() => {\n if (!enabled) {\n stop();\n return;\n }\n\n if (startOnMount) {\n start();\n return stop;\n }\n\n stop();\n return undefined;\n }, [enabled, options.intervalMs, start, startOnMount, stop]);\n\n useEffect(() => () => {\n generationRef.current += 1;\n intervalRef.current.cancel();\n timeoutRef.current.cancel();\n }, []);\n\n return {\n beat,\n hasTimedOut: state.hasTimedOut,\n isRunning: state.isRunning,\n lastAckAt: state.lastAckAt,\n lastBeatAt: state.lastBeatAt,\n latencyMs: state.latencyMs,\n notifyAck,\n start,\n stop\n };\n};\n\nconst _useHeartbeatTypecheck: UseHeartbeatHook = useHeartbeat;\nvoid _useHeartbeatTypecheck;\n","import type {\n ConnectionStateSnapshot,\n RealtimeConnectionStatus\n} from \"../types/common\";\n\nexport const isConnectedStatus = (\n status: RealtimeConnectionStatus\n): boolean => status === \"open\";\n\nexport const isConnectingStatus = (\n status: RealtimeConnectionStatus\n): boolean => status === \"connecting\" || status === \"reconnecting\";\n\nexport const isClosedStatus = (\n status: RealtimeConnectionStatus\n): boolean => status === \"closed\" || status === \"idle\" || status === \"error\";\n\nexport const createConnectionStateSnapshot = (\n status: RealtimeConnectionStatus,\n config: {\n isSupported?: boolean;\n lastChangedAt?: number | null;\n } = {}\n): ConnectionStateSnapshot => {\n const base = {\n isSupported: config.isSupported ?? true,\n lastChangedAt: config.lastChangedAt ?? null\n };\n\n switch (status) {\n case \"open\":\n return {\n ...base,\n isClosed: false,\n isConnected: true,\n isConnecting: false,\n status\n };\n case \"connecting\":\n case \"reconnecting\":\n return {\n ...base,\n isClosed: false,\n isConnected: false,\n isConnecting: true,\n status\n };\n case \"closing\":\n return {\n ...base,\n isClosed: false,\n isConnected: false,\n isConnecting: false,\n status\n };\n case \"idle\":\n case \"closed\":\n case \"error\":\n return {\n ...base,\n isClosed: true,\n isConnected: false,\n isConnecting: false,\n status\n };\n }\n};\n","export type RealtimeErrorKind =\n | \"heartbeat-error\"\n | \"heartbeat-timeout\"\n | \"parse-error\";\n\nexport interface RealtimeErrorEventInit extends EventInit {\n cause?: unknown;\n kind: RealtimeErrorKind;\n}\n\nexport class RealtimeErrorEvent extends Event {\n readonly cause: unknown;\n readonly kind: RealtimeErrorKind;\n\n constructor(type: string, init: RealtimeErrorEventInit) {\n super(type, init);\n this.cause = init.cause;\n this.kind = init.kind;\n }\n}\n","import type { UrlProvider } from \"../types/common\";\n\nconst normalizeResolvedUrl = (value: string | URL | null): string | null => {\n if (value === null) {\n return null;\n }\n\n if (value instanceof URL) {\n return value.toString();\n }\n\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : null;\n};\n\nexport const resolveUrlProvider = (url: UrlProvider): string | null => {\n const resolved = typeof url === \"function\" ? url() : url;\n return normalizeResolvedUrl(resolved ?? null);\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { createConnectionStateSnapshot } from \"../core/connection-state\";\nimport { RealtimeErrorEvent } from \"../core/errors\";\nimport { isWebSocketSupported } from \"../core/env\";\nimport { resolveUrlProvider } from \"../core/url\";\nimport { useHeartbeat } from \"./useHeartbeat\";\nimport { useReconnect } from \"./useReconnect\";\nimport { useStableCallback } from \"./useStableCallback\";\nimport type { UseHeartbeatOptions } from \"../types/useHeartbeat\";\nimport type {\n UseWebSocketHook,\n WebSocketHeartbeatAction,\n UseWebSocketHeartbeatOptions,\n UseWebSocketOptions,\n UseWebSocketResult\n} from \"../types/useWebSocket\";\n\ntype WebSocketState<TIncoming> = {\n bufferedAmount: number;\n lastChangedAt: number | null;\n lastCloseEvent: CloseEvent | null;\n lastError: Event | null;\n lastMessage: TIncoming | null;\n lastMessageEvent: MessageEvent<unknown> | null;\n status: UseWebSocketResult<TIncoming>[\"status\"];\n};\n\nconst createInitialState = <TIncoming,>(\n status: UseWebSocketResult<TIncoming>[\"status\"] = \"idle\"\n): WebSocketState<TIncoming> => ({\n bufferedAmount: 0,\n lastChangedAt: null,\n lastCloseEvent: null,\n lastError: null,\n lastMessage: null,\n lastMessageEvent: null,\n status\n});\n\nconst defaultParseMessage = <TIncoming,>(\n event: MessageEvent<unknown>\n): TIncoming => event.data as TIncoming;\n\nconst defaultSerializeMessage = <TOutgoing,>(message: TOutgoing) => {\n if (\n typeof message === \"string\" ||\n message instanceof Blob ||\n message instanceof ArrayBuffer\n ) {\n return message;\n }\n\n if (ArrayBuffer.isView(message)) {\n return message;\n }\n\n return JSON.stringify(message);\n};\n\nconst resolveFactoryValue = <TValue,>(\n value: TValue | (() => TValue)\n): TValue =>\n typeof value === \"function\"\n ? (value as () => TValue)()\n : value;\n\nconst toProtocolsDependency = (protocols: string | string[] | undefined): string => {\n if (protocols === undefined) {\n return \"\";\n }\n\n return JSON.stringify(protocols);\n};\n\nconst parseProtocolsDependency = (\n protocolsDependency: string\n): string | string[] | undefined =>\n protocolsDependency === \"\"\n ? undefined\n : JSON.parse(protocolsDependency) as string | string[];\n\nconst toHeartbeatConfig = <TOutgoing, TIncoming>(\n heartbeat: UseWebSocketOptions<TIncoming, TOutgoing>[\"heartbeat\"]\n): UseWebSocketHeartbeatOptions<TOutgoing, TIncoming> | null =>\n heartbeat === undefined || heartbeat === false ? null : heartbeat;\n\nconst isSocketActive = (socket: WebSocket): boolean =>\n socket.readyState === WebSocket.OPEN || socket.readyState === WebSocket.CONNECTING;\n\nexport const useWebSocket: UseWebSocketHook = <\n TIncoming = unknown,\n TOutgoing = TIncoming\n>(\n options: UseWebSocketOptions<TIncoming, TOutgoing>\n): UseWebSocketResult<TIncoming, TOutgoing> => {\n const connect = options.connect ?? true;\n const supported = isWebSocketSupported();\n const resolvedUrl = useMemo(() => resolveUrlProvider(options.url), [options.url]);\n const protocolsDependency = toProtocolsDependency(options.protocols);\n const protocols = useMemo(\n () => parseProtocolsDependency(protocolsDependency),\n [protocolsDependency]\n );\n\n const socketRef = useRef<WebSocket | null>(null);\n const socketKeyRef = useRef<string | null>(null);\n const activeSocketEpochRef = useRef<number | null>(null);\n const closingSocketEpochRef = useRef<number | null>(null);\n const nextSocketEpochRef = useRef(0);\n const manualCloseRef = useRef(false);\n const manualOpenRef = useRef(false);\n const skipCloseReconnectRef = useRef(false);\n const suppressReconnectRef = useRef(false);\n const pendingCloseActionRef = useRef<{\n error: Event | null;\n reconnectTrigger: \"heartbeat-timeout\" | \"error\" | null;\n } | null>(null);\n const terminalErrorRef = useRef<Event | null>(null);\n const [openNonce, setOpenNonce] = useState(0);\n const [state, setState] = useState<WebSocketState<TIncoming>>(() =>\n createInitialState(connect ? \"connecting\" : \"idle\")\n );\n const stateRef = useRef(state);\n stateRef.current = state;\n\n const reconnectEnabled =\n options.reconnect !== false && supported && resolvedUrl !== null;\n const reconnect = useReconnect(\n options.reconnect === false\n ? { enabled: false }\n : {\n ...options.reconnect,\n enabled: reconnectEnabled && (options.reconnect?.enabled ?? true)\n }\n );\n\n const heartbeatEnabled =\n options.heartbeat !== false && supported && resolvedUrl !== null;\n const heartbeatConfig = toHeartbeatConfig<TOutgoing, TIncoming>(\n options.heartbeat\n );\n const defaultHeartbeatAction: WebSocketHeartbeatAction =\n options.reconnect === false ? \"close\" : \"reconnect\";\n const heartbeatHookOptions: UseHeartbeatOptions<TOutgoing, TIncoming> =\n heartbeatConfig === null\n ? {\n enabled: false,\n intervalMs: 1_000,\n startOnMount: false\n }\n : {\n beat: () => {\n const socket = socketRef.current;\n if (socket === null || socket.readyState !== WebSocket.OPEN) {\n return false;\n }\n\n const heartbeatMessage = heartbeatConfig.message;\n\n if (heartbeatMessage !== undefined) {\n const serialized = (options.serializeMessage ?? defaultSerializeMessage)(\n resolveFactoryValue(heartbeatMessage)\n );\n socket.send(serialized);\n }\n\n return heartbeatConfig.beat?.() ?? true;\n },\n enabled: heartbeatEnabled && (heartbeatConfig.enabled ?? true),\n intervalMs: heartbeatConfig.intervalMs,\n startOnMount: false\n };\n\n if (heartbeatConfig !== null && heartbeatConfig.timeoutMs !== undefined) {\n heartbeatHookOptions.timeoutMs = heartbeatConfig.timeoutMs;\n }\n\n if (heartbeatConfig !== null && heartbeatConfig.matchesAck !== undefined) {\n heartbeatHookOptions.matchesAck = heartbeatConfig.matchesAck;\n }\n\n if (heartbeatConfig !== null && heartbeatConfig.onBeat !== undefined) {\n heartbeatHookOptions.onBeat = heartbeatConfig.onBeat;\n }\n\n if (heartbeatConfig !== null && heartbeatConfig.onTimeout !== undefined) {\n heartbeatHookOptions.onTimeout = heartbeatConfig.onTimeout;\n }\n\n if (heartbeatConfig !== null) {\n const onTimeout = heartbeatHookOptions.onTimeout;\n heartbeatHookOptions.onTimeout = () => {\n applyHeartbeatAction(\n heartbeatConfig.timeoutAction ?? defaultHeartbeatAction,\n new RealtimeErrorEvent(\"heartbeat-timeout\", {\n kind: \"heartbeat-timeout\"\n }),\n \"heartbeat-timeout\"\n );\n onTimeout?.();\n };\n\n const onError = heartbeatConfig.onError;\n heartbeatHookOptions.onError = (error) => {\n const event = new RealtimeErrorEvent(\"heartbeat-error\", {\n cause: error,\n kind: \"heartbeat-error\"\n });\n\n applyHeartbeatAction(\n heartbeatConfig.errorAction ??\n heartbeatConfig.timeoutAction ??\n defaultHeartbeatAction,\n event,\n \"error\"\n );\n onError?.(error);\n };\n }\n\n const heartbeat = useHeartbeat<TOutgoing, TIncoming>(\n heartbeatHookOptions\n );\n\n const commitState = useStableCallback((\n next:\n | WebSocketState<TIncoming>\n | ((current: WebSocketState<TIncoming>) => WebSocketState<TIncoming>)\n ): void => {\n const resolved = typeof next === \"function\" ? next(stateRef.current) : next;\n stateRef.current = resolved;\n setState(resolved);\n });\n\n const isActiveSocketEvent = useStableCallback((socketEpoch: number) => {\n return activeSocketEpochRef.current === socketEpoch;\n });\n\n const shouldHandleSocketClose = useStableCallback((socketEpoch: number) => {\n return (\n activeSocketEpochRef.current === socketEpoch ||\n closingSocketEpochRef.current === socketEpoch\n );\n });\n\n const closeSocket = useStableCallback(\n (\n config: {\n code?: number | undefined;\n reason?: string | undefined;\n trackClose?: boolean;\n } = {}\n ) => {\n const socket = socketRef.current;\n const socketEpoch = activeSocketEpochRef.current;\n\n if (socket === null || socketEpoch === null) {\n return;\n }\n\n socketRef.current = null;\n socketKeyRef.current = null;\n activeSocketEpochRef.current = null;\n closingSocketEpochRef.current = config.trackClose ? socketEpoch : null;\n\n if (isSocketActive(socket)) {\n socket.close(config.code, config.reason);\n }\n }\n );\n\n const applyHeartbeatAction = useStableCallback(\n (\n action: WebSocketHeartbeatAction,\n error: Event,\n reconnectTrigger: \"heartbeat-timeout\" | \"error\"\n ) => {\n heartbeat.stop();\n options.onError?.(error);\n\n if (action === \"none\") {\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastError: error\n }));\n return;\n }\n\n const shouldReconnect =\n action === \"reconnect\" &&\n reconnectEnabled &&\n (options.shouldReconnect?.(error) ?? true);\n manualOpenRef.current = false;\n terminalErrorRef.current = shouldReconnect ? null : error;\n const socket = socketRef.current;\n\n if (socket === null || !isSocketActive(socket)) {\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastError: error,\n status: shouldReconnect ? \"reconnecting\" : \"error\"\n }));\n\n if (shouldReconnect) {\n reconnect.schedule(reconnectTrigger);\n }\n\n return;\n }\n\n pendingCloseActionRef.current = {\n error,\n reconnectTrigger: shouldReconnect ? reconnectTrigger : null\n };\n skipCloseReconnectRef.current = true;\n suppressReconnectRef.current = true;\n closeSocket({ trackClose: true });\n }\n );\n\n const parseMessage = useStableCallback((event: MessageEvent<unknown>) => {\n const parser = options.parseMessage ?? defaultParseMessage<TIncoming>;\n return parser(event);\n });\n\n const updateBufferedAmount = useStableCallback(() => {\n commitState((current) => ({\n ...current,\n bufferedAmount: socketRef.current?.bufferedAmount ?? 0\n }));\n });\n\n const handleOpen = useStableCallback((event: Event, socket: WebSocket) => {\n manualCloseRef.current = false;\n manualOpenRef.current = false;\n suppressReconnectRef.current = false;\n terminalErrorRef.current = null;\n reconnect.markConnected();\n heartbeat.start();\n\n commitState((current) => ({\n ...current,\n bufferedAmount: socket.bufferedAmount,\n lastChangedAt: Date.now(),\n status: \"open\"\n }));\n\n options.onOpen?.(event, socket);\n });\n\n const handleMessage = useStableCallback((event: MessageEvent<unknown>) => {\n try {\n const message = parseMessage(event);\n heartbeat.notifyAck(message);\n\n commitState((current) => ({\n ...current,\n bufferedAmount: socketRef.current?.bufferedAmount ?? current.bufferedAmount,\n lastMessage: message,\n lastMessageEvent: event\n }));\n\n options.onMessage?.(message, event);\n } catch (error) {\n const parseError = new RealtimeErrorEvent(\"error\", {\n cause: error,\n kind: \"parse-error\"\n });\n terminalErrorRef.current = parseError;\n manualOpenRef.current = false;\n skipCloseReconnectRef.current = true;\n suppressReconnectRef.current = true;\n reconnect.cancel();\n heartbeat.stop();\n options.onError?.(parseError);\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastError: parseError,\n status: \"error\"\n }));\n closeSocket({\n code: 1003,\n reason: \"parse-error\",\n trackClose: true\n });\n }\n });\n\n const handleError = useStableCallback((event: Event, socketEpoch: number) => {\n if (!isActiveSocketEvent(socketEpoch)) {\n return;\n }\n\n heartbeat.stop();\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastError: event,\n status: \"error\"\n }));\n\n options.onError?.(event);\n });\n\n const handleClose = useStableCallback((event: CloseEvent, socketEpoch: number) => {\n if (!shouldHandleSocketClose(socketEpoch)) {\n return;\n }\n\n if (activeSocketEpochRef.current === socketEpoch) {\n socketRef.current = null;\n socketKeyRef.current = null;\n activeSocketEpochRef.current = null;\n }\n\n if (closingSocketEpochRef.current === socketEpoch) {\n closingSocketEpochRef.current = null;\n }\n\n heartbeat.stop();\n updateBufferedAmount();\n const pendingCloseAction = pendingCloseActionRef.current;\n pendingCloseActionRef.current = null;\n const terminalError = terminalErrorRef.current;\n const skipCloseReconnect = skipCloseReconnectRef.current;\n skipCloseReconnectRef.current = false;\n\n if (pendingCloseAction !== null) {\n suppressReconnectRef.current = false;\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastCloseEvent: event,\n lastError: pendingCloseAction.error ?? current.lastError,\n status:\n pendingCloseAction.reconnectTrigger === null ? \"error\" : \"reconnecting\"\n }));\n\n options.onClose?.(event);\n\n if (pendingCloseAction.reconnectTrigger !== null) {\n reconnect.schedule(pendingCloseAction.reconnectTrigger);\n }\n\n return;\n }\n\n if (terminalError !== null) {\n suppressReconnectRef.current = false;\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastCloseEvent: event,\n lastError: terminalError,\n status: \"error\"\n }));\n\n options.onClose?.(event);\n return;\n }\n\n const shouldReconnect =\n !suppressReconnectRef.current &&\n !skipCloseReconnect &&\n reconnectEnabled &&\n (options.shouldReconnect?.(event) ?? true);\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastCloseEvent: event,\n status: shouldReconnect ? \"reconnecting\" : \"closed\"\n }));\n\n options.onClose?.(event);\n\n if (shouldReconnect) {\n reconnect.schedule(\"close\");\n } else {\n suppressReconnectRef.current = false;\n }\n });\n\n const open = useStableCallback((): void => {\n manualCloseRef.current = false;\n manualOpenRef.current = true;\n suppressReconnectRef.current = false;\n terminalErrorRef.current = null;\n reconnect.cancel();\n setOpenNonce((current) => current + 1);\n });\n\n const reconnectNow = useStableCallback((): void => {\n manualCloseRef.current = false;\n manualOpenRef.current = true;\n skipCloseReconnectRef.current = true;\n suppressReconnectRef.current = true;\n terminalErrorRef.current = null;\n heartbeat.stop();\n closeSocket();\n suppressReconnectRef.current = false;\n reconnect.schedule(\"manual\");\n });\n\n const close = useStableCallback((code?: number, reason?: string): void => {\n manualCloseRef.current = true;\n manualOpenRef.current = false;\n suppressReconnectRef.current = true;\n terminalErrorRef.current = null;\n reconnect.cancel();\n heartbeat.stop();\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n status: \"closing\"\n }));\n\n closeSocket({\n code,\n reason,\n trackClose: true\n });\n });\n\n const send = useStableCallback((message: TOutgoing): boolean => {\n const socket = socketRef.current;\n\n if (socket === null || socket.readyState !== WebSocket.OPEN) {\n return false;\n }\n\n const serializer = options.serializeMessage ?? defaultSerializeMessage<TOutgoing>;\n socket.send(serializer(message));\n updateBufferedAmount();\n return true;\n });\n\n useEffect(() => {\n if (!supported) {\n socketKeyRef.current = null;\n commitState((current) => ({\n ...current,\n status: \"closed\"\n }));\n return;\n }\n\n if (resolvedUrl === null) {\n socketKeyRef.current = null;\n closeSocket();\n commitState((current) => ({\n ...current,\n status: \"closed\"\n }));\n return;\n }\n\n const shouldConnect =\n terminalErrorRef.current === null &&\n ((connect && !manualCloseRef.current) ||\n manualOpenRef.current ||\n reconnect.status === \"running\");\n const nextSocketKey = `${resolvedUrl}::${protocolsDependency}::${options.binaryType ?? \"blob\"}`;\n\n if (!shouldConnect) {\n if (socketRef.current !== null) {\n suppressReconnectRef.current = true;\n closeSocket();\n }\n\n socketKeyRef.current = null;\n commitState((current) => ({\n ...current,\n status:\n terminalErrorRef.current !== null\n ? \"error\"\n : manualCloseRef.current\n ? \"closed\"\n : \"idle\"\n }));\n return;\n }\n\n if (socketRef.current !== null && socketKeyRef.current !== nextSocketKey) {\n suppressReconnectRef.current = true;\n closeSocket();\n }\n\n if (socketRef.current !== null) {\n return;\n }\n\n const socket = new WebSocket(resolvedUrl, protocols);\n const socketEpoch = nextSocketEpochRef.current + 1;\n socketRef.current = socket;\n socketKeyRef.current = nextSocketKey;\n activeSocketEpochRef.current = socketEpoch;\n closingSocketEpochRef.current = null;\n nextSocketEpochRef.current = socketEpoch;\n socket.binaryType = options.binaryType ?? \"blob\";\n\n commitState((current) => ({\n ...current,\n bufferedAmount: socket.bufferedAmount,\n lastChangedAt: Date.now(),\n status:\n reconnect.status === \"running\" || reconnect.status === \"scheduled\"\n ? \"reconnecting\"\n : \"connecting\"\n }));\n\n const handleSocketOpen = (event: Event): void => {\n if (!isActiveSocketEvent(socketEpoch)) {\n return;\n }\n\n handleOpen(event, socket);\n };\n const handleSocketMessage = (event: MessageEvent<unknown>): void => {\n if (!isActiveSocketEvent(socketEpoch)) {\n return;\n }\n\n handleMessage(event);\n };\n const handleSocketError = (event: Event): void => {\n handleError(event, socketEpoch);\n };\n const handleSocketClose = (event: CloseEvent): void => {\n handleClose(event, socketEpoch);\n };\n\n socket.addEventListener(\"open\", handleSocketOpen);\n socket.addEventListener(\"message\", handleSocketMessage);\n socket.addEventListener(\"error\", handleSocketError);\n socket.addEventListener(\"close\", handleSocketClose);\n\n return () => {\n socket.removeEventListener(\"open\", handleSocketOpen);\n socket.removeEventListener(\"message\", handleSocketMessage);\n socket.removeEventListener(\"error\", handleSocketError);\n socket.removeEventListener(\"close\", handleSocketClose);\n };\n }, [\n closeSocket,\n commitState,\n connect,\n handleClose,\n handleError,\n handleMessage,\n handleOpen,\n isActiveSocketEvent,\n openNonce,\n options.binaryType,\n protocols,\n protocolsDependency,\n reconnect.status,\n resolvedUrl,\n supported\n ]);\n\n useEffect(() => () => {\n suppressReconnectRef.current = true;\n socketKeyRef.current = null;\n activeSocketEpochRef.current = null;\n closingSocketEpochRef.current = null;\n terminalErrorRef.current = null;\n\n const socket = socketRef.current;\n socketRef.current = null;\n\n if (socket === null) {\n return;\n }\n\n if (isSocketActive(socket)) {\n socket.close();\n }\n }, []);\n\n const stopHeartbeat = heartbeat.stop;\n\n useEffect(() => {\n if (state.status !== \"open\") {\n stopHeartbeat();\n }\n }, [state.status, stopHeartbeat]);\n\n const status =\n (reconnect.status === \"scheduled\" || reconnect.status === \"running\") &&\n state.status !== \"open\"\n ? \"reconnecting\"\n : state.status;\n\n const snapshot = createConnectionStateSnapshot(status, {\n isSupported: supported,\n lastChangedAt: state.lastChangedAt\n });\n const heartbeatState =\n options.heartbeat === false\n ? null\n : {\n hasTimedOut: heartbeat.hasTimedOut,\n isRunning: heartbeat.isRunning,\n lastAckAt: heartbeat.lastAckAt,\n lastBeatAt: heartbeat.lastBeatAt,\n latencyMs: heartbeat.latencyMs\n };\n const reconnectState =\n options.reconnect === false\n ? null\n : {\n attempt: reconnect.attempt,\n isScheduled: reconnect.isScheduled,\n nextDelayMs: reconnect.nextDelayMs,\n status: reconnect.status\n };\n const commonResult = {\n bufferedAmount: state.bufferedAmount,\n close,\n heartbeatState,\n lastCloseEvent: state.lastCloseEvent,\n lastError: state.lastError,\n lastMessage: state.lastMessage,\n lastMessageEvent: state.lastMessageEvent,\n open,\n reconnect: reconnectNow,\n reconnectState,\n send,\n transport: \"websocket\" as const\n };\n const socket = socketRef.current;\n\n if (snapshot.status === \"open\") {\n return {\n ...snapshot,\n ...commonResult,\n socket: socket as WebSocket\n };\n }\n\n return {\n ...snapshot,\n ...commonResult,\n socket\n };\n};\n","import { useEffect, useMemo, useRef, useState } from \"react\";\n\nimport { createConnectionStateSnapshot } from \"../core/connection-state\";\nimport { RealtimeErrorEvent } from \"../core/errors\";\nimport { isEventSourceSupported } from \"../core/env\";\nimport { resolveUrlProvider } from \"../core/url\";\nimport { useReconnect } from \"./useReconnect\";\nimport { useStableCallback } from \"./useStableCallback\";\nimport type {\n UseEventSourceHook,\n UseEventSourceOptions,\n UseEventSourceResult\n} from \"../types/useEventSource\";\n\ntype EventSourceState<TMessage> = {\n lastChangedAt: number | null;\n lastError: Event | null;\n lastEventName: string | null;\n lastMessage: TMessage | null;\n lastMessageEvent: MessageEvent<string> | null;\n status: UseEventSourceResult<TMessage>[\"status\"];\n};\n\nconst createInitialState = <TMessage,>(\n status: UseEventSourceResult<TMessage>[\"status\"] = \"idle\"\n): EventSourceState<TMessage> => ({\n lastChangedAt: null,\n lastError: null,\n lastEventName: null,\n lastMessage: null,\n lastMessageEvent: null,\n status\n});\n\nconst defaultParseMessage = <TMessage,>(\n event: MessageEvent<string>\n): TMessage => event.data as TMessage;\n\nconst normalizeNamedEvents = (\n events: readonly string[] | undefined\n): string[] => {\n if (events === undefined || events.length === 0) {\n return [];\n }\n\n return [...new Set(events)]\n .filter((eventName) => eventName !== \"message\")\n .sort();\n};\n\nconst toEventsDependency = (events: readonly string[] | undefined): string =>\n JSON.stringify(normalizeNamedEvents(events));\n\nconst parseEventsDependency = (eventsDependency: string): string[] =>\n JSON.parse(eventsDependency) as string[];\n\nexport const useEventSource: UseEventSourceHook = <TMessage = unknown>(\n options: UseEventSourceOptions<TMessage>\n): UseEventSourceResult<TMessage> => {\n const connect = options.connect ?? true;\n const supported = isEventSourceSupported();\n const resolvedUrl = useMemo(() => resolveUrlProvider(options.url), [options.url]);\n const eventsDependency = toEventsDependency(options.events);\n const namedEvents = useMemo(\n () => parseEventsDependency(eventsDependency),\n [eventsDependency]\n );\n\n const eventSourceRef = useRef<EventSource | null>(null);\n const eventSourceKeyRef = useRef<string | null>(null);\n const activeEventSourceEpochRef = useRef<number | null>(null);\n const nextEventSourceEpochRef = useRef(0);\n const manualCloseRef = useRef(false);\n const manualOpenRef = useRef(false);\n const skipErrorReconnectRef = useRef(false);\n const suppressReconnectRef = useRef(false);\n const terminalErrorRef = useRef<Event | null>(null);\n const [openNonce, setOpenNonce] = useState(0);\n const [state, setState] = useState<EventSourceState<TMessage>>(() =>\n createInitialState(connect ? \"connecting\" : \"idle\")\n );\n const stateRef = useRef(state);\n stateRef.current = state;\n\n const reconnectEnabled =\n options.reconnect !== false && supported && resolvedUrl !== null;\n const reconnect = useReconnect(\n options.reconnect === false\n ? { enabled: false }\n : {\n ...options.reconnect,\n enabled: reconnectEnabled && (options.reconnect?.enabled ?? true)\n }\n );\n\n const commitState = useStableCallback((\n next:\n | EventSourceState<TMessage>\n | ((current: EventSourceState<TMessage>) => EventSourceState<TMessage>)\n ): void => {\n const resolved = typeof next === \"function\" ? next(stateRef.current) : next;\n stateRef.current = resolved;\n setState(resolved);\n });\n\n const closeEventSource = useStableCallback(() => {\n const source = eventSourceRef.current;\n\n if (source === null) {\n return;\n }\n\n eventSourceRef.current = null;\n eventSourceKeyRef.current = null;\n activeEventSourceEpochRef.current = null;\n source.close();\n });\n\n const isActiveEventSourceEvent = useStableCallback((sourceEpoch: number) => {\n return activeEventSourceEpochRef.current === sourceEpoch;\n });\n\n const parseMessage = useStableCallback((event: MessageEvent<string>) => {\n const parser = options.parseMessage ?? defaultParseMessage<TMessage>;\n return parser(event);\n });\n\n const handleOpen = useStableCallback((event: Event, source: EventSource) => {\n manualCloseRef.current = false;\n manualOpenRef.current = false;\n suppressReconnectRef.current = false;\n terminalErrorRef.current = null;\n reconnect.markConnected();\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n status: \"open\"\n }));\n\n options.onOpen?.(event, source);\n });\n\n const commitParsedMessage = useStableCallback(\n (eventName: string, event: MessageEvent<string>, isNamedEvent: boolean) => {\n try {\n const message = parseMessage(event);\n\n commitState((current) => ({\n ...current,\n lastEventName: eventName,\n lastMessage: message,\n lastMessageEvent: event\n }));\n\n if (isNamedEvent) {\n options.onEvent?.(eventName, message, event);\n return;\n }\n\n options.onMessage?.(message, event);\n } catch (error) {\n const parseError = new RealtimeErrorEvent(\"error\", {\n cause: error,\n kind: \"parse-error\"\n });\n terminalErrorRef.current = parseError;\n manualOpenRef.current = false;\n suppressReconnectRef.current = true;\n reconnect.cancel();\n closeEventSource();\n options.onError?.(parseError);\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastError: parseError,\n status: \"error\"\n }));\n }\n }\n );\n\n const handleError = useStableCallback((\n event: Event,\n source: EventSource,\n sourceEpoch: number\n ) => {\n if (!isActiveEventSourceEvent(sourceEpoch)) {\n return;\n }\n\n const terminalError = terminalErrorRef.current;\n\n if (terminalError !== null) {\n suppressReconnectRef.current = false;\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastError: terminalError,\n status: \"error\"\n }));\n\n return;\n }\n\n const skipErrorReconnect = skipErrorReconnectRef.current;\n skipErrorReconnectRef.current = false;\n const shouldReconnect =\n !suppressReconnectRef.current &&\n !skipErrorReconnect &&\n reconnectEnabled &&\n (options.shouldReconnect?.(event) ?? true);\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n lastError: event,\n status: shouldReconnect ? \"reconnecting\" : \"closed\"\n }));\n\n options.onError?.(event);\n\n if (!shouldReconnect) {\n suppressReconnectRef.current = false;\n closeEventSource();\n return;\n }\n\n closeEventSource();\n reconnect.schedule(\"error\");\n });\n\n const open = useStableCallback((): void => {\n manualCloseRef.current = false;\n manualOpenRef.current = true;\n suppressReconnectRef.current = false;\n terminalErrorRef.current = null;\n reconnect.cancel();\n setOpenNonce((current) => current + 1);\n });\n\n const reconnectNow = useStableCallback((): void => {\n manualCloseRef.current = false;\n manualOpenRef.current = true;\n skipErrorReconnectRef.current = true;\n suppressReconnectRef.current = true;\n terminalErrorRef.current = null;\n closeEventSource();\n suppressReconnectRef.current = false;\n reconnect.schedule(\"manual\");\n });\n\n const close = useStableCallback((): void => {\n manualCloseRef.current = true;\n manualOpenRef.current = false;\n suppressReconnectRef.current = true;\n terminalErrorRef.current = null;\n reconnect.cancel();\n closeEventSource();\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n status: \"closed\"\n }));\n });\n\n useEffect(() => {\n if (!supported) {\n eventSourceKeyRef.current = null;\n commitState((current) => ({\n ...current,\n status: \"closed\"\n }));\n return;\n }\n\n if (resolvedUrl === null) {\n eventSourceKeyRef.current = null;\n closeEventSource();\n commitState((current) => ({\n ...current,\n status: \"closed\"\n }));\n return;\n }\n\n const shouldConnect =\n terminalErrorRef.current === null &&\n (reconnect.status === \"running\" ||\n (reconnect.status !== \"scheduled\" &&\n ((connect && !manualCloseRef.current) || manualOpenRef.current)));\n const nextEventSourceKey = [\n resolvedUrl,\n options.withCredentials ? \"credentials\" : \"anonymous\",\n eventsDependency\n ].join(\"::\");\n\n if (!shouldConnect) {\n if (eventSourceRef.current !== null) {\n suppressReconnectRef.current = true;\n closeEventSource();\n }\n\n eventSourceKeyRef.current = null;\n commitState((current) => ({\n ...current,\n status:\n terminalErrorRef.current !== null\n ? \"error\"\n : manualCloseRef.current\n ? \"closed\"\n : \"idle\"\n }));\n return;\n }\n\n if (\n eventSourceRef.current !== null &&\n eventSourceKeyRef.current !== nextEventSourceKey\n ) {\n suppressReconnectRef.current = true;\n closeEventSource();\n }\n\n if (eventSourceRef.current !== null) {\n return;\n }\n\n const source = new EventSource(resolvedUrl, {\n withCredentials: options.withCredentials ?? false\n });\n const sourceEpoch = nextEventSourceEpochRef.current + 1;\n\n eventSourceRef.current = source;\n eventSourceKeyRef.current = nextEventSourceKey;\n activeEventSourceEpochRef.current = sourceEpoch;\n nextEventSourceEpochRef.current = sourceEpoch;\n\n commitState((current) => ({\n ...current,\n lastChangedAt: Date.now(),\n status:\n reconnect.status === \"running\" || reconnect.status === \"scheduled\"\n ? \"reconnecting\"\n : \"connecting\"\n }));\n\n const handleSourceOpen = (event: Event): void => {\n if (!isActiveEventSourceEvent(sourceEpoch)) {\n return;\n }\n\n handleOpen(event, source);\n };\n const handleSourceMessage = (event: Event): void => {\n if (!isActiveEventSourceEvent(sourceEpoch)) {\n return;\n }\n\n commitParsedMessage(\"message\", event as MessageEvent<string>, false);\n };\n const namedEventHandlers = new Map<\n string,\n (event: Event) => void\n >();\n const handleSourceError = (event: Event): void => {\n handleError(event, source, sourceEpoch);\n };\n\n source.addEventListener(\"open\", handleSourceOpen);\n source.addEventListener(\"message\", handleSourceMessage);\n\n for (const eventName of namedEvents) {\n const handler = (event: Event): void => {\n if (!isActiveEventSourceEvent(sourceEpoch)) {\n return;\n }\n\n commitParsedMessage(eventName, event as MessageEvent<string>, true);\n };\n\n namedEventHandlers.set(eventName, handler);\n source.addEventListener(eventName, handler);\n }\n\n source.addEventListener(\"error\", handleSourceError);\n\n return () => {\n source.removeEventListener(\"open\", handleSourceOpen);\n source.removeEventListener(\"message\", handleSourceMessage);\n\n for (const [eventName, handler] of namedEventHandlers) {\n source.removeEventListener(eventName, handler);\n }\n\n source.removeEventListener(\"error\", handleSourceError);\n };\n }, [\n closeEventSource,\n commitParsedMessage,\n commitState,\n connect,\n eventsDependency,\n handleError,\n handleOpen,\n isActiveEventSourceEvent,\n namedEvents,\n openNonce,\n options.withCredentials,\n reconnect.status,\n resolvedUrl,\n supported\n ]);\n\n useEffect(() => () => {\n suppressReconnectRef.current = true;\n eventSourceKeyRef.current = null;\n activeEventSourceEpochRef.current = null;\n terminalErrorRef.current = null;\n\n const source = eventSourceRef.current;\n eventSourceRef.current = null;\n\n if (source !== null) {\n source.close();\n }\n }, []);\n\n const status =\n (reconnect.status === \"scheduled\" || reconnect.status === \"running\") &&\n state.status !== \"open\"\n ? \"reconnecting\"\n : state.status;\n\n const snapshot = createConnectionStateSnapshot(status, {\n isSupported: supported,\n lastChangedAt: state.lastChangedAt\n });\n const reconnectState =\n options.reconnect === false\n ? null\n : {\n attempt: reconnect.attempt,\n isScheduled: reconnect.isScheduled,\n nextDelayMs: reconnect.nextDelayMs,\n status: reconnect.status\n };\n const commonResult = {\n close,\n lastError: state.lastError,\n lastEventName: state.lastEventName,\n lastMessage: state.lastMessage,\n lastMessageEvent: state.lastMessageEvent,\n open,\n reconnect: reconnectNow,\n reconnectState,\n transport: \"eventsource\" as const\n };\n const eventSource = eventSourceRef.current;\n\n if (snapshot.status === \"open\") {\n return {\n ...snapshot,\n ...commonResult,\n eventSource: eventSource as EventSource\n };\n }\n\n return {\n ...snapshot,\n ...commonResult,\n eventSource\n };\n};\n"]}
|