@ontahi/react 1.0.0-alpha.12 → 1.0.0-alpha.13

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.
Files changed (58) hide show
  1. package/README.md +76 -5
  2. package/dist/actions/fetch-operation-bridge-adapter.d.ts.map +1 -1
  3. package/dist/actions/fetch-operation-bridge-adapter.js +30 -13
  4. package/dist/actions/fetch-operation-bridge-adapter.js.map +1 -1
  5. package/dist/actions/operation-bridge.d.ts +2 -0
  6. package/dist/actions/operation-bridge.d.ts.map +1 -1
  7. package/dist/actions/operation-bridge.js.map +1 -1
  8. package/dist/graph/canonical-request-invalidation.d.ts +14 -0
  9. package/dist/graph/canonical-request-invalidation.d.ts.map +1 -0
  10. package/dist/graph/canonical-request-invalidation.js +42 -0
  11. package/dist/graph/canonical-request-invalidation.js.map +1 -0
  12. package/dist/graph/context.d.ts +9 -2
  13. package/dist/graph/context.d.ts.map +1 -1
  14. package/dist/graph/context.js +38 -3
  15. package/dist/graph/context.js.map +1 -1
  16. package/dist/graph/executor.d.ts +18 -1
  17. package/dist/graph/executor.d.ts.map +1 -1
  18. package/dist/graph/executor.js.map +1 -1
  19. package/dist/graph/fetch-graph-client.d.ts +2 -1
  20. package/dist/graph/fetch-graph-client.d.ts.map +1 -1
  21. package/dist/graph/fetch-graph-client.js.map +1 -1
  22. package/dist/graph/fetch-graph-runtime.d.ts.map +1 -1
  23. package/dist/graph/fetch-graph-runtime.js +53 -1
  24. package/dist/graph/fetch-graph-runtime.js.map +1 -1
  25. package/dist/graph/fetch-runtime-transport.d.ts.map +1 -1
  26. package/dist/graph/fetch-runtime-transport.js +1 -0
  27. package/dist/graph/fetch-runtime-transport.js.map +1 -1
  28. package/dist/graph/graph-hooks.d.ts +2 -1
  29. package/dist/graph/graph-hooks.d.ts.map +1 -1
  30. package/dist/graph/graph-hooks.js +161 -62
  31. package/dist/graph/graph-hooks.js.map +1 -1
  32. package/dist/graph/index.d.ts +3 -0
  33. package/dist/graph/index.d.ts.map +1 -1
  34. package/dist/graph/index.js +3 -0
  35. package/dist/graph/index.js.map +1 -1
  36. package/dist/graph/model-command-hooks.d.ts +2 -0
  37. package/dist/graph/model-command-hooks.d.ts.map +1 -0
  38. package/dist/graph/model-command-hooks.js +9 -0
  39. package/dist/graph/model-command-hooks.js.map +1 -0
  40. package/dist/graph/operation-hooks.d.ts.map +1 -1
  41. package/dist/graph/operation-hooks.js +91 -9
  42. package/dist/graph/operation-hooks.js.map +1 -1
  43. package/dist/graph/operation-types.d.ts +1 -0
  44. package/dist/graph/operation-types.d.ts.map +1 -1
  45. package/dist/graph/operation-types.js.map +1 -1
  46. package/dist/graph/runtime-graph-client.d.ts +3 -2
  47. package/dist/graph/runtime-graph-client.d.ts.map +1 -1
  48. package/dist/graph/runtime-graph-client.js +2 -1
  49. package/dist/graph/runtime-graph-client.js.map +1 -1
  50. package/dist/graph/semantic-invalidation.d.ts +27 -0
  51. package/dist/graph/semantic-invalidation.d.ts.map +1 -0
  52. package/dist/graph/semantic-invalidation.js +55 -0
  53. package/dist/graph/semantic-invalidation.js.map +1 -0
  54. package/dist/graph/websocket-runtime-transport.d.ts +5 -2
  55. package/dist/graph/websocket-runtime-transport.d.ts.map +1 -1
  56. package/dist/graph/websocket-runtime-transport.js +160 -46
  57. package/dist/graph/websocket-runtime-transport.js.map +1 -1
  58. package/package.json +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"websocket-runtime-transport.js","sourceRoot":"","sources":["../../src/graph/websocket-runtime-transport.ts"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport type { TaskRunIdentity, TaskSnapshot } from '@ontahi/core/runtime/contracts';\nimport {\n parseRuntimeProtocolResponse,\n parseRuntimeProtocolSessionServerFrame,\n RUNTIME_PROTOCOL_SESSION_NAME,\n RUNTIME_PROTOCOL_SESSION_VERSION,\n type DurableOperationObservationCapability,\n type GraphObservationCapability,\n type RuntimeProtocolRequestEnvelope,\n type RuntimeProtocolGraphObservationBody,\n type RuntimeProtocolSessionClientFrame,\n type RuntimeProtocolSessionServerFrame,\n type RuntimeTransport,\n type RuntimeTransportRequestOptions,\n} from '@ontahi/core/runtime/protocol';\n\ntype WebSocketEvent = {\n readonly data?: unknown;\n readonly code?: number;\n readonly reason?: string;\n};\n\nexport type RuntimeWebSocket = {\n readonly readyState: number;\n send(data: string): void;\n close(code?: number, reason?: string): void;\n addEventListener(type: string, listener: (event: WebSocketEvent) => void): void;\n removeEventListener(type: string, listener: (event: WebSocketEvent) => void): void;\n};\n\nexport type WebSocketRuntimeTransportOptions = {\n readonly url?: string;\n readonly protocols?: string | string[];\n readonly createWebSocket?: (url: string, protocols?: string | string[]) => RuntimeWebSocket;\n readonly observationId?: () => string;\n readonly handshakeTimeoutMs?: number;\n readonly reportError?: (error: Error) => void;\n};\n\nexport type WebSocketRuntimeTransport = RuntimeTransport<never> & {\n readonly durableOperation: DurableOperationObservationCapability;\n readonly graph: GraphObservationCapability<never>;\n close(): void;\n};\n\ntype PendingRequest = {\n readonly request: RuntimeProtocolRequestEnvelope;\n readonly resolve: RuntimeTransport['request'] extends (...args: any[]) => Promise<infer TResult>\n ? (result: TResult) => void\n : never;\n readonly reject: (error: Error) => void;\n readonly removeAbortListener: () => void;\n};\n\ntype QueueWaiter<TValue> = {\n readonly resolve: (result: IteratorResult<TValue>) => void;\n readonly reject: (error: Error) => void;\n};\n\ntype AsyncQueue<TValue> = {\n readonly next: () => Promise<IteratorResult<TValue>>;\n readonly push: (value: TValue) => void;\n readonly end: () => void;\n readonly fail: (error: Error) => void;\n};\n\nconst createAsyncQueue = <TValue>(): AsyncQueue<TValue> => {\n const values: TValue[] = [];\n const waiters: QueueWaiter<TValue>[] = [];\n let ended = false;\n let failure: Error | undefined;\n\n const settleWaiters = () => {\n while (waiters.length > 0) {\n const waiter = waiters.shift()!;\n if (failure) waiter.reject(failure);\n else waiter.resolve({ done: true, value: undefined });\n }\n };\n\n return {\n next: () => {\n const value = values.shift();\n if (value !== undefined) return Promise.resolve({ done: false, value });\n if (failure) return Promise.reject(failure);\n if (ended) return Promise.resolve({ done: true, value: undefined });\n return new Promise((resolve, reject) => waiters.push({ resolve, reject }));\n },\n push: value => {\n if (ended || failure) return;\n const waiter = waiters.shift();\n if (waiter) waiter.resolve({ done: false, value });\n else values.push(value);\n },\n end: () => {\n if (ended || failure) return;\n ended = true;\n settleWaiters();\n },\n fail: error => {\n if (ended || failure) return;\n failure = error;\n settleWaiters();\n },\n };\n};\n\ntype ActiveDurableObservation = {\n readonly run: TaskRunIdentity;\n readonly queue: AsyncQueue<TaskSnapshot>;\n lastSequence: number;\n terminal: boolean;\n};\n\ntype ActiveGraphObservation = {\n readonly queue: AsyncQueue<RuntimeProtocolGraphObservationBody>;\n lastSequence: number;\n terminal: boolean;\n};\n\nconst SOCKET_OPEN = 1;\nconst DEFAULT_RUNTIME_PATH = '/runtime';\nconst DEFAULT_HANDSHAKE_TIMEOUT_MS = 10_000;\nconst terminalTaskStatuses = new Set(['completed', 'failed', 'cancelled']);\n\nlet fallbackObservationSequence = 0;\n\nconst defaultObservationId = () =>\n globalThis.crypto?.randomUUID?.() ??\n `ontahi-observation-${Date.now()}-${(fallbackObservationSequence += 1)}`;\n\nconst resolveWebSocketUrl = (configuredUrl = DEFAULT_RUNTIME_PATH) => {\n if (/^wss?:\\/\\//.test(configuredUrl)) return configuredUrl;\n if (!globalThis.location?.href) {\n throw new Error('A WebSocket Runtime Transport url is required outside a browser.');\n }\n const url = new URL(configuredUrl, globalThis.location.href);\n url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:';\n return url.toString();\n};\n\nconst createDefaultWebSocket = (url: string, protocols?: string | string[]): RuntimeWebSocket => {\n if (!globalThis.WebSocket) {\n throw new Error('WebSocket is unavailable in this runtime.');\n }\n return new globalThis.WebSocket(url, protocols) as unknown as RuntimeWebSocket;\n};\n\nconst abortError = (message: string) => new Error(message);\n\nconst awaitWithSignal = async <TValue>(\n promise: Promise<TValue>,\n signal: AbortSignal | undefined,\n message: string,\n): Promise<TValue> => {\n if (!signal) return promise;\n if (signal.aborted) throw abortError(message);\n return new Promise<TValue>((resolve, reject) => {\n const abort = () => {\n signal.removeEventListener('abort', abort);\n reject(abortError(message));\n };\n signal.addEventListener('abort', abort, { once: true });\n void promise.then(\n value => {\n signal.removeEventListener('abort', abort);\n resolve(value);\n },\n error => {\n signal.removeEventListener('abort', abort);\n reject(error);\n },\n );\n });\n};\n\nexport const createWebSocketRuntimeTransport = ({\n url,\n protocols,\n createWebSocket = createDefaultWebSocket,\n observationId = defaultObservationId,\n handshakeTimeoutMs = DEFAULT_HANDSHAKE_TIMEOUT_MS,\n reportError,\n}: WebSocketRuntimeTransportOptions = {}): WebSocketRuntimeTransport => {\n if (!Number.isFinite(handshakeTimeoutMs) || handshakeTimeoutMs < 0) {\n throw new TypeError('Runtime Protocol WebSocket handshake timeout must be non-negative.');\n }\n\n let socket: RuntimeWebSocket | undefined;\n let connection:\n | {\n readonly promise: Promise<ReadonlySet<string>>;\n readonly resolve: (capabilities: ReadonlySet<string>) => void;\n readonly reject: (error: Error) => void;\n readonly timeout: ReturnType<typeof setTimeout>;\n }\n | undefined;\n let capabilities: ReadonlySet<string> | undefined;\n let removeSocketListeners: (() => void) | undefined;\n let disposed = false;\n const pendingRequests = new Map<string, PendingRequest>();\n const durableObservations = new Map<string, ActiveDurableObservation>();\n const graphObservations = new Map<string, ActiveGraphObservation>();\n\n const send = (frame: RuntimeProtocolSessionClientFrame) => {\n if (disposed) throw new Error('Runtime Protocol WebSocket transport is closed.');\n if (!socket || socket.readyState !== SOCKET_OPEN) {\n throw new Error('Runtime Protocol WebSocket session is not open.');\n }\n socket.send(JSON.stringify(frame));\n };\n\n const failActiveWork = (error: Error) => {\n for (const pending of pendingRequests.values()) {\n pending.removeAbortListener();\n pending.reject(error);\n }\n pendingRequests.clear();\n for (const observation of durableObservations.values()) observation.queue.fail(error);\n durableObservations.clear();\n for (const observation of graphObservations.values()) observation.queue.fail(error);\n graphObservations.clear();\n };\n\n const failConnection = (currentSocket: RuntimeWebSocket, error: Error) => {\n if (socket !== currentSocket) return;\n removeSocketListeners?.();\n removeSocketListeners = undefined;\n connection?.reject(error);\n if (connection) clearTimeout(connection.timeout);\n connection = undefined;\n capabilities = undefined;\n socket = undefined;\n failActiveWork(error);\n };\n\n const handleFrame = (currentSocket: RuntimeWebSocket, input: unknown) => {\n const parsed = parseRuntimeProtocolSessionServerFrame(input);\n if (!parsed.success) {\n const error = new Error(parsed.error.error.message);\n reportError?.(error);\n failConnection(currentSocket, error);\n currentSocket.close(1002, 'Invalid Runtime Protocol session frame');\n return;\n }\n\n const frame: RuntimeProtocolSessionServerFrame = parsed.frame;\n if (frame.kind === 'ready') {\n if (!connection || capabilities) {\n const error = new Error(\n 'Runtime Protocol WebSocket session sent an unexpected ready frame.',\n );\n reportError?.(error);\n failConnection(currentSocket, error);\n currentSocket.close(1002, 'Unexpected Runtime Protocol ready frame');\n return;\n }\n capabilities = new Set(frame.capabilities);\n clearTimeout(connection.timeout);\n connection.resolve(capabilities);\n connection = undefined;\n return;\n }\n\n if (frame.kind === 'response') {\n const id = frame.response.id;\n if (!id) return;\n const pending = pendingRequests.get(id);\n if (!pending) return;\n pendingRequests.delete(id);\n pending.removeAbortListener();\n const response = parseRuntimeProtocolResponse(frame.response, pending.request);\n if (!response.success) pending.reject(new Error(response.error.error.message));\n else pending.resolve(response.response);\n return;\n }\n\n if (frame.kind === 'session-error') {\n const error = new Error(frame.error.message);\n if (frame.id) {\n const pending = pendingRequests.get(frame.id);\n if (pending) {\n pendingRequests.delete(frame.id);\n pending.removeAbortListener();\n pending.reject(error);\n return;\n }\n const durableObservation = durableObservations.get(frame.id);\n if (durableObservation) {\n durableObservations.delete(frame.id);\n durableObservation.queue.fail(error);\n return;\n }\n const graphObservation = graphObservations.get(frame.id);\n if (graphObservation) {\n graphObservations.delete(frame.id);\n graphObservation.queue.fail(error);\n return;\n }\n }\n reportError?.(error);\n return;\n }\n\n if (frame.kind === 'durable-observation') {\n const observation = durableObservations.get(frame.id);\n if (!observation || observation.terminal || frame.sequence <= observation.lastSequence)\n return;\n observation.lastSequence = frame.sequence;\n if (frame.body.kind === 'protocol-error') {\n durableObservations.delete(frame.id);\n observation.queue.fail(new Error(frame.body.error.message));\n return;\n }\n\n const snapshot = frame.body.snapshot;\n if (snapshot.taskId !== observation.run.taskId || snapshot.runId !== observation.run.runId) {\n durableObservations.delete(frame.id);\n observation.queue.fail(\n new Error('Durable Operation snapshot identity does not match the observed run.'),\n );\n try {\n send({\n protocol: RUNTIME_PROTOCOL_SESSION_NAME,\n version: RUNTIME_PROTOCOL_SESSION_VERSION,\n kind: 'durable-unobserve',\n id: frame.id,\n });\n } catch {\n // The failed observation is already detached locally.\n }\n return;\n }\n\n observation.queue.push(snapshot);\n if (terminalTaskStatuses.has(snapshot.status)) {\n observation.terminal = true;\n observation.queue.end();\n }\n return;\n }\n\n const observation = graphObservations.get(frame.id);\n if (!observation || observation.terminal || frame.sequence <= observation.lastSequence) return;\n observation.lastSequence = frame.sequence;\n if (frame.kind === 'graph-observation-complete') {\n observation.terminal = true;\n graphObservations.delete(frame.id);\n observation.queue.end();\n return;\n }\n observation.queue.push(frame.body);\n if (frame.body.kind === 'protocol-error') {\n observation.terminal = true;\n graphObservations.delete(frame.id);\n observation.queue.end();\n }\n };\n\n const ensureConnection = (): Promise<ReadonlySet<string>> => {\n if (disposed)\n return Promise.reject(new Error('Runtime Protocol WebSocket transport is closed.'));\n if (capabilities && socket?.readyState === SOCKET_OPEN) return Promise.resolve(capabilities);\n if (connection) return connection.promise;\n\n if (socket) {\n failConnection(\n socket,\n new Error('Runtime Protocol WebSocket session was replaced; active work was not resumed.'),\n );\n }\n\n const currentSocket = createWebSocket(resolveWebSocketUrl(url), protocols);\n socket = currentSocket;\n let resolveConnection!: (value: ReadonlySet<string>) => void;\n let rejectConnection!: (error: Error) => void;\n const promise = new Promise<ReadonlySet<string>>((resolve, reject) => {\n resolveConnection = resolve;\n rejectConnection = reject;\n });\n const timeout = setTimeout(() => {\n const error = new Error('Runtime Protocol WebSocket session handshake timed out.');\n failConnection(currentSocket, error);\n currentSocket.close(1002, 'Runtime Protocol handshake timeout');\n }, handshakeTimeoutMs);\n connection = {\n promise,\n resolve: resolveConnection,\n reject: rejectConnection,\n timeout,\n };\n\n const onMessage = (event: WebSocketEvent) => {\n let input: unknown;\n try {\n input = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n } catch {\n input = undefined;\n }\n handleFrame(currentSocket, input);\n };\n const onError = () =>\n failConnection(currentSocket, new Error('Runtime Protocol WebSocket session failed.'));\n const onClose = (event: WebSocketEvent) =>\n failConnection(\n currentSocket,\n new Error(\n `Runtime Protocol WebSocket session disconnected${\n event.code === undefined\n ? ''\n : ` (${event.code}${event.reason ? `: ${event.reason}` : ''})`\n }; active work was not resumed.`,\n ),\n );\n currentSocket.addEventListener('message', onMessage);\n currentSocket.addEventListener('error', onError);\n currentSocket.addEventListener('close', onClose);\n removeSocketListeners = () => {\n currentSocket.removeEventListener('message', onMessage);\n currentSocket.removeEventListener('error', onError);\n currentSocket.removeEventListener('close', onClose);\n };\n\n return promise;\n };\n\n const request: RuntimeTransport['request'] = async (runtimeRequest, options) => {\n const signal = options?.signal;\n const connectedCapabilities = await awaitWithSignal(\n ensureConnection(),\n signal,\n 'Runtime Protocol WebSocket request was aborted.',\n );\n if (!connectedCapabilities.has('request-response')) {\n throw new Error(\n 'Runtime Protocol request/response is unavailable in this WebSocket session.',\n );\n }\n if (pendingRequests.has(runtimeRequest.id)) {\n throw new Error(`Runtime Protocol request id ${runtimeRequest.id} is already pending.`);\n }\n\n return new Promise((resolve, reject) => {\n const abort = () => {\n const pending = pendingRequests.get(runtimeRequest.id);\n if (!pending) return;\n pendingRequests.delete(runtimeRequest.id);\n pending.removeAbortListener();\n reject(abortError('Runtime Protocol WebSocket request was aborted.'));\n };\n const removeAbortListener = () => signal?.removeEventListener('abort', abort);\n pendingRequests.set(runtimeRequest.id, {\n request: runtimeRequest,\n resolve,\n reject,\n removeAbortListener,\n });\n signal?.addEventListener('abort', abort, { once: true });\n\n try {\n send({\n protocol: RUNTIME_PROTOCOL_SESSION_NAME,\n version: RUNTIME_PROTOCOL_SESSION_VERSION,\n kind: 'request',\n request: runtimeRequest,\n });\n } catch (error) {\n pendingRequests.delete(runtimeRequest.id);\n removeAbortListener();\n reject(\n error instanceof Error ? error : new Error('Runtime Protocol WebSocket send failed.'),\n );\n }\n });\n };\n\n const observeDurable: DurableOperationObservationCapability['observe'] = async function* <\n TResult,\n >(\n run: TaskRunIdentity,\n options?: RuntimeTransportRequestOptions,\n ): AsyncIterable<TaskSnapshot<TResult>> {\n if (options?.signal?.aborted) return;\n const id = observationId();\n const queue = createAsyncQueue<TaskSnapshot>();\n const observation: ActiveDurableObservation = {\n run,\n queue,\n lastSequence: 0,\n terminal: false,\n };\n let subscribed = false;\n const abort = () => queue.end();\n options?.signal?.addEventListener('abort', abort, { once: true });\n\n try {\n const connectedCapabilities = await awaitWithSignal(\n ensureConnection(),\n options?.signal,\n 'Durable Operation WebSocket observation was aborted.',\n );\n if (!connectedCapabilities.has('durable-operation-push')) {\n throw new Error('Durable Operation push is unavailable in this WebSocket session.');\n }\n if (durableObservations.has(id) || graphObservations.has(id)) {\n throw new Error(`Durable observation id ${id} is already active.`);\n }\n durableObservations.set(id, observation);\n send({\n protocol: RUNTIME_PROTOCOL_SESSION_NAME,\n version: RUNTIME_PROTOCOL_SESSION_VERSION,\n kind: 'durable-observe',\n id,\n run: { taskId: run.taskId, runId: run.runId },\n });\n subscribed = true;\n\n while (true) {\n const next = await queue.next();\n if (next.done) return;\n yield next.value as TaskSnapshot<TResult>;\n }\n } catch (error) {\n if (!options?.signal?.aborted) throw error;\n } finally {\n options?.signal?.removeEventListener('abort', abort);\n if (durableObservations.get(id) === observation) durableObservations.delete(id);\n if (subscribed && !observation.terminal) {\n try {\n send({\n protocol: RUNTIME_PROTOCOL_SESSION_NAME,\n version: RUNTIME_PROTOCOL_SESSION_VERSION,\n kind: 'durable-unobserve',\n id,\n });\n } catch {\n // Disconnect already released the server-side session resources.\n }\n }\n }\n };\n\n const observeGraph: GraphObservationCapability<never>['observe'] = async function* (\n request,\n options,\n ) {\n if (options?.signal?.aborted) return;\n const id = observationId();\n const queue = createAsyncQueue<RuntimeProtocolGraphObservationBody>();\n const observation: ActiveGraphObservation = {\n queue,\n lastSequence: 0,\n terminal: false,\n };\n let subscribed = false;\n const abort = () => queue.end();\n options?.signal?.addEventListener('abort', abort, { once: true });\n\n try {\n const connectedCapabilities = await awaitWithSignal(\n ensureConnection(),\n options?.signal,\n 'Data graph WebSocket observation was aborted.',\n );\n if (!connectedCapabilities.has('graph-observation-push')) {\n throw new Error('Data graph push observation is unavailable in this WebSocket session.');\n }\n if (durableObservations.has(id) || graphObservations.has(id)) {\n throw new Error(`Graph observation id ${id} is already active.`);\n }\n graphObservations.set(id, observation);\n send({\n protocol: RUNTIME_PROTOCOL_SESSION_NAME,\n version: RUNTIME_PROTOCOL_SESSION_VERSION,\n kind: 'graph-observe',\n id,\n request,\n });\n subscribed = true;\n\n while (true) {\n const next = await queue.next();\n if (next.done) return;\n yield next.value;\n }\n } catch (error) {\n if (!options?.signal?.aborted) throw error;\n } finally {\n options?.signal?.removeEventListener('abort', abort);\n if (graphObservations.get(id) === observation) graphObservations.delete(id);\n if (subscribed && !observation.terminal) {\n try {\n send({\n protocol: RUNTIME_PROTOCOL_SESSION_NAME,\n version: RUNTIME_PROTOCOL_SESSION_VERSION,\n kind: 'graph-unobserve',\n id,\n });\n } catch {\n // Disconnect already released the server-side session resources.\n }\n }\n }\n };\n\n return {\n request,\n durableOperation: { observe: observeDurable },\n graph: { observe: observeGraph },\n close: () => {\n if (disposed) return;\n disposed = true;\n const currentSocket = socket;\n const error = new Error('Runtime Protocol WebSocket transport was closed.');\n if (currentSocket) failConnection(currentSocket, error);\n else failActiveWork(error);\n currentSocket?.close(1000, 'Runtime Protocol transport closed');\n },\n };\n};\n"]}
1
+ {"version":3,"file":"websocket-runtime-transport.js","sourceRoot":"","sources":["../../src/graph/websocket-runtime-transport.ts"],"names":[],"mappings":"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","sourcesContent":["'use client';\n\nimport type { TaskRunIdentity, TaskSnapshot } from '@ontahi/core/runtime/contracts';\nimport {\n parseRuntimeProtocolResponse,\n parseRuntimeProtocolSessionServerFrame,\n RUNTIME_PROTOCOL_SESSION_NAME,\n RUNTIME_PROTOCOL_SESSION_VERSION,\n type DurableOperationObservationCapability,\n type EventObservationCapability,\n type GraphObservationCapability,\n type RuntimeProtocolRequestEnvelope,\n type RuntimeProtocolGraphObservationBody,\n type RuntimeProtocolSessionClientFrame,\n type RuntimeProtocolSessionServerFrame,\n type RuntimeTransport,\n type RuntimeTransportRequestOptions,\n} from '@ontahi/core/runtime/protocol';\nimport type { AnyEventDeclaration, EventDeliveryFor } from '@ontahi/core/runtime/server';\n\ntype WebSocketEvent = {\n readonly data?: unknown;\n readonly code?: number;\n readonly reason?: string;\n};\n\nexport type RuntimeWebSocket = {\n readonly readyState: number;\n send(data: string): void;\n close(code?: number, reason?: string): void;\n addEventListener(type: string, listener: (event: WebSocketEvent) => void): void;\n removeEventListener(type: string, listener: (event: WebSocketEvent) => void): void;\n};\n\nexport type WebSocketRuntimeTransportOptions = {\n readonly url?: string;\n readonly protocols?: string | string[];\n readonly createWebSocket?: (url: string, protocols?: string | string[]) => RuntimeWebSocket;\n readonly observationId?: () => string;\n readonly handshakeTimeoutMs?: number;\n /** Delay before restoring a durable Operation observation after a lost session. */\n readonly reconnectDelayMs?: number;\n readonly reportError?: (error: Error) => void;\n};\n\nexport type WebSocketRuntimeTransport = RuntimeTransport<never> & {\n readonly durableOperation: DurableOperationObservationCapability;\n readonly graph: GraphObservationCapability<never>;\n readonly events: EventObservationCapability<never>;\n close(): void;\n};\n\ntype PendingRequest = {\n readonly request: RuntimeProtocolRequestEnvelope;\n readonly resolve: RuntimeTransport['request'] extends (...args: any[]) => Promise<infer TResult>\n ? (result: TResult) => void\n : never;\n readonly reject: (error: Error) => void;\n readonly removeAbortListener: () => void;\n};\n\ntype QueueWaiter<TValue> = {\n readonly resolve: (result: IteratorResult<TValue>) => void;\n readonly reject: (error: Error) => void;\n};\n\ntype AsyncQueue<TValue> = {\n readonly next: () => Promise<IteratorResult<TValue>>;\n readonly push: (value: TValue) => void;\n readonly end: () => void;\n readonly fail: (error: Error) => void;\n};\n\nconst createAsyncQueue = <TValue>(capacity = Number.POSITIVE_INFINITY): AsyncQueue<TValue> => {\n const values: TValue[] = [];\n const waiters: QueueWaiter<TValue>[] = [];\n let ended = false;\n let failure: Error | undefined;\n\n const settleWaiters = () => {\n while (waiters.length > 0) {\n const waiter = waiters.shift()!;\n if (failure) waiter.reject(failure);\n else waiter.resolve({ done: true, value: undefined });\n }\n };\n\n return {\n next: () => {\n const value = values.shift();\n if (value !== undefined) return Promise.resolve({ done: false, value });\n if (failure) return Promise.reject(failure);\n if (ended) return Promise.resolve({ done: true, value: undefined });\n return new Promise((resolve, reject) => waiters.push({ resolve, reject }));\n },\n push: value => {\n if (ended || failure) return;\n const waiter = waiters.shift();\n if (waiter) waiter.resolve({ done: false, value });\n else if (values.length >= capacity) {\n failure = new Error('Runtime Protocol observation queue overflowed.');\n settleWaiters();\n } else values.push(value);\n },\n end: () => {\n if (ended || failure) return;\n ended = true;\n settleWaiters();\n },\n fail: error => {\n if (ended || failure) return;\n failure = error;\n settleWaiters();\n },\n };\n};\n\ntype ActiveDurableObservation = {\n readonly run: TaskRunIdentity;\n readonly queue: AsyncQueue<TaskSnapshot>;\n lastSequence: number;\n terminal: boolean;\n};\n\ntype ActiveGraphObservation = {\n readonly queue: AsyncQueue<RuntimeProtocolGraphObservationBody>;\n lastSequence: number;\n terminal: boolean;\n};\n\ntype ActiveEventObservation = {\n readonly queue: AsyncQueue<EventDeliveryFor<AnyEventDeclaration>>;\n lastSequence: number;\n};\n\nconst SOCKET_OPEN = 1;\nconst DEFAULT_RUNTIME_PATH = '/runtime';\nconst DEFAULT_HANDSHAKE_TIMEOUT_MS = 10_000;\nconst DEFAULT_RECONNECT_DELAY_MS = 250;\nconst MAX_DURABLE_OBSERVATION_RECONNECT_ATTEMPTS = 5;\nconst MAX_DURABLE_OBSERVATION_RECONNECT_DELAY_MS = 5_000;\nconst terminalTaskStatuses = new Set(['completed', 'failed', 'cancelled']);\n\nlet fallbackObservationSequence = 0;\n\nconst defaultObservationId = () =>\n globalThis.crypto?.randomUUID?.() ??\n `ontahi-observation-${Date.now()}-${(fallbackObservationSequence += 1)}`;\n\nconst resolveWebSocketUrl = (configuredUrl = DEFAULT_RUNTIME_PATH) => {\n if (/^wss?:\\/\\//.test(configuredUrl)) return configuredUrl;\n if (!globalThis.location?.href) {\n throw new Error('A WebSocket Runtime Transport url is required outside a browser.');\n }\n const url = new URL(configuredUrl, globalThis.location.href);\n url.protocol = url.protocol === 'https:' ? 'wss:' : 'ws:';\n return url.toString();\n};\n\nconst createDefaultWebSocket = (url: string, protocols?: string | string[]): RuntimeWebSocket => {\n if (!globalThis.WebSocket) {\n throw new Error('WebSocket is unavailable in this runtime.');\n }\n return new globalThis.WebSocket(url, protocols) as unknown as RuntimeWebSocket;\n};\n\nconst abortError = (message: string) => new Error(message);\n\nclass RuntimeWebSocketSessionLostError extends Error {}\n\nconst awaitWithSignal = async <TValue>(\n promise: Promise<TValue>,\n signal: AbortSignal | undefined,\n message: string,\n): Promise<TValue> => {\n if (!signal) return promise;\n if (signal.aborted) throw abortError(message);\n return new Promise<TValue>((resolve, reject) => {\n const abort = () => {\n signal.removeEventListener('abort', abort);\n reject(abortError(message));\n };\n signal.addEventListener('abort', abort, { once: true });\n void promise.then(\n value => {\n signal.removeEventListener('abort', abort);\n resolve(value);\n },\n error => {\n signal.removeEventListener('abort', abort);\n reject(error);\n },\n );\n });\n};\n\nexport const createWebSocketRuntimeTransport = ({\n url,\n protocols,\n createWebSocket = createDefaultWebSocket,\n observationId = defaultObservationId,\n handshakeTimeoutMs = DEFAULT_HANDSHAKE_TIMEOUT_MS,\n reconnectDelayMs = DEFAULT_RECONNECT_DELAY_MS,\n reportError,\n}: WebSocketRuntimeTransportOptions = {}): WebSocketRuntimeTransport => {\n if (!Number.isFinite(handshakeTimeoutMs) || handshakeTimeoutMs < 0) {\n throw new TypeError('Runtime Protocol WebSocket handshake timeout must be non-negative.');\n }\n if (!Number.isFinite(reconnectDelayMs) || reconnectDelayMs < 0) {\n throw new TypeError('Runtime Protocol WebSocket reconnect delay must be non-negative.');\n }\n\n let socket: RuntimeWebSocket | undefined;\n let connection:\n | {\n readonly promise: Promise<ReadonlySet<string>>;\n readonly resolve: (capabilities: ReadonlySet<string>) => void;\n readonly reject: (error: Error) => void;\n readonly timeout: ReturnType<typeof setTimeout>;\n }\n | undefined;\n let capabilities: ReadonlySet<string> | undefined;\n let removeSocketListeners: (() => void) | undefined;\n let disposed = false;\n const pendingRequests = new Map<string, PendingRequest>();\n const durableObservations = new Map<string, ActiveDurableObservation>();\n const graphObservations = new Map<string, ActiveGraphObservation>();\n const eventObservations = new Map<string, ActiveEventObservation>();\n\n const prepareObservation = <TValue>(\n queue: AsyncQueue<TValue>,\n signal: AbortSignal | undefined,\n ) => {\n const id = observationId();\n const abort = () => queue.end();\n signal?.addEventListener('abort', abort, { once: true });\n return {\n id,\n release: () => signal?.removeEventListener('abort', abort),\n };\n };\n\n const observationIdIsActive = (id: string) =>\n durableObservations.has(id) || graphObservations.has(id) || eventObservations.has(id);\n\n const send = (frame: RuntimeProtocolSessionClientFrame) => {\n if (disposed) throw new Error('Runtime Protocol WebSocket transport is closed.');\n if (!socket || socket.readyState !== SOCKET_OPEN) {\n throw new Error('Runtime Protocol WebSocket session is not open.');\n }\n socket.send(JSON.stringify(frame));\n };\n\n const failActiveWork = (error: Error) => {\n for (const pending of pendingRequests.values()) {\n pending.removeAbortListener();\n pending.reject(error);\n }\n pendingRequests.clear();\n for (const observation of durableObservations.values()) observation.queue.fail(error);\n durableObservations.clear();\n for (const observation of graphObservations.values()) observation.queue.fail(error);\n graphObservations.clear();\n for (const observation of eventObservations.values()) observation.queue.fail(error);\n eventObservations.clear();\n };\n\n const failConnection = (currentSocket: RuntimeWebSocket, error: Error) => {\n if (socket !== currentSocket) return;\n removeSocketListeners?.();\n removeSocketListeners = undefined;\n connection?.reject(error);\n if (connection) clearTimeout(connection.timeout);\n connection = undefined;\n capabilities = undefined;\n socket = undefined;\n failActiveWork(error);\n };\n\n const handleFrame = (currentSocket: RuntimeWebSocket, input: unknown) => {\n const parsed = parseRuntimeProtocolSessionServerFrame(input);\n if (!parsed.success) {\n const error = new Error(parsed.error.error.message);\n reportError?.(error);\n failConnection(currentSocket, error);\n currentSocket.close(1002, 'Invalid Runtime Protocol session frame');\n return;\n }\n\n const frame: RuntimeProtocolSessionServerFrame = parsed.frame;\n if (frame.kind === 'ready') {\n if (!connection || capabilities) {\n const error = new Error(\n 'Runtime Protocol WebSocket session sent an unexpected ready frame.',\n );\n reportError?.(error);\n failConnection(currentSocket, error);\n currentSocket.close(1002, 'Unexpected Runtime Protocol ready frame');\n return;\n }\n capabilities = new Set(frame.capabilities);\n clearTimeout(connection.timeout);\n connection.resolve(capabilities);\n connection = undefined;\n return;\n }\n\n if (frame.kind === 'response') {\n const id = frame.response.id;\n if (!id) return;\n const pending = pendingRequests.get(id);\n if (!pending) return;\n pendingRequests.delete(id);\n pending.removeAbortListener();\n const response = parseRuntimeProtocolResponse(frame.response, pending.request);\n if (!response.success) pending.reject(new Error(response.error.error.message));\n else pending.resolve(response.response);\n return;\n }\n\n if (frame.kind === 'session-error') {\n const error = new Error(frame.error.message);\n if (frame.id) {\n const pending = pendingRequests.get(frame.id);\n if (pending) {\n pendingRequests.delete(frame.id);\n pending.removeAbortListener();\n pending.reject(error);\n return;\n }\n const durableObservation = durableObservations.get(frame.id);\n if (durableObservation) {\n durableObservations.delete(frame.id);\n durableObservation.queue.fail(error);\n return;\n }\n const graphObservation = graphObservations.get(frame.id);\n if (graphObservation) {\n graphObservations.delete(frame.id);\n graphObservation.queue.fail(error);\n return;\n }\n const eventObservation = eventObservations.get(frame.id);\n if (eventObservation) {\n eventObservations.delete(frame.id);\n eventObservation.queue.fail(error);\n return;\n }\n }\n reportError?.(error);\n return;\n }\n\n if (frame.kind === 'durable-observation') {\n const observation = durableObservations.get(frame.id);\n if (!observation || observation.terminal || frame.sequence <= observation.lastSequence)\n return;\n observation.lastSequence = frame.sequence;\n if (frame.body.kind === 'protocol-error') {\n durableObservations.delete(frame.id);\n observation.queue.fail(new Error(frame.body.error.message));\n return;\n }\n\n const snapshot = frame.body.snapshot;\n if (snapshot.taskId !== observation.run.taskId || snapshot.runId !== observation.run.runId) {\n durableObservations.delete(frame.id);\n observation.queue.fail(\n new Error('Durable Operation snapshot identity does not match the observed run.'),\n );\n try {\n send({\n protocol: RUNTIME_PROTOCOL_SESSION_NAME,\n version: RUNTIME_PROTOCOL_SESSION_VERSION,\n kind: 'durable-unobserve',\n id: frame.id,\n });\n } catch {\n // The failed observation is already detached locally.\n }\n return;\n }\n\n observation.queue.push(snapshot);\n if (terminalTaskStatuses.has(snapshot.status)) {\n observation.terminal = true;\n observation.queue.end();\n }\n return;\n }\n\n if (frame.kind === 'event-delivery') {\n const observation = eventObservations.get(frame.id);\n if (!observation || frame.sequence <= observation.lastSequence) return;\n observation.lastSequence = frame.sequence;\n observation.queue.push(frame.body);\n return;\n }\n\n const observation = graphObservations.get(frame.id);\n if (!observation || observation.terminal || frame.sequence <= observation.lastSequence) return;\n observation.lastSequence = frame.sequence;\n if (frame.kind === 'graph-observation-complete') {\n observation.terminal = true;\n graphObservations.delete(frame.id);\n observation.queue.end();\n return;\n }\n observation.queue.push(frame.body);\n if (frame.body.kind === 'protocol-error') {\n observation.terminal = true;\n graphObservations.delete(frame.id);\n observation.queue.end();\n }\n };\n\n const ensureConnection = (): Promise<ReadonlySet<string>> => {\n if (disposed)\n return Promise.reject(new Error('Runtime Protocol WebSocket transport is closed.'));\n if (capabilities && socket?.readyState === SOCKET_OPEN) return Promise.resolve(capabilities);\n if (connection) return connection.promise;\n\n if (socket) {\n failConnection(\n socket,\n new RuntimeWebSocketSessionLostError(\n 'Runtime Protocol WebSocket session was replaced; active work was not resumed.',\n ),\n );\n }\n\n const currentSocket = createWebSocket(resolveWebSocketUrl(url), protocols);\n socket = currentSocket;\n let resolveConnection!: (value: ReadonlySet<string>) => void;\n let rejectConnection!: (error: Error) => void;\n const promise = new Promise<ReadonlySet<string>>((resolve, reject) => {\n resolveConnection = resolve;\n rejectConnection = reject;\n });\n const timeout = setTimeout(() => {\n const error = new RuntimeWebSocketSessionLostError(\n 'Runtime Protocol WebSocket session handshake timed out.',\n );\n failConnection(currentSocket, error);\n currentSocket.close(1002, 'Runtime Protocol handshake timeout');\n }, handshakeTimeoutMs);\n connection = {\n promise,\n resolve: resolveConnection,\n reject: rejectConnection,\n timeout,\n };\n\n const onMessage = (event: WebSocketEvent) => {\n let input: unknown;\n try {\n input = typeof event.data === 'string' ? JSON.parse(event.data) : event.data;\n } catch {\n input = undefined;\n }\n handleFrame(currentSocket, input);\n };\n const onError = () =>\n failConnection(\n currentSocket,\n new RuntimeWebSocketSessionLostError('Runtime Protocol WebSocket session failed.'),\n );\n const onClose = (event: WebSocketEvent) =>\n failConnection(\n currentSocket,\n new RuntimeWebSocketSessionLostError(\n `Runtime Protocol WebSocket session disconnected${\n event.code === undefined\n ? ''\n : ` (${event.code}${event.reason ? `: ${event.reason}` : ''})`\n }; active work was not resumed.`,\n ),\n );\n currentSocket.addEventListener('message', onMessage);\n currentSocket.addEventListener('error', onError);\n currentSocket.addEventListener('close', onClose);\n removeSocketListeners = () => {\n currentSocket.removeEventListener('message', onMessage);\n currentSocket.removeEventListener('error', onError);\n currentSocket.removeEventListener('close', onClose);\n };\n\n return promise;\n };\n\n const request: RuntimeTransport['request'] = async (runtimeRequest, options) => {\n const signal = options?.signal;\n const connectedCapabilities = await awaitWithSignal(\n ensureConnection(),\n signal,\n 'Runtime Protocol WebSocket request was aborted.',\n );\n if (!connectedCapabilities.has('request-response')) {\n throw new Error(\n 'Runtime Protocol request/response is unavailable in this WebSocket session.',\n );\n }\n if (pendingRequests.has(runtimeRequest.id)) {\n throw new Error(`Runtime Protocol request id ${runtimeRequest.id} is already pending.`);\n }\n\n return new Promise((resolve, reject) => {\n const abort = () => {\n const pending = pendingRequests.get(runtimeRequest.id);\n if (!pending) return;\n pendingRequests.delete(runtimeRequest.id);\n pending.removeAbortListener();\n reject(abortError('Runtime Protocol WebSocket request was aborted.'));\n };\n const removeAbortListener = () => signal?.removeEventListener('abort', abort);\n pendingRequests.set(runtimeRequest.id, {\n request: runtimeRequest,\n resolve,\n reject,\n removeAbortListener,\n });\n signal?.addEventListener('abort', abort, { once: true });\n\n try {\n send({\n protocol: RUNTIME_PROTOCOL_SESSION_NAME,\n version: RUNTIME_PROTOCOL_SESSION_VERSION,\n kind: 'request',\n request: runtimeRequest,\n });\n } catch (error) {\n pendingRequests.delete(runtimeRequest.id);\n removeAbortListener();\n reject(\n error instanceof Error ? error : new Error('Runtime Protocol WebSocket send failed.'),\n );\n }\n });\n };\n\n const observeDurable: DurableOperationObservationCapability['observe'] = async function* <\n TResult,\n >(\n run: TaskRunIdentity,\n options?: RuntimeTransportRequestOptions,\n ): AsyncIterable<TaskSnapshot<TResult>> {\n if (options?.signal?.aborted) return;\n let failedAttempts = 0;\n while (!options?.signal?.aborted) {\n const queue = createAsyncQueue<TaskSnapshot>();\n const prepared = prepareObservation(queue, options?.signal);\n const { id } = prepared;\n const observation: ActiveDurableObservation = {\n run,\n queue,\n lastSequence: 0,\n terminal: false,\n };\n let subscribed = false;\n try {\n const connectedCapabilities = await awaitWithSignal(\n ensureConnection(),\n options?.signal,\n 'Durable Operation WebSocket observation was aborted.',\n );\n if (!connectedCapabilities.has('durable-operation-push')) {\n throw new Error('Durable Operation push is unavailable in this WebSocket session.');\n }\n if (observationIdIsActive(id)) {\n throw new Error(`Durable observation id ${id} is already active.`);\n }\n durableObservations.set(id, observation);\n send({\n protocol: RUNTIME_PROTOCOL_SESSION_NAME,\n version: RUNTIME_PROTOCOL_SESSION_VERSION,\n kind: 'durable-observe',\n id,\n run: { taskId: run.taskId, runId: run.runId },\n });\n subscribed = true;\n\n while (true) {\n const next = await queue.next();\n if (next.done) return;\n failedAttempts = 0;\n yield next.value as TaskSnapshot<TResult>;\n }\n } catch (error) {\n if (options?.signal?.aborted) return;\n if (disposed || !(error instanceof RuntimeWebSocketSessionLostError)) throw error;\n failedAttempts += 1;\n if (failedAttempts > MAX_DURABLE_OBSERVATION_RECONNECT_ATTEMPTS) throw error;\n const delay = Math.min(\n reconnectDelayMs * 2 ** (failedAttempts - 1),\n MAX_DURABLE_OBSERVATION_RECONNECT_DELAY_MS,\n );\n try {\n await awaitWithSignal(\n new Promise<void>(resolve => setTimeout(resolve, delay)),\n options?.signal,\n 'Durable Operation WebSocket observation was aborted.',\n );\n } catch (delayError) {\n if (options?.signal?.aborted) return;\n throw delayError;\n }\n } finally {\n prepared.release();\n if (durableObservations.get(id) === observation) durableObservations.delete(id);\n if (subscribed && !observation.terminal) {\n try {\n send({\n protocol: RUNTIME_PROTOCOL_SESSION_NAME,\n version: RUNTIME_PROTOCOL_SESSION_VERSION,\n kind: 'durable-unobserve',\n id,\n });\n } catch {\n // Disconnect already released the server-side session resources.\n }\n }\n }\n }\n };\n\n const observeGraph: GraphObservationCapability<never>['observe'] = async function* (\n request,\n options,\n ) {\n if (options?.signal?.aborted) return;\n const queue = createAsyncQueue<RuntimeProtocolGraphObservationBody>();\n const prepared = prepareObservation(queue, options?.signal);\n const { id } = prepared;\n const observation: ActiveGraphObservation = {\n queue,\n lastSequence: 0,\n terminal: false,\n };\n let subscribed = false;\n try {\n const connectedCapabilities = await awaitWithSignal(\n ensureConnection(),\n options?.signal,\n 'Data graph WebSocket observation was aborted.',\n );\n if (!connectedCapabilities.has('graph-observation-push')) {\n throw new Error('Data graph push observation is unavailable in this WebSocket session.');\n }\n if (observationIdIsActive(id)) {\n throw new Error(`Graph observation id ${id} is already active.`);\n }\n graphObservations.set(id, observation);\n send({\n protocol: RUNTIME_PROTOCOL_SESSION_NAME,\n version: RUNTIME_PROTOCOL_SESSION_VERSION,\n kind: 'graph-observe',\n id,\n request,\n });\n subscribed = true;\n\n while (true) {\n const next = await queue.next();\n if (next.done) return;\n yield next.value;\n }\n } catch (error) {\n if (!options?.signal?.aborted) throw error;\n } finally {\n prepared.release();\n if (graphObservations.get(id) === observation) graphObservations.delete(id);\n if (subscribed && !observation.terminal) {\n try {\n send({\n protocol: RUNTIME_PROTOCOL_SESSION_NAME,\n version: RUNTIME_PROTOCOL_SESSION_VERSION,\n kind: 'graph-unobserve',\n id,\n });\n } catch {\n // Disconnect already released the server-side session resources.\n }\n }\n }\n };\n\n const observeEvent: EventObservationCapability<never>['observe'] = async function* (\n event,\n options,\n ) {\n if (options?.signal?.aborted) return;\n const queue = createAsyncQueue<EventDeliveryFor<AnyEventDeclaration>>(256);\n const prepared = prepareObservation(queue, options?.signal);\n const { id } = prepared;\n const observation: ActiveEventObservation = { queue, lastSequence: 0 };\n let subscribed = false;\n try {\n const connectedCapabilities = await awaitWithSignal(\n ensureConnection(),\n options?.signal,\n 'Event WebSocket observation was aborted.',\n );\n if (!connectedCapabilities.has('event-subscription-push')) {\n throw new Error('Event push subscription is unavailable in this WebSocket session.');\n }\n if (observationIdIsActive(id)) {\n throw new Error(`Event observation id ${id} is already active.`);\n }\n eventObservations.set(id, observation);\n send({\n protocol: RUNTIME_PROTOCOL_SESSION_NAME,\n version: RUNTIME_PROTOCOL_SESSION_VERSION,\n kind: 'event-observe',\n id,\n eventId: event.id,\n eventVersion: event.version,\n });\n subscribed = true;\n while (true) {\n const next = await queue.next();\n if (next.done) return;\n yield next.value as EventDeliveryFor<typeof event>;\n }\n } catch (error) {\n if (!options?.signal?.aborted) throw error;\n } finally {\n prepared.release();\n if (eventObservations.get(id) === observation) eventObservations.delete(id);\n if (subscribed) {\n try {\n send({\n protocol: RUNTIME_PROTOCOL_SESSION_NAME,\n version: RUNTIME_PROTOCOL_SESSION_VERSION,\n kind: 'event-unobserve',\n id,\n });\n } catch {\n // Disconnect already released the server-side subscription.\n }\n }\n }\n };\n\n return {\n descriptor: { kind: 'websocket' },\n request,\n durableOperation: { observe: observeDurable },\n graph: { observe: observeGraph },\n events: { observe: observeEvent },\n close: () => {\n if (disposed) return;\n disposed = true;\n const currentSocket = socket;\n const error = new Error('Runtime Protocol WebSocket transport was closed.');\n if (currentSocket) failConnection(currentSocket, error);\n else failActiveWork(error);\n currentSocket?.close(1000, 'Runtime Protocol transport closed');\n },\n };\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ontahi/react",
3
- "version": "1.0.0-alpha.12",
3
+ "version": "1.0.0-alpha.13",
4
4
  "description": "Non-visual React hooks and bridge adapters for Ontahi applications",
5
5
  "homepage": "https://github.com/javifernandes/ontahi/tree/main/packages/react",
6
6
  "license": "Apache-2.0",
@@ -40,10 +40,10 @@
40
40
  "provenance": true
41
41
  },
42
42
  "dependencies": {
43
- "@ontahi/core": "1.0.0-alpha.12"
43
+ "@ontahi/core": "1.0.0-alpha.13"
44
44
  },
45
45
  "devDependencies": {
46
- "@tanstack/react-query": "^5.51.0",
46
+ "@tanstack/react-query": "^5.101.4",
47
47
  "@testing-library/react": "^16.3.2",
48
48
  "@types/node": "^20.0.0",
49
49
  "@types/react": "^18.3.0",
@@ -55,7 +55,7 @@
55
55
  "vitest": "^4.0.18"
56
56
  },
57
57
  "peerDependencies": {
58
- "@tanstack/react-query": "^5.51.0",
58
+ "@tanstack/react-query": "^5.101.4",
59
59
  "@types/react": "^18.3.0 || ^19.0.0",
60
60
  "react": "^18.3.0 || ^19.0.0"
61
61
  },