dynamodb-reactive 0.5.0 → 0.6.0

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../client/src/canonical.ts","../../client/src/patcher.ts","../../client/src/log.ts","../../client/src/websocket.ts","../../client/src/client.ts","../../client/src/react.tsx"],"names":["key","document","jsonpatch","error","createContext","useState","useEffect","jsx","useContext","useSyncExternalStore","useRef"],"mappings":"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","file":"react.cjs","sourcesContent":["function canonicalize(\n value: unknown,\n seen: Set<object>,\n key: string,\n arrayItem = false,\n applyToJSON = true,\n): string | undefined {\n if (value === null) return 'null';\n\n switch (typeof value) {\n case 'string':\n case 'boolean':\n return JSON.stringify(value);\n case 'number':\n return Number.isFinite(value) ? JSON.stringify(value) : 'null';\n case 'undefined':\n return arrayItem ? 'null' : undefined;\n case 'object': {\n if (applyToJSON && 'toJSON' in value && typeof value.toJSON === 'function') {\n return canonicalize(value.toJSON(key), seen, key, arrayItem, false);\n }\n if (seen.has(value)) {\n throw new TypeError('Query input must not contain circular references');\n }\n\n seen.add(value);\n try {\n if (Array.isArray(value)) {\n const items: string[] = [];\n for (let index = 0; index < value.length; index++) {\n items.push(canonicalize(value[index], seen, String(index), true) ?? 'null');\n }\n return `[${items.join(',')}]`;\n }\n\n const object = value as Record<string, unknown>;\n const entries: string[] = [];\n for (const key of Object.keys(object).sort()) {\n const item = canonicalize(object[key], seen, key);\n if (item !== undefined) {\n entries.push(`${JSON.stringify(key)}:${item}`);\n }\n }\n return `{${entries.join(',')}}`;\n } finally {\n seen.delete(value);\n }\n }\n case 'bigint':\n case 'function':\n case 'symbol':\n default:\n throw new TypeError(`Unsupported query input value: ${typeof value}`);\n }\n}\n\n/** Return the stable identity used for subscription sharing and targeting. */\nexport function getQueryKey(path: string, input?: unknown): string {\n return `${JSON.stringify(path)}:${canonicalize(input, new Set(), '') ?? 'undefined'}`;\n}\n","import jsonpatch, { type Operation } from 'fast-json-patch';\n\nimport type { JsonPatch } from './protocol.js';\n\n/**\n * Apply JSON patches to a document\n */\nexport function applyPatches<T>(document: T, patches: JsonPatch[]): T {\n if (patches.length === 0) {\n return document;\n }\n\n const operations: Operation[] = patches.map((patch) => {\n const op: Operation = {\n op: patch.op,\n path: patch.path,\n } as Operation;\n\n if ('value' in patch && patch.value !== undefined) {\n (op as { value: unknown }).value = patch.value;\n }\n if ('from' in patch && patch.from !== undefined) {\n (op as { from: string }).from = patch.from;\n }\n\n return op;\n });\n\n try {\n const result = jsonpatch.applyPatch(\n structuredClone(document),\n operations,\n true, // Validate operations\n false, // Don't mutate the original\n );\n\n return result.newDocument as T;\n } catch (error) {\n throw new Error('Failed to apply patches', { cause: error });\n }\n}\n","/* eslint-disable no-console */\ntype DebugGlobal = typeof globalThis & {\n __DYNAMODB_REACTIVE_DEBUG__?: boolean;\n};\n\nexport function debug(...values: unknown[]): void {\n if ((globalThis as DebugGlobal).__DYNAMODB_REACTIVE_DEBUG__) {\n console.debug(...values);\n }\n}\n\nexport function warn(...values: unknown[]): void {\n console.warn(...values);\n}\n\nexport function error(...values: unknown[]): void {\n console.error(...values);\n}\n","import { error as logError } from './log.js';\nimport type { WebSocketEvent } from './protocol.js';\nimport type { ConnectionState, ReactiveClientConfig } from './types.js';\n\ninterface ConnectionWaitOptions {\n signal?: AbortSignal;\n timeoutMs?: number;\n}\n\ninterface ConnectionWaiter {\n resolve: (id: string) => void;\n reject: (error: Error) => void;\n cleanup: () => void;\n}\n\ntype ManagerConfig = Required<\n Pick<\n ReactiveClientConfig,\n | 'autoReconnect'\n | 'connectionTimeout'\n | 'handshakeTimeout'\n | 'heartbeatInterval'\n | 'heartbeatTimeout'\n | 'maxReconnectAttempts'\n | 'reconnectDelay'\n >\n> &\n ReactiveClientConfig;\n\nfunction withDefaults(config: ReactiveClientConfig): ManagerConfig {\n return {\n autoReconnect: true,\n connectionTimeout: 10000,\n handshakeTimeout: 10000,\n heartbeatInterval: 5 * 60 * 1000,\n heartbeatTimeout: 15_000,\n maxReconnectAttempts: 10,\n reconnectDelay: 1000,\n ...config,\n };\n}\n\n/** WebSocket manager with generation-fenced events and reconnection. */\nexport class WebSocketManager {\n private config: ManagerConfig;\n private ws: WebSocket | null = null;\n private state: ConnectionState = 'disconnected';\n private reconnectAttempts = 0;\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private handshakeTimer: ReturnType<typeof setTimeout> | null = null;\n private heartbeatTimer: ReturnType<typeof setInterval> | null = null;\n private pongTimer: ReturnType<typeof setTimeout> | null = null;\n private messageHandlers = new Set<(message: WebSocketEvent) => void>();\n private stateHandlers = new Set<(state: ConnectionState) => void>();\n private handshakeHandlers = new Set<(generation: number) => void>();\n private _connectionId: string | null = null;\n private connectionWaiters = new Set<ConnectionWaiter>();\n private socketGeneration = 0;\n private intentionalDisconnect = false;\n private lastConnectionError: Error | undefined;\n\n constructor(config: ReactiveClientConfig) {\n this.config = withDefaults(config);\n }\n\n /** Apply settings used by future requests/events without replacing the socket. */\n configure(config: ReactiveClientConfig): void {\n this.config = withDefaults(config);\n }\n\n get connectionId(): string | null {\n return this._connectionId;\n }\n\n get generation(): number {\n return this.socketGeneration;\n }\n\n waitForConnectionId(options: ConnectionWaitOptions = {}): Promise<string> {\n if (this._connectionId && this.state === 'connected') {\n return Promise.resolve(this._connectionId);\n }\n if (options.signal?.aborted) {\n return Promise.reject(new Error('Connection wait aborted'));\n }\n\n const timeoutMs = options.timeoutMs ?? this.config.connectionTimeout;\n return new Promise((resolve, reject) => {\n // oxlint-disable-next-line prefer-const -- cleanup can run before the timer is set.\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const abort = () => finish(new Error('Connection wait aborted'));\n const waiter: ConnectionWaiter = {\n resolve,\n reject,\n cleanup: () => {\n if (timeout) clearTimeout(timeout);\n options.signal?.removeEventListener('abort', abort);\n },\n };\n const finish = (failure: Error) => {\n if (!this.connectionWaiters.delete(waiter)) return;\n waiter.cleanup();\n reject(failure);\n };\n\n this.connectionWaiters.add(waiter);\n options.signal?.addEventListener('abort', abort, { once: true });\n timeout = setTimeout(\n () =>\n finish(\n new Error(`Connection timed out after ${timeoutMs}ms`, {\n cause: this.lastConnectionError,\n }),\n ),\n timeoutMs,\n );\n });\n }\n\n getState(): ConnectionState {\n return this.state;\n }\n\n async connect(): Promise<void> {\n if (this.state === 'connected') return;\n if (this.state === 'connecting') {\n await this.waitForConnectionId();\n return;\n }\n\n if (this.state !== 'reconnecting') this.lastConnectionError = undefined;\n this.intentionalDisconnect = false;\n const generation = ++this.socketGeneration;\n this.setState('connecting');\n let socket: WebSocket | undefined;\n let retryable = true;\n\n try {\n if (!this.config.webSocketFactory && typeof globalThis.WebSocket !== 'function') {\n retryable = false;\n throw new Error(\n 'WebSocket is unavailable in this runtime. Enable the native WebSocket API ' +\n '(Node 20: --experimental-websocket), use Node 22 or newer, or configure webSocketFactory.',\n );\n }\n const url = await this.buildUrl();\n // oxlint-disable-next-line typescript/no-unnecessary-condition -- disconnect() can run while the URL is built.\n if (generation !== this.socketGeneration || this.intentionalDisconnect) {\n return;\n }\n\n let nextSocket: WebSocket;\n try {\n nextSocket = this.config.webSocketFactory\n ? this.config.webSocketFactory(url)\n : new globalThis.WebSocket(url);\n } catch (cause) {\n // Retrying cannot repair missing APIs, malformed URLs or a factory\n // that cannot construct a socket. Preserve its original error.\n retryable = false;\n throw cause;\n }\n socket = nextSocket;\n this.ws = nextSocket;\n this.startHandshakeTimer(nextSocket, generation);\n\n nextSocket.onopen = () => {\n if (!this.isCurrent(nextSocket, generation)) return;\n nextSocket.send(JSON.stringify({ type: 'init' }));\n };\n\n nextSocket.onclose = () => {\n if (!this.isCurrent(nextSocket, generation)) return;\n this.handleClose();\n };\n\n nextSocket.onerror = () => {\n if (!this.isCurrent(nextSocket, generation)) return;\n const failure = new Error('WebSocket error');\n this.lastConnectionError = failure;\n this.invokeLifecycleCallback('onError', this.config.onError, failure);\n };\n\n nextSocket.onmessage = (event) => {\n if (!this.isCurrent(nextSocket, generation)) return;\n this.receiveMessage(nextSocket, generation, event.data);\n };\n } catch (cause) {\n if (generation !== this.socketGeneration) return;\n const failure = cause instanceof Error ? cause : new Error(String(cause));\n this.lastConnectionError = failure;\n this.clearConnectionTimers();\n if (!retryable) {\n this.clearTimers();\n this.reconnectAttempts = 0;\n }\n if (socket && this.ws === socket) socket.close();\n this.ws = null;\n this._connectionId = null;\n this.setState('disconnected');\n this.invokeLifecycleCallback('onError', this.config.onError, failure);\n\n // oxlint-disable-next-line typescript/no-unnecessary-condition -- disconnect() sets it from outside this handler.\n if (retryable && this.config.autoReconnect && !this.intentionalDisconnect) {\n this.scheduleReconnect();\n await this.waitForConnectionId();\n return;\n }\n this.rejectWaiters(failure);\n throw failure;\n }\n\n await this.waitForConnectionId();\n }\n\n disconnect(): void {\n this.intentionalDisconnect = true;\n ++this.socketGeneration;\n this.clearTimers();\n\n const socket = this.ws;\n this.ws = null;\n socket?.close(1000, 'Client disconnect');\n this._connectionId = null;\n this.setState('disconnected');\n this.rejectWaiters(new Error('WebSocket disconnected'));\n }\n\n forceReconnect(): void {\n this.intentionalDisconnect = false;\n ++this.socketGeneration;\n this.clearTimers();\n\n const socket = this.ws;\n this.ws = null;\n socket?.close(1000, 'Force reconnect');\n this._connectionId = null;\n this.reconnectAttempts = 0;\n this.setState('disconnected');\n void this.connect().catch(() => undefined);\n }\n\n onMessage(handler: (message: WebSocketEvent) => void): () => void {\n this.messageHandlers.add(handler);\n return () => this.messageHandlers.delete(handler);\n }\n\n onStateChange(handler: (state: ConnectionState) => void): () => void {\n this.stateHandlers.add(handler);\n return () => this.stateHandlers.delete(handler);\n }\n\n onHandshake(handler: (generation: number) => void): () => void {\n this.handshakeHandlers.add(handler);\n return () => this.handshakeHandlers.delete(handler);\n }\n\n private async buildUrl(): Promise<string> {\n let url = this.config.url;\n if (!this.config.auth) return url;\n\n const token =\n typeof this.config.auth === 'function' ? await this.config.auth() : this.config.auth;\n const separator = url.includes('?') ? '&' : '?';\n url = `${url}${separator}token=${encodeURIComponent(token)}`;\n return url;\n }\n\n private receiveMessage(socket: WebSocket, generation: number, rawData: unknown): void {\n try {\n const message = JSON.parse(String(rawData)) as WebSocketEvent;\n if (message.type === 'connected') {\n if (this._connectionId) return;\n this._connectionId = message.connectionId;\n socket.send(JSON.stringify({ type: 'ping' }));\n return;\n }\n\n if (message.type === 'pong') {\n this.clearPongTimer();\n if (!this._connectionId || this.state === 'connected') return;\n this.clearHandshakeTimer();\n this.lastConnectionError = undefined;\n this.reconnectAttempts = 0;\n this.setState('connected');\n this.startHeartbeat(socket, generation);\n this.invokeLifecycleCallback('onConnect', this.config.onConnect);\n this.resolveWaiters(this._connectionId);\n for (const handler of this.handshakeHandlers) handler(generation);\n return;\n }\n\n for (const handler of this.messageHandlers) handler(message);\n } catch (cause) {\n logError('Failed to parse WebSocket message:', cause);\n }\n }\n\n private startHandshakeTimer(socket: WebSocket, generation: number): void {\n this.clearHandshakeTimer();\n this.handshakeTimer = setTimeout(() => {\n if (!this.isCurrent(socket, generation) || this.state === 'connected') {\n return;\n }\n const failure = new Error('WebSocket handshake timed out');\n this.lastConnectionError = failure;\n this.invokeLifecycleCallback('onError', this.config.onError, failure);\n socket.close(4000, 'Handshake timeout');\n }, this.config.handshakeTimeout);\n }\n\n private handleClose(): void {\n this.clearConnectionTimers();\n this.ws = null;\n this._connectionId = null;\n this.setState('disconnected');\n this.invokeLifecycleCallback('onDisconnect', this.config.onDisconnect);\n\n if (this.config.autoReconnect && !this.intentionalDisconnect) {\n this.scheduleReconnect();\n } else {\n this.rejectWaiters(new Error('WebSocket disconnected'));\n }\n }\n\n private startHeartbeat(socket: WebSocket, generation: number): void {\n this.clearHeartbeatTimer();\n this.heartbeatTimer = setInterval(() => {\n if (\n !this.isCurrent(socket, generation) ||\n this.state !== 'connected' ||\n socket.readyState !== socket.OPEN\n ) {\n return;\n }\n socket.send(JSON.stringify({ type: 'ping' }));\n this.pongTimer ??= setTimeout(() => {\n this.pongTimer = null;\n if (!this.isCurrent(socket, generation)) return;\n const failure = new Error('WebSocket heartbeat timed out');\n this.lastConnectionError = failure;\n this.invokeLifecycleCallback('onError', this.config.onError, failure);\n // A dead peer can hold close() in CLOSING for minutes, so drop the socket now\n // instead of waiting for its close event.\n socket.onclose = null;\n socket.close(4001, 'Heartbeat timeout');\n this.handleClose();\n }, this.config.heartbeatTimeout);\n }, this.config.heartbeatInterval);\n }\n\n private isCurrent(socket: WebSocket, generation: number): boolean {\n return this.ws === socket && this.socketGeneration === generation;\n }\n\n private setState(state: ConnectionState): void {\n if (this.state === state) return;\n this.state = state;\n for (const handler of this.stateHandlers) handler(state);\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectTimer || this.intentionalDisconnect) return;\n if (this.reconnectAttempts >= this.config.maxReconnectAttempts) {\n const failure = new Error('Max reconnection attempts reached', {\n cause: this.lastConnectionError,\n });\n logError(failure.message);\n this.setState('disconnected');\n this.rejectWaiters(failure);\n this.invokeLifecycleCallback('onError', this.config.onError, failure);\n return;\n }\n\n this.setState('reconnecting');\n this.reconnectAttempts++;\n const delay =\n Math.min(this.config.reconnectDelay * 2 ** (this.reconnectAttempts - 1), 30000) *\n (0.5 + Math.random() * 0.5);\n\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = null;\n void this.connect().catch(() => undefined);\n }, delay);\n }\n\n private resolveWaiters(connectionId: string): void {\n const waiters = [...this.connectionWaiters];\n this.connectionWaiters.clear();\n for (const waiter of waiters) {\n waiter.cleanup();\n waiter.resolve(connectionId);\n }\n }\n\n private invokeLifecycleCallback<TArguments extends unknown[]>(\n name: 'onConnect' | 'onDisconnect' | 'onError',\n callback: ((...args: TArguments) => void) | undefined,\n ...args: TArguments\n ): void {\n if (!callback) return;\n try {\n callback(...args);\n } catch (cause) {\n try {\n logError(`[dynamodb-reactive] ${name} callback failed:`, cause);\n } catch {\n // Reporting must not let user callbacks re-enter socket lifecycle paths.\n }\n }\n }\n\n private rejectWaiters(failure: Error): void {\n const waiters = [...this.connectionWaiters];\n this.connectionWaiters.clear();\n for (const waiter of waiters) {\n waiter.cleanup();\n waiter.reject(failure);\n }\n }\n\n private clearHandshakeTimer(): void {\n if (!this.handshakeTimer) return;\n clearTimeout(this.handshakeTimer);\n this.handshakeTimer = null;\n }\n\n private clearHeartbeatTimer(): void {\n if (!this.heartbeatTimer) return;\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = null;\n }\n\n private clearPongTimer(): void {\n if (!this.pongTimer) return;\n clearTimeout(this.pongTimer);\n this.pongTimer = null;\n }\n\n private clearConnectionTimers(): void {\n this.clearHandshakeTimer();\n this.clearHeartbeatTimer();\n this.clearPongTimer();\n }\n\n private clearTimers(): void {\n this.clearConnectionTimers();\n if (!this.reconnectTimer) return;\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n}\n","import { getQueryKey } from './canonical.js';\nimport { applyPatches } from './patcher.js';\nimport type { ErrorResponse, PatchEvent, SnapshotResponse, WebSocketEvent } from './protocol.js';\nimport type {\n ConnectionState,\n MutationOptions,\n ReactiveClientConfig,\n Subscription,\n SubscriptionOptions,\n} from './types.js';\nimport { WebSocketManager } from './websocket.js';\n\nconst DEFAULT_HTTP_URL = '/api/reactive';\n\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n}\n\ntype OptimisticUpdater = (data: unknown) => unknown;\n\ninterface OptimisticLayer {\n updater: OptimisticUpdater;\n settledRevision?: number;\n}\n\ninterface SubscriptionObserver {\n onData?: (data: unknown) => void;\n onError?: (error: Error) => void;\n}\n\ninterface SubscriptionState<TData> {\n id: string;\n key: string;\n path: string;\n input: unknown;\n authoritativeData: unknown;\n data: TData | undefined;\n loading: boolean;\n stale: boolean;\n error: Error | undefined;\n listeners: Set<() => void>;\n observers: Map<string, SubscriptionObserver>;\n active: boolean;\n hasRegistered: boolean;\n generation: number;\n registrationId: string | undefined;\n registrationConnectionId: string | undefined;\n registrationSocketGeneration: number | undefined;\n registrationPromise: Promise<void> | undefined;\n version: number | undefined;\n patchBuffer: Map<string, PatchEvent>;\n appliedMessageIds: Set<string>;\n resyncPromise: Promise<void> | undefined;\n resyncGeneration: number | undefined;\n optimisticLayers: Map<string, OptimisticLayer>;\n settlementRevision: number;\n registrationSettlementRevision: number;\n revision: number;\n}\n\ntype HttpResult = SnapshotResponse | ErrorResponse;\n\n/** Reactive client for shared, versioned subscriptions. */\nexport class ReactiveClient {\n private wsManager: WebSocketManager;\n private httpUrl: string;\n private authGetter?: () => string | Promise<string>;\n private headersGetter?: () => Record<string, string> | Promise<Record<string, string>>;\n private subscriptionsById = new Map<string, SubscriptionState<unknown>>();\n private subscriptionsByKey = new Map<string, SubscriptionState<unknown>>();\n private connectionState: ConnectionState = 'disconnected';\n private stateListeners = new Set<(state: ConnectionState) => void>();\n\n constructor(config: ReactiveClientConfig) {\n this.wsManager = new WebSocketManager(config);\n this.httpUrl = config.httpUrl ?? DEFAULT_HTTP_URL;\n this.setAuth(config.auth);\n this.setInitialHeaders(config.headers);\n\n this.wsManager.onMessage((message) => this.handleMessage(message));\n this.wsManager.onStateChange((state) => {\n this.connectionState = state;\n this.notifyStateListeners();\n if (state === 'disconnected' || state === 'reconnecting') {\n this.markSubscriptionsStale();\n }\n });\n this.wsManager.onHandshake((socketGeneration) => {\n this.registerActiveSubscriptions(socketGeneration);\n });\n }\n\n /** Apply live configuration without replacing subscription caches or the socket. */\n configure(config: ReactiveClientConfig): void {\n this.httpUrl = config.httpUrl ?? DEFAULT_HTTP_URL;\n this.authGetter = this.toAuthGetter(config.auth);\n this.headersGetter = this.toHeadersGetter(config.headers);\n this.wsManager.configure(config);\n }\n\n async connect(): Promise<void> {\n await this.wsManager.connect();\n }\n\n disconnect(): void {\n this.wsManager.disconnect();\n }\n\n forceReconnect(): void {\n this.wsManager.forceReconnect();\n }\n\n getConnectionState(): ConnectionState {\n return this.connectionState;\n }\n\n onConnectionStateChange(listener: (state: ConnectionState) => void): () => void {\n this.stateListeners.add(listener);\n return () => this.stateListeners.delete(listener);\n }\n\n subscribe<TData, TInput = unknown>(\n path: string,\n options: SubscriptionOptions<TInput, TData> = {},\n ): Subscription<TData> {\n const key = getQueryKey(path, options.input);\n let shared = this.subscriptionsByKey.get(key);\n\n if (!shared) {\n shared = {\n id: generateId(),\n key,\n path,\n input: options.input,\n authoritativeData: undefined,\n data: undefined,\n loading: true,\n stale: true,\n error: undefined,\n listeners: new Set(),\n observers: new Map(),\n active: true,\n hasRegistered: false,\n generation: 0,\n registrationId: undefined,\n registrationConnectionId: undefined,\n registrationSocketGeneration: undefined,\n registrationPromise: undefined,\n version: undefined,\n patchBuffer: new Map(),\n appliedMessageIds: new Set(),\n resyncPromise: undefined,\n resyncGeneration: undefined,\n optimisticLayers: new Map(),\n settlementRevision: 0,\n registrationSettlementRevision: 0,\n revision: 0,\n };\n this.subscriptionsByKey.set(key, shared);\n this.subscriptionsById.set(shared.id, shared);\n if (this.connectionState === 'connected') {\n void this.ensureRegistered(shared, this.wsManager.generation).catch(() => undefined);\n }\n }\n\n const leaseId = generateId();\n shared.observers.set(leaseId, {\n onData: options.onData ? (data) => options.onData?.(data as TData) : undefined,\n onError: options.onError,\n });\n if (\n this.connectionState === 'connected' &&\n (!shared.hasRegistered || shared.stale) &&\n !shared.registrationPromise\n ) {\n void this.ensureRegistered(shared, this.wsManager.generation).catch(() => undefined);\n }\n const state = shared as SubscriptionState<TData>;\n let released = false;\n\n return {\n id: state.id,\n key: state.key,\n get data() {\n return state.data;\n },\n get loading() {\n return state.loading;\n },\n get stale() {\n return state.stale;\n },\n get error() {\n return state.error;\n },\n unsubscribe: () => {\n if (released) return;\n released = true;\n this.releaseSubscription(state, leaseId);\n },\n refetch: () => this.refetch(state),\n };\n }\n\n async call<TInput, TOutput>(\n path: string,\n input: TInput,\n options?: MutationOptions<TInput, TOutput>,\n ): Promise<TOutput> {\n const mutationId = generateId();\n const layers: SubscriptionState<unknown>[] = [];\n\n try {\n this.createMutationLayers(mutationId, input, options, layers);\n const connectionId = await this.wsManager.waitForConnectionId();\n const headers = await this.buildHeaders();\n const response = await fetch(this.httpUrl, {\n method: 'POST',\n headers,\n body: JSON.stringify({ type: 'call', connectionId, path, input }),\n });\n if (!response.ok) {\n throw new Error(`Call failed: ${response.status} ${response.statusText}`);\n }\n\n const result = (await response.json()) as {\n type: string;\n message?: string;\n data?: unknown;\n };\n if (result.type === 'error') {\n throw new Error(result.message ?? 'Unknown error');\n }\n\n const data = result.data as TOutput;\n this.settleMutationLayers(mutationId, input, data, options, layers);\n return data;\n } catch (cause) {\n this.removeMutationLayers(mutationId, layers);\n throw cause;\n }\n }\n\n addSubscriptionListener(id: string, listener: () => void): () => void {\n const state = this.subscriptionsById.get(id);\n if (!state) return () => undefined;\n state.listeners.add(listener);\n return () => state.listeners.delete(listener);\n }\n\n getSubscriptionRevision(id: string): number {\n return this.subscriptionsById.get(id)?.revision ?? -1;\n }\n\n applyOptimisticUpdate(subscriptionId: string, updater: (data: unknown) => unknown): void {\n const state = this.subscriptionsById.get(subscriptionId);\n if (!state || state.data === undefined) return;\n state.optimisticLayers.set(`local-${generateId()}`, {\n updater,\n });\n this.recomputeData(state);\n this.notifySubscription(state, true);\n }\n\n private setAuth(auth: ReactiveClientConfig['auth']): void {\n this.authGetter = this.toAuthGetter(auth);\n }\n\n private setInitialHeaders(headers: ReactiveClientConfig['headers']): void {\n this.headersGetter = this.toHeadersGetter(headers);\n }\n\n private toAuthGetter(\n auth: ReactiveClientConfig['auth'],\n ): (() => string | Promise<string>) | undefined {\n if (!auth) return undefined;\n return typeof auth === 'function' ? auth : () => auth;\n }\n\n private toHeadersGetter(\n headers: ReactiveClientConfig['headers'],\n ): (() => Record<string, string> | Promise<Record<string, string>>) | undefined {\n if (!headers) return undefined;\n return typeof headers === 'function' ? headers : () => headers;\n }\n\n private registerActiveSubscriptions(socketGeneration: number): void {\n for (const state of this.subscriptionsByKey.values()) {\n if (state.active) {\n void this.ensureRegistered(state, socketGeneration).catch(() => undefined);\n }\n }\n }\n\n private ensureRegistered(\n state: SubscriptionState<unknown>,\n socketGeneration: number,\n force = false,\n ): Promise<void> {\n if (\n !force &&\n state.registrationSocketGeneration === socketGeneration &&\n state.registrationPromise\n ) {\n return state.registrationPromise;\n }\n\n state.generation++;\n state.registrationSettlementRevision = state.settlementRevision;\n state.registrationId = generateId();\n state.registrationSocketGeneration = socketGeneration;\n state.registrationConnectionId = undefined;\n state.registrationPromise = undefined;\n state.resyncPromise = undefined;\n state.resyncGeneration = undefined;\n state.hasRegistered = false;\n state.version = undefined;\n state.patchBuffer.clear();\n state.appliedMessageIds.clear();\n state.loading = true;\n state.stale = true;\n state.error = undefined;\n this.notifySubscription(state);\n\n const generation = state.generation;\n const registrationId = state.registrationId;\n const isCurrent = () =>\n state.active &&\n state.generation === generation &&\n state.registrationId === registrationId &&\n state.registrationSocketGeneration === socketGeneration &&\n this.wsManager.generation === socketGeneration;\n let requestIssued = false;\n let registrationConnectionId: string | undefined;\n // A synchronous throw before the first await runs the finally block before\n // this assignment completes, so `request` must exist (undefined) already.\n // oxlint-disable-next-line prefer-const -- Read before assignment on a synchronous throw.\n let request!: Promise<void>;\n request = (async () => {\n try {\n const connectionId = await this.wsManager.waitForConnectionId();\n if (!isCurrent()) return;\n registrationConnectionId = connectionId;\n state.registrationConnectionId = connectionId;\n const headers = await this.buildHeaders();\n if (!isCurrent()) return;\n requestIssued = true;\n const response = await fetch(this.httpUrl, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n type: 'subscribe',\n connectionId,\n subscriptionId: state.id,\n generation,\n registrationId,\n path: state.path,\n input: state.input,\n }),\n });\n if (!response.ok) {\n throw new Error(`Subscribe failed: ${response.status} ${response.statusText}`);\n }\n\n const result = (await response.json()) as HttpResult;\n if (result.type === 'error') {\n throw new Error(result.message);\n }\n if (!isCurrent()) return;\n this.handleSnapshot(result);\n if (isCurrent()) state.hasRegistered = true;\n } catch (cause) {\n if (isCurrent()) {\n const failure = cause instanceof Error ? cause : new Error(String(cause));\n state.error = failure;\n state.loading = this.hasSettledLayers(state);\n this.notifySubscription(state, false, failure);\n }\n throw cause;\n } finally {\n if ((!state.active || !isCurrent()) && requestIssued) {\n void this.sendUnsubscribe(registrationConnectionId, state.id, generation, registrationId);\n }\n if (state.registrationPromise === request) {\n state.registrationPromise = undefined;\n }\n }\n })();\n state.registrationPromise = request;\n return request;\n }\n\n private releaseSubscription(state: SubscriptionState<unknown>, leaseId: string): void {\n state.observers.delete(leaseId);\n if (state.observers.size > 0) return;\n\n state.active = false;\n this.subscriptionsById.delete(state.id);\n this.subscriptionsByKey.delete(state.key);\n if (state.registrationId && state.registrationConnectionId && state.hasRegistered) {\n void this.sendUnsubscribe(\n state.registrationConnectionId,\n state.id,\n state.generation,\n state.registrationId,\n );\n }\n }\n\n private async sendUnsubscribe(\n connectionId: string | undefined,\n subscriptionId: string,\n generation: number,\n registrationId: string,\n ): Promise<void> {\n if (!connectionId) return;\n try {\n const headers = await this.buildHeaders();\n await fetch(this.httpUrl, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n type: 'unsubscribe',\n connectionId,\n subscriptionId,\n generation,\n registrationId,\n }),\n });\n } catch {\n // Connection cleanup is the fallback when an unsubscribe cannot be sent.\n }\n }\n\n private async refetch(state: SubscriptionState<unknown>): Promise<void> {\n if (!state.active) return;\n if (!state.registrationId) {\n await this.ensureRegistered(state, this.wsManager.generation);\n return;\n }\n await this.requestResync(state);\n }\n\n private handleMessage(message: WebSocketEvent): void {\n switch (message.type) {\n case 'patch':\n this.handlePatch(message);\n break;\n case 'resync': {\n const state = this.subscriptionsById.get(message.subscriptionId);\n if (state?.generation === message.generation) {\n void this.requestResync(state).catch(() => undefined);\n }\n break;\n }\n case 'connected':\n case 'pong':\n break;\n }\n }\n\n private handleSnapshot(message: SnapshotResponse): void {\n const state = this.subscriptionsById.get(message.subscriptionId);\n if (!state || message.generation !== state.generation) return;\n if (state.version !== undefined && message.version <= state.version) return;\n\n state.authoritativeData = message.data;\n state.version = message.version;\n state.error = undefined;\n\n const coveredRevision = state.registrationSettlementRevision;\n for (const [layerId, layer] of state.optimisticLayers) {\n if (layer.settledRevision !== undefined && layer.settledRevision <= coveredRevision) {\n state.optimisticLayers.delete(layerId);\n }\n }\n const awaitingReconciliation = this.hasSettledLayers(state);\n state.loading = awaitingReconciliation;\n state.stale = awaitingReconciliation;\n this.recomputeData(state);\n this.discardStalePatches(state);\n this.notifySubscription(state, true);\n this.drainPatchBuffer(state);\n }\n\n private handlePatch(message: PatchEvent): void {\n const state = this.subscriptionsById.get(message.subscriptionId);\n if (!state || message.generation !== state.generation) return;\n if (\n state.appliedMessageIds.has(message.messageId) ||\n state.patchBuffer.has(message.messageId)\n ) {\n return;\n }\n if (state.version !== undefined && message.toVersion <= state.version) {\n state.appliedMessageIds.add(message.messageId);\n return;\n }\n\n state.patchBuffer.set(message.messageId, message);\n if (state.version === undefined) return;\n this.drainPatchBuffer(state);\n }\n\n private drainPatchBuffer(state: SubscriptionState<unknown>): void {\n if (state.version === undefined || state.authoritativeData === undefined) {\n return;\n }\n\n this.discardStalePatches(state);\n for (;;) {\n const next = [...state.patchBuffer.values()]\n .filter((patch) => patch.fromVersion === state.version)\n .sort((left, right) => left.toVersion - right.toVersion)\n .at(0);\n if (!next) break;\n\n state.patchBuffer.delete(next.messageId);\n try {\n state.authoritativeData = applyPatches(state.authoritativeData, next.patches);\n state.version = next.toVersion;\n state.appliedMessageIds.add(next.messageId);\n const awaitingReconciliation = this.hasSettledLayers(state);\n state.loading = awaitingReconciliation;\n state.stale = awaitingReconciliation;\n state.error = undefined;\n this.recomputeData(state);\n this.notifySubscription(state, true);\n this.discardStalePatches(state);\n } catch {\n void this.requestResync(state).catch(() => undefined);\n return;\n }\n }\n\n if (\n [...state.patchBuffer.values()].some(\n (patch) => patch.toVersion > state.version! && patch.fromVersion !== state.version,\n )\n ) {\n void this.requestResync(state).catch(() => undefined);\n }\n }\n\n private discardStalePatches(state: SubscriptionState<unknown>): void {\n if (state.version === undefined) return;\n for (const [messageId, patch] of state.patchBuffer) {\n if (patch.toVersion <= state.version) {\n state.patchBuffer.delete(messageId);\n state.appliedMessageIds.add(messageId);\n }\n }\n }\n\n private requestResync(state: SubscriptionState<unknown>): Promise<void> {\n if (state.resyncPromise && state.resyncGeneration === state.generation) {\n return state.resyncPromise;\n }\n if (!state.active || !state.registrationId) return Promise.resolve();\n\n state.stale = true;\n state.loading = true;\n this.notifySubscription(state);\n const request: Promise<void> = this.ensureRegistered(state, this.wsManager.generation, true)\n .finally(() => {\n if (state.resyncPromise === request) {\n state.resyncPromise = undefined;\n state.resyncGeneration = undefined;\n }\n })\n .then(() => {\n if (state.active && this.hasSettledLayers(state)) {\n return this.requestResync(state);\n }\n return undefined;\n });\n state.resyncPromise = request;\n state.resyncGeneration = state.generation;\n return request;\n }\n\n private createMutationLayers<TInput, TOutput>(\n mutationId: string,\n input: TInput,\n options: MutationOptions<TInput, TOutput> | undefined,\n layered: SubscriptionState<unknown>[],\n ): void {\n const targets = this.findMutationTargets(options);\n for (const state of targets) {\n const updater = this.createOptimisticUpdater(input, options);\n if (!updater || state.authoritativeData === undefined) continue;\n state.optimisticLayers.set(mutationId, {\n updater,\n });\n layered.push(state);\n this.recomputeData(state);\n this.notifySubscription(state, true);\n }\n }\n\n private findMutationTargets<TInput, TOutput>(\n options: MutationOptions<TInput, TOutput> | undefined,\n ): SubscriptionState<unknown>[] {\n if (options?.queryKey) {\n const exact = this.subscriptionsByKey.get(options.queryKey);\n return exact ? [exact] : [];\n }\n if (typeof options?.invalidates === 'object') {\n const exact = this.subscriptionsByKey.get(\n getQueryKey(options.invalidates.path, options.invalidates.input),\n );\n return exact ? [exact] : [];\n }\n if (typeof options?.invalidates === 'string') {\n return [...this.subscriptionsByKey.values()].filter(\n (state) => state.path === options.invalidates,\n );\n }\n return [];\n }\n\n private createOptimisticUpdater<TInput, TOutput>(\n input: TInput,\n options: MutationOptions<TInput, TOutput> | undefined,\n result?: TOutput,\n settled = false,\n ): OptimisticUpdater | undefined {\n const update = options?.optimisticUpdate;\n if (typeof update === 'function') {\n return (data) => (Array.isArray(data) ? update(data, input, result) : data);\n }\n\n const itemId =\n typeof input === 'object' && input !== null ? (input as { id?: unknown }).id : undefined;\n if (update === 'remove' && itemId !== undefined) {\n return (data) =>\n Array.isArray(data)\n ? data.filter((item) => (item as { id?: unknown }).id !== itemId)\n : data;\n }\n if (update !== 'merge') return undefined;\n\n if (itemId !== undefined) {\n const resultFields = settled && typeof result === 'object' && result !== null ? result : {};\n return (data) => {\n if (!Array.isArray(data)) return data;\n return data.map((item) =>\n (item as { id?: unknown }).id === itemId ? { ...item, ...input, ...resultFields } : item,\n );\n };\n }\n if (options?.optimisticData === undefined) return undefined;\n\n return (data) => {\n if (!Array.isArray(data)) return data;\n const optimistic = settled\n ? // oxlint-disable-next-line typescript/prefer-nullish-coalescing -- null is a valid mutation result.\n result === undefined\n ? typeof options.optimisticData === 'function'\n ? (\n options.optimisticData as (\n optimisticInput: TInput,\n currentData: unknown[],\n ) => TOutput | undefined\n )(input, data)\n : options.optimisticData\n : result\n : typeof options.optimisticData === 'function'\n ? (\n options.optimisticData as (\n optimisticInput: TInput,\n currentData: unknown[],\n ) => TOutput | undefined\n )(input, data)\n : options.optimisticData;\n if (settled && optimistic !== null && typeof optimistic === 'object') {\n const optimisticId = (optimistic as { id?: unknown }).id;\n if (\n optimisticId !== undefined &&\n data.some(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n (item as { id?: unknown }).id === optimisticId,\n )\n ) {\n return data;\n }\n }\n return optimistic === undefined ? data : [optimistic, ...data];\n };\n }\n\n private settleMutationLayers<TInput, TOutput>(\n mutationId: string,\n input: TInput,\n result: TOutput,\n options: MutationOptions<TInput, TOutput> | undefined,\n states: SubscriptionState<unknown>[],\n ): void {\n for (const state of states) {\n const layer = state.optimisticLayers.get(mutationId);\n const updater = this.createOptimisticUpdater(input, options, result, true);\n if (!layer || !updater) continue;\n layer.updater = updater;\n layer.settledRevision = ++state.settlementRevision;\n state.loading = true;\n state.stale = true;\n this.recomputeData(state);\n this.notifySubscription(state, true);\n void this.requestResync(state).catch(() => undefined);\n }\n }\n\n private removeMutationLayers(mutationId: string, states: SubscriptionState<unknown>[]): void {\n for (const state of states) {\n if (!state.optimisticLayers.delete(mutationId)) continue;\n this.recomputeData(state);\n this.notifySubscription(state, true);\n }\n }\n\n private recomputeData(state: SubscriptionState<unknown>): void {\n let data = state.authoritativeData;\n for (const layer of state.optimisticLayers.values()) {\n data = layer.updater(data);\n }\n state.data = data;\n }\n\n private hasSettledLayers(state: SubscriptionState<unknown>): boolean {\n for (const layer of state.optimisticLayers.values()) {\n if (layer.settledRevision !== undefined) return true;\n }\n return false;\n }\n\n private async buildHeaders(): Promise<Record<string, string>> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n if (this.headersGetter) Object.assign(headers, await this.headersGetter());\n if (this.authGetter) {\n headers['Authorization'] = `Bearer ${await this.authGetter()}`;\n }\n return headers;\n }\n\n private markSubscriptionsStale(): void {\n for (const state of this.subscriptionsByKey.values()) {\n if (!state.active) continue;\n state.stale = true;\n state.loading = true;\n this.notifySubscription(state);\n }\n }\n\n private notifySubscription(\n state: SubscriptionState<unknown>,\n dataChanged = false,\n failure?: Error,\n ): void {\n if (!state.active) return;\n state.revision++;\n for (const listener of state.listeners) listener();\n if (dataChanged) {\n for (const observer of state.observers.values()) {\n observer.onData?.(state.data);\n }\n }\n if (failure) {\n for (const observer of state.observers.values()) {\n observer.onError?.(failure);\n }\n }\n }\n\n private notifyStateListeners(): void {\n for (const listener of this.stateListeners) {\n listener(this.connectionState);\n }\n }\n}\n\ntype ProcedureInput<T> = T extends { inputSchema?: { _output: infer TInput } } ? TInput : undefined;\n\ntype ProcedureOutput<T> = T extends {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- resolver parameter variance prevents `unknown`\n resolver: (...args: any[]) => infer TReturn;\n}\n ? Awaited<TReturn>\n : unknown;\n\ntype ExtractRouterDefinition<T> = T extends { definition: infer TDefinition } ? TDefinition : T;\n\ntype QueryProcedure<T> = [ProcedureInput<T>] extends [undefined]\n ? {\n useSubscription: (\n input?: undefined,\n options?: Omit<SubscriptionOptions<undefined, ProcedureOutput<T>>, 'input'>,\n ) => Subscription<ProcedureOutput<T>>;\n }\n : {\n useSubscription: (\n input: ProcedureInput<T>,\n options?: Omit<SubscriptionOptions<ProcedureInput<T>, ProcedureOutput<T>>, 'input'>,\n ) => Subscription<ProcedureOutput<T>>;\n };\n\ntype MutationProcedure<T> = [ProcedureInput<T>] extends [undefined]\n ? {\n mutate: (\n input?: undefined,\n options?: MutationOptions<undefined, ProcedureOutput<T>>,\n ) => Promise<ProcedureOutput<T>>;\n }\n : {\n mutate: (\n input: ProcedureInput<T>,\n options?: MutationOptions<ProcedureInput<T>, ProcedureOutput<T>>,\n ) => Promise<ProcedureOutput<T>>;\n };\n\ntype TypedReactiveClientTree<T> = T extends { type: 'query' }\n ? QueryProcedure<T>\n : T extends { type: 'mutation' }\n ? MutationProcedure<T>\n : { [K in keyof T]: TypedReactiveClientTree<T[K]> };\n\nexport type TypedReactiveClient<TRouter> = TypedReactiveClientTree<\n ExtractRouterDefinition<TRouter>\n> & {\n connect: () => Promise<void>;\n disconnect: () => void;\n};\n\nexport function createReactiveClient<TRouter>(\n config: ReactiveClientConfig,\n): TypedReactiveClient<TRouter> {\n const client = new ReactiveClient(config);\n return createTypedProxy(client, []) as TypedReactiveClient<TRouter>;\n}\n\nfunction createTypedProxy(client: ReactiveClient, path: string[]): unknown {\n return new Proxy(\n {},\n {\n get(_target, property) {\n if (property === 'connect') return () => client.connect();\n if (property === 'disconnect') return () => client.disconnect();\n if (typeof property !== 'string') return undefined;\n\n if (property === 'useSubscription') {\n return (input?: unknown, options?: SubscriptionOptions) =>\n client.subscribe(path.join('.'), { ...options, input });\n }\n if (property === 'mutate') {\n return (input: unknown, options?: MutationOptions<unknown, unknown>) =>\n client.call(path.join('.'), input, options);\n }\n return createTypedProxy(client, [...path, property]);\n },\n },\n );\n}\n","import {\n createContext,\n type ReactNode,\n useContext,\n useEffect,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react';\n\nimport { getQueryKey } from './canonical.js';\nimport { ReactiveClient } from './client.js';\nimport { debug, warn } from './log.js';\nimport type {\n ConnectionState,\n MutationOptions,\n ReactiveClientConfig,\n Subscription,\n SubscriptionOptions,\n} from './types.js';\n\nconst ReactiveClientContext = createContext<ReactiveClient | null>(null);\n\ninterface ManagedClient {\n client: ReactiveClient;\n owned: boolean;\n scope?: ClientScope;\n}\n\ninterface ClientScope {\n url: string;\n httpUrl: string;\n auth: string | undefined;\n dynamicAuth: boolean;\n headers: Record<string, string> | undefined;\n dynamicHeaders: boolean;\n}\n\nfunction createManagedClient(\n externalClient: ReactiveClient | undefined,\n config: ReactiveClientConfig | undefined,\n): ManagedClient | null {\n if (externalClient) return { client: externalClient, owned: false };\n if (!config?.url) return null;\n return {\n client: new ReactiveClient(config),\n owned: true,\n scope: getClientScope(config),\n };\n}\n\nfunction sameRecord(\n left: Record<string, string> | undefined,\n right: Record<string, string> | undefined,\n): boolean {\n if (left === right) return true;\n if (!left || !right) return false;\n const keys = Object.keys(left);\n return keys.length === Object.keys(right).length && keys.every((key) => left[key] === right[key]);\n}\n\nfunction getClientScope(config: ReactiveClientConfig): ClientScope {\n return {\n url: config.url,\n httpUrl: config.httpUrl ?? '/api/reactive',\n auth: typeof config.auth === 'string' ? config.auth : undefined,\n dynamicAuth: typeof config.auth === 'function',\n headers: typeof config.headers === 'object' ? { ...config.headers } : undefined,\n dynamicHeaders: typeof config.headers === 'function',\n };\n}\n\nfunction sameScope(left: ClientScope | undefined, right: ClientScope): boolean {\n if (!left) return false;\n return (\n left.url === right.url &&\n left.httpUrl === right.httpUrl &&\n left.auth === right.auth &&\n left.dynamicAuth === right.dynamicAuth &&\n left.dynamicHeaders === right.dynamicHeaders &&\n sameRecord(left.headers, right.headers)\n );\n}\n\nexport function ReactiveClientProvider({\n children,\n config,\n client: externalClient,\n}: {\n children: ReactNode;\n config?: ReactiveClientConfig;\n client?: ReactiveClient;\n}) {\n const [managed, setManaged] = useState<ManagedClient | null>(() =>\n createManagedClient(externalClient, config),\n );\n let renderedManaged = managed;\n\n if (externalClient) {\n if (managed?.owned || managed?.client !== externalClient) {\n renderedManaged = { client: externalClient, owned: false };\n }\n } else if (!config?.url) {\n renderedManaged = null;\n } else {\n const scope = getClientScope(config);\n if (!managed?.owned || !sameScope(managed.scope, scope)) {\n renderedManaged = {\n client: new ReactiveClient(config),\n owned: true,\n scope,\n };\n }\n }\n\n if (renderedManaged !== managed) setManaged(renderedManaged);\n\n useEffect(() => {\n if (renderedManaged?.owned && config) {\n renderedManaged.client.configure(config);\n }\n }, [config, renderedManaged]);\n\n useEffect(() => {\n if (!renderedManaged?.owned) return;\n void renderedManaged.client.connect().catch(() => undefined);\n return () => {\n renderedManaged.client.disconnect();\n };\n }, [renderedManaged]);\n\n useEffect(() => {\n if (\n typeof window === 'undefined' ||\n typeof document === 'undefined' ||\n !renderedManaged?.owned\n ) {\n return;\n }\n\n const attemptReconnect = () => {\n const state = renderedManaged.client.getConnectionState();\n if (state === 'connected' || state === 'connecting') return;\n if (state === 'reconnecting') {\n debug('[dynamodb-reactive] Tab active during reconnect; reconnecting now');\n renderedManaged.client.forceReconnect();\n } else {\n void renderedManaged.client.connect().catch(() => undefined);\n }\n };\n const handleVisibility = () => {\n if (document.visibilityState === 'visible') attemptReconnect();\n };\n\n document.addEventListener('visibilitychange', handleVisibility);\n window.addEventListener('focus', attemptReconnect);\n return () => {\n document.removeEventListener('visibilitychange', handleVisibility);\n window.removeEventListener('focus', attemptReconnect);\n };\n }, [renderedManaged]);\n\n useEffect(() => {\n if (!config?.url && !externalClient) {\n warn('[dynamodb-reactive] WebSocket URL not configured; real-time features disabled');\n }\n }, [config?.url, externalClient]);\n\n return (\n <ReactiveClientContext.Provider value={renderedManaged?.client ?? null}>\n {children}\n </ReactiveClientContext.Provider>\n );\n}\n\nexport function useReactiveClient(): ReactiveClient | null {\n return useContext(ReactiveClientContext);\n}\n\nexport function useConnectionState(): ConnectionState | 'disabled' {\n const client = useReactiveClient();\n return useSyncExternalStore(\n (listener) => (client ? client.onConnectionStateChange(listener) : () => undefined),\n () => (client ? client.getConnectionState() : 'disabled'),\n () => 'disabled' as const,\n );\n}\n\nexport interface UseSubscriptionResult<TData> {\n data: TData | undefined;\n loading: boolean;\n stale: boolean;\n error: Error | undefined;\n disabled: boolean;\n refetch: () => Promise<void>;\n setData: (updater: (data: TData) => TData) => void;\n}\n\nexport function useSubscription<TData>(\n path: string,\n options: SubscriptionOptions<unknown, TData> = {},\n): UseSubscriptionResult<TData> {\n const client = useReactiveClient();\n const queryKey = getQueryKey(path, options.input);\n const [active, setActive] = useState<{\n client: ReactiveClient;\n subscription: Subscription<TData>;\n } | null>(null);\n const onDataRef = useRef(options.onData);\n const onErrorRef = useRef(options.onError);\n onDataRef.current = options.onData;\n onErrorRef.current = options.onError;\n\n useEffect(() => {\n if (!client) {\n setActive(null);\n return;\n }\n\n const next = client.subscribe<TData>(path, {\n input: options.input,\n onData: (data) => onDataRef.current?.(data),\n onError: (failure) => onErrorRef.current?.(failure),\n });\n setActive({ client, subscription: next });\n return () => next.unsubscribe();\n // queryKey captures the canonical input without depending on object identity.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, path, queryKey]);\n\n const subscription =\n active?.client === client && active.subscription.key === queryKey ? active.subscription : null;\n\n useSyncExternalStore(\n (listener) =>\n client && subscription\n ? client.addSubscriptionListener(subscription.id, listener)\n : () => undefined,\n () => (client && subscription ? client.getSubscriptionRevision(subscription.id) : -1),\n () => -1,\n );\n\n const refetch = async () => {\n await subscription?.refetch();\n };\n const setData = (updater: (data: TData) => TData) => {\n if (client && subscription) {\n client.applyOptimisticUpdate(subscription.id, updater as (data: unknown) => unknown);\n }\n };\n\n return {\n data: subscription?.data,\n loading: client ? (subscription?.loading ?? true) : false,\n stale: client ? (subscription?.stale ?? true) : false,\n error: subscription?.error,\n disabled: !client,\n refetch,\n setData,\n };\n}\n\nexport function useMutation<TInput, TOutput>(\n path: string,\n options?: MutationOptions<TInput, TOutput>,\n): {\n mutate: (input: TInput) => Promise<TOutput>;\n data: TOutput | undefined;\n loading: boolean;\n error: Error | undefined;\n disabled: boolean;\n reset: () => void;\n} {\n const client = useReactiveClient();\n const [state, setState] = useState<{\n data: TOutput | undefined;\n loading: boolean;\n error: Error | undefined;\n }>({ data: undefined, loading: false, error: undefined });\n const pendingCountRef = useRef(0);\n const latestCallRef = useRef(0);\n\n const mutate = async (input: TInput): Promise<TOutput> => {\n if (!client) {\n throw new Error('WebSocket not configured; mutations are disabled');\n }\n const callId = ++latestCallRef.current;\n pendingCountRef.current++;\n setState((current) => ({ ...current, loading: true, error: undefined }));\n try {\n const result = await client.call<TInput, TOutput>(path, input, options);\n pendingCountRef.current--;\n setState((current) =>\n callId === latestCallRef.current\n ? {\n data: result,\n loading: pendingCountRef.current > 0,\n error: undefined,\n }\n : { ...current, loading: pendingCountRef.current > 0 },\n );\n return result;\n } catch (cause) {\n const failure = cause instanceof Error ? cause : new Error(String(cause));\n pendingCountRef.current--;\n setState((current) =>\n callId === latestCallRef.current\n ? {\n ...current,\n loading: pendingCountRef.current > 0,\n error: failure,\n }\n : { ...current, loading: pendingCountRef.current > 0 },\n );\n throw failure;\n }\n };\n const reset = () => {\n latestCallRef.current++;\n setState({\n data: undefined,\n loading: pendingCountRef.current > 0,\n error: undefined,\n });\n };\n\n return { mutate, ...state, disabled: !client, reset };\n}\n\ntype ProcedureInput<T> = T extends { inputSchema?: { _output: infer TInput } } ? TInput : undefined;\n\ntype ProcedureOutput<T> = T extends {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- resolver parameter variance prevents `unknown`\n resolver: (...args: any[]) => infer TReturn;\n}\n ? Awaited<TReturn>\n : unknown;\n\ntype QueryHooks<T> = [ProcedureInput<T>] extends [undefined]\n ? {\n useQuery: (\n input?: undefined,\n options?: Omit<SubscriptionOptions<undefined, ProcedureOutput<T>>, 'input'>,\n ) => UseSubscriptionResult<ProcedureOutput<T>>;\n }\n : {\n useQuery: (\n input: ProcedureInput<T>,\n options?: Omit<SubscriptionOptions<ProcedureInput<T>, ProcedureOutput<T>>, 'input'>,\n ) => UseSubscriptionResult<ProcedureOutput<T>>;\n };\n\ninterface MutationHookResult<TInput, TOutput> {\n mutate: [TInput] extends [undefined]\n ? (input?: undefined) => Promise<TOutput>\n : (input: TInput) => Promise<TOutput>;\n data: TOutput | undefined;\n loading: boolean;\n error: Error | undefined;\n disabled: boolean;\n reset: () => void;\n}\n\ntype MutationHooks<T> = {\n useMutation: (\n options?: MutationOptions<ProcedureInput<T>, ProcedureOutput<T>>,\n ) => MutationHookResult<ProcedureInput<T>, ProcedureOutput<T>>;\n};\n\ntype ExtractRouterDefinition<T> = T extends { definition: infer TDefinition } ? TDefinition : T;\n\ntype TypedClientTree<T> = T extends { type: 'query' }\n ? QueryHooks<T>\n : T extends { type: 'mutation' }\n ? MutationHooks<T>\n : { [K in keyof T]: TypedClientTree<T[K]> };\n\nexport type TypedClientProxy<TRouter> = TypedClientTree<ExtractRouterDefinition<TRouter>>;\n\nexport function useClient<TRouter>(): TypedClientProxy<TRouter> {\n function buildProxy(path: string[]): unknown {\n return new Proxy(\n {},\n {\n get(_target, property) {\n if (typeof property !== 'string') return undefined;\n if (property === 'useQuery') {\n return function useQueryHook(input?: unknown, queryOptions?: SubscriptionOptions) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useSubscription(path.join('.'), {\n ...queryOptions,\n input,\n });\n };\n }\n if (property === 'useMutation') {\n return function useMutationHook(mutationOptions?: MutationOptions<unknown, unknown>) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useMutation(path.join('.'), mutationOptions);\n };\n }\n return buildProxy([...path, property]);\n },\n },\n );\n }\n\n return buildProxy([]) as TypedClientProxy<TRouter>;\n}\n"]}
1
+ {"version":3,"sources":["../../client/src/canonical.ts","../../client/src/patcher.ts","../../client/src/log.ts","../../client/src/websocket.ts","../../client/src/client.ts","../../client/src/react.tsx"],"names":["key","document","jsonpatch","error","createContext","useState","useEffect","jsx","useContext","useSyncExternalStore","useRef"],"mappings":"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","file":"react.cjs","sourcesContent":["function canonicalize(\n value: unknown,\n seen: Set<object>,\n key: string,\n arrayItem = false,\n applyToJSON = true,\n): string | undefined {\n if (value === null) return 'null';\n\n switch (typeof value) {\n case 'string':\n case 'boolean':\n return JSON.stringify(value);\n case 'number':\n return Number.isFinite(value) ? JSON.stringify(value) : 'null';\n case 'undefined':\n return arrayItem ? 'null' : undefined;\n case 'object': {\n if (applyToJSON && 'toJSON' in value && typeof value.toJSON === 'function') {\n return canonicalize(value.toJSON(key), seen, key, arrayItem, false);\n }\n if (seen.has(value)) {\n throw new TypeError('Query input must not contain circular references');\n }\n\n seen.add(value);\n try {\n if (Array.isArray(value)) {\n const items: string[] = [];\n for (let index = 0; index < value.length; index++) {\n items.push(canonicalize(value[index], seen, String(index), true) ?? 'null');\n }\n return `[${items.join(',')}]`;\n }\n\n const object = value as Record<string, unknown>;\n const entries: string[] = [];\n for (const key of Object.keys(object).sort()) {\n const item = canonicalize(object[key], seen, key);\n if (item !== undefined) {\n entries.push(`${JSON.stringify(key)}:${item}`);\n }\n }\n return `{${entries.join(',')}}`;\n } finally {\n seen.delete(value);\n }\n }\n case 'bigint':\n case 'function':\n case 'symbol':\n default:\n throw new TypeError(`Unsupported query input value: ${typeof value}`);\n }\n}\n\n/** Return the stable identity used for subscription sharing and targeting. */\nexport function getQueryKey(path: string, input?: unknown): string {\n return `${JSON.stringify(path)}:${canonicalize(input, new Set(), '') ?? 'undefined'}`;\n}\n","import jsonpatch, { type Operation } from 'fast-json-patch';\n\nimport type { JsonPatch } from './protocol.js';\n\n/**\n * Apply JSON patches to a document\n */\nexport function applyPatches<T>(document: T, patches: JsonPatch[]): T {\n if (patches.length === 0) {\n return document;\n }\n\n const operations: Operation[] = patches.map((patch) => {\n const op: Operation = {\n op: patch.op,\n path: patch.path,\n } as Operation;\n\n if ('value' in patch && patch.value !== undefined) {\n (op as { value: unknown }).value = patch.value;\n }\n if ('from' in patch && patch.from !== undefined) {\n (op as { from: string }).from = patch.from;\n }\n\n return op;\n });\n\n try {\n const result = jsonpatch.applyPatch(\n structuredClone(document),\n operations,\n true, // Validate operations\n false, // Don't mutate the original\n );\n\n return result.newDocument as T;\n } catch (error) {\n throw new Error('Failed to apply patches', { cause: error });\n }\n}\n","/* eslint-disable no-console */\ntype DebugGlobal = typeof globalThis & {\n __DYNAMODB_REACTIVE_DEBUG__?: boolean;\n};\n\nexport function debug(...values: unknown[]): void {\n if ((globalThis as DebugGlobal).__DYNAMODB_REACTIVE_DEBUG__) {\n console.debug(...values);\n }\n}\n\nexport function warn(...values: unknown[]): void {\n console.warn(...values);\n}\n\nexport function error(...values: unknown[]): void {\n console.error(...values);\n}\n","import { error as logError } from './log.js';\nimport type { WebSocketEvent } from './protocol.js';\nimport type { ConnectionState, ReactiveClientConfig } from './types.js';\n\ninterface ConnectionWaitOptions {\n signal?: AbortSignal;\n timeoutMs?: number;\n}\n\ninterface ConnectionWaiter {\n resolve: (id: string) => void;\n reject: (error: Error) => void;\n cleanup: () => void;\n}\n\ntype ManagerConfig = Required<\n Pick<\n ReactiveClientConfig,\n | 'autoReconnect'\n | 'connectionTimeout'\n | 'handshakeTimeout'\n | 'heartbeatInterval'\n | 'heartbeatTimeout'\n | 'maxReconnectAttempts'\n | 'reconnectDelay'\n >\n> &\n ReactiveClientConfig;\n\nfunction withDefaults(config: ReactiveClientConfig): ManagerConfig {\n return {\n autoReconnect: true,\n connectionTimeout: 10000,\n handshakeTimeout: 10000,\n heartbeatInterval: 5 * 60 * 1000,\n heartbeatTimeout: 15_000,\n maxReconnectAttempts: 10,\n reconnectDelay: 1000,\n ...config,\n };\n}\n\n/** WebSocket manager with generation-fenced events and reconnection. */\nexport class WebSocketManager {\n private config: ManagerConfig;\n private ws: WebSocket | null = null;\n private state: ConnectionState = 'disconnected';\n private reconnectAttempts = 0;\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private handshakeTimer: ReturnType<typeof setTimeout> | null = null;\n private heartbeatTimer: ReturnType<typeof setInterval> | null = null;\n private pongTimer: ReturnType<typeof setTimeout> | null = null;\n private messageHandlers = new Set<(message: WebSocketEvent) => void>();\n private stateHandlers = new Set<(state: ConnectionState) => void>();\n private handshakeHandlers = new Set<(generation: number) => void>();\n private _connectionId: string | null = null;\n private connectionWaiters = new Set<ConnectionWaiter>();\n private socketGeneration = 0;\n private intentionalDisconnect = false;\n private lastConnectionError: Error | undefined;\n\n constructor(config: ReactiveClientConfig) {\n this.config = withDefaults(config);\n }\n\n /** Apply settings used by future requests/events without replacing the socket. */\n configure(config: ReactiveClientConfig): void {\n this.config = withDefaults(config);\n }\n\n get connectionId(): string | null {\n return this._connectionId;\n }\n\n get generation(): number {\n return this.socketGeneration;\n }\n\n waitForConnectionId(options: ConnectionWaitOptions = {}): Promise<string> {\n if (this._connectionId && this.state === 'connected') {\n return Promise.resolve(this._connectionId);\n }\n if (options.signal?.aborted) {\n return Promise.reject(new Error('Connection wait aborted'));\n }\n\n const timeoutMs = options.timeoutMs ?? this.config.connectionTimeout;\n return new Promise((resolve, reject) => {\n // oxlint-disable-next-line prefer-const -- cleanup can run before the timer is set.\n let timeout: ReturnType<typeof setTimeout> | undefined;\n const abort = () => finish(new Error('Connection wait aborted'));\n const waiter: ConnectionWaiter = {\n resolve,\n reject,\n cleanup: () => {\n if (timeout) clearTimeout(timeout);\n options.signal?.removeEventListener('abort', abort);\n },\n };\n const finish = (failure: Error) => {\n if (!this.connectionWaiters.delete(waiter)) return;\n waiter.cleanup();\n reject(failure);\n };\n\n this.connectionWaiters.add(waiter);\n options.signal?.addEventListener('abort', abort, { once: true });\n timeout = setTimeout(\n () =>\n finish(\n new Error(`Connection timed out after ${timeoutMs}ms`, {\n cause: this.lastConnectionError,\n }),\n ),\n timeoutMs,\n );\n });\n }\n\n getState(): ConnectionState {\n return this.state;\n }\n\n async connect(): Promise<void> {\n if (this.state === 'connected') return;\n if (this.state === 'connecting') {\n await this.waitForConnectionId();\n return;\n }\n\n if (this.state !== 'reconnecting') this.lastConnectionError = undefined;\n this.intentionalDisconnect = false;\n const generation = ++this.socketGeneration;\n this.setState('connecting');\n let socket: WebSocket | undefined;\n let retryable = true;\n\n try {\n if (!this.config.webSocketFactory && typeof globalThis.WebSocket !== 'function') {\n retryable = false;\n throw new Error(\n 'WebSocket is unavailable in this runtime. Enable the native WebSocket API ' +\n '(Node 20: --experimental-websocket), use Node 22 or newer, or configure webSocketFactory.',\n );\n }\n const url = await this.buildUrl();\n // oxlint-disable-next-line typescript/no-unnecessary-condition -- disconnect() can run while the URL is built.\n if (generation !== this.socketGeneration || this.intentionalDisconnect) {\n return;\n }\n\n let nextSocket: WebSocket;\n try {\n nextSocket = this.config.webSocketFactory\n ? this.config.webSocketFactory(url)\n : new globalThis.WebSocket(url);\n } catch (cause) {\n // Retrying cannot repair missing APIs, malformed URLs or a factory\n // that cannot construct a socket. Preserve its original error.\n retryable = false;\n throw cause;\n }\n socket = nextSocket;\n this.ws = nextSocket;\n this.startHandshakeTimer(nextSocket, generation);\n\n nextSocket.onopen = () => {\n if (!this.isCurrent(nextSocket, generation)) return;\n nextSocket.send(JSON.stringify({ type: 'init' }));\n };\n\n nextSocket.onclose = () => {\n if (!this.isCurrent(nextSocket, generation)) return;\n this.handleClose();\n };\n\n nextSocket.onerror = () => {\n if (!this.isCurrent(nextSocket, generation)) return;\n const failure = new Error('WebSocket error');\n this.lastConnectionError = failure;\n this.invokeLifecycleCallback('onError', this.config.onError, failure);\n };\n\n nextSocket.onmessage = (event) => {\n if (!this.isCurrent(nextSocket, generation)) return;\n this.receiveMessage(nextSocket, generation, event.data);\n };\n } catch (cause) {\n if (generation !== this.socketGeneration) return;\n const failure = cause instanceof Error ? cause : new Error(String(cause));\n this.lastConnectionError = failure;\n this.clearConnectionTimers();\n if (!retryable) {\n this.clearTimers();\n this.reconnectAttempts = 0;\n }\n if (socket && this.ws === socket) socket.close();\n this.ws = null;\n this._connectionId = null;\n this.setState('disconnected');\n this.invokeLifecycleCallback('onError', this.config.onError, failure);\n\n // oxlint-disable-next-line typescript/no-unnecessary-condition -- disconnect() sets it from outside this handler.\n if (retryable && this.config.autoReconnect && !this.intentionalDisconnect) {\n this.scheduleReconnect();\n await this.waitForConnectionId();\n return;\n }\n this.rejectWaiters(failure);\n throw failure;\n }\n\n await this.waitForConnectionId();\n }\n\n disconnect(): void {\n this.intentionalDisconnect = true;\n ++this.socketGeneration;\n this.clearTimers();\n\n const socket = this.ws;\n this.ws = null;\n socket?.close(1000, 'Client disconnect');\n this._connectionId = null;\n this.setState('disconnected');\n this.rejectWaiters(new Error('WebSocket disconnected'));\n }\n\n forceReconnect(): void {\n this.intentionalDisconnect = false;\n ++this.socketGeneration;\n this.clearTimers();\n\n const socket = this.ws;\n this.ws = null;\n socket?.close(1000, 'Force reconnect');\n this._connectionId = null;\n this.reconnectAttempts = 0;\n this.setState('disconnected');\n void this.connect().catch(() => undefined);\n }\n\n /** Sends an application frame on the open socket; false when not connected. */\n send(frame: Record<string, unknown>): boolean {\n const socket = this.ws;\n if (!socket || this.state !== 'connected' || socket.readyState !== socket.OPEN) return false;\n socket.send(JSON.stringify(frame));\n return true;\n }\n\n onMessage(handler: (message: WebSocketEvent) => void): () => void {\n this.messageHandlers.add(handler);\n return () => this.messageHandlers.delete(handler);\n }\n\n onStateChange(handler: (state: ConnectionState) => void): () => void {\n this.stateHandlers.add(handler);\n return () => this.stateHandlers.delete(handler);\n }\n\n onHandshake(handler: (generation: number) => void): () => void {\n this.handshakeHandlers.add(handler);\n return () => this.handshakeHandlers.delete(handler);\n }\n\n private async buildUrl(): Promise<string> {\n let url = this.config.url;\n if (!this.config.auth) return url;\n\n const token =\n typeof this.config.auth === 'function' ? await this.config.auth() : this.config.auth;\n const separator = url.includes('?') ? '&' : '?';\n url = `${url}${separator}token=${encodeURIComponent(token)}`;\n return url;\n }\n\n private receiveMessage(socket: WebSocket, generation: number, rawData: unknown): void {\n try {\n const message = JSON.parse(String(rawData)) as WebSocketEvent;\n if (message.type === 'connected') {\n if (this._connectionId) return;\n this._connectionId = message.connectionId;\n socket.send(JSON.stringify({ type: 'ping' }));\n return;\n }\n\n if (message.type === 'pong') {\n this.clearPongTimer();\n if (!this._connectionId || this.state === 'connected') return;\n this.clearHandshakeTimer();\n this.lastConnectionError = undefined;\n this.reconnectAttempts = 0;\n this.setState('connected');\n this.startHeartbeat(socket, generation);\n this.invokeLifecycleCallback('onConnect', this.config.onConnect);\n this.resolveWaiters(this._connectionId);\n for (const handler of this.handshakeHandlers) handler(generation);\n return;\n }\n\n for (const handler of this.messageHandlers) handler(message);\n } catch (cause) {\n logError('Failed to parse WebSocket message:', cause);\n }\n }\n\n private startHandshakeTimer(socket: WebSocket, generation: number): void {\n this.clearHandshakeTimer();\n this.handshakeTimer = setTimeout(() => {\n if (!this.isCurrent(socket, generation) || this.state === 'connected') {\n return;\n }\n const failure = new Error('WebSocket handshake timed out');\n this.lastConnectionError = failure;\n this.invokeLifecycleCallback('onError', this.config.onError, failure);\n socket.close(4000, 'Handshake timeout');\n }, this.config.handshakeTimeout);\n }\n\n private handleClose(): void {\n this.clearConnectionTimers();\n this.ws = null;\n this._connectionId = null;\n this.setState('disconnected');\n this.invokeLifecycleCallback('onDisconnect', this.config.onDisconnect);\n\n if (this.config.autoReconnect && !this.intentionalDisconnect) {\n this.scheduleReconnect();\n } else {\n this.rejectWaiters(new Error('WebSocket disconnected'));\n }\n }\n\n private startHeartbeat(socket: WebSocket, generation: number): void {\n this.clearHeartbeatTimer();\n this.heartbeatTimer = setInterval(() => {\n if (\n !this.isCurrent(socket, generation) ||\n this.state !== 'connected' ||\n socket.readyState !== socket.OPEN\n ) {\n return;\n }\n socket.send(JSON.stringify({ type: 'ping' }));\n this.pongTimer ??= setTimeout(() => {\n this.pongTimer = null;\n if (!this.isCurrent(socket, generation)) return;\n const failure = new Error('WebSocket heartbeat timed out');\n this.lastConnectionError = failure;\n this.invokeLifecycleCallback('onError', this.config.onError, failure);\n // A dead peer can hold close() in CLOSING for minutes, so drop the socket now\n // instead of waiting for its close event.\n socket.onclose = null;\n socket.close(4001, 'Heartbeat timeout');\n this.handleClose();\n }, this.config.heartbeatTimeout);\n }, this.config.heartbeatInterval);\n }\n\n private isCurrent(socket: WebSocket, generation: number): boolean {\n return this.ws === socket && this.socketGeneration === generation;\n }\n\n private setState(state: ConnectionState): void {\n if (this.state === state) return;\n this.state = state;\n for (const handler of this.stateHandlers) handler(state);\n }\n\n private scheduleReconnect(): void {\n if (this.reconnectTimer || this.intentionalDisconnect) return;\n if (this.reconnectAttempts >= this.config.maxReconnectAttempts) {\n const failure = new Error('Max reconnection attempts reached', {\n cause: this.lastConnectionError,\n });\n logError(failure.message);\n this.setState('disconnected');\n this.rejectWaiters(failure);\n this.invokeLifecycleCallback('onError', this.config.onError, failure);\n return;\n }\n\n this.setState('reconnecting');\n this.reconnectAttempts++;\n const delay =\n Math.min(this.config.reconnectDelay * 2 ** (this.reconnectAttempts - 1), 30000) *\n (0.5 + Math.random() * 0.5);\n\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = null;\n void this.connect().catch(() => undefined);\n }, delay);\n }\n\n private resolveWaiters(connectionId: string): void {\n const waiters = [...this.connectionWaiters];\n this.connectionWaiters.clear();\n for (const waiter of waiters) {\n waiter.cleanup();\n waiter.resolve(connectionId);\n }\n }\n\n private invokeLifecycleCallback<TArguments extends unknown[]>(\n name: 'onConnect' | 'onDisconnect' | 'onError',\n callback: ((...args: TArguments) => void) | undefined,\n ...args: TArguments\n ): void {\n if (!callback) return;\n try {\n callback(...args);\n } catch (cause) {\n try {\n logError(`[dynamodb-reactive] ${name} callback failed:`, cause);\n } catch {\n // Reporting must not let user callbacks re-enter socket lifecycle paths.\n }\n }\n }\n\n private rejectWaiters(failure: Error): void {\n const waiters = [...this.connectionWaiters];\n this.connectionWaiters.clear();\n for (const waiter of waiters) {\n waiter.cleanup();\n waiter.reject(failure);\n }\n }\n\n private clearHandshakeTimer(): void {\n if (!this.handshakeTimer) return;\n clearTimeout(this.handshakeTimer);\n this.handshakeTimer = null;\n }\n\n private clearHeartbeatTimer(): void {\n if (!this.heartbeatTimer) return;\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = null;\n }\n\n private clearPongTimer(): void {\n if (!this.pongTimer) return;\n clearTimeout(this.pongTimer);\n this.pongTimer = null;\n }\n\n private clearConnectionTimers(): void {\n this.clearHandshakeTimer();\n this.clearHeartbeatTimer();\n this.clearPongTimer();\n }\n\n private clearTimers(): void {\n this.clearConnectionTimers();\n if (!this.reconnectTimer) return;\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n}\n","import { getQueryKey } from './canonical.js';\nimport { applyPatches } from './patcher.js';\nimport type { ErrorResponse, PatchEvent, SnapshotResponse, WebSocketEvent } from './protocol.js';\nimport type {\n ConnectionState,\n MutationOptions,\n ReactiveClientConfig,\n Subscription,\n SubscriptionOptions,\n} from './types.js';\nimport { WebSocketManager } from './websocket.js';\n\nconst DEFAULT_HTTP_URL = '/api/reactive';\n\nfunction generateId(): string {\n return `${Date.now()}-${Math.random().toString(36).slice(2, 11)}`;\n}\n\ntype OptimisticUpdater = (data: unknown) => unknown;\n\ninterface OptimisticLayer {\n updater: OptimisticUpdater;\n settledRevision?: number;\n}\n\ninterface SubscriptionObserver {\n onData?: (data: unknown) => void;\n onError?: (error: Error) => void;\n}\n\ninterface SubscriptionState<TData> {\n id: string;\n key: string;\n path: string;\n input: unknown;\n authoritativeData: unknown;\n data: TData | undefined;\n loading: boolean;\n stale: boolean;\n error: Error | undefined;\n listeners: Set<() => void>;\n observers: Map<string, SubscriptionObserver>;\n active: boolean;\n hasRegistered: boolean;\n generation: number;\n registrationId: string | undefined;\n registrationConnectionId: string | undefined;\n registrationSocketGeneration: number | undefined;\n registrationPromise: Promise<void> | undefined;\n version: number | undefined;\n patchBuffer: Map<string, PatchEvent>;\n appliedMessageIds: Set<string>;\n resyncPromise: Promise<void> | undefined;\n resyncGeneration: number | undefined;\n optimisticLayers: Map<string, OptimisticLayer>;\n settlementRevision: number;\n registrationSettlementRevision: number;\n revision: number;\n}\n\ntype HttpResult = SnapshotResponse | ErrorResponse;\n\n/** Reactive client for shared, versioned subscriptions. */\nexport class ReactiveClient {\n private wsManager: WebSocketManager;\n private httpUrl: string;\n private authGetter?: () => string | Promise<string>;\n private headersGetter?: () => Record<string, string> | Promise<Record<string, string>>;\n private subscriptionsById = new Map<string, SubscriptionState<unknown>>();\n private subscriptionsByKey = new Map<string, SubscriptionState<unknown>>();\n private connectionState: ConnectionState = 'disconnected';\n private stateListeners = new Set<(state: ConnectionState) => void>();\n\n constructor(config: ReactiveClientConfig) {\n this.wsManager = new WebSocketManager(config);\n this.httpUrl = config.httpUrl ?? DEFAULT_HTTP_URL;\n this.setAuth(config.auth);\n this.setInitialHeaders(config.headers);\n\n this.wsManager.onMessage((message) => this.handleMessage(message));\n this.wsManager.onStateChange((state) => {\n this.connectionState = state;\n this.notifyStateListeners();\n if (state === 'disconnected' || state === 'reconnecting') {\n this.markSubscriptionsStale();\n }\n });\n this.wsManager.onHandshake((socketGeneration) => {\n this.registerActiveSubscriptions(socketGeneration);\n });\n }\n\n /** Apply live configuration without replacing subscription caches or the socket. */\n configure(config: ReactiveClientConfig): void {\n this.httpUrl = config.httpUrl ?? DEFAULT_HTTP_URL;\n this.authGetter = this.toAuthGetter(config.auth);\n this.headersGetter = this.toHeadersGetter(config.headers);\n this.wsManager.configure(config);\n }\n\n async connect(): Promise<void> {\n await this.wsManager.connect();\n }\n\n disconnect(): void {\n this.wsManager.disconnect();\n }\n\n forceReconnect(): void {\n this.wsManager.forceReconnect();\n }\n\n getConnectionState(): ConnectionState {\n return this.connectionState;\n }\n\n /**\n * Sends an application frame over the socket, such as a presence update a\n * hub's `onMessage` handles. Returns false while disconnected; resend from\n * `onConnectionStateChange` once connected again.\n */\n send(frame: Record<string, unknown> & { type: string }): boolean {\n return this.wsManager.send(frame);\n }\n\n onConnectionStateChange(listener: (state: ConnectionState) => void): () => void {\n this.stateListeners.add(listener);\n return () => this.stateListeners.delete(listener);\n }\n\n subscribe<TData, TInput = unknown>(\n path: string,\n options: SubscriptionOptions<TInput, TData> = {},\n ): Subscription<TData> {\n const key = getQueryKey(path, options.input);\n let shared = this.subscriptionsByKey.get(key);\n\n if (!shared) {\n shared = {\n id: generateId(),\n key,\n path,\n input: options.input,\n authoritativeData: undefined,\n data: undefined,\n loading: true,\n stale: true,\n error: undefined,\n listeners: new Set(),\n observers: new Map(),\n active: true,\n hasRegistered: false,\n generation: 0,\n registrationId: undefined,\n registrationConnectionId: undefined,\n registrationSocketGeneration: undefined,\n registrationPromise: undefined,\n version: undefined,\n patchBuffer: new Map(),\n appliedMessageIds: new Set(),\n resyncPromise: undefined,\n resyncGeneration: undefined,\n optimisticLayers: new Map(),\n settlementRevision: 0,\n registrationSettlementRevision: 0,\n revision: 0,\n };\n this.subscriptionsByKey.set(key, shared);\n this.subscriptionsById.set(shared.id, shared);\n if (this.connectionState === 'connected') {\n void this.ensureRegistered(shared, this.wsManager.generation).catch(() => undefined);\n }\n }\n\n const leaseId = generateId();\n shared.observers.set(leaseId, {\n onData: options.onData ? (data) => options.onData?.(data as TData) : undefined,\n onError: options.onError,\n });\n if (\n this.connectionState === 'connected' &&\n (!shared.hasRegistered || shared.stale) &&\n !shared.registrationPromise\n ) {\n void this.ensureRegistered(shared, this.wsManager.generation).catch(() => undefined);\n }\n const state = shared as SubscriptionState<TData>;\n let released = false;\n\n return {\n id: state.id,\n key: state.key,\n get data() {\n return state.data;\n },\n get loading() {\n return state.loading;\n },\n get stale() {\n return state.stale;\n },\n get error() {\n return state.error;\n },\n unsubscribe: () => {\n if (released) return;\n released = true;\n this.releaseSubscription(state, leaseId);\n },\n refetch: () => this.refetch(state),\n };\n }\n\n async call<TInput, TOutput>(\n path: string,\n input: TInput,\n options?: MutationOptions<TInput, TOutput>,\n ): Promise<TOutput> {\n const mutationId = generateId();\n const layers: SubscriptionState<unknown>[] = [];\n\n try {\n this.createMutationLayers(mutationId, input, options, layers);\n const connectionId = await this.wsManager.waitForConnectionId();\n const headers = await this.buildHeaders();\n const response = await fetch(this.httpUrl, {\n method: 'POST',\n headers,\n body: JSON.stringify({ type: 'call', connectionId, path, input }),\n });\n if (!response.ok) {\n throw new Error(`Call failed: ${response.status} ${response.statusText}`);\n }\n\n const result = (await response.json()) as {\n type: string;\n message?: string;\n data?: unknown;\n };\n if (result.type === 'error') {\n throw new Error(result.message ?? 'Unknown error');\n }\n\n const data = result.data as TOutput;\n this.settleMutationLayers(mutationId, input, data, options, layers);\n return data;\n } catch (cause) {\n this.removeMutationLayers(mutationId, layers);\n throw cause;\n }\n }\n\n addSubscriptionListener(id: string, listener: () => void): () => void {\n const state = this.subscriptionsById.get(id);\n if (!state) return () => undefined;\n state.listeners.add(listener);\n return () => state.listeners.delete(listener);\n }\n\n getSubscriptionRevision(id: string): number {\n return this.subscriptionsById.get(id)?.revision ?? -1;\n }\n\n applyOptimisticUpdate(subscriptionId: string, updater: (data: unknown) => unknown): void {\n const state = this.subscriptionsById.get(subscriptionId);\n if (!state || state.data === undefined) return;\n state.optimisticLayers.set(`local-${generateId()}`, {\n updater,\n });\n this.recomputeData(state);\n this.notifySubscription(state, true);\n }\n\n private setAuth(auth: ReactiveClientConfig['auth']): void {\n this.authGetter = this.toAuthGetter(auth);\n }\n\n private setInitialHeaders(headers: ReactiveClientConfig['headers']): void {\n this.headersGetter = this.toHeadersGetter(headers);\n }\n\n private toAuthGetter(\n auth: ReactiveClientConfig['auth'],\n ): (() => string | Promise<string>) | undefined {\n if (!auth) return undefined;\n return typeof auth === 'function' ? auth : () => auth;\n }\n\n private toHeadersGetter(\n headers: ReactiveClientConfig['headers'],\n ): (() => Record<string, string> | Promise<Record<string, string>>) | undefined {\n if (!headers) return undefined;\n return typeof headers === 'function' ? headers : () => headers;\n }\n\n private registerActiveSubscriptions(socketGeneration: number): void {\n for (const state of this.subscriptionsByKey.values()) {\n if (state.active) {\n void this.ensureRegistered(state, socketGeneration).catch(() => undefined);\n }\n }\n }\n\n private ensureRegistered(\n state: SubscriptionState<unknown>,\n socketGeneration: number,\n force = false,\n ): Promise<void> {\n if (\n !force &&\n state.registrationSocketGeneration === socketGeneration &&\n state.registrationPromise\n ) {\n return state.registrationPromise;\n }\n\n state.generation++;\n state.registrationSettlementRevision = state.settlementRevision;\n state.registrationId = generateId();\n state.registrationSocketGeneration = socketGeneration;\n state.registrationConnectionId = undefined;\n state.registrationPromise = undefined;\n state.resyncPromise = undefined;\n state.resyncGeneration = undefined;\n state.hasRegistered = false;\n state.version = undefined;\n state.patchBuffer.clear();\n state.appliedMessageIds.clear();\n state.loading = true;\n state.stale = true;\n state.error = undefined;\n this.notifySubscription(state);\n\n const generation = state.generation;\n const registrationId = state.registrationId;\n const isCurrent = () =>\n state.active &&\n state.generation === generation &&\n state.registrationId === registrationId &&\n state.registrationSocketGeneration === socketGeneration &&\n this.wsManager.generation === socketGeneration;\n let requestIssued = false;\n let registrationConnectionId: string | undefined;\n // A synchronous throw before the first await runs the finally block before\n // this assignment completes, so `request` must exist (undefined) already.\n // oxlint-disable-next-line prefer-const -- Read before assignment on a synchronous throw.\n let request!: Promise<void>;\n request = (async () => {\n try {\n const connectionId = await this.wsManager.waitForConnectionId();\n if (!isCurrent()) return;\n registrationConnectionId = connectionId;\n state.registrationConnectionId = connectionId;\n const headers = await this.buildHeaders();\n if (!isCurrent()) return;\n requestIssued = true;\n const response = await fetch(this.httpUrl, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n type: 'subscribe',\n connectionId,\n subscriptionId: state.id,\n generation,\n registrationId,\n path: state.path,\n input: state.input,\n }),\n });\n if (!response.ok) {\n throw new Error(`Subscribe failed: ${response.status} ${response.statusText}`);\n }\n\n const result = (await response.json()) as HttpResult;\n if (result.type === 'error') {\n throw new Error(result.message);\n }\n if (!isCurrent()) return;\n this.handleSnapshot(result);\n if (isCurrent()) state.hasRegistered = true;\n } catch (cause) {\n if (isCurrent()) {\n const failure = cause instanceof Error ? cause : new Error(String(cause));\n state.error = failure;\n state.loading = this.hasSettledLayers(state);\n this.notifySubscription(state, false, failure);\n }\n throw cause;\n } finally {\n if ((!state.active || !isCurrent()) && requestIssued) {\n void this.sendUnsubscribe(registrationConnectionId, state.id, generation, registrationId);\n }\n if (state.registrationPromise === request) {\n state.registrationPromise = undefined;\n }\n }\n })();\n state.registrationPromise = request;\n return request;\n }\n\n private releaseSubscription(state: SubscriptionState<unknown>, leaseId: string): void {\n state.observers.delete(leaseId);\n if (state.observers.size > 0) return;\n\n state.active = false;\n this.subscriptionsById.delete(state.id);\n this.subscriptionsByKey.delete(state.key);\n if (state.registrationId && state.registrationConnectionId && state.hasRegistered) {\n void this.sendUnsubscribe(\n state.registrationConnectionId,\n state.id,\n state.generation,\n state.registrationId,\n );\n }\n }\n\n private async sendUnsubscribe(\n connectionId: string | undefined,\n subscriptionId: string,\n generation: number,\n registrationId: string,\n ): Promise<void> {\n if (!connectionId) return;\n try {\n const headers = await this.buildHeaders();\n await fetch(this.httpUrl, {\n method: 'POST',\n headers,\n body: JSON.stringify({\n type: 'unsubscribe',\n connectionId,\n subscriptionId,\n generation,\n registrationId,\n }),\n });\n } catch {\n // Connection cleanup is the fallback when an unsubscribe cannot be sent.\n }\n }\n\n private async refetch(state: SubscriptionState<unknown>): Promise<void> {\n if (!state.active) return;\n if (!state.registrationId) {\n await this.ensureRegistered(state, this.wsManager.generation);\n return;\n }\n await this.requestResync(state);\n }\n\n private handleMessage(message: WebSocketEvent): void {\n switch (message.type) {\n case 'patch':\n this.handlePatch(message);\n break;\n case 'resync': {\n const state = this.subscriptionsById.get(message.subscriptionId);\n if (state?.generation === message.generation) {\n void this.requestResync(state).catch(() => undefined);\n }\n break;\n }\n case 'connected':\n case 'pong':\n break;\n }\n }\n\n private handleSnapshot(message: SnapshotResponse): void {\n const state = this.subscriptionsById.get(message.subscriptionId);\n if (!state || message.generation !== state.generation) return;\n if (state.version !== undefined && message.version <= state.version) return;\n\n state.authoritativeData = message.data;\n state.version = message.version;\n state.error = undefined;\n\n const coveredRevision = state.registrationSettlementRevision;\n for (const [layerId, layer] of state.optimisticLayers) {\n if (layer.settledRevision !== undefined && layer.settledRevision <= coveredRevision) {\n state.optimisticLayers.delete(layerId);\n }\n }\n const awaitingReconciliation = this.hasSettledLayers(state);\n state.loading = awaitingReconciliation;\n state.stale = awaitingReconciliation;\n this.recomputeData(state);\n this.discardStalePatches(state);\n this.notifySubscription(state, true);\n this.drainPatchBuffer(state);\n }\n\n private handlePatch(message: PatchEvent): void {\n const state = this.subscriptionsById.get(message.subscriptionId);\n if (!state || message.generation !== state.generation) return;\n if (\n state.appliedMessageIds.has(message.messageId) ||\n state.patchBuffer.has(message.messageId)\n ) {\n return;\n }\n if (state.version !== undefined && message.toVersion <= state.version) {\n state.appliedMessageIds.add(message.messageId);\n return;\n }\n\n state.patchBuffer.set(message.messageId, message);\n if (state.version === undefined) return;\n this.drainPatchBuffer(state);\n }\n\n private drainPatchBuffer(state: SubscriptionState<unknown>): void {\n if (state.version === undefined || state.authoritativeData === undefined) {\n return;\n }\n\n this.discardStalePatches(state);\n for (;;) {\n const next = [...state.patchBuffer.values()]\n .filter((patch) => patch.fromVersion === state.version)\n .sort((left, right) => left.toVersion - right.toVersion)\n .at(0);\n if (!next) break;\n\n state.patchBuffer.delete(next.messageId);\n try {\n state.authoritativeData = applyPatches(state.authoritativeData, next.patches);\n state.version = next.toVersion;\n state.appliedMessageIds.add(next.messageId);\n const awaitingReconciliation = this.hasSettledLayers(state);\n state.loading = awaitingReconciliation;\n state.stale = awaitingReconciliation;\n state.error = undefined;\n this.recomputeData(state);\n this.notifySubscription(state, true);\n this.discardStalePatches(state);\n } catch {\n void this.requestResync(state).catch(() => undefined);\n return;\n }\n }\n\n if (\n [...state.patchBuffer.values()].some(\n (patch) => patch.toVersion > state.version! && patch.fromVersion !== state.version,\n )\n ) {\n void this.requestResync(state).catch(() => undefined);\n }\n }\n\n private discardStalePatches(state: SubscriptionState<unknown>): void {\n if (state.version === undefined) return;\n for (const [messageId, patch] of state.patchBuffer) {\n if (patch.toVersion <= state.version) {\n state.patchBuffer.delete(messageId);\n state.appliedMessageIds.add(messageId);\n }\n }\n }\n\n private requestResync(state: SubscriptionState<unknown>): Promise<void> {\n if (state.resyncPromise && state.resyncGeneration === state.generation) {\n return state.resyncPromise;\n }\n if (!state.active || !state.registrationId) return Promise.resolve();\n\n state.stale = true;\n state.loading = true;\n this.notifySubscription(state);\n const request: Promise<void> = this.ensureRegistered(state, this.wsManager.generation, true)\n .finally(() => {\n if (state.resyncPromise === request) {\n state.resyncPromise = undefined;\n state.resyncGeneration = undefined;\n }\n })\n .then(() => {\n if (state.active && this.hasSettledLayers(state)) {\n return this.requestResync(state);\n }\n return undefined;\n });\n state.resyncPromise = request;\n state.resyncGeneration = state.generation;\n return request;\n }\n\n private createMutationLayers<TInput, TOutput>(\n mutationId: string,\n input: TInput,\n options: MutationOptions<TInput, TOutput> | undefined,\n layered: SubscriptionState<unknown>[],\n ): void {\n const targets = this.findMutationTargets(options);\n for (const state of targets) {\n const updater = this.createOptimisticUpdater(input, options);\n if (!updater || state.authoritativeData === undefined) continue;\n state.optimisticLayers.set(mutationId, {\n updater,\n });\n layered.push(state);\n this.recomputeData(state);\n this.notifySubscription(state, true);\n }\n }\n\n private findMutationTargets<TInput, TOutput>(\n options: MutationOptions<TInput, TOutput> | undefined,\n ): SubscriptionState<unknown>[] {\n if (options?.queryKey) {\n const exact = this.subscriptionsByKey.get(options.queryKey);\n return exact ? [exact] : [];\n }\n if (typeof options?.invalidates === 'object') {\n const exact = this.subscriptionsByKey.get(\n getQueryKey(options.invalidates.path, options.invalidates.input),\n );\n return exact ? [exact] : [];\n }\n if (typeof options?.invalidates === 'string') {\n return [...this.subscriptionsByKey.values()].filter(\n (state) => state.path === options.invalidates,\n );\n }\n return [];\n }\n\n private createOptimisticUpdater<TInput, TOutput>(\n input: TInput,\n options: MutationOptions<TInput, TOutput> | undefined,\n result?: TOutput,\n settled = false,\n ): OptimisticUpdater | undefined {\n const update = options?.optimisticUpdate;\n if (typeof update === 'function') {\n return (data) => (Array.isArray(data) ? update(data, input, result) : data);\n }\n\n const itemId =\n typeof input === 'object' && input !== null ? (input as { id?: unknown }).id : undefined;\n if (update === 'remove' && itemId !== undefined) {\n return (data) =>\n Array.isArray(data)\n ? data.filter((item) => (item as { id?: unknown }).id !== itemId)\n : data;\n }\n if (update !== 'merge') return undefined;\n\n if (itemId !== undefined) {\n const resultFields = settled && typeof result === 'object' && result !== null ? result : {};\n return (data) => {\n if (!Array.isArray(data)) return data;\n return data.map((item) =>\n (item as { id?: unknown }).id === itemId ? { ...item, ...input, ...resultFields } : item,\n );\n };\n }\n if (options?.optimisticData === undefined) return undefined;\n\n return (data) => {\n if (!Array.isArray(data)) return data;\n const optimistic = settled\n ? // oxlint-disable-next-line typescript/prefer-nullish-coalescing -- null is a valid mutation result.\n result === undefined\n ? typeof options.optimisticData === 'function'\n ? (\n options.optimisticData as (\n optimisticInput: TInput,\n currentData: unknown[],\n ) => TOutput | undefined\n )(input, data)\n : options.optimisticData\n : result\n : typeof options.optimisticData === 'function'\n ? (\n options.optimisticData as (\n optimisticInput: TInput,\n currentData: unknown[],\n ) => TOutput | undefined\n )(input, data)\n : options.optimisticData;\n if (settled && optimistic !== null && typeof optimistic === 'object') {\n const optimisticId = (optimistic as { id?: unknown }).id;\n if (\n optimisticId !== undefined &&\n data.some(\n (item) =>\n typeof item === 'object' &&\n item !== null &&\n (item as { id?: unknown }).id === optimisticId,\n )\n ) {\n return data;\n }\n }\n return optimistic === undefined ? data : [optimistic, ...data];\n };\n }\n\n private settleMutationLayers<TInput, TOutput>(\n mutationId: string,\n input: TInput,\n result: TOutput,\n options: MutationOptions<TInput, TOutput> | undefined,\n states: SubscriptionState<unknown>[],\n ): void {\n for (const state of states) {\n const layer = state.optimisticLayers.get(mutationId);\n const updater = this.createOptimisticUpdater(input, options, result, true);\n if (!layer || !updater) continue;\n layer.updater = updater;\n layer.settledRevision = ++state.settlementRevision;\n state.loading = true;\n state.stale = true;\n this.recomputeData(state);\n this.notifySubscription(state, true);\n void this.requestResync(state).catch(() => undefined);\n }\n }\n\n private removeMutationLayers(mutationId: string, states: SubscriptionState<unknown>[]): void {\n for (const state of states) {\n if (!state.optimisticLayers.delete(mutationId)) continue;\n this.recomputeData(state);\n this.notifySubscription(state, true);\n }\n }\n\n private recomputeData(state: SubscriptionState<unknown>): void {\n let data = state.authoritativeData;\n for (const layer of state.optimisticLayers.values()) {\n data = layer.updater(data);\n }\n state.data = data;\n }\n\n private hasSettledLayers(state: SubscriptionState<unknown>): boolean {\n for (const layer of state.optimisticLayers.values()) {\n if (layer.settledRevision !== undefined) return true;\n }\n return false;\n }\n\n private async buildHeaders(): Promise<Record<string, string>> {\n const headers: Record<string, string> = {\n 'Content-Type': 'application/json',\n };\n if (this.headersGetter) Object.assign(headers, await this.headersGetter());\n if (this.authGetter) {\n headers['Authorization'] = `Bearer ${await this.authGetter()}`;\n }\n return headers;\n }\n\n private markSubscriptionsStale(): void {\n for (const state of this.subscriptionsByKey.values()) {\n if (!state.active) continue;\n state.stale = true;\n state.loading = true;\n this.notifySubscription(state);\n }\n }\n\n private notifySubscription(\n state: SubscriptionState<unknown>,\n dataChanged = false,\n failure?: Error,\n ): void {\n if (!state.active) return;\n state.revision++;\n for (const listener of state.listeners) listener();\n if (dataChanged) {\n for (const observer of state.observers.values()) {\n observer.onData?.(state.data);\n }\n }\n if (failure) {\n for (const observer of state.observers.values()) {\n observer.onError?.(failure);\n }\n }\n }\n\n private notifyStateListeners(): void {\n for (const listener of this.stateListeners) {\n listener(this.connectionState);\n }\n }\n}\n\ntype ProcedureInput<T> = T extends { inputSchema?: { _output: infer TInput } } ? TInput : undefined;\n\ntype ProcedureOutput<T> = T extends {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- resolver parameter variance prevents `unknown`\n resolver: (...args: any[]) => infer TReturn;\n}\n ? Awaited<TReturn>\n : unknown;\n\ntype ExtractRouterDefinition<T> = T extends { definition: infer TDefinition } ? TDefinition : T;\n\ntype QueryProcedure<T> = [ProcedureInput<T>] extends [undefined]\n ? {\n useSubscription: (\n input?: undefined,\n options?: Omit<SubscriptionOptions<undefined, ProcedureOutput<T>>, 'input'>,\n ) => Subscription<ProcedureOutput<T>>;\n }\n : {\n useSubscription: (\n input: ProcedureInput<T>,\n options?: Omit<SubscriptionOptions<ProcedureInput<T>, ProcedureOutput<T>>, 'input'>,\n ) => Subscription<ProcedureOutput<T>>;\n };\n\ntype MutationProcedure<T> = [ProcedureInput<T>] extends [undefined]\n ? {\n mutate: (\n input?: undefined,\n options?: MutationOptions<undefined, ProcedureOutput<T>>,\n ) => Promise<ProcedureOutput<T>>;\n }\n : {\n mutate: (\n input: ProcedureInput<T>,\n options?: MutationOptions<ProcedureInput<T>, ProcedureOutput<T>>,\n ) => Promise<ProcedureOutput<T>>;\n };\n\ntype TypedReactiveClientTree<T> = T extends { type: 'query' }\n ? QueryProcedure<T>\n : T extends { type: 'mutation' }\n ? MutationProcedure<T>\n : { [K in keyof T]: TypedReactiveClientTree<T[K]> };\n\nexport type TypedReactiveClient<TRouter> = TypedReactiveClientTree<\n ExtractRouterDefinition<TRouter>\n> & {\n connect: () => Promise<void>;\n disconnect: () => void;\n};\n\nexport function createReactiveClient<TRouter>(\n config: ReactiveClientConfig,\n): TypedReactiveClient<TRouter> {\n const client = new ReactiveClient(config);\n return createTypedProxy(client, []) as TypedReactiveClient<TRouter>;\n}\n\nfunction createTypedProxy(client: ReactiveClient, path: string[]): unknown {\n return new Proxy(\n {},\n {\n get(_target, property) {\n if (property === 'connect') return () => client.connect();\n if (property === 'disconnect') return () => client.disconnect();\n if (typeof property !== 'string') return undefined;\n\n if (property === 'useSubscription') {\n return (input?: unknown, options?: SubscriptionOptions) =>\n client.subscribe(path.join('.'), { ...options, input });\n }\n if (property === 'mutate') {\n return (input: unknown, options?: MutationOptions<unknown, unknown>) =>\n client.call(path.join('.'), input, options);\n }\n return createTypedProxy(client, [...path, property]);\n },\n },\n );\n}\n","import {\n createContext,\n type ReactNode,\n useContext,\n useEffect,\n useRef,\n useState,\n useSyncExternalStore,\n} from 'react';\n\nimport { getQueryKey } from './canonical.js';\nimport { ReactiveClient } from './client.js';\nimport { debug, warn } from './log.js';\nimport type {\n ConnectionState,\n MutationOptions,\n ReactiveClientConfig,\n Subscription,\n SubscriptionOptions,\n} from './types.js';\n\nconst ReactiveClientContext = createContext<ReactiveClient | null>(null);\n\ninterface ManagedClient {\n client: ReactiveClient;\n owned: boolean;\n scope?: ClientScope;\n}\n\ninterface ClientScope {\n url: string;\n httpUrl: string;\n auth: string | undefined;\n dynamicAuth: boolean;\n headers: Record<string, string> | undefined;\n dynamicHeaders: boolean;\n}\n\nfunction createManagedClient(\n externalClient: ReactiveClient | undefined,\n config: ReactiveClientConfig | undefined,\n): ManagedClient | null {\n if (externalClient) return { client: externalClient, owned: false };\n if (!config?.url) return null;\n return {\n client: new ReactiveClient(config),\n owned: true,\n scope: getClientScope(config),\n };\n}\n\nfunction sameRecord(\n left: Record<string, string> | undefined,\n right: Record<string, string> | undefined,\n): boolean {\n if (left === right) return true;\n if (!left || !right) return false;\n const keys = Object.keys(left);\n return keys.length === Object.keys(right).length && keys.every((key) => left[key] === right[key]);\n}\n\nfunction getClientScope(config: ReactiveClientConfig): ClientScope {\n return {\n url: config.url,\n httpUrl: config.httpUrl ?? '/api/reactive',\n auth: typeof config.auth === 'string' ? config.auth : undefined,\n dynamicAuth: typeof config.auth === 'function',\n headers: typeof config.headers === 'object' ? { ...config.headers } : undefined,\n dynamicHeaders: typeof config.headers === 'function',\n };\n}\n\nfunction sameScope(left: ClientScope | undefined, right: ClientScope): boolean {\n if (!left) return false;\n return (\n left.url === right.url &&\n left.httpUrl === right.httpUrl &&\n left.auth === right.auth &&\n left.dynamicAuth === right.dynamicAuth &&\n left.dynamicHeaders === right.dynamicHeaders &&\n sameRecord(left.headers, right.headers)\n );\n}\n\nexport function ReactiveClientProvider({\n children,\n config,\n client: externalClient,\n}: {\n children: ReactNode;\n config?: ReactiveClientConfig;\n client?: ReactiveClient;\n}) {\n const [managed, setManaged] = useState<ManagedClient | null>(() =>\n createManagedClient(externalClient, config),\n );\n let renderedManaged = managed;\n\n if (externalClient) {\n if (managed?.owned || managed?.client !== externalClient) {\n renderedManaged = { client: externalClient, owned: false };\n }\n } else if (!config?.url) {\n renderedManaged = null;\n } else {\n const scope = getClientScope(config);\n if (!managed?.owned || !sameScope(managed.scope, scope)) {\n renderedManaged = {\n client: new ReactiveClient(config),\n owned: true,\n scope,\n };\n }\n }\n\n if (renderedManaged !== managed) setManaged(renderedManaged);\n\n useEffect(() => {\n if (renderedManaged?.owned && config) {\n renderedManaged.client.configure(config);\n }\n }, [config, renderedManaged]);\n\n useEffect(() => {\n if (!renderedManaged?.owned) return;\n void renderedManaged.client.connect().catch(() => undefined);\n return () => {\n renderedManaged.client.disconnect();\n };\n }, [renderedManaged]);\n\n useEffect(() => {\n if (\n typeof window === 'undefined' ||\n typeof document === 'undefined' ||\n !renderedManaged?.owned\n ) {\n return;\n }\n\n const attemptReconnect = () => {\n const state = renderedManaged.client.getConnectionState();\n if (state === 'connected' || state === 'connecting') return;\n if (state === 'reconnecting') {\n debug('[dynamodb-reactive] Tab active during reconnect; reconnecting now');\n renderedManaged.client.forceReconnect();\n } else {\n void renderedManaged.client.connect().catch(() => undefined);\n }\n };\n const handleVisibility = () => {\n if (document.visibilityState === 'visible') attemptReconnect();\n };\n\n document.addEventListener('visibilitychange', handleVisibility);\n window.addEventListener('focus', attemptReconnect);\n return () => {\n document.removeEventListener('visibilitychange', handleVisibility);\n window.removeEventListener('focus', attemptReconnect);\n };\n }, [renderedManaged]);\n\n useEffect(() => {\n if (!config?.url && !externalClient) {\n warn('[dynamodb-reactive] WebSocket URL not configured; real-time features disabled');\n }\n }, [config?.url, externalClient]);\n\n return (\n <ReactiveClientContext.Provider value={renderedManaged?.client ?? null}>\n {children}\n </ReactiveClientContext.Provider>\n );\n}\n\nexport function useReactiveClient(): ReactiveClient | null {\n return useContext(ReactiveClientContext);\n}\n\nexport function useConnectionState(): ConnectionState | 'disabled' {\n const client = useReactiveClient();\n return useSyncExternalStore(\n (listener) => (client ? client.onConnectionStateChange(listener) : () => undefined),\n () => (client ? client.getConnectionState() : 'disabled'),\n () => 'disabled' as const,\n );\n}\n\nexport interface UseSubscriptionResult<TData> {\n data: TData | undefined;\n loading: boolean;\n stale: boolean;\n error: Error | undefined;\n disabled: boolean;\n refetch: () => Promise<void>;\n setData: (updater: (data: TData) => TData) => void;\n}\n\nexport function useSubscription<TData>(\n path: string,\n options: SubscriptionOptions<unknown, TData> = {},\n): UseSubscriptionResult<TData> {\n const client = useReactiveClient();\n const queryKey = getQueryKey(path, options.input);\n const [active, setActive] = useState<{\n client: ReactiveClient;\n subscription: Subscription<TData>;\n } | null>(null);\n const onDataRef = useRef(options.onData);\n const onErrorRef = useRef(options.onError);\n onDataRef.current = options.onData;\n onErrorRef.current = options.onError;\n\n useEffect(() => {\n if (!client) {\n setActive(null);\n return;\n }\n\n const next = client.subscribe<TData>(path, {\n input: options.input,\n onData: (data) => onDataRef.current?.(data),\n onError: (failure) => onErrorRef.current?.(failure),\n });\n setActive({ client, subscription: next });\n return () => next.unsubscribe();\n // queryKey captures the canonical input without depending on object identity.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [client, path, queryKey]);\n\n const subscription =\n active?.client === client && active.subscription.key === queryKey ? active.subscription : null;\n\n useSyncExternalStore(\n (listener) =>\n client && subscription\n ? client.addSubscriptionListener(subscription.id, listener)\n : () => undefined,\n () => (client && subscription ? client.getSubscriptionRevision(subscription.id) : -1),\n () => -1,\n );\n\n const refetch = async () => {\n await subscription?.refetch();\n };\n const setData = (updater: (data: TData) => TData) => {\n if (client && subscription) {\n client.applyOptimisticUpdate(subscription.id, updater as (data: unknown) => unknown);\n }\n };\n\n return {\n data: subscription?.data,\n loading: client ? (subscription?.loading ?? true) : false,\n stale: client ? (subscription?.stale ?? true) : false,\n error: subscription?.error,\n disabled: !client,\n refetch,\n setData,\n };\n}\n\nexport function useMutation<TInput, TOutput>(\n path: string,\n options?: MutationOptions<TInput, TOutput>,\n): {\n mutate: (input: TInput) => Promise<TOutput>;\n data: TOutput | undefined;\n loading: boolean;\n error: Error | undefined;\n disabled: boolean;\n reset: () => void;\n} {\n const client = useReactiveClient();\n const [state, setState] = useState<{\n data: TOutput | undefined;\n loading: boolean;\n error: Error | undefined;\n }>({ data: undefined, loading: false, error: undefined });\n const pendingCountRef = useRef(0);\n const latestCallRef = useRef(0);\n\n const mutate = async (input: TInput): Promise<TOutput> => {\n if (!client) {\n throw new Error('WebSocket not configured; mutations are disabled');\n }\n const callId = ++latestCallRef.current;\n pendingCountRef.current++;\n setState((current) => ({ ...current, loading: true, error: undefined }));\n try {\n const result = await client.call<TInput, TOutput>(path, input, options);\n pendingCountRef.current--;\n setState((current) =>\n callId === latestCallRef.current\n ? {\n data: result,\n loading: pendingCountRef.current > 0,\n error: undefined,\n }\n : { ...current, loading: pendingCountRef.current > 0 },\n );\n return result;\n } catch (cause) {\n const failure = cause instanceof Error ? cause : new Error(String(cause));\n pendingCountRef.current--;\n setState((current) =>\n callId === latestCallRef.current\n ? {\n ...current,\n loading: pendingCountRef.current > 0,\n error: failure,\n }\n : { ...current, loading: pendingCountRef.current > 0 },\n );\n throw failure;\n }\n };\n const reset = () => {\n latestCallRef.current++;\n setState({\n data: undefined,\n loading: pendingCountRef.current > 0,\n error: undefined,\n });\n };\n\n return { mutate, ...state, disabled: !client, reset };\n}\n\ntype ProcedureInput<T> = T extends { inputSchema?: { _output: infer TInput } } ? TInput : undefined;\n\ntype ProcedureOutput<T> = T extends {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any -- resolver parameter variance prevents `unknown`\n resolver: (...args: any[]) => infer TReturn;\n}\n ? Awaited<TReturn>\n : unknown;\n\ntype QueryHooks<T> = [ProcedureInput<T>] extends [undefined]\n ? {\n useQuery: (\n input?: undefined,\n options?: Omit<SubscriptionOptions<undefined, ProcedureOutput<T>>, 'input'>,\n ) => UseSubscriptionResult<ProcedureOutput<T>>;\n }\n : {\n useQuery: (\n input: ProcedureInput<T>,\n options?: Omit<SubscriptionOptions<ProcedureInput<T>, ProcedureOutput<T>>, 'input'>,\n ) => UseSubscriptionResult<ProcedureOutput<T>>;\n };\n\ninterface MutationHookResult<TInput, TOutput> {\n mutate: [TInput] extends [undefined]\n ? (input?: undefined) => Promise<TOutput>\n : (input: TInput) => Promise<TOutput>;\n data: TOutput | undefined;\n loading: boolean;\n error: Error | undefined;\n disabled: boolean;\n reset: () => void;\n}\n\ntype MutationHooks<T> = {\n useMutation: (\n options?: MutationOptions<ProcedureInput<T>, ProcedureOutput<T>>,\n ) => MutationHookResult<ProcedureInput<T>, ProcedureOutput<T>>;\n};\n\ntype ExtractRouterDefinition<T> = T extends { definition: infer TDefinition } ? TDefinition : T;\n\ntype TypedClientTree<T> = T extends { type: 'query' }\n ? QueryHooks<T>\n : T extends { type: 'mutation' }\n ? MutationHooks<T>\n : { [K in keyof T]: TypedClientTree<T[K]> };\n\nexport type TypedClientProxy<TRouter> = TypedClientTree<ExtractRouterDefinition<TRouter>>;\n\nexport function useClient<TRouter>(): TypedClientProxy<TRouter> {\n function buildProxy(path: string[]): unknown {\n return new Proxy(\n {},\n {\n get(_target, property) {\n if (typeof property !== 'string') return undefined;\n if (property === 'useQuery') {\n return function useQueryHook(input?: unknown, queryOptions?: SubscriptionOptions) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useSubscription(path.join('.'), {\n ...queryOptions,\n input,\n });\n };\n }\n if (property === 'useMutation') {\n return function useMutationHook(mutationOptions?: MutationOptions<unknown, unknown>) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useMutation(path.join('.'), mutationOptions);\n };\n }\n return buildProxy([...path, property]);\n },\n },\n );\n }\n\n return buildProxy([]) as TypedClientProxy<TRouter>;\n}\n"]}
package/dist/react.js CHANGED
@@ -279,6 +279,13 @@ var WebSocketManager = class {
279
279
  this.setState("disconnected");
280
280
  void this.connect().catch(() => void 0);
281
281
  }
282
+ /** Sends an application frame on the open socket; false when not connected. */
283
+ send(frame) {
284
+ const socket = this.ws;
285
+ if (!socket || this.state !== "connected" || socket.readyState !== socket.OPEN) return false;
286
+ socket.send(JSON.stringify(frame));
287
+ return true;
288
+ }
282
289
  onMessage(handler) {
283
290
  this.messageHandlers.add(handler);
284
291
  return () => this.messageHandlers.delete(handler);
@@ -502,6 +509,14 @@ var ReactiveClient = class {
502
509
  getConnectionState() {
503
510
  return this.connectionState;
504
511
  }
512
+ /**
513
+ * Sends an application frame over the socket, such as a presence update a
514
+ * hub's `onMessage` handles. Returns false while disconnected; resend from
515
+ * `onConnectionStateChange` once connected again.
516
+ */
517
+ send(frame) {
518
+ return this.wsManager.send(frame);
519
+ }
505
520
  onConnectionStateChange(listener) {
506
521
  this.stateListeners.add(listener);
507
522
  return () => this.stateListeners.delete(listener);