dynamodb-reactive 0.2.2 → 0.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/{client-r_tnzwqi.d.ts → client-Zb67giI5.d.ts} +5 -0
- package/dist/client.cjs +38 -18
- package/dist/client.cjs.map +1 -1
- package/dist/client.d.cts +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.js +38 -18
- package/dist/client.js.map +1 -1
- package/dist/react.cjs +38 -18
- package/dist/react.cjs.map +1 -1
- package/dist/react.js +38 -18
- package/dist/react.js.map +1 -1
- package/package.json +1 -1
package/dist/react.js.map
CHANGED
|
@@ -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","error"],"mappings":"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","file":"react.js","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 (\n applyToJSON &&\n 'toJSON' in value &&\n typeof value.toJSON === 'function'\n ) {\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(\n canonicalize(value[index], seen, String(index), true) ?? 'null',\n );\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 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\nconst { applyPatch } = jsonpatch;\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 = 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 | 'maxReconnectAttempts'\n | 'reconnectDelay'\n >\n> &\n ReactiveClientConfig;\n\nconst HEARTBEAT_INTERVAL_MS = 5 * 60 * 1000;\n\nfunction withDefaults(config: ReactiveClientConfig): ManagerConfig {\n return {\n autoReconnect: true,\n connectionTimeout: 10000,\n handshakeTimeout: 10000,\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 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\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 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 () => finish(new Error(`Connection timed out after ${timeoutMs}ms`)),\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 this.intentionalDisconnect = false;\n const generation = ++this.socketGeneration;\n this.setState('connecting');\n let socket: WebSocket | undefined;\n\n try {\n const url = await this.buildUrl();\n if (\n generation !== this.socketGeneration ||\n this.intentionalDisconnect\n ) {\n return;\n }\n\n const nextSocket = new WebSocket(url);\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.clearConnectionTimers();\n this.ws = null;\n this._connectionId = null;\n this.setState('disconnected');\n this.invokeLifecycleCallback(\n 'onDisconnect',\n this.config.onDisconnect,\n );\n\n if (this.config.autoReconnect && !this.intentionalDisconnect) {\n this.scheduleReconnect();\n } else {\n this.rejectWaiters(new Error('WebSocket disconnected'));\n }\n };\n\n nextSocket.onerror = () => {\n if (!this.isCurrent(nextSocket, generation)) return;\n this.invokeLifecycleCallback(\n 'onError',\n this.config.onError,\n new Error('WebSocket error'),\n );\n };\n\n nextSocket.onmessage = (event) => {\n if (!this.isCurrent(nextSocket, generation)) return;\n this.receiveMessage(nextSocket, generation, event.data);\n };\n\n } catch (cause) {\n if (generation !== this.socketGeneration) return;\n const failure =\n cause instanceof Error ? cause : new Error(String(cause));\n this.clearConnectionTimers();\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 if (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'\n ? await this.config.auth()\n : this.config.auth;\n const separator = url.includes('?') ? '&' : '?';\n url = `${url}${separator}token=${encodeURIComponent(token)}`;\n return url;\n }\n\n private receiveMessage(\n socket: WebSocket,\n generation: number,\n rawData: unknown,\n ): 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 if (!this._connectionId || this.state === 'connected') return;\n this.clearHandshakeTimer();\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.invokeLifecycleCallback('onError', this.config.onError, failure);\n socket.close(4000, 'Handshake timeout');\n }, this.config.handshakeTimeout);\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 !== WebSocket.OPEN\n ) {\n return;\n }\n socket.send(JSON.stringify({ type: 'ping' }));\n }, HEARTBEAT_INTERVAL_MS);\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 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(\n this.config.reconnectDelay * 2 ** (this.reconnectAttempts - 1),\n 30000,\n ) *\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 clearConnectionTimers(): void {\n this.clearHandshakeTimer();\n this.clearHeartbeatTimer();\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 {\n ErrorResponse,\n PatchEvent,\n SnapshotResponse,\n WebSocketEvent,\n} 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?: () =>\n | Record<string, string>\n | Promise<Record<string, string>>;\n private subscriptionsById = new Map<\n string,\n SubscriptionState<unknown>\n >();\n private subscriptionsByKey = new Map<\n string,\n SubscriptionState<unknown>\n >();\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(\n listener: (state: ConnectionState) => void,\n ): () => 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(\n shared,\n this.wsManager.generation,\n ).catch(() => undefined);\n }\n }\n\n const leaseId = generateId();\n shared.observers.set(leaseId, {\n onData: options.onData\n ? (data) => options.onData?.(data as TData)\n : 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(\n () => undefined,\n );\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(\n subscriptionId: string,\n updater: (data: unknown) => unknown,\n ): 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 ):\n | (() => Record<string, string> | Promise<Record<string, string>>)\n | 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(\n () => undefined,\n );\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 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(\n `Subscribe failed: ${response.status} ${response.statusText}`,\n );\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 =\n 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(\n registrationConnectionId,\n state.id,\n generation,\n registrationId,\n );\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(\n state: SubscriptionState<unknown>,\n leaseId: string,\n ): 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 (\n state.registrationId &&\n state.registrationConnectionId &&\n state.hasRegistered\n ) {\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 (\n layer.settledRevision !== undefined &&\n layer.settledRevision <= coveredRevision\n ) {\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 while (true) {\n const next = [...state.patchBuffer.values()]\n .filter((patch) => patch.fromVersion === state.version)\n .sort((left, right) => left.toVersion - right.toVersion)[0];\n if (!next) break;\n\n state.patchBuffer.delete(next.messageId);\n try {\n state.authoritativeData = applyPatches(\n state.authoritativeData,\n next.patches,\n );\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) =>\n patch.toVersion > state.version! &&\n 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(\n state: SubscriptionState<unknown>,\n ): Promise<void> {\n if (\n state.resyncPromise &&\n state.resyncGeneration === state.generation\n ) {\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 let request!: Promise<void>;\n request = this.ensureRegistered(\n state,\n this.wsManager.generation,\n true,\n )\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) =>\n Array.isArray(data) ? update(data, input, result) : data;\n }\n\n const itemId =\n typeof input === 'object' && input !== null\n ? (input as { id?: unknown }).id\n : 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 =\n 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\n ? { ...item, ...input, ...resultFields }\n : 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 ? 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(\n input,\n options,\n result,\n true,\n );\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(\n mutationId: string,\n states: SubscriptionState<unknown>[],\n ): 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 } }\n ? TInput\n : 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 }\n ? TDefinition\n : T;\n\ntype QueryProcedure<T> = [ProcedureInput<T>] extends [undefined]\n ? {\n useSubscription: (\n input?: undefined,\n options?: Omit<\n SubscriptionOptions<undefined, ProcedureOutput<T>>,\n 'input'\n >,\n ) => Subscription<ProcedureOutput<T>>;\n }\n : {\n useSubscription: (\n input: ProcedureInput<T>,\n options?: Omit<\n SubscriptionOptions<ProcedureInput<T>, ProcedureOutput<T>>,\n 'input'\n >,\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 (\n input: unknown,\n 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 (\n keys.length === Object.keys(right).length &&\n keys.every((key) => left[key] === right[key])\n );\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:\n 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(\n '[dynamodb-reactive] Tab active during reconnect; reconnecting now',\n );\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(\n '[dynamodb-reactive] WebSocket URL not configured; real-time features disabled',\n );\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) =>\n 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\n ? active.subscription\n : null;\n\n useSyncExternalStore(\n (listener) =>\n client && subscription\n ? client.addSubscriptionListener(subscription.id, listener)\n : () => undefined,\n () =>\n client && subscription\n ? client.getSubscriptionRevision(subscription.id)\n : -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(\n subscription.id,\n updater as (data: unknown) => unknown,\n );\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 =\n 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 } }\n ? TInput\n : 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<\n SubscriptionOptions<undefined, ProcedureOutput<T>>,\n 'input'\n >,\n ) => UseSubscriptionResult<ProcedureOutput<T>>;\n }\n : {\n useQuery: (\n input: ProcedureInput<T>,\n options?: Omit<\n SubscriptionOptions<ProcedureInput<T>, ProcedureOutput<T>>,\n 'input'\n >,\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 }\n ? TDefinition\n : 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<\n ExtractRouterDefinition<TRouter>\n>;\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(\n input?: unknown,\n queryOptions?: SubscriptionOptions,\n ) {\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(\n mutationOptions?: MutationOptions<unknown, unknown>,\n ) {\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","error"],"mappings":"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","file":"react.js","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 (\n applyToJSON &&\n 'toJSON' in value &&\n typeof value.toJSON === 'function'\n ) {\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(\n canonicalize(value[index], seen, String(index), true) ?? 'null',\n );\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 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\nconst { applyPatch } = jsonpatch;\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 = 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 | 'maxReconnectAttempts'\n | 'reconnectDelay'\n >\n> &\n ReactiveClientConfig;\n\nconst HEARTBEAT_INTERVAL_MS = 5 * 60 * 1000;\n\nfunction withDefaults(config: ReactiveClientConfig): ManagerConfig {\n return {\n autoReconnect: true,\n connectionTimeout: 10000,\n handshakeTimeout: 10000,\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 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 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 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.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 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 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 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 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 }, HEARTBEAT_INTERVAL_MS);\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 clearConnectionTimers(): void {\n this.clearHandshakeTimer();\n this.clearHeartbeatTimer();\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 {\n ErrorResponse,\n PatchEvent,\n SnapshotResponse,\n WebSocketEvent,\n} 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?: () =>\n | Record<string, string>\n | Promise<Record<string, string>>;\n private subscriptionsById = new Map<\n string,\n SubscriptionState<unknown>\n >();\n private subscriptionsByKey = new Map<\n string,\n SubscriptionState<unknown>\n >();\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(\n listener: (state: ConnectionState) => void,\n ): () => 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(\n shared,\n this.wsManager.generation,\n ).catch(() => undefined);\n }\n }\n\n const leaseId = generateId();\n shared.observers.set(leaseId, {\n onData: options.onData\n ? (data) => options.onData?.(data as TData)\n : 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(\n () => undefined,\n );\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(\n subscriptionId: string,\n updater: (data: unknown) => unknown,\n ): 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 ):\n | (() => Record<string, string> | Promise<Record<string, string>>)\n | 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(\n () => undefined,\n );\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 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(\n `Subscribe failed: ${response.status} ${response.statusText}`,\n );\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 =\n 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(\n registrationConnectionId,\n state.id,\n generation,\n registrationId,\n );\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(\n state: SubscriptionState<unknown>,\n leaseId: string,\n ): 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 (\n state.registrationId &&\n state.registrationConnectionId &&\n state.hasRegistered\n ) {\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 (\n layer.settledRevision !== undefined &&\n layer.settledRevision <= coveredRevision\n ) {\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 while (true) {\n const next = [...state.patchBuffer.values()]\n .filter((patch) => patch.fromVersion === state.version)\n .sort((left, right) => left.toVersion - right.toVersion)[0];\n if (!next) break;\n\n state.patchBuffer.delete(next.messageId);\n try {\n state.authoritativeData = applyPatches(\n state.authoritativeData,\n next.patches,\n );\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) =>\n patch.toVersion > state.version! &&\n 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(\n state: SubscriptionState<unknown>,\n ): Promise<void> {\n if (\n state.resyncPromise &&\n state.resyncGeneration === state.generation\n ) {\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 let request!: Promise<void>;\n request = this.ensureRegistered(\n state,\n this.wsManager.generation,\n true,\n )\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) =>\n Array.isArray(data) ? update(data, input, result) : data;\n }\n\n const itemId =\n typeof input === 'object' && input !== null\n ? (input as { id?: unknown }).id\n : 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 =\n 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\n ? { ...item, ...input, ...resultFields }\n : 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 ? 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(\n input,\n options,\n result,\n true,\n );\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(\n mutationId: string,\n states: SubscriptionState<unknown>[],\n ): 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 } }\n ? TInput\n : 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 }\n ? TDefinition\n : T;\n\ntype QueryProcedure<T> = [ProcedureInput<T>] extends [undefined]\n ? {\n useSubscription: (\n input?: undefined,\n options?: Omit<\n SubscriptionOptions<undefined, ProcedureOutput<T>>,\n 'input'\n >,\n ) => Subscription<ProcedureOutput<T>>;\n }\n : {\n useSubscription: (\n input: ProcedureInput<T>,\n options?: Omit<\n SubscriptionOptions<ProcedureInput<T>, ProcedureOutput<T>>,\n 'input'\n >,\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 (\n input: unknown,\n 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 (\n keys.length === Object.keys(right).length &&\n keys.every((key) => left[key] === right[key])\n );\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:\n 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(\n '[dynamodb-reactive] Tab active during reconnect; reconnecting now',\n );\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(\n '[dynamodb-reactive] WebSocket URL not configured; real-time features disabled',\n );\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) =>\n 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\n ? active.subscription\n : null;\n\n useSyncExternalStore(\n (listener) =>\n client && subscription\n ? client.addSubscriptionListener(subscription.id, listener)\n : () => undefined,\n () =>\n client && subscription\n ? client.getSubscriptionRevision(subscription.id)\n : -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(\n subscription.id,\n updater as (data: unknown) => unknown,\n );\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 =\n 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 } }\n ? TInput\n : 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<\n SubscriptionOptions<undefined, ProcedureOutput<T>>,\n 'input'\n >,\n ) => UseSubscriptionResult<ProcedureOutput<T>>;\n }\n : {\n useQuery: (\n input: ProcedureInput<T>,\n options?: Omit<\n SubscriptionOptions<ProcedureInput<T>, ProcedureOutput<T>>,\n 'input'\n >,\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 }\n ? TDefinition\n : 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<\n ExtractRouterDefinition<TRouter>\n>;\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(\n input?: unknown,\n queryOptions?: SubscriptionOptions,\n ) {\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(\n mutationOptions?: MutationOptions<unknown, unknown>,\n ) {\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"]}
|