@cntryl/fitz 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["abortError","isAbortError","isNode","ScheduleError","ScheduleError"],"sources":["../src/core/types.ts","../src/core/lifecycle.ts","../src/core/buffer.ts","../src/core/errors.ts","../src/frame/codec.ts","../src/client/multiplexer.ts","../src/client/connection.ts","../src/transport/websocket.ts","../src/transport/tcp.ts","../src/transport/factory.ts","../src/domains/base.ts","../src/domains/kv/codec.ts","../src/core/iterator.ts","../src/domains/kv/transaction.ts","../src/domains/_routes.ts","../src/domains/kv/client.ts","../src/domains/queue/codec.ts","../src/domains/queue/types.ts","../src/domains/queue/client.ts","../src/domains/rpc/codec.ts","../src/domains/rpc/types.ts","../src/domains/rpc/client.ts","../src/domains/lease/codec.ts","../src/protocol/response.ts","../src/domains/lease/types.ts","../src/domains/lease/client.ts","../src/domains/notice/codec.ts","../src/domains/notice/types.ts","../src/domains/notice/client.ts","../src/domains/stream/codec.ts","../src/domains/stream/types.ts","../src/domains/stream/session.ts","../src/domains/stream/client.ts","../src/domains/schedule/codec.ts","../src/domains/schedule/types.ts","../src/domains/schedule/client.ts","../src/client/client.ts","../src/core/task-group.ts"],"sourcesContent":["/**\n * Common type definitions for Fitz client\n */\n\nexport type TransportType = \"ws\" | \"tcp\" | \"auto\";\n\nexport type TokenProvider = () => string | Promise<string>;\n\nexport type FitzLogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport interface FitzLogger {\n log(level: FitzLogLevel, event: string, fields?: Record<string, unknown>): void;\n}\n\nexport interface FitzTracer {\n startSpan(name: string, attributes?: Record<string, unknown>): FitzSpan;\n}\n\nexport interface FitzSpan {\n setAttribute(key: string, value: unknown): void;\n recordException(error: unknown): void;\n end(): void;\n}\n\nexport interface FitzMeter {\n counter(name: string, value: number, attributes?: Record<string, unknown>): void;\n histogram(name: string, value: number, attributes?: Record<string, unknown>): void;\n gauge?(name: string, value: number, attributes?: Record<string, unknown>): void;\n}\n\nexport interface FitzLifecycleEvent {\n event: string;\n state: ConnectionState;\n transport?: string;\n url?: string;\n attempt?: number;\n error?: string;\n}\n\nexport interface FitzObservability {\n logger?: FitzLogger;\n tracer?: FitzTracer;\n meter?: FitzMeter;\n onLifecycleEvent?: (event: FitzLifecycleEvent) => void;\n}\n\nexport interface AsyncHandlerOptions {\n maxConcurrency?: number;\n timeoutMs?: number;\n}\n\nexport interface ReconnectOptions {\n enabled?: boolean;\n maxAttempts?: number;\n backoffMs?: number;\n maxBackoffMs?: number;\n}\n\nexport interface ClientConfig {\n url: string;\n tokenProvider?: TokenProvider;\n timeout?: number;\n transport?: TransportType;\n reconnect?: ReconnectOptions;\n maxFrameSize?: number;\n authSettleDelayMs?: number;\n maxInFlightRequests?: number;\n maxRequestQueueSize?: number;\n observability?: FitzObservability;\n asyncHandlers?: AsyncHandlerOptions;\n}\n\nexport interface ClientConnectOptions {\n signal?: AbortSignal;\n}\n\nexport type TxMode = \"ReadOnly\" | \"ReadWrite\";\nexport type DurabilityMode = \"None\" | \"Async\" | \"Sync\";\n\n/**\n * Deferred is a Promise wrapper that exposes resolve/reject\n */\nexport interface Deferred<T = unknown> {\n promise: Promise<T>;\n resolve: (value: T | PromiseLike<T>) => void;\n reject: (reason?: unknown) => void;\n}\n\nexport function createDeferred<T = unknown>(): Deferred<T> {\n let resolve!: (value: T | PromiseLike<T>) => void;\n let reject!: (reason?: unknown) => void;\n\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return { promise, resolve, reject };\n}\n\ntype DeferredConstructor = {\n new <T = unknown>(): Deferred<T>;\n <T = unknown>(): Deferred<T>;\n};\n\nexport const Deferred: DeferredConstructor = createDeferred as unknown as DeferredConstructor;\n\n/**\n * Connection state machine\n */\nexport enum ConnectionState {\n Disconnected = \"DISCONNECTED\",\n Connecting = \"CONNECTING\",\n Connected = \"CONNECTED\",\n Authenticating = \"AUTHENTICATING\",\n Authenticated = \"AUTHENTICATED\",\n Reconnecting = \"RECONNECTING\",\n Closed = \"CLOSED\",\n}\n","import { createDeferred, Deferred } from \"./types\";\n\nexport type Disposable = {\n dispose(): void;\n};\n\nexport type AsyncDisposable = {\n dispose(): Promise<void>;\n};\n\nexport type Subscription = {\n readonly name?: string;\n readonly closed: boolean;\n unsubscribe(): Promise<void>;\n};\n\nexport interface SubscriptionGroup {\n readonly name: string;\n readonly size: number;\n readonly closed: boolean;\n add<T extends Subscription | Disposable | AsyncDisposable | (() => void | Promise<void>)>(\n resource: T,\n ): T;\n unsubscribe(): Promise<void>;\n}\n\nexport interface Scope {\n readonly name: string;\n readonly signal: AbortSignal;\n readonly disposed: boolean;\n add<T extends Subscription | Disposable | AsyncDisposable | (() => void | Promise<void>)>(\n resource: T,\n ): T;\n createSubscriptionGroup(groupName: string): SubscriptionGroup;\n dispose(): Promise<void>;\n}\n\nexport function createScope(name: string, parent?: Scope) {\n const controller = new AbortController();\n const signal = controller.signal;\n let disposed = false;\n let disposing = false;\n let completion: Deferred<void> | null = null;\n const resources: Array<\n Disposable | AsyncDisposable | Subscription | (() => void | Promise<void>)\n > = [];\n\n const ensureCompletion = (): Deferred<void> => {\n if (!completion) {\n completion = createDeferred<void>();\n }\n return completion;\n };\n\n const add = <\n T extends Subscription | Disposable | AsyncDisposable | (() => void | Promise<void>),\n >(\n resource: T,\n ): T => {\n if (disposed) {\n throw new Error(`Cannot add resource to disposed scope ${name}`);\n }\n resources.push(resource);\n return resource;\n };\n\n const disposeResource = async (\n resource: Disposable | AsyncDisposable | Subscription | (() => void | Promise<void>),\n ): Promise<void> => {\n if (typeof resource === \"function\") {\n await resource();\n return;\n }\n\n if (typeof (resource as Subscription).unsubscribe === \"function\") {\n await (resource as Subscription).unsubscribe();\n return;\n }\n\n if (typeof (resource as AsyncDisposable).dispose === \"function\") {\n await (resource as AsyncDisposable).dispose();\n return;\n }\n\n if (typeof (resource as Disposable).dispose === \"function\") {\n (resource as Disposable).dispose();\n return;\n }\n\n throw new Error(\"Unsupported resource type\");\n };\n\n const dispose = async (): Promise<void> => {\n if (disposed) {\n return ensureCompletion().promise;\n }\n if (disposing) {\n return ensureCompletion().promise;\n }\n\n disposing = true;\n controller.abort();\n const completionDeferred = ensureCompletion();\n const snapshot = resources.slice().reverse();\n resources.length = 0;\n\n const errors: unknown[] = [];\n for (const resource of snapshot) {\n try {\n await disposeResource(resource);\n } catch (error) {\n errors.push(error);\n }\n }\n\n disposed = true;\n disposing = false;\n\n if (errors.length > 0) {\n completionDeferred.reject(errors[0]);\n return;\n }\n\n completionDeferred.resolve();\n };\n\n const createSubscriptionGroup = (groupName: string) => {\n const group = createSubscriptionGroupInternal(groupName);\n add(group);\n return group;\n };\n\n if (parent) {\n parent.add({ dispose });\n }\n\n return {\n get name() {\n return name;\n },\n get signal() {\n return signal;\n },\n get disposed() {\n return disposed;\n },\n add,\n createSubscriptionGroup,\n dispose,\n };\n}\n\nfunction createSubscriptionGroupInternal(name: string) {\n let closed = false;\n const subscriptions: Array<\n Subscription | Disposable | AsyncDisposable | (() => void | Promise<void>)\n > = [];\n\n const add = <\n T extends Subscription | Disposable | AsyncDisposable | (() => void | Promise<void>),\n >(\n subscription: T,\n ): T => {\n if (closed) {\n throw new Error(`Cannot add subscription to closed group ${name}`);\n }\n\n subscriptions.push(subscription);\n return subscription;\n };\n\n const unsubscribe = async (): Promise<void> => {\n if (closed) {\n return;\n }\n\n closed = true;\n const snapshot = subscriptions.slice().reverse();\n subscriptions.length = 0;\n const errors: unknown[] = [];\n\n for (const subscription of snapshot) {\n try {\n if (typeof subscription === \"function\") {\n await subscription();\n continue;\n }\n\n if (typeof (subscription as Subscription).unsubscribe === \"function\") {\n await (subscription as Subscription).unsubscribe();\n continue;\n }\n\n if (typeof (subscription as AsyncDisposable).dispose === \"function\") {\n await (subscription as AsyncDisposable).dispose();\n continue;\n }\n\n if (typeof (subscription as Disposable).dispose === \"function\") {\n (subscription as Disposable).dispose();\n continue;\n }\n } catch (error) {\n errors.push(error);\n }\n }\n\n if (errors.length > 0) {\n throw errors[0];\n }\n };\n\n return {\n name,\n get size() {\n return subscriptions.length;\n },\n get closed() {\n return closed;\n },\n add,\n unsubscribe,\n };\n}\n","/**\n * Buffer utilities for big-endian encoding\n */\n\nexport const utf8Encoder = new TextEncoder();\nexport const utf8Decoder = new TextDecoder();\n\nconst routeEncodingCache = new Map<string, Uint8Array>();\nconst routeEncodingCacheMaxEntries = 256;\n\nexport function writeU32BEAt(buffer: Uint8Array, offset: number, value: number): number {\n buffer[offset++] = (value >> 24) & 0xff;\n buffer[offset++] = (value >> 16) & 0xff;\n buffer[offset++] = (value >> 8) & 0xff;\n buffer[offset++] = value & 0xff;\n return offset;\n}\n\nexport function writeU64BEAt(buffer: Uint8Array, offset: number, value: bigint): number {\n buffer[offset++] = Number((value >> 56n) & 0xffn);\n buffer[offset++] = Number((value >> 48n) & 0xffn);\n buffer[offset++] = Number((value >> 40n) & 0xffn);\n buffer[offset++] = Number((value >> 32n) & 0xffn);\n buffer[offset++] = Number((value >> 24n) & 0xffn);\n buffer[offset++] = Number((value >> 16n) & 0xffn);\n buffer[offset++] = Number((value >> 8n) & 0xffn);\n buffer[offset++] = Number(value & 0xffn);\n return offset;\n}\n\nexport function readU32BEAt(buffer: Uint8Array, offset: number): number {\n return (\n ((buffer[offset] << 24) |\n (buffer[offset + 1] << 16) |\n (buffer[offset + 2] << 8) |\n buffer[offset + 3]) >>>\n 0\n );\n}\n\nexport function readU128BEAt(buffer: Uint8Array, offset: number): bigint {\n const part0 = BigInt(readU32BEAt(buffer, offset));\n const part1 = BigInt(readU32BEAt(buffer, offset + 4));\n const part2 = BigInt(readU32BEAt(buffer, offset + 8));\n const part3 = BigInt(readU32BEAt(buffer, offset + 12));\n return (part0 << 96n) | (part1 << 64n) | (part2 << 32n) | part3;\n}\n\nexport function getRouteEncoding(route: string): Uint8Array {\n const cached = routeEncodingCache.get(route);\n if (cached) {\n return cached;\n }\n\n const encoded = utf8Encoder.encode(route);\n const routePayload = new Uint8Array(4 + encoded.length);\n const len = encoded.length;\n routePayload[0] = (len >> 24) & 0xff;\n routePayload[1] = (len >> 16) & 0xff;\n routePayload[2] = (len >> 8) & 0xff;\n routePayload[3] = len & 0xff;\n routePayload.set(encoded, 4);\n\n if (routeEncodingCache.size >= routeEncodingCacheMaxEntries) {\n const firstKey = routeEncodingCache.keys().next().value;\n if (firstKey !== undefined) {\n routeEncodingCache.delete(firstKey);\n }\n }\n routeEncodingCache.set(route, routePayload);\n return routePayload;\n}\n\nexport type BufferWriter = ReturnType<typeof createBufferWriter>;\n\nexport function createBufferWriter(capacity: number = 4096) {\n let buffer = new Uint8Array(capacity);\n let offset = 0;\n\n const ensureCapacity = (needed: number) => {\n if (offset + needed > buffer.length) {\n const newCapacity = Math.max(buffer.length * 2, offset + needed);\n const newBuffer = new Uint8Array(newCapacity);\n newBuffer.set(buffer);\n buffer = newBuffer;\n }\n };\n\n const writeU8 = (value: number): void => {\n ensureCapacity(1);\n buffer[offset++] = value & 0xff;\n };\n\n const writeU16BE = (value: number): void => {\n ensureCapacity(2);\n buffer[offset++] = (value >> 8) & 0xff;\n buffer[offset++] = value & 0xff;\n };\n\n const writeU32BE = (value: number): void => {\n ensureCapacity(4);\n buffer[offset++] = (value >> 24) & 0xff;\n buffer[offset++] = (value >> 16) & 0xff;\n buffer[offset++] = (value >> 8) & 0xff;\n buffer[offset++] = value & 0xff;\n };\n\n const writeU32LE = (value: number): void => {\n ensureCapacity(4);\n buffer[offset++] = value & 0xff;\n buffer[offset++] = (value >> 8) & 0xff;\n buffer[offset++] = (value >> 16) & 0xff;\n buffer[offset++] = (value >> 24) & 0xff;\n };\n\n const writeU64BE = (value: bigint): void => {\n ensureCapacity(8);\n buffer[offset++] = Number((value >> 56n) & 0xffn);\n buffer[offset++] = Number((value >> 48n) & 0xffn);\n buffer[offset++] = Number((value >> 40n) & 0xffn);\n buffer[offset++] = Number((value >> 32n) & 0xffn);\n buffer[offset++] = Number((value >> 24n) & 0xffn);\n buffer[offset++] = Number((value >> 16n) & 0xffn);\n buffer[offset++] = Number((value >> 8n) & 0xffn);\n buffer[offset++] = Number(value & 0xffn);\n };\n\n const writeU64LE = (value: bigint): void => {\n ensureCapacity(8);\n buffer[offset++] = Number(value & 0xffn);\n buffer[offset++] = Number((value >> 8n) & 0xffn);\n buffer[offset++] = Number((value >> 16n) & 0xffn);\n buffer[offset++] = Number((value >> 24n) & 0xffn);\n buffer[offset++] = Number((value >> 32n) & 0xffn);\n buffer[offset++] = Number((value >> 40n) & 0xffn);\n buffer[offset++] = Number((value >> 48n) & 0xffn);\n buffer[offset++] = Number((value >> 56n) & 0xffn);\n };\n\n const writeBytes = (data: Uint8Array): void => {\n ensureCapacity(data.length);\n buffer.set(data, offset);\n offset += data.length;\n };\n\n const overwriteU32BE = (position: number, value: number): void => {\n if (position + 4 > buffer.length) {\n throw new Error(\"Buffer overwrite out of bounds\");\n }\n buffer[position] = (value >> 24) & 0xff;\n buffer[position + 1] = (value >> 16) & 0xff;\n buffer[position + 2] = (value >> 8) & 0xff;\n buffer[position + 3] = value & 0xff;\n };\n\n const writeString = (str: string): void => {\n if (str.length === 0) {\n writeU32BE(0);\n return;\n }\n\n const maxBytes = str.length * 4;\n ensureCapacity(4 + maxBytes);\n const lengthOffset = offset;\n offset += 4;\n\n const slice = buffer.subarray(offset, offset + maxBytes);\n const { written } = utf8Encoder.encodeInto(str, slice);\n offset += written;\n\n buffer[lengthOffset] = (written >> 24) & 0xff;\n buffer[lengthOffset + 1] = (written >> 16) & 0xff;\n buffer[lengthOffset + 2] = (written >> 8) & 0xff;\n buffer[lengthOffset + 3] = written & 0xff;\n };\n\n const writeStringU64 = (str: string): void => {\n if (str.length === 0) {\n writeU64BE(0n);\n return;\n }\n\n const maxBytes = str.length * 4;\n ensureCapacity(8 + maxBytes);\n const lengthOffset = offset;\n offset += 8;\n\n const slice = buffer.subarray(offset, offset + maxBytes);\n const { written } = utf8Encoder.encodeInto(str, slice);\n offset += written;\n\n const length = BigInt(written);\n buffer[lengthOffset] = Number((length >> 56n) & 0xffn);\n buffer[lengthOffset + 1] = Number((length >> 48n) & 0xffn);\n buffer[lengthOffset + 2] = Number((length >> 40n) & 0xffn);\n buffer[lengthOffset + 3] = Number((length >> 32n) & 0xffn);\n buffer[lengthOffset + 4] = Number((length >> 24n) & 0xffn);\n buffer[lengthOffset + 5] = Number((length >> 16n) & 0xffn);\n buffer[lengthOffset + 6] = Number((length >> 8n) & 0xffn);\n buffer[lengthOffset + 7] = Number(length & 0xffn);\n };\n\n const writeStringU64LE = (str: string): void => {\n if (str.length === 0) {\n writeU64LE(0n);\n return;\n }\n\n const maxBytes = str.length * 4;\n ensureCapacity(8 + maxBytes);\n const lengthOffset = offset;\n offset += 8;\n\n const slice = buffer.subarray(offset, offset + maxBytes);\n const { written } = utf8Encoder.encodeInto(str, slice);\n offset += written;\n\n const length = BigInt(written);\n buffer[lengthOffset] = Number(length & 0xffn);\n buffer[lengthOffset + 1] = Number((length >> 8n) & 0xffn);\n buffer[lengthOffset + 2] = Number((length >> 16n) & 0xffn);\n buffer[lengthOffset + 3] = Number((length >> 24n) & 0xffn);\n buffer[lengthOffset + 4] = Number((length >> 32n) & 0xffn);\n buffer[lengthOffset + 5] = Number((length >> 40n) & 0xffn);\n buffer[lengthOffset + 6] = Number((length >> 48n) & 0xffn);\n buffer[lengthOffset + 7] = Number((length >> 56n) & 0xffn);\n };\n\n const writeRoute = (route: string): void => {\n const encoded = getRouteEncoding(route);\n writeBytes(encoded);\n };\n\n const getBuffer = (): Uint8Array => {\n return offset === buffer.length ? buffer : buffer.slice(0, offset);\n };\n\n const getBufferView = (): Uint8Array => {\n return buffer.subarray(0, offset);\n };\n\n const getLength = (): number => offset;\n\n const reset = (): void => {\n offset = 0;\n };\n\n const writeOptionalU64 = (value: bigint | undefined): void => {\n if (value === undefined) {\n writeU8(0);\n } else {\n writeU8(1);\n writeU64BE(value);\n }\n };\n\n const writeOptionalString = (value: string | undefined): void => {\n if (value === undefined) {\n writeU8(0);\n } else {\n writeU8(1);\n writeString(value);\n }\n };\n\n const writeOptionalBytes = (value: Uint8Array | undefined): void => {\n if (value === undefined) {\n writeU8(0);\n } else {\n writeU8(1);\n writeU32BE(value.length);\n writeBytes(value);\n }\n };\n\n return {\n writeU8,\n writeU16BE,\n writeU32BE,\n writeU32LE,\n writeU64BE,\n writeU64LE,\n writeBytes,\n writeString,\n writeStringU64,\n writeStringU64LE,\n writeRoute,\n getBuffer,\n getBufferView,\n getLength,\n reset,\n writeOptionalU64,\n writeOptionalString,\n writeOptionalBytes,\n overwriteU32BE,\n };\n}\n\ntype BufferWriterConstructor = {\n new (capacity?: number): BufferWriter;\n (capacity?: number): BufferWriter;\n};\n\nexport const BufferWriter: BufferWriterConstructor = function (capacity = 4096) {\n return createBufferWriter(capacity);\n} as unknown as BufferWriterConstructor;\n\nexport type BufferReader = ReturnType<typeof createBufferReader>;\n\nexport function createBufferReader(buffer: Uint8Array) {\n let internalBuffer = buffer;\n let offset = 0;\n\n const readU8 = (): number => {\n if (offset >= internalBuffer.length) {\n throw new Error(\"Buffer overflow: cannot read U8\");\n }\n return internalBuffer[offset++];\n };\n\n const readU16BE = (): number => {\n if (offset + 2 > internalBuffer.length) {\n throw new Error(\"Buffer overflow: cannot read U16BE\");\n }\n const value = (internalBuffer[offset] << 8) | internalBuffer[offset + 1];\n offset += 2;\n return value;\n };\n\n const readU32BE = (): number => {\n if (offset + 4 > internalBuffer.length) {\n throw new Error(\"Buffer overflow: cannot read U32BE\");\n }\n const value =\n (internalBuffer[offset] << 24) |\n (internalBuffer[offset + 1] << 16) |\n (internalBuffer[offset + 2] << 8) |\n internalBuffer[offset + 3];\n offset += 4;\n return value >>> 0;\n };\n\n const readU64BE = (): bigint => {\n if (offset + 8 > internalBuffer.length) {\n throw new Error(\"Buffer overflow: cannot read U64BE\");\n }\n const high =\n ((BigInt(internalBuffer[offset]) << 24n) |\n (BigInt(internalBuffer[offset + 1]) << 16n) |\n (BigInt(internalBuffer[offset + 2]) << 8n) |\n BigInt(internalBuffer[offset + 3])) &\n 0xffffffffn;\n\n const low =\n ((BigInt(internalBuffer[offset + 4]) << 24n) |\n (BigInt(internalBuffer[offset + 5]) << 16n) |\n (BigInt(internalBuffer[offset + 6]) << 8n) |\n BigInt(internalBuffer[offset + 7])) &\n 0xffffffffn;\n\n offset += 8;\n return (high << 32n) | low;\n };\n\n const readBytes = (count: number): Uint8Array => {\n if (offset + count > internalBuffer.length) {\n throw new Error(\"Buffer overflow: cannot read bytes\");\n }\n const data = internalBuffer.subarray(offset, offset + count);\n offset += count;\n return data;\n };\n\n const readString = (): string => {\n const length = readU32BE();\n if (length === 0) {\n return \"\";\n }\n\n const bytes = internalBuffer.subarray(offset, offset + length);\n offset += length;\n return utf8Decoder.decode(bytes);\n };\n\n const readRoute = (): string => readString();\n\n const remainingBytes = (): number => internalBuffer.length - offset;\n\n const isEOF = (): boolean => offset >= internalBuffer.length;\n\n const getOffset = (): number => offset;\n\n const setOffset = (value: number): void => {\n if (value < 0 || value > internalBuffer.length) {\n throw new Error(\"Invalid offset\");\n }\n offset = value;\n };\n\n const peekU8 = (): number => {\n if (offset >= internalBuffer.length) {\n throw new Error(\"Buffer overflow: cannot peek U8\");\n }\n return internalBuffer[offset];\n };\n\n const readOptionalU64 = (): bigint | undefined => {\n const hasValue = readU8();\n if (hasValue === 0) {\n return undefined;\n }\n return readU64BE();\n };\n\n const readOptionalString = (): string | undefined => {\n const hasValue = readU8();\n if (hasValue === 0) {\n return undefined;\n }\n return readString();\n };\n\n const readOptionalBytes = (): Uint8Array | undefined => {\n const hasValue = readU8();\n if (hasValue === 0) {\n return undefined;\n }\n const length = readU32BE();\n return readBytes(length);\n };\n\n const remaining = (): Uint8Array => internalBuffer.slice(offset);\n\n return {\n readU8,\n readU16BE,\n readU32BE,\n readU64BE,\n readBytes,\n readString,\n readRoute,\n remainingBytes,\n isEOF,\n getOffset,\n setOffset,\n peekU8,\n readOptionalU64,\n readOptionalString,\n readOptionalBytes,\n remaining,\n };\n}\n\ntype BufferReaderConstructor = {\n new (buffer: Uint8Array): BufferReader;\n (buffer: Uint8Array): BufferReader;\n};\n\nexport const BufferReader: BufferReaderConstructor = function (buffer: Uint8Array) {\n return createBufferReader(buffer);\n} as unknown as BufferReaderConstructor;\n","export const ErrKvTransactionAborted = 1;\nexport const ErrKvLeaseExpired = 2;\nexport const ErrKvConflictingWrite = 3;\nexport const ErrKvKeyNotFound = 4;\nexport const ErrKvOperationNotAllowed = 5;\n\nexport const ErrCodeKvIsolationConflict = 1004;\nexport const ErrCodeKvBackendError = 1009;\n\nexport const ErrQueueNotFound = 1;\nexport const ErrQueueMessageNotFound = 2;\nexport const ErrQueueInvalidToken = 3;\nexport const ErrQueueFull = 4;\nexport const ErrQueueInvalidDelay = 5;\n\nexport const ErrCodeQueueFull = 4005;\n\nexport const ErrRpcTimeout = 1;\nexport const ErrRpcHandlerNotFound = 2;\nexport const ErrRpcHandlerError = 3;\nexport const ErrRpcInvalidRequest = 4;\n\nexport const ErrCodeRpcTimeout = 6001;\nexport const ErrCodeRpcWorkerNotFound = 6002;\nexport const ErrCodeRpcBackpressure = 6003;\nexport const ErrCodeRpcRouteNotRegistered = 6004;\nexport const ErrCodeRpcCorrelationNotFound = 6005;\nexport const ErrCodeRpcUnauthorized = 6009;\n\nexport const ErrLeaseHeld = 1;\nexport const ErrLeaseNotFound = 2;\nexport const ErrLeaseInvalidToken = 3;\n\nexport const ErrCodeLeaseHeld = 5001;\n\nexport const ErrNoticeGeneral = 1;\n\nexport const ErrStreamNotFound = 1;\nexport const ErrStreamOffsetOutOfRange = 2;\nexport const ErrStreamInvalidOffset = 3;\nexport const ErrStreamFull = 4;\nexport const ErrStreamSessionNotFound = 5;\nexport const ErrStreamSessionClosed = 6;\nexport const ErrStreamExpectedOffsetMismatch = 7;\n\nexport const ErrScheduleNotFound = 1;\nexport const ErrScheduleTaskNotFound = 2;\nexport const ErrScheduleInvalidCron = 3;\nexport const ErrScheduleInvalidDelay = 4;\nexport const ErrScheduleInvalidTimestamp = 5;\n\nconst retryableErrorCodes = new Set([\n \"KV_3\",\n `KV_${ErrCodeKvIsolationConflict}`,\n `KV_${ErrCodeKvBackendError}`,\n \"QUEUE_4\",\n `QUEUE_${ErrCodeQueueFull}`,\n \"LEASE_1\",\n `LEASE_${ErrCodeLeaseHeld}`,\n \"RPC_1\",\n \"RPC_2\",\n `RPC_${ErrCodeRpcTimeout}`,\n `RPC_${ErrCodeRpcWorkerNotFound}`,\n `RPC_${ErrCodeRpcBackpressure}`,\n `RPC_${ErrCodeRpcRouteNotRegistered}`,\n]);\n\nfunction retryableKey(error: FitzError): string | null {\n const prefix = error.code.split(\"_\")[0];\n if (error.domainCode === undefined) {\n return null;\n }\n return `${prefix}_${error.domainCode}`;\n}\n\nexport function isRetryable(error: unknown): boolean {\n if (!(error instanceof FitzError)) {\n return false;\n }\n\n if (error instanceof TimeoutError || error instanceof TransportError) {\n return true;\n }\n\n const key = retryableKey(error);\n return key !== null && retryableErrorCodes.has(key);\n}\n\n/**\n * Error types for Fitz client\n */\n\nexport class FitzError extends Error {\n code: string;\n domainCode?: number;\n context?: Record<string, unknown>;\n\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message);\n this.name = \"FitzError\";\n this.code = code;\n this.domainCode = domainCode;\n this.context = context;\n Object.setPrototypeOf(this, FitzError.prototype);\n }\n\n getContext(): Record<string, unknown> | undefined {\n return this.context;\n }\n}\n\nexport class TransportError extends FitzError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, \"TRANSPORT_ERROR\", undefined, context);\n this.name = \"TransportError\";\n Object.setPrototypeOf(this, TransportError.prototype);\n }\n}\n\nexport class ConnectionError extends FitzError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, \"CONNECTION_ERROR\", undefined, context);\n this.name = \"ConnectionError\";\n Object.setPrototypeOf(this, ConnectionError.prototype);\n }\n}\n\nexport class RequestQueueFullError extends FitzError {\n constructor(message = \"Request queue is full\", context?: Record<string, unknown>) {\n super(message, \"REQUEST_QUEUE_FULL\", undefined, context);\n this.name = \"RequestQueueFullError\";\n Object.setPrototypeOf(this, RequestQueueFullError.prototype);\n }\n}\n\nexport class AuthenticationError extends FitzError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, \"AUTH_ERROR\", undefined, context);\n this.name = \"AuthenticationError\";\n Object.setPrototypeOf(this, AuthenticationError.prototype);\n }\n}\n\nexport class TimeoutError extends FitzError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, \"TIMEOUT\", undefined, context);\n this.name = \"TimeoutError\";\n Object.setPrototypeOf(this, TimeoutError.prototype);\n }\n}\n\nexport class ProtocolError extends FitzError {\n constructor(message: string, domainCode?: number, context?: Record<string, unknown>) {\n super(message, \"PROTOCOL_ERROR\", domainCode, context);\n this.name = \"ProtocolError\";\n Object.setPrototypeOf(this, ProtocolError.prototype);\n }\n}\n\nexport class CodecError extends FitzError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, \"CODEC_ERROR\", undefined, context);\n this.name = \"CodecError\";\n Object.setPrototypeOf(this, CodecError.prototype);\n }\n}\n\n// Domain-specific errors\nexport class KvError extends FitzError {\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message, `KV_${code}`, domainCode, context);\n this.name = \"KvError\";\n Object.setPrototypeOf(this, KvError.prototype);\n }\n}\n\nexport class QueueError extends FitzError {\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message, `QUEUE_${code}`, domainCode, context);\n this.name = \"QueueError\";\n Object.setPrototypeOf(this, QueueError.prototype);\n }\n}\n\nexport class NoticeError extends FitzError {\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message, `NOTICE_${code}`, domainCode, context);\n this.name = \"NoticeError\";\n Object.setPrototypeOf(this, NoticeError.prototype);\n }\n}\n\nexport class RpcError extends FitzError {\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message, `RPC_${code}`, domainCode, context);\n this.name = \"RpcError\";\n Object.setPrototypeOf(this, RpcError.prototype);\n }\n}\n\nexport class LeaseError extends FitzError {\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message, `LEASE_${code}`, domainCode, context);\n this.name = \"LeaseError\";\n Object.setPrototypeOf(this, LeaseError.prototype);\n }\n}\n\nexport class StreamError extends FitzError {\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message, `STREAM_${code}`, domainCode, context);\n this.name = \"StreamError\";\n Object.setPrototypeOf(this, StreamError.prototype);\n }\n}\n\nexport class ScheduleError extends FitzError {\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message, `SCHEDULE_${code}`, domainCode, context);\n this.name = \"ScheduleError\";\n Object.setPrototypeOf(this, ScheduleError.prototype);\n }\n}\n","/**\n * Frame encoding/decoding for Fitz protocol\n * Format: [MessageType (variable)][Length (u16 BE)][Payload]\n * MessageType: 0-254 = single byte, 255+ = escape 0xFF + u16 BE\n */\n\nimport { CodecError } from \"../core/errors\";\n\nexport interface Frame {\n messageType: number;\n payload: Uint8Array;\n}\n\nconst encodeFrame = (messageType: number, payload: Uint8Array): Uint8Array => {\n if (messageType < 0) {\n throw new CodecError(`Invalid message type: ${messageType}`);\n }\n\n const payloadLength = payload.length;\n const typeSize = messageType <= 254 ? 1 : 3;\n const buffer = new Uint8Array(typeSize + 2 + payloadLength);\n let offset = 0;\n\n if (messageType <= 254) {\n buffer[offset++] = messageType;\n } else {\n buffer[offset++] = 0xff;\n buffer[offset++] = (messageType >> 8) & 0xff;\n buffer[offset++] = messageType & 0xff;\n }\n\n buffer[offset++] = (payloadLength >> 8) & 0xff;\n buffer[offset++] = payloadLength & 0xff;\n buffer.set(payload, offset);\n\n return buffer;\n};\n\nconst decodeFrame = (buffer: Uint8Array): Frame => {\n let offset = 0;\n\n const firstByte = buffer[offset++];\n let messageType: number;\n\n if (firstByte === 0xff) {\n if (offset + 2 > buffer.length) {\n throw new CodecError(\"Frame incomplete: invalid message type header\");\n }\n messageType = (buffer[offset] << 8) | buffer[offset + 1];\n offset += 2;\n } else {\n messageType = firstByte;\n }\n\n if (offset + 2 > buffer.length) {\n throw new CodecError(\"Frame incomplete: missing length header\");\n }\n\n const length = (buffer[offset] << 8) | buffer[offset + 1];\n offset += 2;\n\n const remaining = buffer.length - offset;\n if (remaining < length) {\n throw new CodecError(`Frame incomplete: expected ${length} bytes, got ${remaining}`);\n }\n\n const payload = buffer.subarray(offset, offset + length);\n return { messageType, payload };\n};\n\nconst getMessageTypeSize = (messageType: number): number => {\n if (messageType <= 254) {\n return 1;\n }\n return 3;\n};\n\nconst calculateFrameSize = (messageType: number, payloadLength: number): number => {\n return getMessageTypeSize(messageType) + 2 + payloadLength;\n};\n\nexport const FrameCodec = {\n encodeFrame,\n decodeFrame,\n getMessageTypeSize,\n calculateFrameSize,\n};\n\n/**\n * Helper for streaming frame parsing\n */\nexport type FrameParser = ReturnType<typeof createFrameParser>;\n\nexport function createFrameParser() {\n let buffer: Uint8Array = new Uint8Array(1024);\n let offset = 0;\n let end = 0;\n let messageType = -1;\n let payloadLength = -1;\n let state = 0; // 0=reading_type, 1=reading_length, 2=reading_payload\n\n const ensureCapacity = (needed: number): void => {\n if (buffer.length >= needed) {\n return;\n }\n\n const newCapacity = Math.max(buffer.length * 2, needed, 1024);\n const newBuffer = new Uint8Array(newCapacity);\n if (end > offset) {\n newBuffer.set(buffer.subarray(offset, end));\n end -= offset;\n offset = 0;\n } else {\n end = 0;\n offset = 0;\n }\n buffer = newBuffer;\n };\n\n const appendData = (data: Uint8Array): void => {\n if (data.length === 0) {\n return;\n }\n\n const remaining = end - offset;\n if (remaining === 0) {\n offset = 0;\n end = 0;\n } else if (buffer.length - end < data.length) {\n if (offset > 0) {\n buffer.copyWithin(0, offset, end);\n end = remaining;\n offset = 0;\n }\n }\n\n ensureCapacity(end + data.length);\n buffer.set(data, end);\n end += data.length;\n };\n\n const parseFrames = (data: Uint8Array): Frame[] => {\n appendData(data);\n\n const frames: Frame[] = [];\n\n while (true) {\n if (state === 0) {\n if (offset >= end) break;\n\n const firstByte = buffer[offset];\n if (firstByte === 0xff) {\n if (offset + 3 > end) break;\n messageType = (buffer[offset + 1] << 8) | buffer[offset + 2];\n offset += 3;\n } else {\n messageType = firstByte;\n offset += 1;\n }\n\n state = 1;\n }\n\n if (state === 1) {\n if (offset + 2 > end) break;\n payloadLength = (buffer[offset] << 8) | buffer[offset + 1];\n offset += 2;\n state = 2;\n }\n\n if (state === 2) {\n if (offset + payloadLength > end) break;\n frames.push({\n messageType,\n payload: buffer.slice(offset, offset + payloadLength),\n });\n offset += payloadLength;\n messageType = -1;\n payloadLength = -1;\n state = 0;\n }\n }\n\n if (offset === end) {\n offset = 0;\n end = 0;\n }\n\n return frames;\n };\n\n const hasCompleteFrame = (): boolean => {\n return state === 2 && payloadLength >= 0 && offset + payloadLength <= end;\n };\n\n return {\n parseFrames,\n hasCompleteFrame,\n };\n}\n\ntype FrameParserConstructor = {\n new (): FrameParser;\n};\n\nexport const FrameParser: FrameParserConstructor = function () {\n return createFrameParser();\n} as unknown as FrameParserConstructor;\n","/**\n * Multiplexer for correlating in-flight requests with responses\n * Per CLIENT_SPEC.md and fitz-go/internal/core/connection/mux.go\n *\n * Key Pattern: FIFO ordering per MessageType\n * - Responses matched to requests in order received per MessageType\n * - Matches server's sequential processing model per actor/route\n * - No correlation IDs for most operations (except RPC streaming)\n */\n\nimport { Deferred, ConnectionState, FitzMeter, FitzTracer } from \"../core/types\";\nimport { ConnectionError, TimeoutError } from \"../core/errors\";\nimport { MSG_RPC_REQUEST, MSG_RPC_RESPONSE } from \"../frame/types\";\n\nexport interface MultiplexerObservability {\n meter?: FitzMeter;\n tracer?: FitzTracer;\n}\n\nexport interface PendingRequest {\n deferred: Deferred<Uint8Array>;\n deadline: number;\n timeoutIndex: number;\n queueIndex: number;\n sentAt: number | undefined;\n rejectRequest: (error: Error) => void;\n onComplete?: () => void;\n}\n\n/**\n * Handler for server-pushed frames.\n *\n * Most pushed traffic uses dedicated `*_NOTIFY` message types. RPC is the\n * protocol exception: inbound worker requests and streaming responses arrive on\n * `MSG_RPC_REQUEST` and `MSG_RPC_RESPONSE`, so those frames are only treated as\n * pushes when there is no matching FIFO request waiting on the same type.\n */\nexport type NotificationHandler = (payload: Uint8Array) => void;\n\n/**\n * RPC correlation handler for streamed responses\n * @param correlationId 16-byte correlation ID\n * @param payload Response payload\n */\nexport type RpcCorrelationHandler = (correlationId: Uint8Array, payload: Uint8Array) => void;\n\nexport type Multiplexer = ReturnType<typeof createMultiplexer>;\n\nexport function createMultiplexer(observability: MultiplexerObservability = {}) {\n type PendingQueue = {\n queue: Array<PendingRequest | undefined>;\n head: number;\n tail: number;\n size: number;\n };\n\n const pending: Record<number, PendingQueue | undefined> = {};\n const notificationHandlers: Map<number, NotificationHandler> = new Map();\n const optionalResponses: Map<number, number> = new Map();\n let state: ConnectionState = ConnectionState.Disconnected;\n\n let timeoutEntries: PendingRequest[] = [];\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n let nextTimeoutDeadline = Infinity;\n\n const swapTimeoutEntries = (leftIndex: number, rightIndex: number): void => {\n const left = timeoutEntries[leftIndex];\n const right = timeoutEntries[rightIndex];\n timeoutEntries[leftIndex] = right;\n timeoutEntries[rightIndex] = left;\n left.timeoutIndex = rightIndex;\n right.timeoutIndex = leftIndex;\n };\n\n const heapifyUp = (index: number): void => {\n while (index > 0) {\n const parentIndex = (index - 1) >> 1;\n if (timeoutEntries[index].deadline >= timeoutEntries[parentIndex].deadline) {\n return;\n }\n swapTimeoutEntries(index, parentIndex);\n index = parentIndex;\n }\n };\n\n const heapifyDown = (index: number): void => {\n const length = timeoutEntries.length;\n while (true) {\n const leftIndex = index * 2 + 1;\n const rightIndex = index * 2 + 2;\n let smallest = index;\n\n if (\n leftIndex < length &&\n timeoutEntries[leftIndex].deadline < timeoutEntries[smallest].deadline\n ) {\n smallest = leftIndex;\n }\n if (\n rightIndex < length &&\n timeoutEntries[rightIndex].deadline < timeoutEntries[smallest].deadline\n ) {\n smallest = rightIndex;\n }\n if (smallest === index) {\n return;\n }\n swapTimeoutEntries(index, smallest);\n index = smallest;\n }\n };\n\n const getNextTimeoutDeadline = (): number => {\n return timeoutEntries.length === 0 ? Infinity : timeoutEntries[0].deadline;\n };\n\n const removeTimeoutEntry = (request: PendingRequest): void => {\n const index = request.timeoutIndex;\n if (index < 0 || index >= timeoutEntries.length) {\n return;\n }\n\n const last = timeoutEntries.pop();\n if (!last || index === timeoutEntries.length) {\n request.timeoutIndex = -1;\n return;\n }\n\n timeoutEntries[index] = last;\n last.timeoutIndex = index;\n request.timeoutIndex = -1;\n heapifyDown(index);\n heapifyUp(index);\n };\n\n let requestsInFlight = 0;\n let requestsTotal = 0;\n let responsesTotal = 0;\n let responsesDropped = 0;\n let responsesIgnored = 0;\n\n const meter = observability.meter;\n const tracer = observability.tracer;\n const hasObservability = meter !== undefined || tracer !== undefined;\n\n const getOrCreatePendingQueue = (messageType: number): PendingQueue => {\n const existing = pending[messageType];\n if (existing) {\n return existing;\n }\n\n const created: PendingQueue = {\n queue: Array.from({ length: 128 }) as Array<PendingRequest | undefined>,\n head: 0,\n tail: 0,\n size: 0,\n };\n pending[messageType] = created;\n return created;\n };\n\n const growPendingQueue = (queueEntry: PendingQueue): void => {\n const newCapacity = Math.max(queueEntry.queue.length * 2, 16);\n const newQueue = Array.from({ length: newCapacity }) as Array<PendingRequest | undefined>;\n\n for (let i = 0; i < queueEntry.size; i += 1) {\n const entry = queueEntry.queue[(queueEntry.head + i) % queueEntry.queue.length];\n newQueue[i] = entry;\n if (entry) {\n entry.queueIndex = i;\n }\n }\n\n queueEntry.queue = newQueue;\n queueEntry.head = 0;\n queueEntry.tail = queueEntry.size;\n };\n\n const enqueuePendingRequest = (queueEntry: PendingQueue, request: PendingRequest): void => {\n if (queueEntry.size >= queueEntry.queue.length) {\n growPendingQueue(queueEntry);\n }\n\n request.queueIndex = queueEntry.tail;\n queueEntry.queue[queueEntry.tail] = request;\n queueEntry.tail = (queueEntry.tail + 1) % queueEntry.queue.length;\n queueEntry.size += 1;\n };\n\n const dequeuePendingRequest = (queueEntry: PendingQueue): PendingRequest => {\n while (queueEntry.size > 0) {\n const request = queueEntry.queue[queueEntry.head];\n queueEntry.queue[queueEntry.head] = undefined;\n queueEntry.head = (queueEntry.head + 1) % queueEntry.queue.length;\n if (request) {\n queueEntry.size -= 1;\n return request;\n }\n }\n\n throw new Error(\"Pending queue invariant broken\");\n };\n\n const setConnected = (): void => {\n state = ConnectionState.Authenticated;\n };\n\n const setDisconnected = (): void => {\n state = ConnectionState.Disconnected;\n optionalResponses.clear();\n cancelAll();\n };\n\n const scheduleTimeout = (deadline: number): void => {\n if (timeoutHandle !== undefined && deadline >= nextTimeoutDeadline) {\n return;\n }\n\n if (timeoutHandle !== undefined) {\n clearTimeout(timeoutHandle);\n timeoutHandle = undefined;\n }\n\n nextTimeoutDeadline = deadline;\n const delay = Math.max(0, deadline - Date.now());\n timeoutHandle = setTimeout(handleTimeouts, delay);\n };\n\n const handleTimeouts = (): void => {\n timeoutHandle = undefined;\n nextTimeoutDeadline = Infinity;\n\n const nowMs = Date.now();\n\n while (timeoutEntries.length > 0 && timeoutEntries[0].deadline <= nowMs) {\n const request = timeoutEntries[0];\n removeTimeoutEntry(request);\n request.deadline = -1;\n meter?.counter(\"fitz.request.timeout\", 1);\n request.rejectRequest(\n new TimeoutError(`Request timeout after ${nowMs - (request.sentAt ?? nowMs)}ms`, undefined),\n );\n }\n\n nextTimeoutDeadline = getNextTimeoutDeadline();\n if (nextTimeoutDeadline !== Infinity) {\n const delay = Math.max(0, nextTimeoutDeadline - Date.now());\n timeoutHandle = setTimeout(handleTimeouts, delay);\n }\n };\n\n const registerNotificationHandler = (messageType: number, handler: NotificationHandler): void => {\n notificationHandlers.set(messageType, handler);\n };\n\n const unregisterNotificationHandler = (messageType: number): void => {\n notificationHandlers.delete(messageType);\n };\n\n const expectOptionalResponse = (messageType: number): (() => void) => {\n const nextCount = (optionalResponses.get(messageType) ?? 0) + 1;\n optionalResponses.set(messageType, nextCount);\n\n return () => {\n const currentCount = optionalResponses.get(messageType) ?? 0;\n if (currentCount <= 1) {\n optionalResponses.delete(messageType);\n return;\n }\n optionalResponses.set(messageType, currentCount - 1);\n };\n };\n\n const request = (\n messageType: number,\n frameData: Uint8Array,\n send: (data: Uint8Array) => Promise<void>,\n timeoutMs: number,\n signal?: AbortSignal,\n ): Promise<Uint8Array> => {\n const attributes = hasObservability ? { messageType } : undefined;\n const span = tracer?.startSpan(\"fitz.request\", attributes);\n let spanEnded = false;\n\n if (signal?.aborted) {\n const error = abortError();\n span?.recordException(error);\n span?.end();\n meter?.counter(\"fitz.request.failed\", 1, {\n ...attributes,\n error: error.name,\n });\n return Promise.reject(error);\n }\n\n const deferred = Deferred<Uint8Array>();\n let settled = false;\n let onAbort: (() => void) | undefined;\n\n const nowMs = Date.now();\n let requestEntry: PendingRequest;\n\n const finalize = (): boolean => {\n if (settled) {\n return false;\n }\n\n settled = true;\n removeTimeoutEntry(requestEntry);\n requestEntry.deadline = -1;\n if (signal && onAbort) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n return true;\n };\n\n const failRequest = (error: Error): void => {\n if (!finalize()) {\n return;\n }\n\n unregisterRequest(messageType, requestEntry);\n meter?.counter(\"fitz.request.failed\", 1, {\n ...attributes,\n error: error.name,\n });\n span?.recordException(error);\n if (!spanEnded) {\n span?.end();\n spanEnded = true;\n }\n void deferred.promise.catch(() => undefined);\n deferred.reject(error);\n };\n\n requestEntry = {\n deferred,\n deadline: nowMs + timeoutMs,\n timeoutIndex: timeoutEntries.length,\n sentAt: nowMs,\n queueIndex: -1,\n rejectRequest: (error: Error) => {\n if (!finalize()) {\n return;\n }\n\n removeTimeoutEntry(requestEntry);\n unregisterRequest(messageType, requestEntry);\n meter?.counter(\"fitz.request.failed\", 1, {\n ...attributes,\n error: error.name,\n });\n span?.recordException(error);\n if (!spanEnded) {\n span?.end();\n spanEnded = true;\n }\n void deferred.promise.catch(() => undefined);\n deferred.reject(error);\n },\n onComplete: () => {\n if (!finalize()) {\n return;\n }\n\n const durationMs = Date.now() - requestEntry.sentAt!;\n span?.setAttribute(\"fitz.request.duration_ms\", durationMs);\n meter?.histogram(\"fitz.request.duration\", durationMs, attributes);\n if (!spanEnded) {\n span?.end();\n spanEnded = true;\n }\n },\n };\n\n timeoutEntries.push(requestEntry);\n heapifyUp(requestEntry.timeoutIndex);\n\n if (signal) {\n onAbort = () => {\n failRequest(abortError());\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n\n scheduleTimeout(requestEntry.deadline);\n\n const queue = getOrCreatePendingQueue(messageType);\n enqueuePendingRequest(queue, requestEntry);\n\n requestsInFlight++;\n requestsTotal++;\n meter?.counter(\"fitz.request.started\", 1, attributes);\n meter?.gauge?.(\"fitz.requests.in_flight\", requestsInFlight, attributes);\n\n const sendResult = send(frameData);\n return sendResult.then(\n () => {\n if (state !== ConnectionState.Authenticated) {\n const error = new ConnectionError(\"Connection closed or reset\", { state });\n unregisterRequest(messageType, requestEntry);\n finalize();\n throw error;\n }\n return deferred.promise;\n },\n (err) => {\n const alreadySettled = !finalize();\n if (alreadySettled) {\n if (signal?.aborted) {\n throw abortError();\n }\n throw err;\n }\n\n unregisterRequest(messageType, requestEntry);\n meter?.counter(\"fitz.request.failed\", 1, {\n ...attributes,\n error: err instanceof Error ? err.name : \"unknown\",\n });\n if (!spanEnded) {\n span?.recordException(err);\n span?.end();\n spanEnded = true;\n }\n if (signal?.aborted) {\n throw abortError();\n }\n throw err;\n },\n );\n };\n\n const unregisterRequest = (messageType: number, requestEntry: PendingRequest): void => {\n const queueEntry = pending[messageType];\n if (!queueEntry || queueEntry.size === 0) return;\n\n const index = requestEntry.queueIndex;\n if (index < 0 || index >= queueEntry.queue.length) {\n return;\n }\n\n if (queueEntry.queue[index] !== requestEntry) {\n return;\n }\n\n queueEntry.queue[index] = undefined;\n queueEntry.size -= 1;\n\n if (index === queueEntry.head) {\n while (queueEntry.size > 0 && queueEntry.queue[queueEntry.head] === undefined) {\n queueEntry.head = (queueEntry.head + 1) % queueEntry.queue.length;\n }\n } else {\n const expectedTailIndex =\n queueEntry.tail === 0 ? queueEntry.queue.length - 1 : queueEntry.tail - 1;\n if (index === expectedTailIndex) {\n queueEntry.tail = index;\n }\n }\n\n if (queueEntry.size === 0) {\n delete pending[messageType];\n }\n\n requestsInFlight--;\n meter?.gauge?.(\"fitz.requests.in_flight\", requestsInFlight, {\n messageType,\n });\n };\n\n const dispatch = (messageType: number, payload: Uint8Array): void => {\n const handler = notificationHandlers.get(messageType);\n if (handler && isRpcPushFrame(messageType, payload)) {\n try {\n handler(payload);\n } catch {\n // Best-effort notification dispatch.\n }\n return;\n }\n\n const queueEntry = pending[messageType];\n if (queueEntry && queueEntry.size > 0) {\n const request = dequeuePendingRequest(queueEntry);\n if (queueEntry.size === 0) {\n delete pending[messageType];\n }\n\n request.deadline = -1;\n requestsInFlight--;\n responsesTotal++;\n meter?.counter(\"fitz.response.received\", 1, {\n messageType,\n });\n meter?.gauge?.(\"fitz.requests.in_flight\", requestsInFlight, {\n messageType,\n });\n\n request.deferred.resolve(payload);\n request.onComplete?.();\n return;\n }\n\n if (handler) {\n try {\n handler(payload);\n } catch {\n // Best-effort notification dispatch.\n }\n return;\n }\n\n const optionalCount = optionalResponses.get(messageType) ?? 0;\n if (optionalCount > 0) {\n if (optionalCount === 1) {\n optionalResponses.delete(messageType);\n } else {\n optionalResponses.set(messageType, optionalCount - 1);\n }\n responsesIgnored++;\n meter?.counter(\"fitz.response.ignored\", 1, {\n messageType,\n });\n return;\n }\n\n if (state !== ConnectionState.Authenticated) {\n responsesIgnored++;\n meter?.counter(\"fitz.response.ignored\", 1, {\n messageType,\n state,\n });\n return;\n }\n\n responsesDropped++;\n meter?.counter(\"fitz.response.dropped\", 1, {\n messageType,\n });\n };\n\n const cancelAll = (): void => {\n if (timeoutHandle !== undefined) {\n clearTimeout(timeoutHandle);\n timeoutHandle = undefined;\n }\n timeoutEntries = [];\n\n for (const queueEntry of Object.values(pending)) {\n if (!queueEntry) {\n continue;\n }\n for (let i = 0; i < queueEntry.size; i += 1) {\n const index = (queueEntry.head + i) % queueEntry.queue.length;\n const request = queueEntry.queue[index];\n if (!request) {\n continue;\n }\n void request.deferred.promise.catch(() => undefined);\n void Promise.resolve().then(() =>\n request.deferred.reject(\n new ConnectionError(\"Connection closed or reset\", {\n state,\n }),\n ),\n );\n }\n }\n\n for (const key in pending) {\n delete pending[key];\n }\n\n requestsInFlight = 0;\n meter?.gauge?.(\"fitz.requests.in_flight\", 0);\n };\n\n const getMetrics = () => ({\n requestsInFlight,\n requestsTotal,\n responsesTotal,\n responsesDropped,\n responsesIgnored,\n });\n\n const getInFlightCount = (): number => requestsInFlight;\n\n const hasPending = (): boolean => requestsInFlight > 0;\n\n const getState = (): ConnectionState => state;\n\n return {\n setConnected,\n setDisconnected,\n registerNotificationHandler,\n unregisterNotificationHandler,\n expectOptionalResponse,\n request,\n dispatch,\n cancelAll,\n getMetrics,\n getInFlightCount,\n hasPending,\n getState,\n };\n}\n\ninterface MultiplexerConstructor {\n new (observability?: MultiplexerObservability): Multiplexer;\n}\n\nexport const Multiplexer: MultiplexerConstructor = function (\n observability: MultiplexerObservability = {},\n) {\n return createMultiplexer(observability);\n} as unknown as MultiplexerConstructor;\n\nfunction abortError(): Error {\n const error = new Error(\"The operation was aborted\");\n error.name = \"AbortError\";\n return error;\n}\n\nfunction isRpcPushFrame(messageType: number, payload: Uint8Array): boolean {\n if (messageType === MSG_RPC_REQUEST) {\n return looksLikeRpcInboundRequest(payload);\n }\n\n if (messageType === MSG_RPC_RESPONSE) {\n return looksLikeRpcStreamResponse(payload);\n }\n\n return false;\n}\n\nfunction looksLikeRpcInboundRequest(payload: Uint8Array): boolean {\n let offset = 0;\n const correlationLength = readU32BE(payload, offset);\n if (correlationLength !== 16) {\n return false;\n }\n offset += 4 + correlationLength;\n\n const routeLength = readU32BE(payload, offset);\n if (routeLength === undefined) {\n return false;\n }\n offset += 4 + routeLength;\n\n const replyRouteLength = readU32BE(payload, offset);\n if (replyRouteLength === undefined) {\n return false;\n }\n offset += 4 + replyRouteLength;\n\n const bodyLength = readU32BE(payload, offset);\n if (bodyLength === undefined) {\n return false;\n }\n offset += 4 + bodyLength;\n\n return offset === payload.length;\n}\n\nfunction looksLikeRpcStreamResponse(payload: Uint8Array): boolean {\n let offset = 0;\n const correlationLength = readU32BE(payload, offset);\n if (correlationLength !== 16) {\n return false;\n }\n offset += 4 + correlationLength + 8;\n\n const bodyLength = readU32BE(payload, offset);\n if (bodyLength === undefined) {\n return false;\n }\n offset += 4 + bodyLength;\n\n if (offset >= payload.length) {\n return false;\n }\n\n const streamEnd = payload[offset];\n offset += 1;\n return offset === payload.length && (streamEnd === 0 || streamEnd === 1);\n}\n\nfunction readU32BE(payload: Uint8Array, offset: number): number | undefined {\n if (offset + 4 > payload.length) {\n return undefined;\n }\n\n return (\n ((payload[offset] << 24) |\n (payload[offset + 1] << 16) |\n (payload[offset + 2] << 8) |\n payload[offset + 3]) >>>\n 0\n );\n}\n","/**\n * Connection manager for Fitz protocol.\n *\n * CONNECT is a silent-success handshake. A newly opened transport is treated as\n * authenticated only if it remains open for a short settle window after the\n * CONNECT frame is sent.\n */\n\nimport { Transport } from \"../transport/types\";\nimport {\n AsyncHandlerOptions,\n ConnectionState,\n Deferred,\n FitzObservability,\n TokenProvider,\n} from \"../core/types\";\nimport { createScope, Scope } from \"../core/lifecycle\";\nimport { utf8Encoder } from \"../core/buffer\";\nimport { FrameCodec, FrameParser } from \"../frame/codec\";\nimport { MSG_CONNECT } from \"../frame/types\";\nimport {\n AuthenticationError,\n ConnectionError,\n FitzError,\n RequestQueueFullError,\n TransportError,\n} from \"../core/errors\";\nimport { Multiplexer } from \"./multiplexer\";\n\nexport interface ConnectionOptions {\n timeout?: number;\n maxInFlightRequests?: number;\n maxRequestQueueSize?: number;\n reconnect?: {\n enabled?: boolean;\n maxAttempts?: number;\n backoffMs?: number;\n maxBackoffMs?: number;\n };\n authSettleDelayMs?: number;\n observability?: FitzObservability;\n asyncHandlers?: AsyncHandlerOptions;\n}\n\nexport interface ConnectOptions {\n signal?: AbortSignal;\n}\n\ntype TransportFactory = () => Transport;\ntype ReconnectListener = () => void | Promise<void>;\ntype DisconnectListener = () => void;\n\nconst sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));\n\nfunction createAsyncHandlerDispatcher(\n maxConcurrency: number,\n timeoutMs: number,\n onError: (error: unknown) => void,\n) {\n let activeCount = 0;\n let closed = false;\n const queue: Array<() => void> = [];\n const activeTasks = new Set<Promise<void>>();\n\n const dispatch = (task: () => void | Promise<void>): void => {\n if (closed) {\n return;\n }\n\n const run = () => {\n if (closed) {\n return;\n }\n\n activeCount += 1;\n const activeTask = runTask(task).finally(() => {\n activeTasks.delete(activeTask);\n activeCount -= 1;\n flush();\n });\n activeTasks.add(activeTask);\n void activeTask;\n };\n\n if (activeCount < maxConcurrency) {\n run();\n return;\n }\n\n queue.push(run);\n };\n\n const flush = (): void => {\n if (closed) {\n queue.length = 0;\n return;\n }\n\n if (activeCount >= maxConcurrency) {\n return;\n }\n\n const next = queue.shift();\n next?.();\n };\n\n const runTask = async (task: () => void | Promise<void>): Promise<void> => {\n let reported = false;\n const reportOnce = (error: unknown): void => {\n if (reported) {\n return;\n }\n reported = true;\n onError(error);\n };\n\n const timeoutId = setTimeout(() => {\n reportOnce(new Error(`Async handler timeout after ${timeoutMs}ms`));\n }, timeoutMs);\n\n try {\n await Promise.resolve().then(task);\n } catch (error) {\n reportOnce(error);\n } finally {\n clearTimeout(timeoutId);\n }\n };\n\n const close = (): void => {\n closed = true;\n queue.length = 0;\n };\n\n const drain = async (): Promise<void> => {\n await Promise.allSettled(Array.from(activeTasks));\n };\n\n return {\n dispatch,\n close,\n drain,\n };\n}\n\nfunction createRequestGate(maxConcurrency: number, maxQueueSize: number) {\n let activeCount = 0;\n let closed = false;\n const queue: Array<{\n resolve: (release: () => void) => void;\n reject: (error: Error) => void;\n signal?: AbortSignal;\n onAbort?: () => void;\n }> = [];\n\n const acquire = async (signal?: AbortSignal): Promise<() => void> => {\n if (signal?.aborted) {\n throw abortError();\n }\n\n if (closed) {\n throw connectionClosedError();\n }\n\n return await new Promise<() => void>((resolve, reject) => {\n const grant = () => {\n if (closed) {\n reject(connectionClosedError());\n return;\n }\n\n activeCount += 1;\n resolve(() => release());\n };\n\n const waiter = {\n resolve,\n reject,\n signal,\n onAbort: undefined as (() => void) | undefined,\n };\n\n const cleanup = () => {\n if (signal && waiter.onAbort) {\n signal.removeEventListener(\"abort\", waiter.onAbort);\n }\n };\n\n waiter.onAbort = () => {\n removeWaiter(waiter);\n cleanup();\n reject(abortError());\n };\n\n if (signal) {\n signal.addEventListener(\"abort\", waiter.onAbort, { once: true });\n }\n\n if (activeCount < maxConcurrency) {\n cleanup();\n grant();\n return;\n }\n\n if (queue.length >= maxQueueSize) {\n cleanup();\n reject(new RequestQueueFullError());\n return;\n }\n\n queue.push(waiter);\n });\n };\n\n const close = (): void => {\n if (closed) {\n return;\n }\n\n closed = true;\n const error = connectionClosedError();\n for (const waiter of queue.splice(0)) {\n if (waiter.signal && waiter.onAbort) {\n waiter.signal.removeEventListener(\"abort\", waiter.onAbort);\n }\n waiter.reject(error);\n }\n };\n\n const release = (): void => {\n if (activeCount > 0) {\n activeCount -= 1;\n }\n\n while (!closed && activeCount < maxConcurrency) {\n const waiter = queue.shift();\n if (!waiter) {\n return;\n }\n\n if (waiter.signal?.aborted) {\n if (waiter.signal && waiter.onAbort) {\n waiter.signal.removeEventListener(\"abort\", waiter.onAbort);\n }\n continue;\n }\n\n if (waiter.signal && waiter.onAbort) {\n waiter.signal.removeEventListener(\"abort\", waiter.onAbort);\n }\n\n activeCount += 1;\n waiter.resolve(() => release());\n return;\n }\n };\n\n const removeWaiter = (waiter: {\n resolve: (release: () => void) => void;\n reject: (error: Error) => void;\n signal?: AbortSignal;\n onAbort?: () => void;\n }): void => {\n const index = queue.indexOf(waiter);\n if (index >= 0) {\n queue.splice(index, 1);\n }\n };\n\n return {\n acquire,\n close,\n };\n}\n\nfunction abortError(): Error {\n const error = new Error(\"The operation was aborted\");\n error.name = \"AbortError\";\n return error;\n}\n\nfunction connectionClosedError(): ConnectionError {\n return new ConnectionError(\"Connection closed\", { state: ConnectionState.Closed });\n}\n\nfunction throwIfAborted(signal?: AbortSignal): void {\n if (signal?.aborted) {\n throw abortError();\n }\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\";\n}\n\nexport type Connection = ReturnType<typeof createConnection>;\n\nexport function createConnection(\n transportFactory: TransportFactory,\n tokenProvider: TokenProvider,\n options: ConnectionOptions = {},\n) {\n const timeout = options.timeout ?? 30000;\n const authSettleDelayMs = options.authSettleDelayMs ?? 100;\n const reconnectEnabled = options.reconnect?.enabled ?? false;\n const reconnectMaxAttempts = options.reconnect?.maxAttempts ?? Infinity;\n const reconnectBackoffMs = options.reconnect?.backoffMs ?? 250;\n const reconnectMaxBackoffMs = options.reconnect?.maxBackoffMs ?? 5000;\n const maxInFlightRequests = options.maxInFlightRequests ?? 256;\n const maxRequestQueueSize = options.maxRequestQueueSize ?? 1024;\n const observability = options.observability;\n\n let transport: Transport | null = null;\n let state: ConnectionState = ConnectionState.Disconnected;\n let requestGate = createRequestGate(maxInFlightRequests, maxRequestQueueSize);\n const frameParser = new FrameParser();\n const reconnectListeners = new Set<ReconnectListener>();\n const disconnectListeners = new Set<DisconnectListener>();\n let writeChain: Promise<void> = Promise.resolve();\n\n let receiveLoop: Promise<void> | null = null;\n let receiveLoopAbort = false;\n let closeRequested = false;\n let reconnectPromise: Promise<void> | null = null;\n let authOutcome: Deferred<void> | null = null;\n let authRejected = false;\n const connectionScope = createScope(\"connection\");\n\n const log = (\n level: \"debug\" | \"info\" | \"warn\" | \"error\",\n event: string,\n fields?: Record<string, unknown>,\n ): void => {\n observability?.logger?.log(level, event, fields);\n };\n\n const describeError = (error: unknown): string => {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n };\n\n const describeErrorFields = (error: unknown): Record<string, unknown> => {\n if (error instanceof FitzError) {\n return {\n errorName: error.name,\n code: error.code,\n domainCode: error.domainCode,\n };\n }\n\n if (error instanceof Error) {\n return {\n errorName: error.name,\n code: (error as Error & { code?: unknown }).code,\n domainCode: (error as Error & { domainCode?: unknown }).domainCode,\n };\n }\n\n return {\n errorName: typeof error,\n code: undefined,\n domainCode: undefined,\n };\n };\n\n const describeConnectionLoss = (error: unknown): string => {\n if (error instanceof Error) {\n return error.message;\n }\n return \"connection closed during CONNECT\";\n };\n\n const handlePossibleTransportFailure = (error: unknown): void => {\n if (closeRequested) {\n return;\n }\n\n if (\n error instanceof TransportError ||\n error instanceof ConnectionError ||\n error instanceof AuthenticationError\n ) {\n void handleConnectionLoss(error);\n }\n };\n\n const multiplexer = new Multiplexer({\n meter: observability?.meter,\n tracer: observability?.tracer,\n });\n\n const asyncHandlerDispatcher = createAsyncHandlerDispatcher(\n options.asyncHandlers?.maxConcurrency ?? Infinity,\n options.asyncHandlers?.timeoutMs ?? timeout,\n (error) => {\n log(\"warn\", \"fitz.connection.handler_failed\", {\n error: describeError(error),\n });\n },\n );\n\n const connect = async (options: ConnectOptions = {}): Promise<void> => {\n closeRequested = false;\n authRejected = false;\n await openAndAuthenticate(false, options.signal);\n };\n\n const close = async (): Promise<void> => {\n if (state === ConnectionState.Closed && !transport) {\n await connectionScope.dispose();\n return;\n }\n\n closeRequested = true;\n receiveLoopAbort = true;\n asyncHandlerDispatcher.close();\n const scopeDisposePromise = connectionScope.dispose();\n setState(ConnectionState.Closed);\n requestGate.close();\n authOutcome?.reject(new ConnectionError(\"Connection closed\", { state }));\n authOutcome = null;\n multiplexer.setDisconnected();\n emitDisconnect();\n emitLifecycleEvent(\"closed\");\n\n const activeReceiveLoop = receiveLoop;\n receiveLoop = null;\n if (activeReceiveLoop) {\n await Promise.race([activeReceiveLoop.catch(() => undefined), sleep(1000)]);\n }\n\n if (transport) {\n await transport.close();\n transport = null;\n }\n\n transport = null;\n await asyncHandlerDispatcher.drain();\n await scopeDisposePromise;\n };\n\n const request = async (\n messageType: number,\n requestPayload: Uint8Array,\n signal?: AbortSignal,\n ): Promise<Uint8Array> => {\n ensureAuthenticated();\n const releaseRequestSlot = await requestGate.acquire(signal);\n const startedAt = Date.now();\n\n try {\n const activeTransport = ensureTransport();\n const frame = FrameCodec.encodeFrame(messageType, requestPayload);\n\n return await multiplexer.request(\n messageType,\n frame,\n (data) => sendSerialized(activeTransport, data),\n timeout,\n signal,\n );\n } catch (error) {\n log(\"error\", \"fitz.connection.request_failed\", {\n operation: \"request\",\n state,\n messageType,\n latencyMs: Date.now() - startedAt,\n ...describeErrorFields(error),\n error: describeError(error),\n });\n handlePossibleTransportFailure(error);\n throw error;\n } finally {\n releaseRequestSlot();\n }\n };\n\n const send = async (messageType: number, requestPayload: Uint8Array): Promise<void> => {\n ensureAuthenticated();\n const releaseRequestSlot = await requestGate.acquire();\n const startedAt = Date.now();\n\n try {\n const activeTransport = ensureTransport();\n const frame = FrameCodec.encodeFrame(messageType, requestPayload);\n\n await sendSerialized(activeTransport, frame);\n } catch (error) {\n log(\"error\", \"fitz.connection.send_failed\", {\n operation: \"send\",\n state,\n messageType,\n latencyMs: Date.now() - startedAt,\n ...describeErrorFields(error),\n error: describeError(error),\n });\n handlePossibleTransportFailure(error);\n throw error;\n } finally {\n releaseRequestSlot();\n }\n };\n\n const sendFireAndForget = async (\n messageType: number,\n requestPayload: Uint8Array,\n ): Promise<void> => {\n await send(messageType, requestPayload);\n };\n\n const registerNotificationHandler = (\n messageType: number,\n handler: (payload: Uint8Array) => void,\n ): void => {\n multiplexer.registerNotificationHandler(messageType, handler);\n };\n\n const unregisterNotificationHandler = (messageType: number): void => {\n multiplexer.unregisterNotificationHandler(messageType);\n };\n\n const onReconnect = (listener: ReconnectListener): (() => void) => {\n reconnectListeners.add(listener);\n return () => {\n reconnectListeners.delete(listener);\n };\n };\n\n const onDisconnect = (listener: DisconnectListener): (() => void) => {\n disconnectListeners.add(listener);\n return () => {\n disconnectListeners.delete(listener);\n };\n };\n\n const getMultiplexer = (): Multiplexer => multiplexer;\n\n const getScope = (): Scope => connectionScope;\n\n const dispatchAsyncHandler = (task: () => void | Promise<void>): void => {\n asyncHandlerDispatcher.dispatch(task);\n };\n\n const getState = (): ConnectionState => state;\n\n const isConnected = (): boolean => state === ConnectionState.Authenticated;\n\n const getUrl = (): string => ensureTransport().getUrl();\n\n const openAndAuthenticate = async (isReconnect: boolean, signal?: AbortSignal): Promise<void> => {\n throwIfAborted(signal);\n receiveLoopAbort = false;\n frameParser.parseFrames(new Uint8Array(0));\n requestGate = createRequestGate(maxInFlightRequests, maxRequestQueueSize);\n const activeTransport = transportFactory();\n transport = activeTransport;\n setState(isReconnect ? ConnectionState.Reconnecting : ConnectionState.Connecting);\n emitLifecycleEvent(isReconnect ? \"reconnect_start\" : \"connect_start\");\n\n await activeTransport.connect();\n if (closeRequested) {\n await activeTransport.close().catch(() => undefined);\n if (transport === activeTransport) {\n transport = null;\n }\n throw connectionClosedError();\n }\n throwIfAborted(signal);\n receiveLoop = startReceiveLoop();\n\n setState(ConnectionState.Connected);\n setState(ConnectionState.Authenticating);\n emitLifecycleEvent(\"auth_start\");\n authOutcome = new Deferred<void>();\n\n try {\n await sendConnect();\n if (closeRequested) {\n throw connectionClosedError();\n }\n throwIfAborted(signal);\n await Promise.race([authOutcome.promise, sleep(authSettleDelayMs)]);\n if (closeRequested) {\n throw connectionClosedError();\n }\n throwIfAborted(signal);\n authOutcome?.resolve();\n authOutcome = null;\n if (isReconnect) {\n await restoreReconnectState();\n if (closeRequested) {\n throw connectionClosedError();\n }\n }\n setState(ConnectionState.Authenticated);\n multiplexer.setConnected();\n emitLifecycleEvent(isReconnect ? \"reconnect_succeeded\" : \"connect_succeeded\");\n } catch (error) {\n authOutcome = null;\n multiplexer.setDisconnected();\n emitDisconnect();\n if (activeTransport) {\n await activeTransport.close().catch(() => undefined);\n }\n if (transport === activeTransport) {\n transport = null;\n }\n const rejectedAuth = error instanceof AuthenticationError;\n authRejected = rejectedAuth;\n if (closeRequested) {\n setState(ConnectionState.Closed);\n } else {\n setState(rejectedAuth ? ConnectionState.Closed : ConnectionState.Disconnected);\n }\n emitLifecycleEvent(isReconnect ? \"reconnect_failed\" : \"connect_failed\", error);\n if (isAbortError(error)) {\n throw abortError();\n }\n throw error;\n }\n };\n\n const sendConnect = async (): Promise<void> => {\n const token = await tokenProvider();\n const frame = FrameCodec.encodeFrame(MSG_CONNECT, utf8Encoder.encode(token));\n await ensureTransport().send(frame);\n };\n\n const startReceiveLoop = async (): Promise<void> => {\n while (!receiveLoopAbort && !closeRequested) {\n try {\n const activeTransport = ensureTransport();\n const data = await activeTransport.receive();\n const frames = frameParser.parseFrames(data);\n\n for (const frame of frames) {\n multiplexer.dispatch(frame.messageType, frame.payload);\n }\n } catch (error) {\n if (receiveLoopAbort || closeRequested) {\n return;\n }\n\n await handleConnectionLoss(error);\n return;\n }\n }\n };\n\n const handleConnectionLoss = async (error: unknown): Promise<void> => {\n multiplexer.setDisconnected();\n requestGate.close();\n emitDisconnect();\n log(\"warn\", \"fitz.connection.lost\", {\n error: describeError(error),\n state,\n });\n\n if (state === ConnectionState.Authenticating && authOutcome) {\n authRejected = true;\n authOutcome.reject(\n new AuthenticationError(describeConnectionLoss(error), {\n state,\n }),\n );\n }\n\n if (closeRequested) {\n setState(ConnectionState.Closed);\n return;\n }\n\n if (authRejected) {\n setState(ConnectionState.Closed);\n emitLifecycleEvent(\"auth_rejected\", error);\n return;\n }\n\n setState(ConnectionState.Disconnected);\n emitLifecycleEvent(\"connection_lost\", error);\n\n if (!reconnectEnabled) {\n return;\n }\n\n if (!reconnectPromise) {\n reconnectPromise = reconnectLoop().finally(() => {\n reconnectPromise = null;\n });\n }\n\n await reconnectPromise;\n };\n\n const getReconnectDelayMs = (baseDelayMs: number): number => {\n const jitter = Math.floor(Math.random() * baseDelayMs * 0.5);\n return Math.min(Math.max(baseDelayMs + jitter, 1), reconnectMaxBackoffMs);\n };\n\n const reconnectLoop = async (): Promise<void> => {\n let attempts = 0;\n let delayMs = reconnectBackoffMs;\n\n while (!closeRequested && attempts < reconnectMaxAttempts) {\n attempts += 1;\n setState(ConnectionState.Reconnecting);\n emitLifecycleEvent(\"reconnect_scheduled\", undefined, attempts);\n\n const actualDelayMs = getReconnectDelayMs(delayMs);\n try {\n await sleep(actualDelayMs);\n if (closeRequested) {\n return;\n }\n await openAndAuthenticate(true);\n return;\n } catch (error) {\n if (closeRequested) {\n return;\n }\n log(\"warn\", \"fitz.connection.reconnect_retry\", {\n attempts,\n delayMs: actualDelayMs,\n baseDelayMs: delayMs,\n error: describeError(error),\n });\n delayMs = Math.min(delayMs * 2, reconnectMaxBackoffMs);\n }\n }\n\n if (closeRequested) {\n setState(ConnectionState.Closed);\n return;\n }\n\n setState(ConnectionState.Disconnected);\n emitLifecycleEvent(\"reconnect_exhausted\", undefined, attempts);\n };\n\n const restoreReconnectState = async (): Promise<void> => {\n for (const listener of reconnectListeners) {\n try {\n await listener();\n } catch (error) {\n log(\"warn\", \"fitz.connection.reconnect_restore_failed\", {\n error: describeError(error),\n });\n emitLifecycleEvent(\"reconnect_restore_failed\", error);\n }\n }\n };\n\n const ensureTransport = (): Transport => {\n if (!transport) {\n throw new ConnectionError(\"No active transport\", { state });\n }\n return transport;\n };\n\n const ensureAuthenticated = (): void => {\n if (closeRequested || state !== ConnectionState.Authenticated) {\n throw new ConnectionError(`Cannot use connection while state is ${state}`, {\n state,\n });\n }\n };\n\n const setState = (newState: ConnectionState): void => {\n state = newState;\n };\n\n const sendSerialized = async (transport: Transport, data: Uint8Array): Promise<void> => {\n const prior = writeChain;\n let release!: () => void;\n writeChain = new Promise<void>((resolve) => {\n release = resolve;\n });\n\n await prior;\n try {\n await transport.send(data);\n } finally {\n release();\n }\n };\n\n const emitLifecycleEvent = (event: string, error?: unknown, attempt?: number): void => {\n const payload = {\n event,\n state,\n transport: transport?.constructor.name,\n url: transport?.getUrl(),\n attempt,\n error: error ? describeError(error) : undefined,\n };\n\n observability?.onLifecycleEvent?.(payload);\n log(\"info\", `fitz.connection.${event}`, payload);\n observability?.meter?.counter(\"fitz.connection.lifecycle\", 1, {\n event,\n state,\n });\n };\n\n const emitDisconnect = (): void => {\n for (const listener of disconnectListeners) {\n try {\n listener();\n } catch {\n // Best-effort disconnect fanout.\n }\n }\n };\n\n return {\n connect,\n close,\n request,\n send,\n sendFireAndForget,\n registerNotificationHandler,\n unregisterNotificationHandler,\n onReconnect,\n onDisconnect,\n getMultiplexer,\n dispatchAsyncHandler,\n getScope,\n getState,\n isConnected,\n getUrl,\n };\n}\n\ninterface ConnectionConstructor {\n new (\n transportFactory: TransportFactory,\n tokenProvider: TokenProvider,\n options?: ConnectionOptions,\n ): Connection;\n (\n transportFactory: TransportFactory,\n tokenProvider: TokenProvider,\n options?: ConnectionOptions,\n ): Connection;\n prototype: any;\n}\n\nexport const Connection: ConnectionConstructor = function (\n transportFactory: TransportFactory,\n tokenProvider: TokenProvider,\n options: ConnectionOptions = {},\n) {\n const connection = createConnection(transportFactory, tokenProvider, options);\n Object.setPrototypeOf(connection, Connection.prototype);\n return connection;\n} as unknown as ConnectionConstructor;\n","/**\n * WebSocket transport implementation for Node.js and browser\n */\n\nimport { Transport, TransportOptions } from \"./types\";\nimport { TransportError, TimeoutError } from \"../core/errors\";\n\ntype NodeLikeProcess = {\n versions?: {\n node?: string;\n };\n};\n\ntype WebSocketConstructor = new (url: string) => WebSocketLike;\ntype WebSocketMessageEvent = {\n data: ArrayBuffer | Uint8Array | Blob;\n};\ntype WebSocketLike = {\n binaryType: string;\n onopen: (() => void) | null;\n onmessage: ((event: WebSocketMessageEvent) => void) | null;\n onerror: ((event: { message?: string }) => void) | null;\n onclose: (() => void) | null;\n send(data: Uint8Array, callback?: (err?: Error) => void): void;\n close(code?: number, reason?: string): void;\n terminate?(): void;\n};\n\nlet cachedWebSocketConstructor: WebSocketConstructor | null = null;\n\nconst isNodeEnv = (): boolean => {\n try {\n const candidate = globalThis as typeof globalThis & {\n process?: NodeLikeProcess;\n };\n return (\n typeof candidate.process !== \"undefined\" &&\n typeof candidate.process?.versions?.node === \"string\"\n );\n } catch {\n return false;\n }\n};\n\nfunction getWebSocketConstructor(): WebSocketConstructor {\n if (cachedWebSocketConstructor) {\n return cachedWebSocketConstructor;\n }\n\n if (isNodeEnv()) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n cachedWebSocketConstructor = require(\"ws\") as WebSocketConstructor;\n return cachedWebSocketConstructor;\n } catch {\n throw new TransportError(\"ws package is required for Node.js. Install with: npm install ws\");\n }\n }\n\n const browserWebSocket = globalThis.WebSocket as unknown as WebSocketConstructor | undefined;\n if (!browserWebSocket) {\n throw new TransportError(\"WebSocket is not available in this environment\");\n }\n\n cachedWebSocketConstructor = browserWebSocket;\n return cachedWebSocketConstructor;\n}\n\nexport function createWebSocketTransport(url: string, options: TransportOptions = {}): Transport {\n let ws: WebSocketLike | null = null;\n let connected = false;\n const receiveQueue: Uint8Array[] = [];\n let receiverResolve: ((data: Uint8Array | null) => void) | null = null;\n const timeout = options.timeout ?? 30000;\n const maxFrameSize = options.maxFrameSize ?? 65535;\n\n const enqueueMessage = (data: Uint8Array) => {\n if (receiverResolve) {\n receiverResolve(data);\n receiverResolve = null;\n } else {\n receiveQueue.push(data);\n }\n };\n\n const connect = async (): Promise<void> => {\n return new Promise((resolve, reject) => {\n try {\n let wsUrl = url;\n if (!wsUrl.startsWith(\"ws://\") && !wsUrl.startsWith(\"wss://\")) {\n if (wsUrl.startsWith(\"https://\")) {\n wsUrl = wsUrl.replace(\"https://\", \"wss://\");\n } else if (wsUrl.startsWith(\"http://\")) {\n wsUrl = wsUrl.replace(\"http://\", \"ws://\");\n } else {\n wsUrl = `ws://${wsUrl}`;\n }\n }\n\n ws = new (getWebSocketConstructor())(wsUrl);\n ws.binaryType = \"arraybuffer\";\n\n const connectTimeout = setTimeout(() => {\n ws?.close?.();\n reject(new TimeoutError(`WebSocket connection timeout after ${timeout}ms`));\n }, timeout);\n\n ws.onopen = () => {\n clearTimeout(connectTimeout);\n connected = true;\n resolve();\n };\n\n ws.onmessage = (event: WebSocketMessageEvent) => {\n let data: Uint8Array;\n if (event.data instanceof ArrayBuffer) {\n data = new Uint8Array(event.data);\n } else if (event.data instanceof Uint8Array) {\n data = event.data;\n } else {\n if (event.data instanceof Blob) {\n void event.data.arrayBuffer().then((ab: ArrayBuffer) => {\n enqueueMessage(new Uint8Array(ab));\n });\n return;\n }\n return;\n }\n if (data.length > maxFrameSize) {\n ws?.close?.(1009, \"Frame too large\");\n return;\n }\n enqueueMessage(data);\n };\n\n ws.onerror = (event: { message?: string }) => {\n clearTimeout(connectTimeout);\n const error = new TransportError(`WebSocket error: ${event.message || \"unknown error\"}`);\n reject(error);\n };\n\n ws.onclose = () => {\n connected = false;\n if (receiverResolve) {\n receiverResolve(null);\n }\n };\n } catch (err) {\n reject(\n new TransportError(\n `Failed to create WebSocket: ${err instanceof Error ? err.message : String(err)}`,\n ),\n );\n }\n });\n };\n\n const send = async (data: Uint8Array): Promise<void> => {\n if (!connected) {\n throw new TransportError(\"WebSocket is not connected\");\n }\n\n return new Promise((resolve, reject) => {\n try {\n const timeoutId = setTimeout(() => {\n reject(new TimeoutError(`WebSocket send timeout after ${timeout}ms`));\n }, timeout);\n\n ws?.send(data, (err?: Error) => {\n clearTimeout(timeoutId);\n if (err) {\n reject(new TransportError(`WebSocket send failed: ${err.message}`));\n } else {\n resolve();\n }\n });\n } catch (err) {\n reject(\n new TransportError(\n `WebSocket send error: ${err instanceof Error ? err.message : String(err)}`,\n ),\n );\n }\n });\n };\n\n const receive = async (): Promise<Uint8Array> => {\n if (receiveQueue.length > 0) {\n const message = receiveQueue.shift();\n if (!message) {\n throw new TransportError(\"WebSocket receive queue was unexpectedly empty\");\n }\n return message;\n }\n\n if (!connected) {\n throw new TransportError(\"Connection closed\");\n }\n\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n receiverResolve = null;\n reject(new TimeoutError(`WebSocket receive timeout after ${timeout}ms`));\n }, timeout);\n\n receiverResolve = (data: Uint8Array | null) => {\n clearTimeout(timeoutId);\n receiverResolve = null;\n if (data === null) {\n reject(new TransportError(\"Connection closed\"));\n return;\n }\n resolve(data);\n };\n });\n };\n\n const close = async (): Promise<void> => {\n if (ws) {\n const activeWs = ws;\n return new Promise<void>((resolve) => {\n const timeoutId = setTimeout(() => {\n activeWs.terminate?.();\n connected = false;\n resolve();\n }, 5000);\n\n activeWs.onclose = () => {\n clearTimeout(timeoutId);\n connected = false;\n resolve();\n };\n\n activeWs.close(1000, \"Normal closure\");\n });\n }\n\n connected = false;\n };\n\n const getUrl = (): string => url;\n const isConnected = (): boolean => connected;\n\n return {\n connect,\n send,\n receive,\n close,\n getUrl,\n isConnected,\n };\n}\n","/**\n * TCP transport implementation (Node.js only)\n */\n\nimport { Transport, TransportOptions } from \"./types\";\nimport { TransportError, TimeoutError } from \"../core/errors\";\n\ntype NodeLikeProcess = {\n versions?: {\n node?: string;\n };\n};\n\ntype NetModule = {\n createConnection(options: { host: string; port: number; timeout: number }): TcpSocket;\n};\n\ntype TcpSocket = {\n on(event: \"connect\", listener: () => void): void;\n on(event: \"data\", listener: (chunk: Uint8Array | Buffer) => void): void;\n on(event: \"error\", listener: (err: Error) => void): void;\n on(event: \"close\", listener: () => void): void;\n on(event: \"timeout\", listener: () => void): void;\n write(data: Uint8Array, callback: (err?: Error | null) => void): void;\n setNoDelay(noDelay?: boolean): void;\n setTimeout(timeout: number): void;\n end(): void;\n destroy(error?: Error): void;\n};\n\nconst isNode = (): boolean => {\n try {\n const candidate = globalThis as typeof globalThis & {\n process?: NodeLikeProcess;\n };\n return (\n typeof candidate.process !== \"undefined\" &&\n typeof candidate.process?.versions?.node === \"string\"\n );\n } catch {\n return false;\n }\n};\n\nlet netModule: NetModule | undefined;\nif (isNode()) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n netModule = require(\"net\") as NetModule;\n}\n\nexport function createTcpTransport(url: string, options: TransportOptions = {}): Transport {\n if (!isNode()) {\n throw new Error(\"TCP transport is only available in Node.js\");\n }\n\n let socket: TcpSocket | null = null;\n let connected = false;\n const receiveQueue: Uint8Array[] = [];\n let receiverResolve: ((data: Uint8Array) => void) | null = null;\n const timeout = options.timeout ?? 30000;\n const maxFrameSize = options.maxFrameSize ?? 65535;\n let lengthBuffer = new Uint8Array(4);\n let lengthOffset = 0;\n let currentMessageLength: number | null = null;\n let messageBuffer: Uint8Array | null = null;\n let messageOffset = 0;\n\n const urlObj = new URL(url.startsWith(\"tcp://\") ? url : `tcp://${url}`);\n const host = urlObj.hostname || \"localhost\";\n const port = parseInt(urlObj.port || \"4090\", 10);\n\n const handleData = (chunk: Uint8Array) => {\n let offset = 0;\n\n while (offset < chunk.length) {\n if (currentMessageLength === null) {\n const needed = 4 - lengthOffset;\n const available = chunk.length - offset;\n const toCopy = Math.min(needed, available);\n\n lengthBuffer.set(chunk.slice(offset, offset + toCopy), lengthOffset);\n lengthOffset += toCopy;\n offset += toCopy;\n\n if (lengthOffset === 4) {\n const lengthView = new DataView(lengthBuffer.buffer);\n currentMessageLength = lengthView.getUint32(0, false);\n if (currentMessageLength > maxFrameSize) {\n socket?.destroy(\n new Error(\n `TCP frame length ${currentMessageLength} exceeds max frame size ${maxFrameSize}`,\n ),\n );\n currentMessageLength = null;\n lengthOffset = 0;\n return;\n }\n messageBuffer = new Uint8Array(currentMessageLength);\n messageOffset = 0;\n }\n }\n\n if (currentMessageLength !== null && messageBuffer !== null) {\n const needed = currentMessageLength - messageOffset;\n const available = chunk.length - offset;\n const toCopy = Math.min(needed, available);\n\n messageBuffer.set(chunk.slice(offset, offset + toCopy), messageOffset);\n messageOffset += toCopy;\n offset += toCopy;\n\n if (messageOffset === currentMessageLength) {\n enqueueMessage(messageBuffer);\n currentMessageLength = null;\n lengthOffset = 0;\n messageBuffer = null;\n messageOffset = 0;\n }\n }\n }\n };\n\n const enqueueMessage = (data: Uint8Array) => {\n if (receiverResolve) {\n receiverResolve(data);\n receiverResolve = null;\n } else {\n receiveQueue.push(data);\n }\n };\n\n const connect = async (): Promise<void> => {\n return new Promise((resolve, reject) => {\n try {\n if (!netModule) {\n reject(new TransportError(\"TCP transport module unavailable\"));\n return;\n }\n\n socket = netModule.createConnection({\n host,\n port,\n timeout,\n });\n\n const connectTimeout = setTimeout(() => {\n socket?.destroy();\n reject(new TimeoutError(`TCP connection timeout after ${timeout}ms`));\n }, timeout);\n\n const activeSocket = socket;\n\n activeSocket.on(\"connect\", () => {\n clearTimeout(connectTimeout);\n connected = true;\n activeSocket.setNoDelay(true);\n activeSocket.setTimeout(timeout);\n resolve();\n });\n\n activeSocket.on(\"data\", (chunk: Uint8Array | Buffer) => {\n handleData(chunk instanceof Uint8Array ? chunk : new Uint8Array(chunk));\n });\n\n activeSocket.on(\"error\", (err: Error) => {\n clearTimeout(connectTimeout);\n connected = false;\n const error = new TransportError(`TCP error: ${err.message || \"unknown error\"}`);\n if (receiverResolve) {\n receiverResolve(new Uint8Array(0));\n }\n reject(error);\n });\n\n activeSocket.on(\"close\", () => {\n connected = false;\n if (receiverResolve) {\n receiverResolve(new Uint8Array(0));\n }\n });\n\n activeSocket.on(\"timeout\", () => {\n activeSocket.destroy();\n connected = false;\n });\n } catch (err) {\n reject(\n new TransportError(\n `Failed to create TCP socket: ${err instanceof Error ? err.message : String(err)}`,\n ),\n );\n }\n });\n };\n\n const send = async (data: Uint8Array): Promise<void> => {\n if (!connected) {\n throw new TransportError(\"TCP socket is not connected\");\n }\n\n return new Promise((resolve, reject) => {\n const lengthBuffer = new Uint8Array(4);\n const lengthView = new DataView(lengthBuffer.buffer);\n lengthView.setUint32(0, data.length, false);\n\n const fullMessage = new Uint8Array(lengthBuffer.length + data.length);\n fullMessage.set(lengthBuffer, 0);\n fullMessage.set(data, lengthBuffer.length);\n\n const timeoutId = setTimeout(() => {\n reject(new TimeoutError(`TCP send timeout after ${timeout}ms`));\n }, timeout);\n\n socket?.write(fullMessage, (err?: Error | null) => {\n clearTimeout(timeoutId);\n if (err) {\n reject(new TransportError(`TCP send failed: ${err.message}`));\n } else {\n resolve();\n }\n });\n });\n };\n\n const receive = async (): Promise<Uint8Array> => {\n if (receiveQueue.length > 0) {\n const message = receiveQueue.shift();\n if (!message) {\n throw new TransportError(\"TCP receive queue was unexpectedly empty\");\n }\n return message;\n }\n\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n receiverResolve = null;\n reject(new TimeoutError(`TCP receive timeout after ${timeout}ms`));\n }, timeout);\n\n receiverResolve = (data: Uint8Array) => {\n clearTimeout(timeoutId);\n receiverResolve = null;\n if (data.length === 0) {\n reject(new TransportError(\"Connection closed\"));\n } else {\n resolve(data);\n }\n };\n });\n };\n\n const close = async (): Promise<void> => {\n if (socket) {\n const activeSocket = socket;\n return new Promise<void>((resolve) => {\n const timeoutId = setTimeout(() => {\n activeSocket.destroy();\n connected = false;\n resolve();\n }, 5000);\n\n activeSocket.on(\"close\", () => {\n clearTimeout(timeoutId);\n connected = false;\n resolve();\n });\n\n activeSocket.end();\n });\n }\n\n connected = false;\n };\n\n const getUrl = (): string => url;\n const isConnected = (): boolean => connected;\n\n return {\n connect,\n send,\n receive,\n close,\n getUrl,\n isConnected,\n };\n}\n","/**\n * Transport factory to create appropriate transport based on URL\n */\n\nimport { Transport, TransportOptions } from \"./types\";\nimport { createWebSocketTransport } from \"./websocket\";\nimport { createTcpTransport } from \"./tcp\";\nimport { TransportError } from \"../core/errors\";\n\ntype NodeLikeProcess = {\n versions?: {\n node?: string;\n };\n};\n\nconst isNode = (): boolean => {\n try {\n const candidate = globalThis as typeof globalThis & {\n process?: NodeLikeProcess;\n };\n return (\n typeof candidate.process !== \"undefined\" &&\n typeof candidate.process?.versions?.node === \"string\"\n );\n } catch {\n return false;\n }\n};\n\nexport function createTransport(\n url: string,\n transportType: \"ws\" | \"tcp\" | \"auto\" = \"auto\",\n options: TransportOptions = {},\n): Transport {\n if (transportType === \"auto\") {\n // Detect from URL\n if (url.startsWith(\"ws://\") || url.startsWith(\"wss://\")) {\n return createWebSocketTransport(url, options);\n }\n if (url.startsWith(\"tcp://\")) {\n if (!isNode()) {\n throw new TransportError(\n \"TCP transport requires Node.js. Use WebSocket (ws://) for browser\",\n );\n }\n return createTcpTransport(url, options);\n }\n if (url.startsWith(\"http://\") || url.startsWith(\"https://\")) {\n // Convert HTTP to WebSocket\n const wsUrl = url.replace(/^https?:\\/\\//, (match) => {\n return match === \"https://\" ? \"wss://\" : \"ws://\";\n });\n return createWebSocketTransport(wsUrl, options);\n }\n\n // Default to WebSocket\n return createWebSocketTransport(url, options);\n }\n\n if (transportType === \"ws\") {\n return createWebSocketTransport(url, options);\n }\n\n if (transportType === \"tcp\") {\n if (!isNode()) {\n throw new TransportError(\"TCP transport requires Node.js. Use WebSocket (ws://) for browser\");\n }\n return createTcpTransport(url, options);\n }\n\n throw new TransportError(\"Unknown transport type\");\n}\n","/**\n * Shared utilities for domain clients\n */\n\nimport { Connection } from \"../client/connection\";\n\nexport function createDomainClient(connection: Connection) {\n const requestFrame = async (\n messageType: number,\n payload: Uint8Array,\n signal?: AbortSignal,\n ): Promise<Uint8Array> => connection.request(messageType, payload, signal);\n\n const sendFrame = async (messageType: number, payload: Uint8Array): Promise<void> =>\n connection.send(messageType, payload);\n\n return {\n connection,\n requestFrame,\n sendFrame,\n };\n}\n","/**\n * KV domain codec.\n */\n\nimport { BufferWriter, BufferReader } from \"../../core/buffer\";\nimport { CodecError } from \"../../core/errors\";\nimport {\n KvBeginResponse,\n KvGetResponse,\n KvScanOptions,\n KvScanResponse,\n KvStatusResponse,\n TxMode,\n DurabilityMode,\n} from \"./types\";\n\nexport const KvCodec = {\n encodeBegin(route: string, mode: TxMode, durability: DurabilityMode): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeRoute(route);\n writer.writeU8(mode === \"ReadWrite\" ? 1 : 0);\n writer.writeU8(this.encodeDurability(durability));\n return writer.getBufferView();\n },\n\n decodeBeginResponse(payload: Uint8Array): KvBeginResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n const txId = reader.isEOF() ? undefined : reader.readU64BE();\n return { status, txId };\n },\n\n encodePut(txId: bigint, route: string, key: Uint8Array, value: Uint8Array): Uint8Array {\n const writer = new BufferWriter(512);\n writer.writeU64BE(txId);\n writer.writeRoute(route);\n writer.writeU32BE(key.length);\n writer.writeBytes(key);\n writer.writeU32BE(value.length);\n writer.writeBytes(value);\n return writer.getBufferView();\n },\n\n encodeInsert(txId: bigint, route: string, key: Uint8Array, value: Uint8Array): Uint8Array {\n return this.encodePut(txId, route, key, value);\n },\n\n decodeStatusResponse(payload: Uint8Array): KvStatusResponse {\n const reader = new BufferReader(payload);\n return { status: reader.readU8() };\n },\n\n decodePutResponse(payload: Uint8Array): KvStatusResponse {\n return this.decodeStatusResponse(payload);\n },\n\n encodeGet(txId: bigint, route: string, key: Uint8Array): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeU64BE(txId);\n writer.writeRoute(route);\n writer.writeU32BE(key.length);\n writer.writeBytes(key);\n return writer.getBufferView();\n },\n\n decodeGetResponse(payload: Uint8Array): KvGetResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n const found = !reader.isEOF() && reader.readU8() === 1;\n\n if (!found || reader.isEOF()) {\n return { status, found: false };\n }\n\n const valueLen = reader.readU32BE();\n\n return {\n status,\n found: true,\n value: reader.readBytes(valueLen),\n };\n },\n\n encodeDelete(txId: bigint, route: string, key: Uint8Array): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeU64BE(txId);\n writer.writeRoute(route);\n writer.writeU32BE(key.length);\n writer.writeBytes(key);\n return writer.getBufferView();\n },\n\n encodeDeleteRange(\n txId: bigint,\n route: string,\n startKey: Uint8Array,\n endKey: Uint8Array,\n ): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeU64BE(txId);\n writer.writeRoute(route);\n writer.writeU32BE(startKey.length);\n writer.writeBytes(startKey);\n writer.writeU32BE(endKey.length);\n writer.writeBytes(endKey);\n return writer.getBufferView();\n },\n\n encodeCommit(txId: bigint, route: string): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeU64BE(txId);\n writer.writeRoute(route);\n return writer.getBufferView();\n },\n\n encodeRollback(txId: bigint, route: string): Uint8Array {\n return this.encodeCommit(txId, route);\n },\n\n encodeScan(txId: bigint, route: string, options: KvScanOptions = {}): Uint8Array {\n const writer = new BufferWriter(512);\n writer.writeU64BE(txId);\n writer.writeRoute(route);\n\n if (options.startKey) {\n writer.writeU8(1);\n writer.writeU32BE(options.startKey.length);\n writer.writeBytes(options.startKey);\n } else {\n writer.writeU8(0);\n }\n\n if (options.endKey) {\n writer.writeU8(1);\n writer.writeU32BE(options.endKey.length);\n writer.writeBytes(options.endKey);\n } else {\n writer.writeU8(0);\n }\n\n if (typeof options.limit === \"number\" && options.limit > 0) {\n writer.writeU8(1);\n writer.writeU32BE(options.limit);\n } else {\n writer.writeU8(0);\n }\n\n writer.writeU8(options.reverse ? 1 : 0);\n return writer.getBufferView();\n },\n\n decodeScanResponse(payload: Uint8Array): KvScanResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n\n if (reader.isEOF()) {\n return { status, keys: [] };\n }\n\n const count = reader.readU32BE();\n const keys: Uint8Array[] = [];\n for (let i = 0; i < count; i += 1) {\n const keyLen = reader.readU32BE();\n keys.push(reader.readBytes(keyLen));\n\n const valueLen = reader.readU32BE();\n reader.readBytes(valueLen);\n }\n\n const hasMore = !reader.isEOF() ? reader.readU8() : 0;\n const nextCursor = hasMore === 1 ? new Uint8Array(0) : undefined;\n\n return { status, keys, nextCursor };\n },\n\n encodeDurability(durability: DurabilityMode): number {\n switch (durability) {\n case \"Buffered\":\n return 0;\n case \"Sync\":\n return 1;\n default:\n throw new CodecError(\"Unknown durability mode\");\n }\n },\n};\n","/**\n * Iterator[T] is a generic streaming iterator modeled after fitz-go's Iterator[T].\n *\n * Usage pattern (manual):\n * ```ts\n * const it = await tx.scan(prefix, 100);\n * try {\n * while (it.next()) {\n * const value = it.value();\n * // use value\n * }\n * if (it.err()) throw it.err();\n * } finally {\n * it.close();\n * }\n * ```\n *\n * Usage pattern (with forEach helper):\n * ```ts\n * const it = await tx.scan(prefix, 100);\n * return forEach(it, (value) => {\n * // use value\n * return Promise.resolve(undefined);\n * });\n * ```\n */\nexport interface Iterator<T> {\n /**\n * Advances the iterator and returns true if a value is available.\n */\n next(): boolean;\n\n /**\n * Returns the current item (valid only after a successful next()).\n */\n value(): T;\n\n /**\n * Returns the first non-EOF error encountered.\n */\n err(): Error | null;\n\n /**\n * Closes/releases any resources associated with the iterator.\n */\n close(): void;\n}\n\n/**\n * SliceIterator iterates over an in-memory slice/array.\n * Used for batch results like KV SCAN where all items arrive in one response.\n */\nexport function createSliceIterator<T>(items: T[]): Iterator<T> {\n let index = -1;\n\n const next = (): boolean => {\n index += 1;\n return index < items.length;\n };\n\n const value = (): T => {\n if (index < 0 || index >= items.length) {\n throw new Error(\"SliceIterator.value() called in invalid state\");\n }\n return items[index];\n };\n\n const err = (): Error | null => null;\n\n const close = (): void => {\n // No-op: no resources to release\n };\n\n return {\n next,\n value,\n err,\n close,\n };\n}\n\nexport type AsyncIterableIterator<T> = AsyncIterable<T>;\n\nexport function createAsyncIterableIterator<T>(iterator: Iterator<T>): AsyncIterableIterator<T> {\n return {\n async *[Symbol.asyncIterator]() {\n while (iterator.next()) {\n yield iterator.value();\n }\n\n const err = iterator.err();\n iterator.close();\n if (err) {\n throw err;\n }\n },\n };\n}\n\n/**\n * forEach iterates over all items in the iterator, calling fn for each.\n * Automatically handles close() and error checking.\n * Iteration stops on first error from either callback or iterator.\n *\n * Example:\n * ```ts\n * const it = await tx.scan(startKey, 100);\n * return forEach(it, async (kv) => {\n * console.log(`${kv.key}: ${kv.value}`);\n * });\n * ```\n */\nexport async function forEach<T>(it: Iterator<T>, fn: (item: T) => Promise<void>): Promise<void> {\n try {\n while (it.next()) {\n await fn(it.value());\n }\n const err = it.err();\n if (err) {\n throw err;\n }\n } finally {\n it.close();\n }\n}\n","/**\n * KV transaction wrapper.\n */\n\nimport { Connection } from \"../../client/connection\";\nimport { KvCodec } from \"./codec\";\nimport { KvGetResult, KvScanOptions, KvStatus } from \"./types\";\nimport {\n MSG_KV_PUT,\n MSG_KV_INSERT,\n MSG_KV_GET,\n MSG_KV_DELETE,\n MSG_KV_DELETE_RANGE,\n MSG_KV_COMMIT,\n MSG_KV_ROLLBACK,\n MSG_KV_SCAN,\n} from \"../../frame/types\";\nimport { KvError } from \"../../core/errors\";\nimport { createSliceIterator, createAsyncIterableIterator } from \"../../core/iterator\";\n\nexport type KvTransaction = ReturnType<typeof createKvTransaction>;\n\nexport function createKvTransaction(connection: Connection, route: string, txId: bigint) {\n let closed = false;\n const unsubscribeDisconnect = connection.onDisconnect(() => {\n closed = true;\n });\n\n const ensureOpen = (): void => {\n if (closed) {\n throw new KvError(\"Transaction already closed\", \"TX_CLOSED\");\n }\n };\n\n const checkStatus = (status: number, operation: string): void => {\n if (status === KvStatus.Ok) {\n return;\n }\n\n const statusNames: Record<number, string> = {\n [KvStatus.TransactionAborted]: \"TransactionAborted\",\n [KvStatus.LeaseExpired]: \"LeaseExpired\",\n [KvStatus.ConflictingWrite]: \"ConflictingWrite\",\n [KvStatus.KeyNotFound]: \"KeyNotFound\",\n [KvStatus.OperationNotAllowed]: \"OperationNotAllowed\",\n };\n\n throw new KvError(\n `${operation} failed: ${statusNames[status] ?? `Unknown(${status})`}`,\n operation,\n status,\n );\n };\n\n const put = async (key: Uint8Array, value: Uint8Array, signal?: AbortSignal): Promise<void> => {\n ensureOpen();\n const payload = KvCodec.encodePut(txId, route, key, value);\n const response = await connection.request(MSG_KV_PUT, payload, signal);\n checkStatus(KvCodec.decodeStatusResponse(response).status, \"PUT\");\n };\n\n const insert = async (\n key: Uint8Array,\n value: Uint8Array,\n signal?: AbortSignal,\n ): Promise<void> => {\n ensureOpen();\n const payload = KvCodec.encodeInsert(txId, route, key, value);\n const response = await connection.request(MSG_KV_INSERT, payload, signal);\n checkStatus(KvCodec.decodeStatusResponse(response).status, \"INSERT\");\n };\n\n const get = async (key: Uint8Array, signal?: AbortSignal): Promise<KvGetResult> => {\n ensureOpen();\n const payload = KvCodec.encodeGet(txId, route, key);\n const response = await connection.request(MSG_KV_GET, payload, signal);\n const decoded = KvCodec.decodeGetResponse(response);\n checkStatus(decoded.status, \"GET\");\n if (!decoded.found || !decoded.value) {\n return { type: \"not-found\" };\n }\n return { type: \"found\", value: decoded.value };\n };\n\n const deleteItem = async (key: Uint8Array, signal?: AbortSignal): Promise<void> => {\n ensureOpen();\n const payload = KvCodec.encodeDelete(txId, route, key);\n const response = await connection.request(MSG_KV_DELETE, payload, signal);\n checkStatus(KvCodec.decodeStatusResponse(response).status, \"DELETE\");\n };\n\n const deleteRange = async (\n startKey: Uint8Array,\n endKey: Uint8Array,\n signal?: AbortSignal,\n ): Promise<void> => {\n ensureOpen();\n const payload = KvCodec.encodeDeleteRange(txId, route, startKey, endKey);\n const response = await connection.request(MSG_KV_DELETE_RANGE, payload, signal);\n checkStatus(KvCodec.decodeStatusResponse(response).status, \"DELETE_RANGE\");\n };\n\n const scan = async (\n options: KvScanOptions = {},\n signal?: AbortSignal,\n ): Promise<AsyncIterable<Uint8Array>> => {\n ensureOpen();\n const payload = KvCodec.encodeScan(txId, route, options);\n const response = await connection.request(MSG_KV_SCAN, payload, signal);\n const decoded = KvCodec.decodeScanResponse(response);\n checkStatus(decoded.status, \"SCAN\");\n return createAsyncIterableIterator(createSliceIterator(decoded.keys));\n };\n\n const commit = async (signal?: AbortSignal): Promise<void> => {\n ensureOpen();\n closed = true;\n unsubscribeDisconnect();\n const payload = KvCodec.encodeCommit(txId, route);\n const response = await connection.request(MSG_KV_COMMIT, payload, signal);\n checkStatus(KvCodec.decodeStatusResponse(response).status, \"COMMIT\");\n };\n\n const rollback = async (signal?: AbortSignal): Promise<void> => {\n if (closed) {\n return;\n }\n\n closed = true;\n unsubscribeDisconnect();\n const payload = KvCodec.encodeRollback(txId, route);\n try {\n const response = await connection.request(MSG_KV_ROLLBACK, payload, signal);\n checkStatus(KvCodec.decodeStatusResponse(response).status, \"ROLLBACK\");\n } catch {\n // Best-effort cleanup.\n }\n };\n\n const getTxId = (): bigint => txId;\n\n const isOpen = (): boolean => !closed;\n\n return {\n put,\n insert,\n get,\n delete: deleteItem,\n deleteRange,\n scan,\n commit,\n rollback,\n getTxId,\n isOpen,\n };\n}\n","export type RouteShapeOptions = {\n allowBareRoute?: boolean;\n};\n\nexport function isRouteShape(\n route: string,\n _scheme: string,\n _segmentCount: number,\n _options: RouteShapeOptions = {},\n): boolean {\n // Route strings are opaque protocol inputs; semantic validation is broker-owned.\n return typeof route === \"string\";\n}\n\nexport function isConcreteRouteShape(route: string, _scheme: string): boolean {\n return typeof route === \"string\";\n}\n\nexport type SelectorRouteShapeOptions = {\n allowRealmWildcard?: boolean;\n};\n\nexport function isSelectorRouteShape(\n route: string,\n _scheme: string,\n _segmentCount: number,\n _options: SelectorRouteShapeOptions = {},\n): boolean {\n return typeof route === \"string\";\n}\n","/**\n * KV domain client.\n */\n\nimport { createDomainClient } from \"../base\";\nimport { KvCodec } from \"./codec\";\nimport { createKvTransaction, KvTransaction } from \"./transaction\";\nimport { KvBeginOptions, KvStatus } from \"./types\";\nimport { MSG_KV_BEGIN } from \"../../frame/types\";\nimport { KvError } from \"../../core/errors\";\nimport { isRouteShape } from \"../_routes\";\nimport type { Connection } from \"../../client/connection\";\n\nexport type KvClient = ReturnType<typeof createKvClient>;\n\nexport function createKvClient(connection: Connection) {\n const { requestFrame } = createDomainClient(connection);\n\n const begin = async (route: string, options: KvBeginOptions): Promise<KvTransaction> => {\n if (!isRouteShape(route, \"kv\", 3, { allowBareRoute: true })) {\n throw new KvError(\n `Invalid kv route: ${route} (expected kv://{realm}/{area}/{resource} or {realm}/{area}/{resource}, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n if (!options?.durability) {\n throw new KvError(\"BEGIN requires explicit durability\", \"MISSING_DURABILITY\");\n }\n\n const payload = KvCodec.encodeBegin(route, options.mode ?? \"ReadWrite\", options.durability);\n const response = await requestFrame(MSG_KV_BEGIN, payload);\n const decoded = KvCodec.decodeBeginResponse(response);\n\n if (decoded.status !== KvStatus.Ok || decoded.txId === undefined) {\n throw new KvError(\"BEGIN failed\", \"BEGIN_FAILED\", decoded.status);\n }\n\n return createKvTransaction(connection, route, decoded.txId);\n };\n\n return {\n begin,\n };\n}\n\ntype KvClientConstructor = {\n new (connection: Connection): KvClient;\n (connection: Connection): KvClient;\n};\n\nexport const KvClient: KvClientConstructor = function (connection: Connection) {\n return createKvClient(connection);\n} as unknown as KvClientConstructor;\n\nexport type { KvTransaction } from \"./transaction\";\nexport * from \"./types\";\n","/**\n * Queue domain codec for encoding and decoding protocol messages.\n */\n\nimport { BufferWriter, BufferReader, utf8Decoder } from \"../../core/buffer\";\nimport {\n QueueEnqueueResponse,\n QueueReserveResponse,\n QueueCompleteResponse,\n QueueExtendResponse,\n QueueSubscribeResponse,\n QueueUnsubscribeResponse,\n EnqueueOptions,\n} from \"./types\";\n\nexport const QueueCodec = {\n /**\n * Encode ENQUEUE request.\n * Payload: [route: string][body_len: u32][body: bytes][has_delay: u8][delay_seconds: u64 if has_delay]\n */\n encodeEnqueue(route: string, body: Uint8Array, options?: EnqueueOptions): Uint8Array {\n const writer = new BufferWriter(512);\n writer.writeRoute(route);\n writer.writeU32BE(body.length);\n writer.writeBytes(body);\n\n const delaySeconds = options?.delayMs ? Math.floor(options.delayMs / 1000) : 0;\n const hasDelay = delaySeconds > 0 ? 1 : 0;\n writer.writeU8(hasDelay);\n if (hasDelay) {\n writer.writeU64BE(BigInt(delaySeconds));\n }\n\n return writer.getBufferView();\n },\n\n /**\n * Decode ENQUEUE response.\n * Payload: [status: u8][message_id: u64]\n */\n decodeEnqueueResponse(payload: Uint8Array): QueueEnqueueResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status, ...this.decodeErrorResponse(reader) };\n }\n\n let messageId: bigint | undefined;\n if (reader.remainingBytes() >= 8) {\n messageId = reader.readU64BE();\n }\n return { status, messageId };\n },\n\n /**\n * Encode RESERVE request.\n * Payload: [route: string][lease_seconds: u64][has_batch_size: u8][batch_size: u32]\n *\n * Long polling is handled client-side by QueueClient.reserve().\n */\n encodeReserve(route: string, leaseSeconds: number, batchSize?: number): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeRoute(route);\n writer.writeU64BE(BigInt(leaseSeconds));\n\n const hasBatchSize = batchSize !== undefined && batchSize > 0 ? 1 : 0;\n writer.writeU8(hasBatchSize);\n if (hasBatchSize && batchSize !== undefined) {\n writer.writeU32BE(batchSize);\n }\n\n return writer.getBufferView();\n },\n\n /**\n * Decode RESERVE response.\n * Payload: [status: u8][lease_count: u32]([message_id: u64][lease_token: u64][body_len: u32][body: bytes] ...)\n */\n decodeReserveResponse(payload: Uint8Array): QueueReserveResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n\n if (status !== 0) {\n return { status, ...this.decodeErrorResponse(reader) };\n }\n\n if (reader.isEOF() || reader.remainingBytes() < 4) {\n return { status, items: [] };\n }\n\n const leaseCount = reader.readU32BE();\n const items: Array<{ id: bigint; token: bigint; body: Uint8Array }> = [];\n\n for (let i = 0; i < leaseCount; i++) {\n const id = reader.readU64BE();\n const token = reader.readU64BE();\n const bodyLen = reader.readU32BE();\n const body = reader.readBytes(bodyLen);\n\n items.push({ id, token, body });\n }\n\n return { status, items };\n },\n\n /**\n * Encode COMPLETE request.\n * Payload: [route: string][message_id: u64][lease_token: u64]\n */\n encodeComplete(route: string, messageId: bigint, leaseToken: bigint): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(route);\n writer.writeU64BE(messageId);\n writer.writeU64BE(leaseToken);\n return writer.getBufferView();\n },\n\n /**\n * Decode COMPLETE response.\n * Payload: [status: u8]\n */\n decodeCompleteResponse(payload: Uint8Array): QueueCompleteResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status, ...this.decodeErrorResponse(reader) };\n }\n\n return { status };\n },\n\n /**\n * Encode EXTEND request.\n * Payload: [route: string][message_id: u64][lease_token: u64][lease_seconds: u64]\n */\n encodeExtend(\n route: string,\n messageId: bigint,\n leaseToken: bigint,\n leaseSeconds: number,\n ): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(route);\n writer.writeU64BE(messageId);\n writer.writeU64BE(leaseToken);\n writer.writeU64BE(BigInt(leaseSeconds));\n return writer.getBufferView();\n },\n\n /**\n * Decode EXTEND response.\n * Payload: [status: u8]\n */\n decodeExtendResponse(payload: Uint8Array): QueueExtendResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status, ...this.decodeErrorResponse(reader) };\n }\n\n return { status };\n },\n\n /**\n * Encode SUBSCRIBE request.\n * Payload: [pattern: string]\n */\n encodeSubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(pattern);\n return writer.getBufferView();\n },\n\n /**\n * Decode SUBSCRIBE response.\n * Payload: [status: u8][sub_id: u64]\n */\n decodeSubscribeResponse(payload: Uint8Array): QueueSubscribeResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status, ...this.decodeErrorResponse(reader) };\n }\n\n if (reader.remainingBytes() === 8) {\n return { status, subId: reader.readU64BE() };\n }\n\n if (reader.remainingBytes() >= 9) {\n const hasSubId = reader.readU8();\n if (hasSubId === 1 && reader.remainingBytes() >= 8) {\n return { status, subId: reader.readU64BE() };\n }\n }\n\n if (reader.isEOF()) {\n return { status };\n }\n\n return { status };\n },\n\n /**\n * Encode UNSUBSCRIBE request.\n * Payload: [pattern: string]\n */\n encodeUnsubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(pattern);\n return writer.getBufferView();\n },\n\n /**\n * Decode UNSUBSCRIBE response.\n * Payload: [status: u8]\n */\n decodeUnsubscribeResponse(payload: Uint8Array): QueueUnsubscribeResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status, ...this.decodeErrorResponse(reader) };\n }\n\n return { status };\n },\n\n /**\n * Decode notification payload.\n * Payload: [sub_id: u64][route: string]\n */\n decodeNotification(payload: Uint8Array): {\n subId: bigint;\n route: string;\n } {\n const reader = new BufferReader(payload);\n const subId = reader.readU64BE();\n const route = reader.readRoute();\n\n return { subId, route };\n },\n\n decodeErrorResponse(reader: BufferReader): {\n errorCode?: number;\n errorMessage?: string;\n } {\n if (reader.remainingBytes() === 1) {\n return { errorCode: reader.readU8() };\n }\n\n if (reader.remainingBytes() >= 4) {\n const messageLength = reader.readU32BE();\n if (messageLength <= reader.remainingBytes()) {\n return {\n errorMessage: utf8Decoder.decode(reader.readBytes(messageLength)),\n };\n }\n }\n\n return {};\n },\n};\n","/**\n * Queue domain types\n * Per fitz-go/internal/domains/queue/queue.go\n */\n\nimport { Connection } from \"../../client/connection\";\nimport { QueueCodec } from \"./codec\";\nimport { QueueError } from \"../../core/errors\";\nimport { MSG_QUEUE_EXTEND, MSG_QUEUE_COMPLETE } from \"../../frame/types\";\n\n/**\n * Queue item represents a reserved queue message.\n * It carries the route and token required for `extend()` and `complete()`.\n */\nexport type QueueItem = ReturnType<typeof createQueueItem>;\n\nexport function createQueueItem(\n id: bigint,\n token: bigint,\n body: Uint8Array,\n route: string,\n connection: Connection,\n) {\n const extend = async (leaseSecs: number, signal?: AbortSignal): Promise<void> => {\n const payload = QueueCodec.encodeExtend(route, id, token, leaseSecs);\n const response = await connection.request(MSG_QUEUE_EXTEND, payload, signal);\n const decoded = QueueCodec.decodeExtendResponse(response);\n\n if (decoded.status !== QueueStatus.Ok) {\n const errorCode = decoded.errorCode ?? decoded.status;\n const statusName = QueueStatus[errorCode] || `Unknown(${errorCode})`;\n const reason = decoded.errorMessage ?? statusName;\n throw new QueueError(`EXTEND failed: ${reason}`, statusName, errorCode);\n }\n };\n\n const complete = async (signal?: AbortSignal): Promise<void> => {\n const requestPayload = QueueCodec.encodeComplete(route, id, token);\n const response = await connection.request(MSG_QUEUE_COMPLETE, requestPayload, signal);\n const decoded = QueueCodec.decodeCompleteResponse(response);\n\n if (decoded.status !== QueueStatus.Ok) {\n const errorCode = decoded.errorCode ?? decoded.status;\n const statusName = QueueStatus[errorCode] || `Unknown(${errorCode})`;\n const reason = decoded.errorMessage ?? statusName;\n throw new QueueError(`COMPLETE failed: ${reason}`, statusName, errorCode);\n }\n };\n\n const testOnlyInvalidToken = (): bigint => id + 1n;\n\n const testOnlyCompleteWithToken = async (\n tokenToUse: bigint,\n signal?: AbortSignal,\n ): Promise<void> => {\n const requestPayload = QueueCodec.encodeComplete(route, id, tokenToUse);\n const response = await connection.request(MSG_QUEUE_COMPLETE, requestPayload, signal);\n const decoded = QueueCodec.decodeCompleteResponse(response);\n\n if (decoded.status !== QueueStatus.Ok) {\n const errorCode = decoded.errorCode ?? decoded.status;\n const statusName = QueueStatus[errorCode] || `Unknown(${errorCode})`;\n const reason = decoded.errorMessage ?? statusName;\n throw new QueueError(`COMPLETE failed: ${reason}`, statusName, errorCode);\n }\n };\n\n return {\n body,\n extend,\n complete,\n testOnlyInvalidToken,\n testOnlyCompleteWithToken,\n };\n}\n\n/**\n * Availability notification from a queue.\n */\nexport interface AvailabilityNotification {\n route: string;\n}\n\n/**\n * Handler for availability notifications.\n */\nexport type AvailabilityHandler = (notification: AvailabilityNotification) => void | Promise<void>;\n\n/**\n * Queue availability subscription.\n */\nexport type QueueSubscription = ReturnType<typeof createQueueSubscription>;\n\nexport function createQueueSubscription(\n subId: bigint,\n pattern: string,\n unsubscribeFn: (subId: bigint) => Promise<void>,\n) {\n const unsubscribe = async (): Promise<void> => {\n await unsubscribeFn(subId);\n };\n\n return {\n subId,\n pattern,\n unsubscribe,\n };\n}\n\n/**\n * Queue operation status codes\n */\nexport enum QueueStatus {\n Ok = 0,\n QueueNotFound = 1,\n MessageNotFound = 2,\n InvalidToken = 3,\n QueueFull = 4,\n InvalidDelay = 5,\n}\n\n/**\n * Options for enqueue operations.\n */\nexport interface EnqueueOptions {\n priority?: number;\n delayMs?: number;\n ttlMs?: number;\n}\n\n/**\n * Internal codec response types.\n */\nexport interface QueueEnqueueResponse {\n status: number;\n messageId?: bigint;\n errorCode?: number;\n errorMessage?: string;\n}\n\nexport interface QueueReserveResponse {\n status: number;\n items?: Array<{\n id: bigint;\n token: bigint;\n body: Uint8Array;\n }>;\n cursor?: Uint8Array;\n errorCode?: number;\n errorMessage?: string;\n}\n\nexport interface QueueExtendResponse {\n status: number;\n errorCode?: number;\n errorMessage?: string;\n}\n\nexport interface QueueCompleteResponse {\n status: number;\n errorCode?: number;\n errorMessage?: string;\n}\n\nexport interface QueueSubscribeResponse {\n status: number;\n subId?: bigint;\n errorCode?: number;\n errorMessage?: string;\n}\n\nexport interface QueueUnsubscribeResponse {\n status: number;\n errorCode?: number;\n errorMessage?: string;\n}\n","/**\n * Queue domain client.\n */\n\nimport { createDomainClient } from \"../base\";\nimport type { Connection } from \"../../client/connection\";\nimport { QueueError } from \"../../core/errors\";\nimport {\n MSG_QUEUE_ENQUEUE,\n MSG_QUEUE_NOTIFY,\n MSG_QUEUE_RESERVE,\n MSG_QUEUE_SUBSCRIBE,\n MSG_QUEUE_UNSUBSCRIBE,\n} from \"../../frame/types\";\nimport { isRouteShape, isSelectorRouteShape } from \"../_routes\";\nimport { QueueCodec } from \"./codec\";\nimport {\n AvailabilityHandler,\n AvailabilityNotification,\n EnqueueOptions,\n QueueItem,\n QueueStatus,\n QueueSubscription,\n createQueueItem,\n createQueueSubscription,\n} from \"./types\";\n\ntype QueueSubscriptionState = {\n subId: bigint;\n handlers: Map<number, AvailabilityHandler>;\n};\n\nexport type QueueClient = ReturnType<typeof createQueueClient>;\n\nexport function createQueueClient(connection: Connection) {\n const { requestFrame } = createDomainClient(connection);\n const subscriptionsByPattern = new Map<string, QueueSubscriptionState>();\n const patternsBySubId = new Map<bigint, string>();\n let notificationHandlerRegistered = false;\n let nextHandlerId = 1;\n\n connection.onReconnect(async () => {\n if (subscriptionsByPattern.size === 0) {\n return;\n }\n\n const subscriptions = Array.from(subscriptionsByPattern.entries(), ([pattern, state]) => ({\n pattern,\n handlers: Array.from(state.handlers.entries()),\n }));\n subscriptionsByPattern.clear();\n patternsBySubId.clear();\n\n for (const subscription of subscriptions) {\n const subId = await subscribeWire(subscription.pattern);\n subscriptionsByPattern.set(subscription.pattern, {\n subId,\n handlers: new Map(subscription.handlers),\n });\n patternsBySubId.set(subId, subscription.pattern);\n }\n });\n\n const enqueue = async (\n route: string,\n body: Uint8Array,\n options?: EnqueueOptions,\n ): Promise<bigint> => {\n assertQueueRoute(route);\n const payload = QueueCodec.encodeEnqueue(route, body, options);\n const response = await requestFrame(MSG_QUEUE_ENQUEUE, payload);\n const decoded = QueueCodec.decodeEnqueueResponse(response);\n checkStatus(decoded, \"ENQUEUE\");\n\n if (decoded.messageId === undefined) {\n throw new QueueError(\"ENQUEUE response missing messageId\", \"MISSING_MESSAGE_ID\");\n }\n\n return decoded.messageId;\n };\n\n const reserve = async (\n route: string,\n leaseSeconds: number,\n batchSize: number = 1,\n waitSeconds: number = 0,\n ): Promise<QueueItem[]> => {\n assertQueueReserveRoute(route);\n if (waitSeconds <= 0) {\n return reserveOnce(route, leaseSeconds, batchSize);\n }\n\n let items = await reserveOnce(route, leaseSeconds, batchSize);\n if (items.length > 0) {\n return items;\n }\n\n const deadline = Date.now() + waitSeconds * 1000;\n let pendingNotifications = 0;\n let waiter: (() => void) | undefined;\n const subscription = await subscribe(route, async () => {\n pendingNotifications += 1;\n if (!waiter) {\n return;\n }\n\n const resolve = waiter;\n waiter = undefined;\n pendingNotifications = 0;\n resolve();\n });\n\n try {\n while (true) {\n items = await reserveOnce(route, leaseSeconds, batchSize);\n if (items.length > 0) {\n return items;\n }\n\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) {\n return items;\n }\n\n await new Promise<void>((resolve) => {\n if (pendingNotifications > 0) {\n pendingNotifications = 0;\n resolve();\n return;\n }\n\n const release = () => {\n clearTimeout(timeoutId);\n if (waiter === release) {\n waiter = undefined;\n }\n resolve();\n };\n const timeoutId = setTimeout(release, remainingMs);\n waiter = release;\n });\n }\n } finally {\n await subscription.unsubscribe();\n }\n };\n\n const reserveOnce = async (\n route: string,\n leaseSeconds: number,\n batchSize: number,\n ): Promise<QueueItem[]> => {\n const payload = QueueCodec.encodeReserve(route, leaseSeconds, batchSize);\n const response = await requestFrame(MSG_QUEUE_RESERVE, payload);\n const decoded = QueueCodec.decodeReserveResponse(response);\n checkStatus(decoded, \"RESERVE\");\n\n return (decoded.items ?? []).map((item) =>\n createQueueItem(item.id, item.token, item.body, route, connection),\n );\n };\n\n const subscribe = async (\n pattern: string,\n handler: AvailabilityHandler,\n ): Promise<QueueSubscription> => {\n assertQueueSubscriptionPattern(pattern);\n initNotificationHandler();\n const existing = subscriptionsByPattern.get(pattern);\n if (existing) {\n return addLocalSubscription(pattern, existing.subId, handler);\n }\n\n const subId = await subscribeWire(pattern);\n return addLocalSubscription(pattern, subId, handler);\n };\n\n const subscribeWire = async (pattern: string): Promise<bigint> => {\n const payload = QueueCodec.encodeSubscribe(wireWatchPattern(pattern));\n const response = await requestFrame(MSG_QUEUE_SUBSCRIBE, payload);\n const decoded = QueueCodec.decodeSubscribeResponse(response);\n checkStatus(decoded, \"SUBSCRIBE\");\n\n if (decoded.subId === undefined) {\n throw new QueueError(\"SUBSCRIBE response missing subId\", \"MISSING_SUB_ID\");\n }\n\n return decoded.subId;\n };\n\n const addLocalSubscription = (\n pattern: string,\n subId: bigint,\n handler: AvailabilityHandler,\n ): QueueSubscription => {\n const handlerId = nextHandlerId++;\n let subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n subscription = { subId, handlers: new Map() };\n subscriptionsByPattern.set(pattern, subscription);\n patternsBySubId.set(subId, pattern);\n }\n\n subscription.handlers.set(handlerId, handler);\n\n return createQueueSubscription(subId, pattern, async () => {\n await unsubscribe(pattern, handlerId);\n });\n };\n\n const unsubscribe = async (pattern: string, handlerId: number): Promise<void> => {\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n subscription.handlers.delete(handlerId);\n if (subscription.handlers.size > 0) {\n return;\n }\n\n subscriptionsByPattern.delete(pattern);\n patternsBySubId.delete(subscription.subId);\n const payload = QueueCodec.encodeUnsubscribe(wireWatchPattern(pattern));\n const response = await requestFrame(MSG_QUEUE_UNSUBSCRIBE, payload);\n const decoded = QueueCodec.decodeUnsubscribeResponse(response);\n checkStatus(decoded, \"UNSUBSCRIBE\");\n };\n\n const initNotificationHandler = (): void => {\n if (notificationHandlerRegistered) {\n return;\n }\n\n notificationHandlerRegistered = true;\n connection.registerNotificationHandler(MSG_QUEUE_NOTIFY, (payload) => {\n try {\n const { subId, route } = QueueCodec.decodeNotification(payload);\n const pattern = patternsBySubId.get(subId);\n if (!pattern) {\n return;\n }\n\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n const notification: AvailabilityNotification = { route: publicQueueRoute(route) };\n for (const handler of subscription.handlers.values()) {\n connection.dispatchAsyncHandler(async () => {\n await handler(notification);\n });\n }\n } catch {\n // Best-effort notification dispatch.\n }\n });\n };\n\n const wireWatchPattern = (pattern: string): string => {\n if (pattern.endsWith(\"/ready\")) {\n return pattern;\n }\n\n return `${pattern}/ready`;\n };\n\n const publicQueueRoute = (route: string): string => {\n if (!route.endsWith(\"/ready\")) {\n return route;\n }\n\n return route.slice(0, -\"/ready\".length);\n };\n\n const checkStatus = (\n response: { status: number; errorCode?: number; errorMessage?: string },\n operation: string,\n ): void => {\n if (response.status === QueueStatus.Ok) {\n return;\n }\n\n const errorCode = response.errorCode ?? response.status;\n const statusNames: Record<number, string> = {\n [QueueStatus.QueueNotFound]: \"QueueNotFound\",\n [QueueStatus.MessageNotFound]: \"MessageNotFound\",\n [QueueStatus.InvalidToken]: \"InvalidToken\",\n [QueueStatus.QueueFull]: \"QueueFull\",\n [QueueStatus.InvalidDelay]: \"InvalidDelay\",\n };\n\n const statusName = statusNames[errorCode] ?? `Unknown(${errorCode})`;\n const reason = response.errorMessage ?? statusName;\n\n throw new QueueError(`${operation} failed: ${reason}`, statusName, errorCode);\n };\n\n return {\n enqueue,\n reserve,\n subscribe,\n };\n}\n\ntype QueueClientConstructor = {\n new (connection: Connection): QueueClient;\n (connection: Connection): QueueClient;\n};\n\nexport const QueueClient: QueueClientConstructor = function (connection: Connection) {\n return createQueueClient(connection);\n} as unknown as QueueClientConstructor;\n\nexport * from \"./types\";\n\nfunction assertQueueRoute(route: string): void {\n if (!isRouteShape(route, \"queue\", 3)) {\n throw new QueueError(\n `Invalid queue route: ${route} (expected queue://{realm}/{area}/{resource}, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n\nfunction assertQueueReserveRoute(route: string): void {\n if (!isSelectorRouteShape(route, \"queue\", 3)) {\n throw new QueueError(\n `Invalid queue route: ${route} (expected queue://{realm}/{area}/{resource} or queue://{realm}/{area}/*, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n\nfunction assertQueueSubscriptionPattern(pattern: string): void {\n if (!isSelectorRouteShape(pattern, \"queue\", 3, { allowRealmWildcard: true })) {\n throw new QueueError(\n `Invalid queue pattern: ${pattern} (expected queue://{realm}/{area}/{resource}, queue://{realm}/{area}/*, or queue://{realm}/**)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n","/**\n * RPC domain codec for encoding/decoding messages\n * Per fitz-go/internal/domains/rpc/protocol.go\n */\n\nimport {\n BufferReader,\n getRouteEncoding,\n readU128BEAt,\n readU32BEAt,\n utf8Decoder,\n} from \"../../core/buffer\";\nimport { ProtocolError } from \"../../core/errors\";\nimport { SubscribeResponse, UnsubscribeResponse } from \"./types\";\n\nconst CORRELATION_ID_LENGTH = 16;\nconst getCryptoProvider = (): Crypto | undefined => globalThis.crypto as Crypto | undefined;\nconst correlationIdPool: Uint8Array[] = [];\nconst maxCorrelationIdPoolSize = 64;\n\nconst secureRandomValues = (buffer: Uint8Array): Uint8Array => {\n const provider = getCryptoProvider();\n if (!provider?.getRandomValues) {\n throw new ProtocolError(\n \"Cryptographic randomness is required for RPC correlation IDs\",\n undefined,\n { operation: \"RPC_GENERATE_CORRELATION_ID\" },\n );\n }\n\n provider.getRandomValues(buffer as unknown as ArrayBufferView<ArrayBuffer>);\n return buffer;\n};\n\nexport const acquirePooledCorrelationId = (): Uint8Array => {\n const correlationId = correlationIdPool.pop() ?? new Uint8Array(CORRELATION_ID_LENGTH);\n return secureRandomValues(correlationId);\n};\n\nexport const releasePooledCorrelationId = (correlationId: Uint8Array): void => {\n if (\n correlationId.length !== CORRELATION_ID_LENGTH ||\n correlationIdPool.length >= maxCorrelationIdPoolSize\n ) {\n return;\n }\n correlationIdPool.push(correlationId);\n};\n\nconst readCorrelationKey = (payload: Uint8Array, offset: number): bigint => {\n return readU128BEAt(payload, offset);\n};\n\nconst readStringFromPayload = (\n payload: Uint8Array,\n offset: number,\n): { value: string; nextOffset: number } => {\n if (offset + 4 > payload.length) {\n throw new ProtocolError(\"Unexpected end of buffer while reading string length\", undefined, {\n operation: \"RPC_DECODE\",\n });\n }\n\n const length = readU32BEAt(payload, offset);\n offset += 4;\n\n if (length === 0) {\n return { value: \"\", nextOffset: offset };\n }\n\n if (offset + length > payload.length) {\n throw new ProtocolError(\"Unexpected end of buffer while reading string contents\", undefined, {\n operation: \"RPC_DECODE\",\n });\n }\n\n const value = utf8Decoder.decode(payload.subarray(offset, offset + length));\n return { value, nextOffset: offset + length };\n};\n\nexport const RpcCodec = {\n /**\n * Generate a random 16-byte correlation ID\n * Per fitz-go rpc.go: crypto/rand.Read(correlationID[:])\n */\n generateCorrelationId(): Uint8Array {\n const correlationId = new Uint8Array(CORRELATION_ID_LENGTH);\n secureRandomValues(correlationId);\n return correlationId;\n },\n\n /**\n * Encode RPC_REQUEST (302)\n * Payload: [bytes correlation_id][string route][string reply_route][bytes body]\n * Where bytes/string = [u32 BE len][data]\n */\n encodeRequest(\n correlationId: Uint8Array,\n route: string,\n replyRoute: string,\n body: Uint8Array,\n ): Uint8Array {\n const routeBytes = getRouteEncoding(route);\n const replyRouteBytes = getRouteEncoding(replyRoute);\n const payloadLength =\n 4 + CORRELATION_ID_LENGTH + routeBytes.length + replyRouteBytes.length + 4 + body.length;\n\n const buffer = new Uint8Array(payloadLength);\n let offset = 0;\n\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = CORRELATION_ID_LENGTH;\n buffer.set(correlationId, offset);\n offset += CORRELATION_ID_LENGTH;\n buffer.set(routeBytes, offset);\n offset += routeBytes.length;\n buffer.set(replyRouteBytes, offset);\n offset += replyRouteBytes.length;\n buffer[offset++] = (body.length >> 24) & 0xff;\n buffer[offset++] = (body.length >> 16) & 0xff;\n buffer[offset++] = (body.length >> 8) & 0xff;\n buffer[offset++] = body.length & 0xff;\n buffer.set(body, offset);\n\n return buffer;\n },\n\n encodeCallRequest(correlationId: Uint8Array, route: string, body: Uint8Array): Uint8Array {\n const routeBytes = getRouteEncoding(route);\n const payloadLength = 4 + CORRELATION_ID_LENGTH + routeBytes.length + 4 + 4 + body.length;\n\n const buffer = new Uint8Array(payloadLength);\n let offset = 0;\n\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = CORRELATION_ID_LENGTH;\n buffer.set(correlationId, offset);\n offset += CORRELATION_ID_LENGTH;\n buffer.set(routeBytes, offset);\n offset += routeBytes.length;\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = (body.length >> 24) & 0xff;\n buffer[offset++] = (body.length >> 16) & 0xff;\n buffer[offset++] = (body.length >> 8) & 0xff;\n buffer[offset++] = body.length & 0xff;\n buffer.set(body, offset);\n\n return buffer;\n },\n\n /**\n * Decode RPC_REQUEST response (standard [u8 status][payload])\n * Just validates OK status; no additional payload expected\n */\n decodeRequestResponse(payload: Uint8Array): { status: number } {\n if (payload.length === 0) {\n throw new ProtocolError(\"Empty REQUEST response\", undefined, {\n operation: \"RPC_REQUEST\",\n });\n }\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n return { status };\n },\n\n /**\n * Encode RPC_RESPONSE (303)\n * Payload: [bytes correlation_id][u64 sequence][bytes body][u8 stream_end]\n */\n encodeResponse(\n correlationId: Uint8Array,\n sequence: bigint,\n body: Uint8Array,\n streamEnd: boolean,\n ): Uint8Array {\n const payloadLength = 4 + CORRELATION_ID_LENGTH + 8 + 4 + body.length + 1;\n const buffer = new Uint8Array(payloadLength);\n let offset = 0;\n\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = CORRELATION_ID_LENGTH;\n buffer.set(correlationId, offset);\n offset += CORRELATION_ID_LENGTH;\n buffer[offset++] = Number((sequence >> 56n) & 0xffn);\n buffer[offset++] = Number((sequence >> 48n) & 0xffn);\n buffer[offset++] = Number((sequence >> 40n) & 0xffn);\n buffer[offset++] = Number((sequence >> 32n) & 0xffn);\n buffer[offset++] = Number((sequence >> 24n) & 0xffn);\n buffer[offset++] = Number((sequence >> 16n) & 0xffn);\n buffer[offset++] = Number((sequence >> 8n) & 0xffn);\n buffer[offset++] = Number(sequence & 0xffn);\n buffer[offset++] = (body.length >> 24) & 0xff;\n buffer[offset++] = (body.length >> 16) & 0xff;\n buffer[offset++] = (body.length >> 8) & 0xff;\n buffer[offset++] = body.length & 0xff;\n buffer.set(body, offset);\n offset += body.length;\n buffer[offset] = streamEnd ? 1 : 0;\n\n return buffer;\n },\n\n decodeResponse(payload: Uint8Array): {\n correlationId: Uint8Array;\n sequence: bigint;\n body: Uint8Array;\n streamEnd: boolean;\n } {\n if (payload.length < 4 + CORRELATION_ID_LENGTH + 8 + 4) {\n throw new ProtocolError(\"Invalid RPC response payload length\", undefined, {\n operation: \"RPC_DECODE_RESPONSE\",\n });\n }\n\n const corrLen = readU32BEAt(payload, 0);\n if (corrLen !== CORRELATION_ID_LENGTH) {\n throw new ProtocolError(`Invalid correlation ID length: ${corrLen}, expected 16`, undefined, {\n correlationLength: corrLen,\n expectedLength: CORRELATION_ID_LENGTH,\n });\n }\n\n const correlationId = payload.subarray(4, 4 + corrLen);\n let offset = 4 + corrLen;\n\n const sequence =\n (BigInt(readU32BEAt(payload, offset)) << 32n) | BigInt(readU32BEAt(payload, offset + 4));\n offset += 8;\n\n const bodyLen = readU32BEAt(payload, offset);\n offset += 4;\n if (offset + bodyLen > payload.length) {\n throw new ProtocolError(\"Invalid RPC response body length\", undefined, {\n operation: \"RPC_DECODE_RESPONSE\",\n });\n }\n\n const body = payload.subarray(offset, offset + bodyLen);\n offset += bodyLen;\n\n let streamEnd = false;\n if (offset < payload.length) {\n streamEnd = payload[offset] === 1;\n offset += 1;\n }\n\n if (offset !== payload.length) {\n throw new ProtocolError(\"Invalid RPC response payload structure\", undefined, {\n operation: \"RPC_DECODE_RESPONSE\",\n });\n }\n\n return { correlationId, sequence, body, streamEnd };\n },\n\n decodeResponseKey(payload: Uint8Array): {\n correlationKey: bigint;\n sequence: bigint;\n body: Uint8Array;\n streamEnd: boolean;\n } {\n if (payload.length < 4 + CORRELATION_ID_LENGTH + 8 + 4) {\n throw new ProtocolError(\"Invalid RPC response payload length\", undefined, {\n operation: \"RPC_DECODE_RESPONSE_KEY\",\n });\n }\n\n const corrLen = readU32BEAt(payload, 0);\n if (corrLen !== CORRELATION_ID_LENGTH) {\n throw new ProtocolError(`Invalid correlation ID length: ${corrLen}, expected 16`, undefined, {\n correlationLength: corrLen,\n expectedLength: CORRELATION_ID_LENGTH,\n });\n }\n\n const correlationIdOffset = 4;\n const correlationKey = readCorrelationKey(payload, correlationIdOffset);\n let offset = correlationIdOffset + corrLen;\n\n const sequence =\n (BigInt(readU32BEAt(payload, offset)) << 32n) | BigInt(readU32BEAt(payload, offset + 4));\n offset += 8;\n\n const bodyLen = readU32BEAt(payload, offset);\n offset += 4;\n if (offset + bodyLen > payload.length) {\n throw new ProtocolError(\"Invalid RPC response body length\", undefined, {\n operation: \"RPC_DECODE_RESPONSE_KEY\",\n });\n }\n\n const body = payload.subarray(offset, offset + bodyLen);\n offset += bodyLen;\n\n let streamEnd = false;\n if (offset < payload.length) {\n streamEnd = payload[offset] === 1;\n offset += 1;\n }\n\n if (offset !== payload.length) {\n throw new ProtocolError(\"Invalid RPC response payload structure\", undefined, {\n operation: \"RPC_DECODE_RESPONSE_KEY\",\n });\n }\n\n return { correlationKey, sequence, body, streamEnd };\n },\n\n /**\n * Encode RPC_SUBSCRIBE_WORKER (304)\n * Payload: [string worker_route]\n */\n encodeSubscribeWorker(route: string): Uint8Array {\n return getRouteEncoding(route).slice();\n },\n\n /**\n * Decode SUBSCRIBE_WORKER response (standard [u8 status])\n */\n decodeSubscribeWorkerResponse(payload: Uint8Array): SubscribeResponse {\n if (payload.length === 0) {\n throw new ProtocolError(\"Empty SUBSCRIBE_WORKER response\", undefined, {\n operation: \"RPC_SUBSCRIBE_WORKER\",\n });\n }\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n return { status };\n },\n\n /**\n * Encode RPC_UNSUBSCRIBE_WORKER (305)\n * Payload: [string worker_route]\n */\n encodeUnsubscribeWorker(route: string): Uint8Array {\n return getRouteEncoding(route).slice();\n },\n\n /**\n * Decode UNSUBSCRIBE_WORKER response (standard [u8 status])\n */\n decodeUnsubscribeWorkerResponse(payload: Uint8Array): UnsubscribeResponse {\n if (payload.length === 0) {\n throw new ProtocolError(\"Empty UNSUBSCRIBE_WORKER response\", undefined, {\n operation: \"RPC_UNSUBSCRIBE_WORKER\",\n });\n }\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n return { status };\n },\n\n /**\n * Decode a standard RPC error body.\n * Format: [u8 status=1][u32 error_code][string message]\n */\n decodeErrorBody(payload: Uint8Array): { code: number; message: string } | null {\n if (payload.length < 5) {\n return null;\n }\n\n const reader = new BufferReader(payload);\n if (reader.readU8() !== 1) {\n return null;\n }\n\n const code = reader.readU32BE();\n const message = reader.readString();\n if (!reader.isEOF()) {\n return null;\n }\n\n return { code, message };\n },\n\n /**\n * Decode incoming RPC_REQUEST (302) for worker mode\n * Payload: [u32 corrLen=16][16 bytes correlation_id][string route][string reply_route][bytes body]\n */\n decodeInboundRequest(payload: Uint8Array): {\n correlationId: Uint8Array;\n route: string;\n replyRoute: string;\n body: Uint8Array;\n } {\n let offset = 0;\n if (offset + 4 > payload.length) {\n throw new ProtocolError(\"Invalid RPC request payload length\", undefined, {\n operation: \"RPC_DECODE_INBOUND_REQUEST\",\n });\n }\n\n const corrLen = readU32BEAt(payload, offset);\n offset += 4;\n if (corrLen !== CORRELATION_ID_LENGTH) {\n throw new ProtocolError(`Invalid correlation ID length: ${corrLen}, expected 16`, undefined, {\n correlationLength: corrLen,\n expectedLength: CORRELATION_ID_LENGTH,\n });\n }\n\n if (offset + corrLen > payload.length) {\n throw new ProtocolError(\"Invalid RPC request payload length\", undefined, {\n operation: \"RPC_DECODE_INBOUND_REQUEST\",\n });\n }\n const correlationId = payload.subarray(offset, offset + corrLen);\n offset += corrLen;\n\n const routeResult = readStringFromPayload(payload, offset);\n const route = routeResult.value;\n offset = routeResult.nextOffset;\n\n const replyRouteResult = readStringFromPayload(payload, offset);\n const replyRoute = replyRouteResult.value;\n offset = replyRouteResult.nextOffset;\n\n const bodyLen = readU32BEAt(payload, offset);\n offset += 4;\n if (offset + bodyLen > payload.length) {\n throw new ProtocolError(\"Invalid RPC request body length\", undefined, {\n operation: \"RPC_DECODE_INBOUND_REQUEST\",\n });\n }\n const body = payload.subarray(offset, offset + bodyLen);\n\n return { correlationId, route, replyRoute, body };\n },\n};\n","/**\n * RPC domain types\n * Per fitz-go/internal/domains/rpc/rpc.go\n */\n\n/**\n * Single response frame from a streaming RPC call\n */\nexport interface ResponseFrame {\n body: Uint8Array;\n sequence: bigint;\n}\n\n/**\n * Inbound RPC request received by a worker\n */\nexport interface InboundRequest {\n route: string;\n replyRoute: string;\n body: Uint8Array;\n}\n\n/**\n * Allows a worker to send responses back to the caller\n */\nexport interface ResponseWriter {\n send(body: Uint8Array, isEnd: boolean): Promise<void>;\n}\n\n/**\n * Handler for incoming RPC requests (worker mode)\n */\nexport type RpcHandler = (req: InboundRequest, writer: ResponseWriter) => Promise<void>;\n\n/**\n * Active worker registration\n */\nexport type RpcSubscription = ReturnType<typeof createRpcSubscription>;\n\nexport function createRpcSubscription(\n route: string,\n unsubscribeFn: (route: string) => Promise<void>,\n) {\n const unsubscribe = async (): Promise<void> => {\n await unsubscribeFn(route);\n };\n\n return {\n route,\n unsubscribe,\n };\n}\n\n/**\n * RPC request options\n */\nexport interface RequestOptions {\n timeoutMs?: number;\n signal?: AbortSignal;\n}\n\n/**\n * RPC status codes (from server responses)\n */\nexport enum RpcStatus {\n Ok = 0,\n Timeout = 1,\n HandlerNotFound = 2,\n HandlerError = 3,\n InvalidRequest = 4,\n}\n\n/**\n * Response to RPC_SUBSCRIBE request\n */\nexport interface SubscribeResponse {\n status: number;\n}\n\n/**\n * Response to RPC_UNSUBSCRIBE request\n */\nexport interface UnsubscribeResponse {\n status: number;\n}\n","/**\n * RPC domain client.\n */\n\nimport { createDomainClient } from \"../base\";\nimport { RpcCodec, acquirePooledCorrelationId, releasePooledCorrelationId } from \"./codec\";\nimport {\n RequestOptions,\n ResponseFrame,\n RpcHandler,\n RpcSubscription,\n ResponseWriter,\n RpcStatus,\n createRpcSubscription,\n} from \"./types\";\nimport {\n MSG_RPC_REQUEST,\n MSG_RPC_RESPONSE,\n MSG_RPC_ACK,\n MSG_RPC_SUBSCRIBE_WORKER,\n MSG_RPC_UNSUBSCRIBE_WORKER,\n} from \"../../frame/types\";\nimport {\n ConnectionError,\n ErrCodeRpcWorkerNotFound,\n RpcError,\n TransportError,\n} from \"../../core/errors\";\nimport { ConnectionState } from \"../../core/types\";\nimport { readU128BEAt, utf8Encoder } from \"../../core/buffer\";\nimport { isConcreteRouteShape } from \"../_routes\";\nimport type { Connection } from \"../../client/connection\";\n\ntype DecodedInboundRequest = {\n correlationId: Uint8Array;\n route: string;\n replyRoute: string;\n body: Uint8Array;\n};\n\nfunction createRpcResponseWriter(\n connection: Connection,\n correlationId: Uint8Array,\n): ResponseWriter {\n let sequence = 0n;\n\n const send = async (body: Uint8Array, isEnd: boolean): Promise<void> => {\n const payload = RpcCodec.encodeResponse(correlationId, sequence++, body, isEnd);\n\n try {\n await connection.send(MSG_RPC_RESPONSE, payload);\n } catch (error) {\n if (isBenignShutdownError(error, connection)) {\n return;\n }\n throw error;\n }\n };\n\n return {\n send,\n };\n}\n\nfunction isBenignShutdownError(error: unknown, connection: Connection): boolean {\n if (connection.getState() !== ConnectionState.Authenticated) {\n return true;\n }\n\n if (error instanceof ConnectionError) {\n return true;\n }\n\n if (!(error instanceof TransportError)) {\n return false;\n }\n\n return /closed|not connected|reset/i.test(error.message);\n}\n\ntype RpcIterator = AsyncIterableIterator<ResponseFrame> & {\n push(frame: ResponseFrame): void;\n end(): void;\n fail(reason: unknown): void;\n};\n\nfunction createRpcIterator(\n cleanupPendingRpc: () => void,\n timeoutMs: number,\n signal?: AbortSignal,\n): RpcIterator {\n const buffer: ResponseFrame[] = [];\n let done = false;\n let failureReason: unknown;\n let resolveNext: ((frame: ResponseFrame | null) => void) | null = null;\n let rejectNext: ((reason?: unknown) => void) | null = null;\n let abortListener: (() => void) | null = null;\n let clearPendingNext: (() => void) | null = null;\n\n const clearPendingWait = (): void => {\n clearPendingNext?.();\n clearPendingNext = null;\n detachAbortListener();\n resolveNext = null;\n rejectNext = null;\n };\n\n const push = (frame: ResponseFrame): void => {\n if (done) {\n return;\n }\n\n if (resolveNext) {\n const resolve = resolveNext;\n resolveNext = null;\n rejectNext = null;\n resolve(frame);\n } else {\n buffer.push(frame);\n }\n };\n\n const end = (): void => {\n done = true;\n if (resolveNext) {\n const resolve = resolveNext;\n clearPendingWait();\n resolve(null);\n }\n };\n\n const fail = (reason: unknown): void => {\n done = true;\n failureReason = reason;\n cleanupPendingRpc();\n if (rejectNext) {\n const reject = rejectNext;\n clearPendingWait();\n const rejectWithCurrentSignalState = () => {\n reject(signal?.aborted ? abortError() : reason);\n };\n if (signal) {\n setTimeout(rejectWithCurrentSignalState, 0);\n } else {\n void Promise.resolve().then(rejectWithCurrentSignalState);\n }\n return;\n }\n };\n\n const next = async (): Promise<IteratorResult<ResponseFrame>> => {\n if (signal?.aborted) {\n done = true;\n cleanupPendingRpc();\n throw abortError();\n }\n\n if (failureReason !== undefined) {\n throw failureReason;\n }\n\n if (buffer.length > 0) {\n const value = buffer.shift();\n if (!value) {\n return { value: undefined, done: true };\n }\n return { value, done: false };\n }\n\n if (done) {\n return { value: undefined, done: true };\n }\n\n const frame = await new Promise<ResponseFrame | null>((resolve, reject) => {\n const timer = setTimeout(() => {\n clearPendingWait();\n done = true;\n cleanupPendingRpc();\n reject(new RpcError(\"RPC call timeout\", \"TIMEOUT\", RpcStatus.Timeout));\n }, timeoutMs);\n clearPendingNext = () => {\n clearTimeout(timer);\n };\n\n const onAbort = () => {\n clearPendingWait();\n done = true;\n cleanupPendingRpc();\n reject(abortError());\n };\n\n if (signal) {\n signal.addEventListener(\"abort\", onAbort, { once: true });\n abortListener = () => {\n signal.removeEventListener(\"abort\", onAbort);\n };\n }\n\n resolveNext = (f) => {\n clearPendingWait();\n resolve(f);\n };\n rejectNext = reject;\n });\n\n if (frame === null) {\n return { value: undefined, done: true };\n }\n\n if (failureReason !== undefined) {\n throw failureReason;\n }\n\n return { value: frame, done: false };\n };\n\n const returnMethod = async (): Promise<IteratorResult<ResponseFrame>> => {\n done = true;\n clearPendingWait();\n cleanupPendingRpc();\n return { value: undefined, done: true };\n };\n\n const detachAbortListener = (): void => {\n abortListener?.();\n abortListener = null;\n };\n\n const abortError = (): Error => {\n const error = new Error(\"The operation was aborted\");\n error.name = \"AbortError\";\n return error;\n };\n\n return {\n push,\n end,\n fail,\n next,\n return: returnMethod,\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n\nexport type RpcClient = ReturnType<typeof createRpcClient>;\n\ntype RpcClientConstructor = {\n new (connection: Connection): RpcClient;\n (connection: Connection): RpcClient;\n};\n\nexport const RpcClient: RpcClientConstructor = function (connection: Connection) {\n return createRpcClient(connection);\n} as unknown as RpcClientConstructor;\n\nexport function createRpcClient(connection: Connection) {\n const { requestFrame } = createDomainClient(connection);\n type PendingRpcEntry = { iterator: RpcIterator; correlationId: Uint8Array };\n const pendingRpcs = new Map<bigint, PendingRpcEntry>();\n const workers = new Map<string, RpcHandler>();\n let initialized = false;\n\n const cleanupPendingRpc = (correlationKey: bigint, correlationId: Uint8Array): void => {\n if (!pendingRpcs.has(correlationKey)) {\n return;\n }\n pendingRpcs.delete(correlationKey);\n releasePooledCorrelationId(correlationId);\n };\n\n connection.onDisconnect(() => {\n const pending = Array.from(pendingRpcs.values());\n for (const entry of pending) {\n if (typeof (entry.iterator as any).fail === \"function\") {\n (entry.iterator as any).fail(\n new ConnectionError(\"Connection closed while RPC response was pending\"),\n );\n }\n }\n pendingRpcs.clear();\n });\n\n connection.onReconnect(async () => {\n if (workers.size === 0) {\n return;\n }\n\n const registeredWorkers = Array.from(workers.entries());\n workers.clear();\n for (const [route, handler] of registeredWorkers) {\n await registerWorker(route, handler);\n }\n });\n\n const call = async (\n route: string,\n body: Uint8Array,\n options?: RequestOptions,\n ): Promise<AsyncIterableIterator<ResponseFrame>> => {\n assertRpcRoute(route);\n initRpcHandler();\n\n const timeoutMs = options?.timeoutMs ?? 30000;\n const correlationId = acquirePooledCorrelationId();\n const correlationKey = correlationIdToKey(correlationId);\n\n const iterator = createRpcIterator(\n () => cleanupPendingRpc(correlationKey, correlationId),\n timeoutMs,\n options?.signal,\n );\n pendingRpcs.set(correlationKey, { iterator, correlationId });\n\n try {\n const payload = RpcCodec.encodeCallRequest(correlationId, route, body);\n const response = await requestFrame(MSG_RPC_REQUEST, payload, options?.signal);\n\n const decoded = RpcCodec.decodeRequestResponse(response);\n if (decoded.status !== RpcStatus.Ok) {\n cleanupPendingRpc(correlationKey, correlationId);\n throw new RpcError(\n `RPC REQUEST failed: status ${decoded.status}`,\n \"REQUEST_FAILED\",\n decoded.status,\n );\n }\n\n return iterator;\n } catch (error) {\n cleanupPendingRpc(correlationKey, correlationId);\n throw error;\n }\n };\n\n const registerWorker = async (route: string, handler: RpcHandler): Promise<RpcSubscription> => {\n assertRpcRoute(route);\n initRpcHandler();\n const payload = RpcCodec.encodeSubscribeWorker(route);\n const response = await requestFrame(MSG_RPC_SUBSCRIBE_WORKER, payload);\n const decoded = RpcCodec.decodeSubscribeWorkerResponse(response);\n\n if (decoded.status !== RpcStatus.Ok) {\n throw new RpcError(\n `RPC SUBSCRIBE_WORKER failed: status ${decoded.status}`,\n \"SUBSCRIBE_FAILED\",\n decoded.status,\n );\n }\n\n workers.set(route, handler);\n\n const unsubscribeFn = async (registeredRoute: string) => {\n await unregisterWorker(registeredRoute);\n };\n\n return createRpcSubscription(route, unsubscribeFn);\n };\n\n const unregisterWorker = async (route: string): Promise<void> => {\n workers.delete(route);\n\n try {\n const payload = RpcCodec.encodeUnsubscribeWorker(route);\n const response = await requestFrame(MSG_RPC_UNSUBSCRIBE_WORKER, payload);\n const decoded = RpcCodec.decodeUnsubscribeWorkerResponse(response);\n\n if (decoded.status !== RpcStatus.Ok) {\n return;\n }\n } catch {\n return;\n }\n };\n\n const initRpcHandler = (): void => {\n if (initialized) {\n return;\n }\n initialized = true;\n\n connection.registerNotificationHandler(MSG_RPC_RESPONSE, (payload: Uint8Array) => {\n try {\n const { correlationKey, sequence, body, streamEnd } = RpcCodec.decodeResponseKey(payload);\n handleRpcResponse(correlationKey, sequence, body, streamEnd);\n } catch {\n // Best-effort decode for background frames.\n }\n });\n\n connection.registerNotificationHandler(MSG_RPC_ACK, () => {\n // Worker ACK frames are broker-internal flow control signals. The current\n // public RPC API does not surface them.\n });\n\n connection.registerNotificationHandler(MSG_RPC_REQUEST, (payload: Uint8Array) => {\n try {\n const request = RpcCodec.decodeInboundRequest(payload);\n handleRpcRequest(request);\n } catch {\n // Best-effort decode for background frames.\n }\n });\n };\n\n const handleRpcResponse = (\n correlationKey: bigint,\n sequence: bigint,\n body: Uint8Array,\n streamEnd: boolean,\n ): void => {\n const entry = pendingRpcs.get(correlationKey);\n\n if (!entry) {\n return;\n }\n const iterator = entry.iterator;\n\n const terminalError = RpcCodec.decodeErrorBody(body);\n if (terminalError?.code === ErrCodeRpcWorkerNotFound) {\n iterator.fail(\n new RpcError(\n terminalError.message || \"RPC worker not found\",\n \"WORKER_NOT_FOUND\",\n terminalError.code,\n ),\n );\n return;\n }\n\n if (streamEnd) {\n if (body.length > 0) {\n iterator.push({ body, sequence });\n }\n cleanupPendingRpc(correlationKey, entry.correlationId);\n iterator.end();\n } else {\n iterator.push({ body, sequence });\n }\n };\n\n const handleRpcRequest = (req: DecodedInboundRequest): void => {\n const handler = workers.get(req.route);\n\n if (!handler) {\n return;\n }\n\n const writer = createRpcResponseWriter(connection, req.correlationId);\n\n connection.dispatchAsyncHandler(async () => {\n try {\n await handler(\n {\n route: req.route,\n replyRoute: req.replyRoute,\n body: req.body,\n },\n writer,\n );\n } catch (error) {\n if (isBenignShutdownError(error, connection)) {\n return;\n }\n\n const message = error instanceof Error ? error.message : \"Handler error\";\n try {\n await writer.send(utf8Encoder.encode(`Handler error: ${message}`), true);\n } catch {\n // Best-effort error response.\n }\n }\n });\n };\n\n const correlationIdToKey = (correlationId: Uint8Array): bigint => {\n return readU128BEAt(correlationId, 0);\n };\n\n return {\n call,\n registerWorker,\n };\n}\n\nexport * from \"./types\";\n\nfunction assertRpcRoute(route: string): void {\n if (!isConcreteRouteShape(route, \"rpc\")) {\n throw new RpcError(\n `Invalid rpc route: ${route} (expected rpc://{realm}/{area}/{resource} or any other concrete rpc route, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n","/**\n * Lease domain codec for encoding/decoding messages\n * Per fitz-go/internal/domains/lease/protocol.go\n */\n\nimport { BufferWriter, BufferReader } from \"../../core/buffer\";\nimport { ProtocolError } from \"../../core/errors\";\nimport { AcquireResponse, QueryResponse, SubscribeResponse, UnsubscribeResponse } from \"./types\";\n\nexport const LeaseCodec = {\n /**\n * Encode ACQUIRE request\n * Payload: [string route][string client_id (empty)][u64 ttl_seconds]\n */\n encodeAcquire(route: string, ttlSecs: number): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(route);\n writer.writeRoute(\"\"); // client_id (empty = server assigns)\n writer.writeU64BE(BigInt(ttlSecs));\n return writer.getBufferView();\n },\n\n /**\n * Decode ACQUIRE response\n * Standard response: [u8 status=0][u8 response_type][u64 fencing_token]\n * response_type: 0=Acquired, 1=AlreadyHeld (idempotent)\n */\n decodeAcquireResponse(payload: Uint8Array): AcquireResponse {\n if (payload.length < 10) {\n throw new ProtocolError(\n `ACQUIRE response too short: got ${payload.length} bytes, expected >= 10`,\n undefined,\n { operation: \"LEASE_ACQUIRE\", payloadLength: payload.length },\n );\n }\n\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n throw new ProtocolError(`ACQUIRE failed with status ${status}`, status, {\n operation: \"LEASE_ACQUIRE\",\n status,\n });\n }\n reader.readU8(); // responseType: 0=Acquired, 1=AlreadyHeld\n const fencingToken = reader.readU64BE();\n\n // response_type: 0=Acquired, 1=AlreadyHeld\n // For now, treat both as success\n return { token: fencingToken };\n },\n\n /**\n * Encode EXTEND request\n * Payload: [string route][string client_id (empty)][u64 fencing_token][u64 ttl_seconds]\n */\n encodeExtend(route: string, token: bigint, ttlSecs: number): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(route);\n writer.writeRoute(\"\"); // client_id (empty = use existing)\n writer.writeU64BE(token);\n writer.writeU64BE(BigInt(ttlSecs));\n return writer.getBufferView();\n },\n\n encodeRenew(route: string, token: bigint, ttlSecs: number): Uint8Array {\n return this.encodeExtend(route, token, ttlSecs);\n },\n\n /**\n * Encode RELEASE request\n * Payload: [string route][string client_id (empty)][u64 fencing_token]\n */\n encodeRelease(route: string, token: bigint): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(route);\n writer.writeRoute(\"\"); // client_id (empty = use existing)\n writer.writeU64BE(token);\n return writer.getBufferView();\n },\n\n /**\n * Encode QUERY request\n * Payload: [string route]\n */\n encodeQuery(route: string): Uint8Array {\n const writer = new BufferWriter(64);\n writer.writeRoute(route);\n return writer.getBufferView();\n },\n\n /**\n * Decode QUERY response\n * Free: [u8 has_holder=0][u32 pending_waiters]\n * Held: [u8 has_holder=1][string owner_id][u64 ttl_remaining_secs][u32 pending_waiters]\n */\n decodeQueryResponse(payload: Uint8Array): QueryResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status };\n }\n const hasHolder = reader.readU8();\n\n if (hasHolder === 0) {\n // Free\n reader.readU32BE(); // pendingWaiters\n return { status, isHeld: false };\n }\n\n // Held\n const owner = reader.readRoute();\n const ttlRemainingSecs = reader.readU64BE();\n reader.readU32BE(); // pendingWaiters\n\n // Note: token not returned in QUERY response\n return {\n status,\n isHeld: true,\n owner,\n ttlRemainingSecs,\n expiresAt: BigInt(Math.floor(Date.now() / 1000)) + ttlRemainingSecs,\n };\n },\n\n /**\n * Encode SUBSCRIBE request\n * Payload: [string pattern]\n */\n encodeSubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(64);\n writer.writeRoute(pattern);\n return writer.getBufferView();\n },\n\n /**\n * Decode SUBSCRIBE response\n * Standard response: [u8 status=0][u64 subscription_id]\n */\n decodeSubscribeResponse(payload: Uint8Array): SubscribeResponse {\n if (payload.length < 9) {\n throw new ProtocolError(\n `SUBSCRIBE response too short: got ${payload.length} bytes, expected >= 9`,\n undefined,\n { operation: \"LEASE_SUBSCRIBE\", payloadLength: payload.length },\n );\n }\n\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status };\n }\n const subId = reader.readU64BE();\n\n return { status, subId };\n },\n\n /**\n * Encode UNSUBSCRIBE request\n * Payload: [string pattern]\n */\n encodeUnsubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(64);\n writer.writeRoute(pattern);\n return writer.getBufferView();\n },\n\n /**\n * Decode UNSUBSCRIBE response\n * Standard response: [u8 status=0]\n */\n decodeUnsubscribeResponse(payload: Uint8Array): UnsubscribeResponse {\n if (payload.length === 0) {\n return { status: 0 };\n }\n\n const reader = new BufferReader(payload);\n return { status: reader.readU8() };\n },\n\n /**\n * Decode NOTIFY (409) message\n * Payload: [u64 subscription_id][string route][bytes payload]\n */\n decodeNotification(payload: Uint8Array): {\n subId: bigint;\n route: string;\n } {\n const reader = new BufferReader(payload);\n const subId = reader.readU64BE();\n const route = reader.readRoute();\n\n return { subId, route };\n },\n};\n","/**\n * Standard response parsing utilities\n * Per CLIENT_SPEC.md and fitz-go/internal/core/connection/connection.go\n *\n * Standard Response Format:\n * [u8 status][payload...]\n *\n * status=0: success, remaining payload follows\n * status=1: error, followed by [u32 len][error message]\n */\n\nimport { BufferReader } from \"../core/buffer\";\nimport { ProtocolError } from \"../core/errors\";\n\nexport interface ParsedResponse {\n success: boolean;\n data: Uint8Array;\n error?: string;\n}\n\n/**\n * Parse standard response format\n * Returns {success: true, data: remaining} on status=0\n * Returns {success: false, error: message} on status=1\n */\nexport function parseStandardResponse(payload: Uint8Array): ParsedResponse {\n if (payload.length === 0) {\n throw new ProtocolError(\"Response payload is empty\", undefined, {\n payloadLength: 0,\n });\n }\n\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n\n if (status === 0) {\n // Success - return remaining payload\n const remaining = reader.remaining();\n return { success: true, data: remaining };\n }\n\n if (status === 1) {\n // Error - read error message\n if (reader.isEOF()) {\n return {\n success: false,\n data: new Uint8Array(0),\n error: \"Unknown error (no message)\",\n };\n }\n const errorMsg = reader.readString();\n return { success: false, data: new Uint8Array(0), error: errorMsg };\n }\n\n // Unknown status code\n throw new ProtocolError(`Unknown response status: ${status}`, status, {\n status,\n });\n}\n\n/**\n * Check if response is success, throw error if not\n * Returns remaining data on success\n */\nexport function assertSuccess(payload: Uint8Array, operation: string): Uint8Array {\n const result = parseStandardResponse(payload);\n if (!result.success) {\n throw new ProtocolError(`${operation} failed: ${result.error || \"Unknown error\"}`, 1, {\n operation,\n error: result.error || \"Unknown error\",\n });\n }\n return result.data;\n}\n","/**\n * Lease domain types\n * Per fitz-go/internal/domains/lease/lease.go\n */\n\nimport type { Connection } from \"../../client/connection\";\n\n/**\n * Change notification when a lease is released or expires\n */\nexport interface ChangeNotification {\n route: string;\n}\n\n/**\n * Handler for lease change notifications\n */\nexport type ChangeHandler = (notif: ChangeNotification) => Promise<void>;\n\n/**\n * Active lease change subscription\n */\nexport type LeaseSubscription = ReturnType<typeof createLeaseSubscription>;\n\nexport function createLeaseSubscription(\n subId: bigint,\n pattern: string,\n unsubscribeFn: (subId: bigint) => Promise<void>,\n) {\n const unsubscribe = async (): Promise<void> => {\n await unsubscribeFn(subId);\n };\n\n return {\n subId,\n pattern,\n unsubscribe,\n };\n}\n\n/**\n * Lease handle representing an acquired lease\n * Provides renew() and release() methods\n */\nexport type Lease = ReturnType<typeof createLease>;\n\nexport function createLease(\n token: bigint,\n expiresAt: bigint,\n route: string,\n connection: Connection,\n) {\n let currentToken = token;\n let currentExpiry = expiresAt;\n\n const extend = async (ttlSecs: number, signal?: AbortSignal): Promise<bigint> => {\n const requestPayload = LeaseCodec.encodeExtend(route, currentToken, ttlSecs);\n const response = await connection.request(MSG_LEASE_RENEW, requestPayload, signal);\n const data = assertSuccess(response, \"EXTEND\");\n\n if (data && data.length >= 8) {\n const reader = new BufferReader(data);\n currentToken = reader.readU64BE();\n }\n\n currentExpiry = BigInt(Math.floor(Date.now() / 1000)) + BigInt(ttlSecs);\n return currentExpiry;\n };\n\n const release = async (signal?: AbortSignal): Promise<void> => {\n const payload = LeaseCodec.encodeRelease(route, currentToken);\n const response = await connection.request(MSG_LEASE_RELEASE, payload, signal);\n assertSuccess(response, \"RELEASE\");\n };\n\n const getExpiry = (): bigint => currentExpiry;\n\n const testOnlyInvalidToken = (): bigint => currentToken + 1n;\n\n const testOnlyExtendWithToken = async (\n tokenToUse: bigint,\n ttlSecs: number,\n signal?: AbortSignal,\n ): Promise<bigint> => {\n const requestPayload = LeaseCodec.encodeExtend(route, tokenToUse, ttlSecs);\n const response = await connection.request(MSG_LEASE_RENEW, requestPayload, signal);\n const data = assertSuccess(response, \"EXTEND\");\n\n if (data && data.length >= 8) {\n const reader = new BufferReader(data);\n currentToken = reader.readU64BE();\n }\n\n currentExpiry = BigInt(Math.floor(Date.now() / 1000)) + BigInt(ttlSecs);\n return currentExpiry;\n };\n\n const testOnlyReleaseWithToken = async (\n tokenToUse: bigint,\n signal?: AbortSignal,\n ): Promise<void> => {\n const payload = LeaseCodec.encodeRelease(route, tokenToUse);\n const response = await connection.request(MSG_LEASE_RELEASE, payload, signal);\n assertSuccess(response, \"RELEASE\");\n };\n\n return {\n extend,\n release,\n getExpiry,\n testOnlyInvalidToken,\n testOnlyExtendWithToken,\n testOnlyReleaseWithToken,\n };\n}\n\n/**\n * Response to ACQUIRE request\n */\nexport interface AcquireResponse {\n token: bigint;\n expiresAt?: bigint;\n}\n\n/**\n * Lease information from QUERY request\n */\nexport interface LeaseInfo {\n isHeld: boolean;\n owner?: string;\n token?: bigint;\n ttlRemainingSecs?: bigint;\n expiresAt?: bigint;\n}\n\n/**\n * Response to QUERY request\n */\nexport interface QueryResponse {\n status: number;\n isHeld?: boolean;\n owner?: string;\n token?: bigint;\n ttlRemainingSecs?: bigint;\n expiresAt?: bigint;\n}\n\n/**\n * Response to SUBSCRIBE request\n */\nexport interface SubscribeResponse {\n status: number;\n subId?: bigint;\n}\n\n/**\n * Response to UNSUBSCRIBE request\n */\nexport interface UnsubscribeResponse {\n status: number;\n}\n\n/**\n * Lease status codes\n */\nexport enum LeaseStatus {\n Ok = 0,\n LeaseHeld = 1,\n NotFound = 2,\n InvalidToken = 3,\n}\n\n// Import needed types for Lease class methods\nimport { BufferReader } from \"../../core/buffer\";\nimport { assertSuccess } from \"../../protocol/response\";\nimport { MSG_LEASE_RENEW, MSG_LEASE_RELEASE } from \"../../frame/types\";\nimport { LeaseCodec } from \"./codec\";\n","/**\n * Lease domain client.\n */\n\nimport { createDomainClient } from \"../base\";\nimport type { Connection } from \"../../client/connection\";\nimport { LeaseError } from \"../../core/errors\";\nimport {\n MSG_LEASE_ACQUIRE,\n MSG_LEASE_NOTIFY,\n MSG_LEASE_QUERY,\n MSG_LEASE_SUBSCRIBE,\n MSG_LEASE_UNSUBSCRIBE,\n} from \"../../frame/types\";\nimport { isRouteShape } from \"../_routes\";\nimport { LeaseCodec } from \"./codec\";\nimport {\n ChangeHandler,\n ChangeNotification,\n Lease,\n LeaseInfo,\n LeaseSubscription,\n createLease,\n createLeaseSubscription,\n} from \"./types\";\n\ntype LeaseSubscriptionState = {\n subId: bigint;\n handlers: Map<number, ChangeHandler>;\n};\n\nexport type LeaseClient = ReturnType<typeof createLeaseClient>;\n\nexport function createLeaseClient(connection: Connection) {\n const { requestFrame } = createDomainClient(connection);\n const subscriptionsByPattern = new Map<string, LeaseSubscriptionState>();\n let initialized = false;\n let nextHandlerId = 1;\n\n connection.onReconnect(async () => {\n if (subscriptionsByPattern.size === 0) {\n return;\n }\n\n const subscriptions = Array.from(subscriptionsByPattern.entries(), ([pattern, state]) => ({\n pattern,\n handlers: Array.from(state.handlers.entries()),\n }));\n subscriptionsByPattern.clear();\n\n for (const subscription of subscriptions) {\n const subId = await subscribeWire(subscription.pattern);\n subscriptionsByPattern.set(subscription.pattern, {\n subId,\n handlers: new Map(subscription.handlers),\n });\n }\n });\n\n const acquire = async (route: string, ttlSecs: number): Promise<Lease> => {\n assertExactLeaseRoute(route);\n const payload = LeaseCodec.encodeAcquire(route, ttlSecs);\n const response = await requestFrame(MSG_LEASE_ACQUIRE, payload);\n const decoded = LeaseCodec.decodeAcquireResponse(response);\n\n if (decoded.token === undefined) {\n throw new LeaseError(\"ACQUIRE failed\", \"ACQUIRE_FAILED\");\n }\n\n const expiresAt = decoded.expiresAt ?? BigInt(Math.floor(Date.now() / 1000)) + BigInt(ttlSecs);\n return createLease(decoded.token, expiresAt, route, connection);\n };\n\n const query = async (route: string): Promise<LeaseInfo> => {\n assertExactLeaseRoute(route);\n const payload = LeaseCodec.encodeQuery(route);\n const response = await requestFrame(MSG_LEASE_QUERY, payload);\n const decoded = LeaseCodec.decodeQueryResponse(response);\n if (decoded.status !== 0) {\n throw new LeaseError(\"QUERY failed\", \"QUERY_FAILED\", decoded.status);\n }\n return {\n isHeld: decoded.isHeld ?? false,\n owner: decoded.owner,\n token: decoded.token,\n ttlRemainingSecs: decoded.ttlRemainingSecs,\n expiresAt: decoded.expiresAt,\n };\n };\n\n const subscribe = async (pattern: string, handler: ChangeHandler): Promise<LeaseSubscription> => {\n assertExactLeaseRoute(pattern);\n initNotifyHandler();\n const existing = subscriptionsByPattern.get(pattern);\n if (existing) {\n return addLocalSubscription(pattern, existing.subId, handler);\n }\n\n const subId = await subscribeWire(pattern);\n return addLocalSubscription(pattern, subId, handler);\n };\n\n const subscribeWire = async (pattern: string): Promise<bigint> => {\n const payload = LeaseCodec.encodeSubscribe(pattern);\n const response = await requestFrame(MSG_LEASE_SUBSCRIBE, payload);\n const decoded = LeaseCodec.decodeSubscribeResponse(response);\n\n if (decoded.subId === undefined) {\n throw new LeaseError(\"SUBSCRIBE failed\", \"SUBSCRIBE_FAILED\");\n }\n\n return decoded.subId;\n };\n\n const addLocalSubscription = (\n pattern: string,\n subId: bigint,\n handler: ChangeHandler,\n ): LeaseSubscription => {\n const handlerId = nextHandlerId++;\n let subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n subscription = { subId, handlers: new Map() };\n subscriptionsByPattern.set(pattern, subscription);\n }\n\n subscription.handlers.set(handlerId, handler);\n return createLeaseSubscription(subId, pattern, async () => {\n await unsubscribe(pattern, handlerId);\n });\n };\n\n const unsubscribe = async (pattern: string, handlerId: number): Promise<void> => {\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n subscription.handlers.delete(handlerId);\n if (subscription.handlers.size > 0) {\n return;\n }\n\n subscriptionsByPattern.delete(pattern);\n const payload = LeaseCodec.encodeUnsubscribe(pattern);\n await requestFrame(MSG_LEASE_UNSUBSCRIBE, payload);\n };\n\n const initNotifyHandler = (): void => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n connection.registerNotificationHandler(MSG_LEASE_NOTIFY, (payload) => {\n try {\n const { route } = LeaseCodec.decodeNotification(payload);\n const subscription = subscriptionsByPattern.get(route);\n if (!subscription) {\n return;\n }\n\n const notification: ChangeNotification = { route };\n for (const handler of subscription.handlers.values()) {\n connection.dispatchAsyncHandler(async () => {\n await handler(notification);\n });\n }\n } catch {\n // Best-effort notification dispatch.\n }\n });\n };\n\n return {\n acquire,\n query,\n subscribe,\n };\n}\n\ntype LeaseClientConstructor = {\n new (connection: Connection): LeaseClient;\n (connection: Connection): LeaseClient;\n};\n\nexport const LeaseClient: LeaseClientConstructor = function (connection: Connection) {\n return createLeaseClient(connection);\n} as unknown as LeaseClientConstructor;\n\nexport * from \"./types\";\n\nfunction assertExactLeaseRoute(route: string): void {\n if (!isRouteShape(route, \"lease\", 3)) {\n throw new LeaseError(\n `Invalid lease route: ${route} (expected lease://{realm}/{area}/{resource}, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n","/**\n * Notice domain codec for encoding/decoding messages\n * Per fitz-go/internal/domains/notice/protocol.go\n */\n\nimport { BufferWriter, BufferReader } from \"../../core/buffer\";\nimport { SubscribeResponse, UnsubscribeResponse } from \"./types\";\n\nexport const NoticeCodec = {\n /**\n * Encode PUBLISH request (fire-and-forget, no response)\n * Payload: [string route][bytes body]\n */\n encodePublish(route: string, body: Uint8Array): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeRoute(route);\n writer.writeU32BE(body.length);\n writer.writeBytes(body);\n return writer.getBufferView();\n },\n\n /**\n * Encode SUBSCRIBE request\n * Payload: [string pattern]\n */\n encodeSubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(64);\n writer.writeRoute(pattern);\n return writer.getBufferView();\n },\n\n /**\n * Decode SUBSCRIBE response\n * Standard response: [u8 status=0][u8 has_sub_id][u64 sub_id if has=1]\n */\n decodeSubscribeResponse(payload: Uint8Array): SubscribeResponse {\n if (payload.length < 2) {\n throw new Error(\"SUBSCRIBE response too short\");\n }\n\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n const hasSubId = reader.readU8();\n\n if (hasSubId !== 1) {\n throw new Error(\"SUBSCRIBE response missing subscription_id\");\n }\n\n if (reader.remainingBytes() < 8) {\n throw new Error(\"SUBSCRIBE response too short for subscription_id\");\n }\n\n const subId = reader.readU64BE();\n return { status, subId };\n },\n\n /**\n * Encode UNSUBSCRIBE request\n * Payload: [u64 subscription_id]\n */\n encodeUnsubscribe(subId: bigint): Uint8Array {\n const writer = new BufferWriter(64);\n writer.writeU64BE(subId);\n return writer.getBufferView();\n },\n\n /**\n * Decode UNSUBSCRIBE response\n * Standard response: [u8 status=0]\n */\n decodeUnsubscribeResponse(): UnsubscribeResponse {\n return { status: 0 };\n },\n\n /**\n * Decode NOTIFY (504) message\n * Payload: [u64 subscription_id][string route][bytes body]\n */\n decodeNotification(payload: Uint8Array): {\n subId: bigint;\n route: string;\n body: Uint8Array;\n } {\n const reader = new BufferReader(payload);\n const subId = reader.readU64BE();\n const route = reader.readRoute();\n const bodyLen = reader.readU32BE();\n const body = reader.readBytes(bodyLen);\n\n return { subId, route, body };\n },\n};\n","/**\n * Notice domain types (Pub/Sub)\n * Per fitz-go/internal/domains/notice/notice.go\n */\n\n/**\n * Received notification message\n */\nexport interface NoticeMsg {\n route: string;\n body: Uint8Array;\n}\n\n/**\n * Handler for incoming notifications\n */\nexport type NoticeHandler = (msg: NoticeMsg) => Promise<void> | void;\n\n/**\n * Active notice subscription\n */\nexport type NoticeSubscription = ReturnType<typeof createNoticeSubscription>;\n\nexport function createNoticeSubscription(\n subId: bigint,\n pattern: string,\n unsubscribeFn: (subId: bigint) => Promise<void>,\n) {\n const unsubscribe = async (): Promise<void> => {\n await unsubscribeFn(subId);\n };\n\n return {\n subId,\n pattern,\n unsubscribe,\n };\n}\n\n/**\n * Response to SUBSCRIBE request\n */\nexport interface SubscribeResponse {\n status: number;\n subId?: bigint;\n}\n\n/**\n * Response to UNSUBSCRIBE request\n */\nexport interface UnsubscribeResponse {\n status: number;\n}\n\n/**\n * Notice status codes\n */\nexport enum NoticeStatus {\n Ok = 0,\n}\n","/**\n * Notice domain client.\n */\n\nimport { createDomainClient } from \"../base\";\nimport { NoticeError } from \"../../core/errors\";\nimport {\n MSG_NOTICE_NOTIFY,\n MSG_NOTICE_PUBLISH,\n MSG_NOTICE_SUBSCRIBE,\n MSG_NOTICE_UNSUBSCRIBE,\n} from \"../../frame/types\";\nimport { isRouteShape, isSelectorRouteShape } from \"../_routes\";\nimport { NoticeCodec } from \"./codec\";\nimport { createNoticeSubscription, NoticeHandler, NoticeMsg, NoticeSubscription } from \"./types\";\nimport type { Connection as ConnectionType } from \"../../client/connection\";\n\ntype NoticeSubscriptionState = {\n subId: bigint;\n handlers: Map<number, NoticeHandler>;\n};\n\nexport type NoticeClient = ReturnType<typeof createNoticeClient>;\n\nexport function createNoticeClient(connection: ConnectionType) {\n const { requestFrame } = createDomainClient(connection);\n const subscriptionsByPattern = new Map<string, NoticeSubscriptionState>();\n const patternsBySubId = new Map<bigint, string>();\n let initialized = false;\n let nextHandlerId = 1;\n\n connection.onReconnect(async () => {\n if (subscriptionsByPattern.size === 0) {\n return;\n }\n\n const subscriptions = Array.from(subscriptionsByPattern.entries(), ([pattern, state]) => ({\n pattern,\n handlers: Array.from(state.handlers.entries()),\n }));\n subscriptionsByPattern.clear();\n patternsBySubId.clear();\n\n for (const subscription of subscriptions) {\n const subId = await subscribeWire(subscription.pattern);\n subscriptionsByPattern.set(subscription.pattern, {\n subId,\n handlers: new Map(subscription.handlers),\n });\n patternsBySubId.set(subId, subscription.pattern);\n }\n });\n\n const publish = async (route: string, body: Uint8Array): Promise<void> => {\n assertNoticeRoute(route);\n const payload = NoticeCodec.encodePublish(route, body);\n const cancelOptionalResponse = connection\n .getMultiplexer()\n .expectOptionalResponse(MSG_NOTICE_PUBLISH);\n try {\n await connection.sendFireAndForget(MSG_NOTICE_PUBLISH, payload);\n } catch (error) {\n cancelOptionalResponse();\n throw error;\n }\n };\n\n const subscribe = async (\n pattern: string,\n handler: NoticeHandler,\n ): Promise<NoticeSubscription> => {\n assertNoticePattern(pattern);\n initNotifyHandler();\n const existing = subscriptionsByPattern.get(pattern);\n if (existing) {\n return addLocalSubscription(pattern, existing.subId, handler);\n }\n\n const subId = await subscribeWire(pattern);\n return addLocalSubscription(pattern, subId, handler);\n };\n\n const subscribeWire = async (pattern: string): Promise<bigint> => {\n const payload = NoticeCodec.encodeSubscribe(pattern);\n const response = await requestFrame(MSG_NOTICE_SUBSCRIBE, payload);\n const decoded = NoticeCodec.decodeSubscribeResponse(response);\n\n if (decoded.subId === undefined) {\n throw new NoticeError(\"SUBSCRIBE response missing subId\", \"MISSING_SUB_ID\");\n }\n\n return decoded.subId;\n };\n\n const addLocalSubscription = (\n pattern: string,\n subId: bigint,\n handler: NoticeHandler,\n ): NoticeSubscription => {\n const handlerId = nextHandlerId++;\n let subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n subscription = { subId, handlers: new Map() };\n subscriptionsByPattern.set(pattern, subscription);\n patternsBySubId.set(subId, pattern);\n }\n\n subscription.handlers.set(handlerId, handler);\n return createNoticeSubscription(subId, pattern, async (_subId: bigint) => {\n await unsubscribe(pattern, handlerId);\n });\n };\n\n const unsubscribe = async (pattern: string, handlerId: number): Promise<void> => {\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n subscription.handlers.delete(handlerId);\n if (subscription.handlers.size > 0) {\n return;\n }\n\n subscriptionsByPattern.delete(pattern);\n patternsBySubId.delete(subscription.subId);\n const payload = NoticeCodec.encodeUnsubscribe(subscription.subId);\n await requestFrame(MSG_NOTICE_UNSUBSCRIBE, payload);\n };\n\n const initNotifyHandler = (): void => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n connection.registerNotificationHandler(MSG_NOTICE_NOTIFY, (payload) => {\n try {\n const { subId, route, body } = NoticeCodec.decodeNotification(payload);\n const pattern = patternsBySubId.get(subId);\n if (!pattern) {\n return;\n }\n\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n const msg: NoticeMsg = { route, body };\n for (const handler of subscription.handlers.values()) {\n connection.dispatchAsyncHandler(async () => {\n await handler(msg);\n });\n }\n } catch {\n // Best-effort notification dispatch.\n }\n });\n };\n\n return {\n publish,\n subscribe,\n };\n}\n\ntype NoticeClientConstructor = {\n new (connection: ConnectionType): NoticeClient;\n (connection: ConnectionType): NoticeClient;\n};\n\nexport const NoticeClient: NoticeClientConstructor = function (connection: ConnectionType) {\n return createNoticeClient(connection);\n} as unknown as NoticeClientConstructor;\n\nexport * from \"./types\";\n\nfunction assertNoticeRoute(route: string): void {\n if (!isRouteShape(route, \"notice\", 3)) {\n throw new NoticeError(\n `Invalid notice route: ${route} (expected notice://{realm}/{area}/{resource}, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n\nfunction assertNoticePattern(pattern: string): void {\n if (!isSelectorRouteShape(pattern, \"notice\", 3, { allowRealmWildcard: true })) {\n throw new NoticeError(\n `Invalid notice pattern: ${pattern} (expected notice://{realm}/{area}/{resource}, notice://{realm}/{area}/*, or notice://{realm}/**)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n","/**\n * Stream domain codec for encoding/decoding messages\n * Per CLIENT_SPEC.md and fitz-go/internal/domains/stream/protocol.go\n */\n\nimport { BufferWriter, BufferReader, utf8Decoder } from \"../../core/buffer\";\nimport {\n StreamCommitMode,\n StreamCommitPayload,\n StreamDiscriminator,\n StreamFilterClause,\n StreamFilterSet,\n StreamFilteredReason,\n StreamMetadata,\n StreamRecord,\n StreamReadCursor,\n StreamReadItem,\n StreamReadOptions,\n} from \"./types\";\n\nexport const StreamCodec = {\n /**\n * Encode BEGIN request\n * Payload: [route: string][has_ingest_metadata: u8][ingest_metadata?: bytes]\n */\n encodeBegin(route: string, ingestMetadata?: Uint8Array): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeRoute(route);\n if (ingestMetadata && ingestMetadata.length > 0) {\n writer.writeU8(1);\n writer.writeU32BE(ingestMetadata.length);\n writer.writeBytes(ingestMetadata);\n } else {\n writer.writeU8(0);\n }\n return writer.getBufferView();\n },\n\n /**\n * Decode BEGIN response\n * Payload: [status: u8][has_session_id: u8][session_id?: u64][data: bytes]\n */\n decodeBeginResponse(payload: Uint8Array): {\n status: number;\n sessionId?: bigint;\n } {\n const decoded = this.decodeWrappedResponse(payload);\n return { status: decoded.status, sessionId: decoded.sessionId };\n },\n\n /**\n * Encode APPEND request\n * Payload: [session_id: u64][expected_offset: u64][body: bytes][has_metadata: u8][metadata?: bytes][has_discriminator: u8][discriminator?: string]\n */\n encodeAppend(\n sessionId: bigint,\n expectedOffset: bigint,\n body: Uint8Array,\n metadata?: Uint8Array,\n discriminator?: StreamDiscriminator,\n ): Uint8Array {\n const writer = new BufferWriter(512);\n writer.writeU64BE(sessionId);\n writer.writeU64BE(expectedOffset);\n writer.writeU32BE(body.length);\n writer.writeBytes(body);\n if (metadata && metadata.length > 0) {\n writer.writeU8(1);\n writer.writeU32BE(metadata.length);\n writer.writeBytes(metadata);\n } else {\n writer.writeU8(0);\n }\n\n if (discriminator !== undefined && discriminator.length > 0) {\n writer.writeU8(1);\n writer.writeString(discriminator);\n } else {\n writer.writeU8(0);\n }\n\n return writer.getBufferView();\n },\n\n /**\n * Decode APPEND response\n * Payload: [status: u8][has_session_id: u8][session_id?: u64][data: bytes]\n */\n decodeAppendResponse(payload: Uint8Array): {\n status: number;\n offset?: bigint;\n } {\n const decoded = this.decodeWrappedResponse(payload);\n if (decoded.status !== 0 || decoded.data.length < 8) {\n return { status: decoded.status };\n }\n\n const reader = new BufferReader(decoded.data);\n return { status: decoded.status, offset: reader.readU64BE() };\n },\n\n /**\n * Encode COMMIT request\n * Payload: [session_id: u64][mode: u8]\n */\n encodeCommit(sessionId: bigint, mode: StreamCommitMode): Uint8Array {\n const writer = new BufferWriter(64);\n writer.writeU64BE(sessionId);\n writer.writeU8(mode === \"Sync\" ? 1 : 0);\n return writer.getBufferView();\n },\n\n /**\n * Decode COMMIT response\n * Payload: [status: u8]\n */\n decodeCommitResponse(payload: Uint8Array): { status: number } {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n return { status };\n },\n\n /**\n * Encode ROLLBACK request\n * Payload: [session_id: u64]\n */\n encodeRollback(sessionId: bigint): Uint8Array {\n const writer = new BufferWriter(64);\n writer.writeU64BE(sessionId);\n return writer.getBufferView();\n },\n\n /**\n * Decode ROLLBACK response\n * Payload: [status: u8]\n */\n decodeRollbackResponse(payload: Uint8Array): { status: number } {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n return { status };\n },\n\n /**\n * Encode READ request\n * Payload: [route: string][start_offset: u64][limit: u64][has_max_bytes: u8][max_bytes?: u64][has_filter: u8][filter_length?: u32_be][filter?: custom]\n */\n encodeRead(\n route: string,\n startOffset: bigint,\n limit: number,\n options?: StreamReadOptions,\n ): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeRoute(route);\n writer.writeU64BE(startOffset);\n writer.writeU64BE(BigInt(limit));\n if (options?.maxBytes !== undefined) {\n writer.writeU8(1);\n writer.writeU64BE(options.maxBytes);\n } else {\n writer.writeU8(0);\n }\n\n const filter = options?.filter;\n if (filter && filter.clauses.length > 0) {\n writer.writeU8(1);\n const filterWriter = new BufferWriter(64);\n encodeStreamFilterSet(filter, filterWriter);\n const filterBytes = filterWriter.getBufferView();\n writer.writeU32BE(filterBytes.length);\n writer.writeBytes(filterBytes);\n } else {\n writer.writeU8(0);\n }\n return writer.getBufferView();\n },\n\n /**\n * Decode READ response\n * Payload: [status: u8][has_session_id: u8][session_id?: u64][data: bytes]\n */\n decodeReadResponse(payload: Uint8Array): {\n status: number;\n items: StreamReadItem[];\n cursor?: StreamReadCursor;\n } {\n const decoded = this.decodeWrappedResponse(payload);\n if (decoded.status !== 0) {\n return { status: decoded.status, items: [] };\n }\n\n if (decoded.data.length === 0) {\n return { status: decoded.status, items: [] };\n }\n\n const reader = new BufferReader(decoded.data);\n const count = reader.readU32BE();\n const items: StreamReadItem[] = [];\n\n for (let i = 0; i < count; i++) {\n items.push(this.decodeStreamReadItem(reader));\n }\n\n const cursor: StreamReadCursor = {\n lastResourceOffset: reader.readU64BE(),\n lastAreaOffset: reader.readOptionalU64() ?? undefined,\n lastRealmOffset: reader.readOptionalU64() ?? undefined,\n hasMore: reader.readU8() === 1,\n };\n\n if (!reader.isEOF()) {\n throw new Error(\"READ response has trailing bytes\");\n }\n\n return { status: decoded.status, items, cursor };\n },\n\n /**\n * Encode LAST request\n * Payload: [route: string]\n */\n encodeLast(route: string): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(route);\n return writer.getBufferView();\n },\n\n /**\n * Decode LAST response\n * Payload: [status: u8][has_session_id: u8][session_id?: u64][data: bytes]\n */\n decodeLastResponse(payload: Uint8Array): {\n status: number;\n record?: StreamRecord;\n } {\n const decoded = this.decodeWrappedResponse(payload);\n if (decoded.status !== 0 || decoded.data.length === 0) {\n return { status: decoded.status };\n }\n\n const reader = new BufferReader(decoded.data);\n const record = this.decodeStreamRecord(reader);\n\n return { status: decoded.status, record };\n },\n\n /**\n * Encode METADATA request.\n * Payload: [route: string]\n */\n encodeMetadata(route: string): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(route);\n return writer.getBufferView();\n },\n\n /**\n * Decode METADATA response.\n * Payload: [status: u8][has_session_id: u8][session_id?: u64][data: bytes]\n */\n decodeMetadataResponse(payload: Uint8Array): {\n status: number;\n metadata?: StreamMetadata;\n } {\n const decoded = this.decodeWrappedResponse(payload);\n if (decoded.status !== 0 || decoded.data.length === 0) {\n return { status: decoded.status };\n }\n\n const reader = new BufferReader(decoded.data);\n const firstResourceOffset = reader.readOptionalU64();\n const lastResourceOffset = reader.readOptionalU64();\n const recordCount = reader.readU64BE();\n const maxBatchEvents = reader.readU64BE();\n const maxBatchBytes = reader.readU64BE();\n const ttlSeconds = reader.readOptionalU64();\n const areaWatermark = reader.readU64BE();\n const realmWatermark = reader.readU64BE();\n\n return {\n status: decoded.status,\n metadata: {\n firstOffset: firstResourceOffset ?? 0n,\n lastOffset: lastResourceOffset ?? 0n,\n recordCount,\n maxBatchEvents,\n maxBatchBytes,\n ttlSeconds,\n areaWatermark,\n realmWatermark,\n },\n };\n },\n\n encodeSubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(pattern);\n return writer.getBufferView();\n },\n\n decodeSubscribeResponse(payload: Uint8Array): {\n status: number;\n subId?: bigint;\n } {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0 || reader.isEOF()) {\n return { status };\n }\n\n const hasValue = reader.readU8();\n if (hasValue !== 1 || reader.isEOF()) {\n return { status };\n }\n\n return { status, subId: reader.readU64BE() };\n },\n\n encodeUnsubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(pattern);\n return writer.getBufferView();\n },\n\n decodeUnsubscribeResponse(payload: Uint8Array): { status: number } {\n const reader = new BufferReader(payload);\n return { status: reader.readU8() };\n },\n\n decodeNotification(payload: Uint8Array): {\n subId: bigint;\n route: string;\n rawPayload: Uint8Array;\n parsedPayload: StreamCommitPayload;\n } {\n const reader = new BufferReader(payload);\n const subId = reader.readU64BE();\n const route = reader.readRoute();\n const rawPayload = reader.readBytes(reader.readU32BE());\n let parsedPayload: StreamCommitPayload = {};\n if (rawPayload.length > 0) {\n try {\n parsedPayload = JSON.parse(utf8Decoder.decode(rawPayload)) as StreamCommitPayload;\n } catch {\n parsedPayload = {};\n }\n }\n return {\n subId,\n route,\n rawPayload,\n parsedPayload,\n };\n },\n\n decodeStreamRecord(reader: BufferReader): StreamRecord {\n const offset = reader.readU64BE();\n const areaOffset = reader.readOptionalU64();\n const realmOffset = reader.readOptionalU64();\n const body = reader.readBytes(reader.readU32BE());\n const metadata = this.readOptionalBytes(reader);\n const timestamp = reader.readU64BE();\n\n return {\n offset,\n timestamp,\n body,\n areaOffset,\n realmOffset,\n metadata,\n };\n },\n\n flattenStreamReadItems(items: StreamReadItem[]): StreamRecord[] {\n return items.flatMap((item) => (item.kind === \"event\" ? [item.record] : []));\n },\n\n decodeStreamReadItem(reader: BufferReader): StreamReadItem {\n const tag = reader.readU8();\n switch (tag) {\n case 0:\n return { kind: \"event\", record: this.decodeStreamRecord(reader) };\n case 1:\n return {\n kind: \"filtered\",\n offset: reader.readU64BE(),\n reason: this.decodeStreamFilteredReason(reader),\n };\n case 2:\n return {\n kind: \"filtered_range\",\n fromOffset: reader.readU64BE(),\n toOffset: reader.readU64BE(),\n reason: this.decodeStreamFilteredReason(reader),\n };\n default:\n throw new Error(`unknown stream read item tag: ${tag}`);\n }\n },\n\n decodeStreamFilteredReason(reader: BufferReader): StreamFilteredReason | undefined {\n const tag = reader.readU8();\n switch (tag) {\n case 0:\n return undefined;\n case 1:\n return \"server_filter\";\n case 2:\n return \"permission\";\n case 3:\n return \"projection\";\n default:\n throw new Error(`unknown stream filtered reason tag: ${tag}`);\n }\n },\n\n readOptionalBytes(reader: BufferReader): Uint8Array | undefined {\n const hasValue = reader.readU8();\n if (hasValue !== 1) {\n return undefined;\n }\n\n const length = reader.readU32BE();\n return reader.readBytes(length);\n },\n\n decodeWrappedResponse(payload: Uint8Array): {\n status: number;\n sessionId?: bigint;\n data: Uint8Array;\n } {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status, data: new Uint8Array(0) };\n }\n\n let sessionId: bigint | undefined;\n if (!reader.isEOF()) {\n const hasSessionId = reader.readU8();\n if (hasSessionId === 1 && reader.remainingBytes() >= 8) {\n sessionId = reader.readU64BE();\n }\n }\n\n if (reader.isEOF()) {\n return { status, sessionId, data: new Uint8Array(0) };\n }\n\n const dataLength = reader.readU32BE();\n const data = reader.readBytes(dataLength);\n return { status, sessionId, data };\n },\n};\n\nfunction encodeStreamFilterSet(filter: StreamFilterSet, writer: BufferWriter): void {\n writer.writeU8(0);\n writer.writeU8(0xf1);\n writer.writeU32BE(filter.clauses.length);\n\n for (const clause of filter.clauses) {\n encodeStreamFilterClause(writer, clause);\n }\n}\n\nfunction encodeStreamFilterClause(writer: BufferWriter, clause: StreamFilterClause): void {\n switch (clause.kind) {\n case \"Equals\":\n writer.writeU8(0);\n writer.writeString(clause.value);\n return;\n case \"NotEquals\":\n writer.writeU8(1);\n writer.writeString(clause.value);\n return;\n case \"StartsWith\":\n writer.writeU8(2);\n writer.writeString(clause.value);\n return;\n case \"AnyOf\":\n writer.writeU8(3);\n writer.writeU32BE(clause.values.length);\n for (const value of clause.values) {\n writer.writeString(value);\n }\n return;\n }\n}\n","/**\n * Stream domain type definitions\n * Stream uses session-based transactional semantics:\n * 1. Begin() returns a session with server-assigned sessionID\n * 2. Append(expectedOffset, ...) on session validates optimistic concurrency\n * 3. Commit() or Rollback() to finalize\n */\n\n/**\n * Stream record with offset, timestamp, and payload\n */\nexport interface StreamRecord {\n offset: bigint;\n timestamp: bigint;\n body: Uint8Array;\n areaOffset?: bigint;\n realmOffset?: bigint;\n metadata?: Uint8Array;\n}\n\n/**\n * Stream metadata.\n */\nexport interface StreamMetadata {\n firstOffset: bigint;\n lastOffset: bigint;\n recordCount: bigint;\n maxBatchEvents?: bigint;\n maxBatchBytes?: bigint;\n ttlSeconds?: bigint;\n areaWatermark?: bigint;\n realmWatermark?: bigint;\n}\n\nexport type StreamDiscriminator = string;\n\nexport type StreamFilteredReason = \"server_filter\" | \"permission\" | \"projection\";\n\nexport type StreamFilterClause =\n | { kind: \"Equals\"; value: string }\n | { kind: \"NotEquals\"; value: string }\n | { kind: \"StartsWith\"; value: string }\n | { kind: \"AnyOf\"; values: string[] };\n\nexport interface StreamFilterSet {\n clauses: StreamFilterClause[];\n}\n\nexport interface StreamAppendOptions {\n discriminator?: StreamDiscriminator;\n}\n\nexport interface StreamReadOptions {\n maxBytes?: bigint;\n filter?: StreamFilterSet;\n signal?: AbortSignal;\n}\n\nexport interface StreamReadCursor {\n lastResourceOffset: bigint;\n lastAreaOffset?: bigint;\n lastRealmOffset?: bigint;\n hasMore: boolean;\n}\n\nexport interface StreamReadEvent {\n kind: \"event\";\n record: StreamRecord;\n}\n\nexport interface StreamReadFiltered {\n kind: \"filtered\";\n offset: bigint;\n reason?: StreamFilteredReason;\n}\n\nexport interface StreamReadFilteredRange {\n kind: \"filtered_range\";\n fromOffset: bigint;\n toOffset: bigint;\n reason?: StreamFilteredReason;\n}\n\nexport type StreamReadItem = StreamReadEvent | StreamReadFiltered | StreamReadFilteredRange;\n\nexport interface StreamReadPage {\n items: StreamReadItem[];\n cursor: StreamReadCursor;\n}\n\nexport type StreamCommitMode = \"Buffered\" | \"Sync\";\n\nexport interface StreamCommitPayload {\n event?: string;\n first_resource_offset?: number;\n last_resource_offset?: number;\n first_area_offset?: number;\n last_area_offset?: number;\n first_realm_offset?: number;\n last_realm_offset?: number;\n batch_size?: number;\n}\n\nexport interface StreamCommitNotification {\n route: string;\n event?: string;\n firstResourceOffset?: bigint;\n lastResourceOffset?: bigint;\n firstAreaOffset?: bigint;\n lastAreaOffset?: bigint;\n firstRealmOffset?: bigint;\n lastRealmOffset?: bigint;\n batchSize?: number;\n payload: StreamCommitPayload;\n}\n\nexport type StreamCommitHandler = (notification: StreamCommitNotification) => void | Promise<void>;\n\nexport type StreamSubscription = ReturnType<typeof createStreamSubscription>;\n\nexport function createStreamSubscription(\n subId: bigint,\n pattern: string,\n unsubscribeFn: (pattern: string) => Promise<void>,\n) {\n const unsubscribe = async (): Promise<void> => {\n await unsubscribeFn(pattern);\n };\n\n return {\n subId,\n unsubscribe,\n };\n}\n\n/**\n * Stream session for write operations.\n * Obtained from `StreamClient.begin()`.\n */\nexport interface StreamSession {\n /**\n * Append a record to the stream.\n * Returns the assigned offset\n */\n append(expectedOffset: bigint, body: Uint8Array, signal?: AbortSignal): Promise<bigint>;\n append(\n expectedOffset: bigint,\n body: Uint8Array,\n options?: StreamAppendOptions,\n signal?: AbortSignal,\n ): Promise<bigint>;\n\n /**\n * Commit the write session and make appended records durable.\n */\n commit(mode: StreamCommitMode, signal?: AbortSignal): Promise<void>;\n\n /**\n * Roll back and discard uncommitted appends.\n */\n rollback(signal?: AbortSignal): Promise<void>;\n\n /**\n * Check if session is still open\n */\n isOpen(): boolean;\n}\n\n/**\n * Stream operation status codes\n */\nexport enum StreamStatus {\n Ok = 0,\n StreamNotFound = 1,\n OffsetOutOfRange = 2,\n InvalidOffset = 3,\n StreamFull = 4,\n SessionNotFound = 5,\n SessionClosed = 6,\n ExpectedOffsetMismatch = 7,\n}\n","/**\n * Stream session implementation\n * Per fitz-go/internal/domains/stream/stream.go\n */\n\nimport { Connection } from \"../../client/connection\";\nimport { StreamCodec } from \"./codec\";\nimport { StreamAppendOptions, StreamCommitMode, StreamSession, StreamStatus } from \"./types\";\nimport { StreamError } from \"../../core/errors\";\nimport { MSG_STREAM_APPEND, MSG_STREAM_COMMIT, MSG_STREAM_ROLLBACK } from \"../../frame/types\";\n\nexport function createStreamSession(\n connection: Connection,\n _route: string,\n sessionId: bigint,\n): StreamSession {\n let closed = false;\n const unsubscribeDisconnect = connection.onDisconnect(() => {\n closed = true;\n });\n\n const ensureOpen = (): void => {\n if (closed) {\n throw new StreamError(\"Stream session already closed\", \"SESSION_CLOSED\");\n }\n };\n\n const checkStatus = (status: number, operation: string): void => {\n if (status === StreamStatus.Ok) {\n return;\n }\n\n const statusNames: Record<number, string> = {\n [StreamStatus.StreamNotFound]: \"StreamNotFound\",\n [StreamStatus.OffsetOutOfRange]: \"OffsetOutOfRange\",\n [StreamStatus.InvalidOffset]: \"InvalidOffset\",\n [StreamStatus.StreamFull]: \"StreamFull\",\n [StreamStatus.SessionNotFound]: \"SessionNotFound\",\n [StreamStatus.SessionClosed]: \"SessionClosed\",\n [StreamStatus.ExpectedOffsetMismatch]: \"ExpectedOffsetMismatch\",\n };\n\n const statusName = statusNames[status] || `Unknown(${status})`;\n throw new StreamError(`${operation} failed: ${statusName}`, statusName, status);\n };\n\n const append = async (\n expectedOffset: bigint,\n body: Uint8Array,\n optionsOrSignal?: AbortSignal | StreamAppendOptions,\n signal?: AbortSignal,\n ): Promise<bigint> => {\n ensureOpen();\n\n const { options, requestSignal } = normalizeAppendArguments(optionsOrSignal, signal);\n const payload = StreamCodec.encodeAppend(\n sessionId,\n expectedOffset,\n body,\n undefined,\n options?.discriminator,\n );\n const response = await connection.request(MSG_STREAM_APPEND, payload, requestSignal);\n const decoded = StreamCodec.decodeAppendResponse(response);\n\n checkStatus(decoded.status, \"APPEND\");\n\n return decoded.offset ?? 0n;\n };\n\n const commit = async (mode: StreamCommitMode, signal?: AbortSignal): Promise<void> => {\n ensureOpen();\n closed = true;\n unsubscribeDisconnect();\n\n const payload = StreamCodec.encodeCommit(sessionId, mode);\n const response = await connection.request(MSG_STREAM_COMMIT, payload, signal);\n const decoded = StreamCodec.decodeCommitResponse(response);\n\n checkStatus(decoded.status, \"COMMIT\");\n };\n\n const rollback = async (signal?: AbortSignal): Promise<void> => {\n if (closed) {\n return;\n }\n\n closed = true;\n unsubscribeDisconnect();\n\n const payload = StreamCodec.encodeRollback(sessionId);\n try {\n const response = await connection.request(MSG_STREAM_ROLLBACK, payload, signal);\n const decoded = StreamCodec.decodeRollbackResponse(response);\n checkStatus(decoded.status, \"ROLLBACK\");\n } catch {\n // Ignore rollback errors\n }\n };\n\n const isOpen = (): boolean => !closed;\n\n return {\n append,\n commit,\n rollback,\n isOpen,\n };\n}\n\nfunction normalizeAppendArguments(\n optionsOrSignal?: AbortSignal | StreamAppendOptions,\n signal?: AbortSignal,\n): { options?: StreamAppendOptions; requestSignal?: AbortSignal } {\n if (isAbortSignal(optionsOrSignal)) {\n return { requestSignal: optionsOrSignal };\n }\n\n return {\n options: optionsOrSignal,\n requestSignal: signal,\n };\n}\n\nfunction isAbortSignal(value: unknown): value is AbortSignal {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"aborted\" in value &&\n typeof (value as AbortSignal).addEventListener === \"function\"\n );\n}\n","/**\n * Stream domain client for append-only log operations.\n *\n * Stream uses session-based transactional semantics:\n * 1. `begin()` starts a write session\n * 2. `append(expectedOffset, ...)` on the session adds records with OCC\n * 3. `commit()` or `rollback()` finalizes the session\n */\n\nimport { createDomainClient } from \"../base\";\nimport { StreamCodec } from \"./codec\";\nimport {\n StreamSession,\n StreamRecord,\n StreamMetadata,\n StreamReadOptions,\n StreamReadPage,\n StreamStatus,\n StreamCommitHandler,\n StreamCommitNotification,\n StreamSubscription,\n createStreamSubscription,\n} from \"./types\";\nimport { createStreamSession } from \"./session\";\nimport { StreamError } from \"../../core/errors\";\nimport { createSliceIterator, createAsyncIterableIterator } from \"../../core/iterator\";\nimport {\n MSG_STREAM_BEGIN,\n MSG_STREAM_READ,\n MSG_STREAM_LAST,\n MSG_STREAM_GET_METADATA,\n MSG_STREAM_SUBSCRIBE,\n MSG_STREAM_UNSUBSCRIBE,\n MSG_STREAM_NOTIFY,\n} from \"../../frame/types\";\nimport { isRouteShape, isSelectorRouteShape } from \"../_routes\";\nimport type { Connection } from \"../../client/connection\";\n\ntype StreamSubscriptionState = {\n subId: bigint;\n handlers: Map<number, StreamCommitHandler>;\n};\n\nexport type StreamClient = ReturnType<typeof createStreamClient>;\n\nexport function createStreamClient(connection: Connection) {\n const { requestFrame } = createDomainClient(connection);\n const subscriptionsByPattern = new Map<string, StreamSubscriptionState>();\n const patternsBySubId = new Map<bigint, string>();\n let initialized = false;\n let nextHandlerId = 1;\n\n connection.onReconnect(async () => {\n if (subscriptionsByPattern.size === 0) {\n return;\n }\n\n const snapshot = Array.from(subscriptionsByPattern.entries(), ([pattern, state]) => ({\n pattern,\n handlers: Array.from(state.handlers.entries()),\n }));\n subscriptionsByPattern.clear();\n patternsBySubId.clear();\n\n for (const subscription of snapshot) {\n const subId = await subscribeWire(subscription.pattern);\n subscriptionsByPattern.set(subscription.pattern, {\n subId,\n handlers: new Map(subscription.handlers),\n });\n patternsBySubId.set(subId, subscription.pattern);\n }\n });\n\n const begin = async (route: string, ingestMetadata?: Uint8Array): Promise<StreamSession> => {\n assertStreamRoute(route);\n const payload = StreamCodec.encodeBegin(route, ingestMetadata);\n const response = await requestFrame(MSG_STREAM_BEGIN, payload);\n const decoded = StreamCodec.decodeBeginResponse(response);\n\n checkStatus(decoded.status, \"BEGIN\");\n\n if (decoded.sessionId === undefined) {\n throw new StreamError(\"BEGIN response missing sessionId\", \"MISSING_SESSION_ID\");\n }\n\n return createStreamSession(connection, route, decoded.sessionId);\n };\n\n const readPage = async (\n route: string,\n startOffset: bigint,\n limit: number = 100,\n options?: StreamReadOptions,\n ): Promise<StreamReadPage> => {\n assertStreamPattern(route);\n const payload = StreamCodec.encodeRead(route, startOffset, limit, options);\n const response = await requestFrame(MSG_STREAM_READ, payload, options?.signal);\n const decoded = StreamCodec.decodeReadResponse(response);\n\n checkStatus(decoded.status, \"READ\");\n\n return {\n items: decoded.items,\n cursor: decoded.cursor ?? {\n lastResourceOffset: startOffset,\n lastAreaOffset: undefined,\n lastRealmOffset: undefined,\n hasMore: false,\n },\n };\n };\n\n const read = async (\n route: string,\n startOffset: bigint,\n limit: number = 100,\n options?: StreamReadOptions,\n ): Promise<StreamRecord[]> => {\n const page = await readPage(route, startOffset, limit, options);\n return StreamCodec.flattenStreamReadItems(page.items);\n };\n\n const consume = async (\n route: string,\n startOffset: bigint,\n limit: number = 100,\n options?: StreamReadOptions,\n ): Promise<AsyncIterable<StreamRecord>> => {\n const records = await read(route, startOffset, limit, options);\n return createAsyncIterableIterator(createSliceIterator(records));\n };\n\n const peek = async (route: string): Promise<StreamRecord | null> => {\n assertStreamRoute(route);\n const payload = StreamCodec.encodeLast(route);\n const response = await requestFrame(MSG_STREAM_LAST, payload);\n const decoded = StreamCodec.decodeLastResponse(response);\n\n checkStatus(decoded.status, \"LAST\");\n\n return decoded.record ?? null;\n };\n\n const metadata = async (route: string): Promise<StreamMetadata> => {\n assertStreamRoute(route);\n const payload = StreamCodec.encodeMetadata(route);\n const response = await requestFrame(MSG_STREAM_GET_METADATA, payload);\n const decoded = StreamCodec.decodeMetadataResponse(response);\n\n checkStatus(decoded.status, \"GET_METADATA\");\n\n return (\n decoded.metadata ?? {\n firstOffset: 0n,\n lastOffset: 0n,\n recordCount: 0n,\n }\n );\n };\n\n const subscribe = async (\n pattern: string,\n handler: StreamCommitHandler,\n ): Promise<StreamSubscription> => {\n assertStreamPattern(pattern);\n initNotifyHandler();\n const existing = subscriptionsByPattern.get(pattern);\n if (existing) {\n return addLocalSubscription(pattern, existing.subId, handler);\n }\n\n const subId = await subscribeWire(pattern);\n return addLocalSubscription(pattern, subId, handler);\n };\n\n const subscribeWire = async (pattern: string): Promise<bigint> => {\n const payload = StreamCodec.encodeSubscribe(pattern);\n const response = await requestFrame(MSG_STREAM_SUBSCRIBE, payload);\n const decoded = StreamCodec.decodeSubscribeResponse(response);\n checkStatus(decoded.status, \"SUBSCRIBE\");\n\n if (decoded.subId === undefined) {\n throw new StreamError(\"SUBSCRIBE response missing subId\", \"MISSING_SESSION_ID\");\n }\n\n return decoded.subId;\n };\n\n const addLocalSubscription = (\n pattern: string,\n subId: bigint,\n handler: StreamCommitHandler,\n ): StreamSubscription => {\n const handlerId = nextHandlerId++;\n let subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n subscription = { subId, handlers: new Map() };\n subscriptionsByPattern.set(pattern, subscription);\n patternsBySubId.set(subId, pattern);\n }\n\n subscription.handlers.set(handlerId, handler);\n return createStreamSubscription(subId, pattern, async () => {\n await unsubscribe(pattern, handlerId);\n });\n };\n\n const unsubscribe = async (pattern: string, handlerId: number): Promise<void> => {\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n subscription.handlers.delete(handlerId);\n if (subscription.handlers.size > 0) {\n return;\n }\n\n subscriptionsByPattern.delete(pattern);\n patternsBySubId.delete(subscription.subId);\n const payload = StreamCodec.encodeUnsubscribe(pattern);\n const response = await requestFrame(MSG_STREAM_UNSUBSCRIBE, payload);\n const decoded = StreamCodec.decodeUnsubscribeResponse(response);\n checkStatus(decoded.status, \"UNSUBSCRIBE\");\n };\n\n const initNotifyHandler = (): void => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n connection.registerNotificationHandler(MSG_STREAM_NOTIFY, (payload) => {\n try {\n const decoded = StreamCodec.decodeNotification(payload);\n const pattern = patternsBySubId.get(decoded.subId);\n if (!pattern) {\n return;\n }\n\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n const parsedPayload = decoded.parsedPayload;\n\n const notification: StreamCommitNotification = {\n route: decoded.route,\n event: parsedPayload?.event,\n firstResourceOffset:\n parsedPayload?.first_resource_offset !== undefined\n ? BigInt(parsedPayload.first_resource_offset)\n : undefined,\n lastResourceOffset:\n parsedPayload?.last_resource_offset !== undefined\n ? BigInt(parsedPayload.last_resource_offset)\n : undefined,\n firstAreaOffset:\n parsedPayload?.first_area_offset !== undefined\n ? BigInt(parsedPayload.first_area_offset)\n : undefined,\n lastAreaOffset:\n parsedPayload?.last_area_offset !== undefined\n ? BigInt(parsedPayload.last_area_offset)\n : undefined,\n firstRealmOffset:\n parsedPayload?.first_realm_offset !== undefined\n ? BigInt(parsedPayload.first_realm_offset)\n : undefined,\n lastRealmOffset:\n parsedPayload?.last_realm_offset !== undefined\n ? BigInt(parsedPayload.last_realm_offset)\n : undefined,\n batchSize: parsedPayload?.batch_size,\n payload: parsedPayload,\n };\n\n for (const handler of subscription.handlers.values()) {\n connection.dispatchAsyncHandler(async () => {\n await handler(notification);\n });\n }\n } catch {\n // Best-effort notification dispatch.\n }\n });\n };\n\n const checkStatus = (status: number, operation: string): void => {\n if (status === StreamStatus.Ok) {\n return;\n }\n\n const statusNames: Record<number, string> = {\n [StreamStatus.StreamNotFound]: \"StreamNotFound\",\n [StreamStatus.OffsetOutOfRange]: \"OffsetOutOfRange\",\n [StreamStatus.InvalidOffset]: \"InvalidOffset\",\n [StreamStatus.StreamFull]: \"StreamFull\",\n [StreamStatus.SessionNotFound]: \"SessionNotFound\",\n [StreamStatus.SessionClosed]: \"SessionClosed\",\n [StreamStatus.ExpectedOffsetMismatch]: \"ExpectedOffsetMismatch\",\n };\n\n const statusName = statusNames[status] || `Unknown(${status})`;\n throw new StreamError(`${operation} failed: ${statusName}`, statusName, status);\n };\n\n return {\n begin,\n readPage,\n read,\n consume,\n peek,\n metadata,\n subscribe,\n };\n}\n\ntype StreamClientConstructor = {\n new (connection: Connection): StreamClient;\n (connection: Connection): StreamClient;\n};\n\nexport const StreamClient: StreamClientConstructor = function (connection: Connection) {\n return createStreamClient(connection);\n} as unknown as StreamClientConstructor;\n\nexport * from \"./types\";\n\nfunction assertStreamRoute(route: string): void {\n if (!isRouteShape(route, \"stream\", 3)) {\n throw new StreamError(\n `Invalid stream route: ${route} (expected stream://{realm}/{area}/{resource}, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n\nfunction assertStreamPattern(pattern: string): void {\n if (!isSelectorRouteShape(pattern, \"stream\", 3, { allowRealmWildcard: true })) {\n throw new StreamError(\n `Invalid stream pattern: ${pattern} (expected stream://{realm}/{area}/{resource}, stream://{realm}/{area}/*, or stream://{realm}/**)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n","/**\n * Schedule domain codec for encoding/decoding messages\n * Per fitz-go/internal/domains/schedule\n */\n\nimport { BufferWriter, BufferReader } from \"../../core/buffer\";\nimport {\n DecodedScheduleNotification,\n ScheduleEntry,\n ScheduleCreateResponse,\n ScheduleCancelResponse,\n ScheduleListResponse,\n ScheduleSubscribeResponse,\n ScheduleUnsubscribeResponse,\n} from \"./types\";\n\nexport const ScheduleCodec = {\n /**\n * Encode CREATE request\n * Payload: [route: string][cron: string][payload: bytes]\n */\n encodeCreate(route: string, cronExpr: string, payload: Uint8Array): Uint8Array {\n const writer = new BufferWriter(512);\n writer.writeRoute(route);\n writer.writeString(cronExpr);\n writer.writeU32BE(payload.length);\n writer.writeBytes(payload);\n return writer.getBufferView();\n },\n\n /**\n * Decode CREATE response\n * Success payload: [optional has_schedule_id: u8][schedule_id: string if has=1]\n */\n decodeCreateResponse(data: Uint8Array): ScheduleCreateResponse {\n const reader = new BufferReader(data);\n let scheduleId: string | undefined;\n if (!reader.isEOF() && reader.readU8() === 1) {\n scheduleId = reader.readString();\n }\n\n return { scheduleId };\n },\n\n /**\n * Encode CANCEL request\n * Payload: [route: string]\n */\n encodeCancel(route: string): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeRoute(route);\n return writer.getBufferView();\n },\n\n /**\n * Decode CANCEL response\n * Success payload: empty\n */\n decodeCancelResponse(_data: Uint8Array): ScheduleCancelResponse {\n return {};\n },\n\n /**\n * Encode LIST request\n * Payload: [optional offset: u64][optional limit: u64]\n */\n encodeList(offset: bigint = 0n, limit: bigint = 0n): Uint8Array {\n const writer = new BufferWriter(32);\n writer.writeOptionalU64(offset);\n writer.writeOptionalU64(limit);\n return writer.getBufferView();\n },\n\n /**\n * Decode LIST response\n * Success payload: [total_count: u64][has_entry: u8]...[route: string][cron: string][payload: bytes when has_entry=1]\n */\n decodeListResponse(data: Uint8Array): ScheduleListResponse {\n const reader = new BufferReader(data);\n if (reader.remainingBytes() < 8) {\n throw new Error(\"LIST response missing total_count\");\n }\n const totalCount = reader.readU64BE();\n const entries: ScheduleEntry[] = [];\n\n while (!reader.isEOF()) {\n const hasEntry = reader.readU8();\n if (hasEntry === 0) {\n break;\n }\n\n const route = reader.readString();\n const cron = reader.readString();\n const payloadBytes = reader.readBytes(reader.readU32BE());\n\n entries.push({\n id: route, // Route as identity\n route,\n cron,\n payload: payloadBytes,\n });\n }\n\n return { totalCount, entries };\n },\n\n /**\n * Encode SUBSCRIBE request\n * Payload: [pattern: string]\n */\n encodeSubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeString(pattern);\n return writer.getBufferView();\n },\n\n /**\n * Decode SUBSCRIBE response\n * Success payload: [has_sub_id: u8][sub_id: u64 if has=1]\n */\n decodeSubscribeResponse(data: Uint8Array): ScheduleSubscribeResponse {\n const reader = new BufferReader(data);\n if (reader.isEOF()) {\n throw new Error(\"SUBSCRIBE response missing subscription_id\");\n }\n\n if (reader.readU8() !== 1) {\n throw new Error(\"SUBSCRIBE response missing subscription_id\");\n }\n\n if (reader.remainingBytes() < 8) {\n throw new Error(\"SUBSCRIBE response too short for subscription_id\");\n }\n\n return { subId: reader.readU64BE() };\n },\n\n /**\n * Encode UNSUBSCRIBE request\n * Payload: [pattern: string]\n */\n encodeUnsubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeString(pattern);\n return writer.getBufferView();\n },\n\n /**\n * Decode UNSUBSCRIBE response\n * Success payload: empty\n */\n decodeUnsubscribeResponse(_data: Uint8Array): ScheduleUnsubscribeResponse {\n return {};\n },\n\n /**\n * Decode NOTIFY notification (MSG_SCHEDULE_NOTIFY 705)\n * Payload: [subscription_id: u64][payload: bytes]\n */\n decodeNotification(payload: Uint8Array): DecodedScheduleNotification {\n if (payload.length < 12) {\n throw new Error(\"SCHEDULE_NOTIFY payload too short\");\n }\n\n const reader = new BufferReader(payload);\n const subId = reader.readU64BE();\n const payloadLength = reader.readU32BE();\n if (reader.remainingBytes() < payloadLength) {\n throw new Error(\"SCHEDULE_NOTIFY payload truncated\");\n }\n\n return { subId, payload: reader.readBytes(payloadLength) };\n },\n};\n","/**\n * Schedule domain types\n * Per fitz-go/internal/domains/schedule (cron-based task scheduling)\n */\n\n/**\n * ScheduleEntry represents a schedule returned by List\n * Per CLIENT_SPEC: route, cron, payload\n */\nexport interface ScheduleEntry {\n id: string; // Route as identity\n route: string;\n cron: string;\n payload: Uint8Array;\n}\n\n/**\n * Notification is the payload delivered when a schedule fires (SCHEDULE_NOTIFY 705)\n */\nexport interface ScheduleNotification {\n payload: Uint8Array;\n}\n\nexport interface DecodedScheduleNotification {\n subId: bigint;\n payload: Uint8Array;\n}\n\n/**\n * ScheduleHandler is called when a schedule fires for a subscribed pattern\n * It is fire-and-forget; the return value is not used\n */\nexport type ScheduleHandler = (notification: ScheduleNotification) => void | Promise<void>;\n\n/**\n * ScheduleSubscription represents an active subscription to schedule fire notifications\n */\nexport type ScheduleSubscription = ReturnType<typeof createScheduleSubscription>;\n\nexport function createScheduleSubscription(\n subId: bigint,\n pattern: string,\n unsubscribeFn: () => Promise<void>,\n) {\n const unsubscribe = async (): Promise<void> => {\n return unsubscribeFn();\n };\n\n return {\n subId,\n pattern,\n unsubscribe,\n };\n}\n\nexport interface ScheduleCreateResponse {\n scheduleId?: string;\n}\n\nexport type ScheduleCancelResponse = Record<string, never>;\n\nexport interface ScheduleListResponse {\n totalCount: bigint;\n entries: ScheduleEntry[];\n}\n\nexport interface ScheduleSubscribeResponse {\n subId: bigint;\n}\n\nexport type ScheduleUnsubscribeResponse = Record<string, never>;\n\n/**\n * Schedule domain errors\n */\nexport class ScheduleError extends Error {\n public readonly code?: string;\n\n constructor(message: string, code?: string) {\n super(message);\n this.name = \"ScheduleError\";\n this.code = code;\n }\n}\n\n/**\n * Schedule operation status codes\n */\nexport enum ScheduleStatus {\n Ok = 0,\n ScheduleNotFound = 1,\n TaskNotFound = 2,\n InvalidCron = 3,\n InvalidDelay = 4,\n InvalidTimestamp = 5,\n}\n","/**\n * Schedule domain client.\n */\n\nimport { createDomainClient } from \"../base\";\nimport type { Connection } from \"../../client/connection\";\nimport {\n MSG_SCHEDULE_CANCEL,\n MSG_SCHEDULE_CREATE,\n MSG_SCHEDULE_LIST,\n MSG_SCHEDULE_NOTIFY,\n MSG_SCHEDULE_SUBSCRIBE,\n MSG_SCHEDULE_UNSUBSCRIBE,\n} from \"../../frame/types\";\nimport { parseStandardResponse } from \"../../protocol/response\";\nimport { ScheduleCodec } from \"./codec\";\nimport {\n ScheduleEntry,\n ScheduleError,\n ScheduleHandler,\n ScheduleNotification,\n ScheduleSubscription,\n createScheduleSubscription,\n} from \"./types\";\nimport { isRouteShape } from \"../_routes\";\n\ntype ScheduleSubscriptionState = {\n subId: bigint;\n handlers: Map<number, ScheduleHandler>;\n};\n\nexport type ScheduleClient = ReturnType<typeof createScheduleClient>;\n\nexport function createScheduleClient(connection: Connection) {\n const { requestFrame } = createDomainClient(connection);\n const subscriptionsByPattern = new Map<string, ScheduleSubscriptionState>();\n const patternsBySubId = new Map<bigint, string>();\n let notifyHandlerInitialized = false;\n let nextHandlerId = 1;\n\n connection.onReconnect(async () => {\n if (subscriptionsByPattern.size === 0) {\n return;\n }\n\n const subscriptions = Array.from(subscriptionsByPattern.entries(), ([pattern, state]) => ({\n pattern,\n handlers: Array.from(state.handlers.entries()),\n }));\n subscriptionsByPattern.clear();\n patternsBySubId.clear();\n\n for (const subscription of subscriptions) {\n const subId = await subscribeWire(subscription.pattern);\n subscriptionsByPattern.set(subscription.pattern, {\n subId,\n handlers: new Map(subscription.handlers),\n });\n patternsBySubId.set(subId, subscription.pattern);\n }\n });\n\n const create = async (\n route: string,\n cronExpr: string,\n payload: Uint8Array = new Uint8Array(),\n ): Promise<string> => {\n assertConcreteScheduleRoute(route);\n\n const response = await requestFrame(\n MSG_SCHEDULE_CREATE,\n ScheduleCodec.encodeCreate(route, cronExpr, payload),\n );\n const decoded = ScheduleCodec.decodeCreateResponse(assertSuccess(response, \"CREATE\"));\n return decoded.scheduleId ?? route;\n };\n\n const cancel = async (route: string): Promise<void> => {\n assertConcreteScheduleRoute(route);\n\n const response = await requestFrame(MSG_SCHEDULE_CANCEL, ScheduleCodec.encodeCancel(route));\n ScheduleCodec.decodeCancelResponse(assertSuccess(response, \"CANCEL\"));\n };\n\n const list = async (\n offset: bigint = 0n,\n limit: bigint = 0n,\n ): Promise<[ScheduleEntry[], bigint]> => {\n const response = await requestFrame(MSG_SCHEDULE_LIST, ScheduleCodec.encodeList(offset, limit));\n const decoded = ScheduleCodec.decodeListResponse(assertSuccess(response, \"LIST\"));\n return [decoded.entries, decoded.totalCount];\n };\n\n const subscribe = async (\n pattern: string,\n handler: ScheduleHandler,\n ): Promise<ScheduleSubscription> => {\n assertConcreteScheduleRoute(pattern);\n\n initNotifyHandler();\n const existing = subscriptionsByPattern.get(pattern);\n if (existing) {\n return addLocalSubscription(pattern, existing.subId, handler);\n }\n\n const subId = await subscribeWire(pattern);\n return addLocalSubscription(pattern, subId, handler);\n };\n\n const subscribeWire = async (pattern: string): Promise<bigint> => {\n const response = await requestFrame(\n MSG_SCHEDULE_SUBSCRIBE,\n ScheduleCodec.encodeSubscribe(pattern),\n );\n const decoded = ScheduleCodec.decodeSubscribeResponse(assertSuccess(response, \"SUBSCRIBE\"));\n\n return decoded.subId;\n };\n\n const addLocalSubscription = (\n pattern: string,\n subId: bigint,\n handler: ScheduleHandler,\n ): ScheduleSubscription => {\n const handlerId = nextHandlerId++;\n let subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n subscription = { subId, handlers: new Map() };\n subscriptionsByPattern.set(pattern, subscription);\n patternsBySubId.set(subId, pattern);\n }\n\n subscription.handlers.set(handlerId, handler);\n return createScheduleSubscription(subId, pattern, async () => {\n await unsubscribe(pattern, handlerId);\n });\n };\n\n const unsubscribe = async (pattern: string, handlerId: number): Promise<void> => {\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n subscription.handlers.delete(handlerId);\n if (subscription.handlers.size > 0) {\n return;\n }\n\n subscriptionsByPattern.delete(pattern);\n patternsBySubId.delete(subscription.subId);\n const response = await requestFrame(\n MSG_SCHEDULE_UNSUBSCRIBE,\n ScheduleCodec.encodeUnsubscribe(pattern),\n );\n ScheduleCodec.decodeUnsubscribeResponse(assertSuccess(response, \"UNSUBSCRIBE\"));\n };\n\n const initNotifyHandler = (): void => {\n if (notifyHandlerInitialized) {\n return;\n }\n\n notifyHandlerInitialized = true;\n connection.registerNotificationHandler(MSG_SCHEDULE_NOTIFY, (payload) => {\n try {\n const decoded = ScheduleCodec.decodeNotification(payload);\n const pattern = patternsBySubId.get(decoded.subId);\n if (!pattern) {\n return;\n }\n\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n const notification: ScheduleNotification = {\n payload: decoded.payload,\n };\n for (const handler of subscription.handlers.values()) {\n connection.dispatchAsyncHandler(async () => {\n await handler(notification);\n });\n }\n } catch {\n // Best-effort notification dispatch.\n }\n });\n };\n\n const assertSuccess = (payload: Uint8Array, operation: string): Uint8Array => {\n const result = parseStandardResponse(payload);\n if (result.success) {\n return result.data;\n }\n\n throw new ScheduleError(\n `${operation} failed: ${result.error ?? \"Unknown error\"}`,\n mapErrorCode(result.error),\n );\n };\n\n const mapErrorCode = (message?: string): string => {\n const normalized = message?.toLowerCase() ?? \"\";\n if (normalized.includes(\"not found\")) {\n return \"NOT_FOUND\";\n }\n if (normalized.includes(\"invalid route\")) {\n return \"INVALID_ROUTE\";\n }\n if (normalized.includes(\"cron\")) {\n return \"INVALID_CRON\";\n }\n return \"REQUEST_FAILED\";\n };\n\n return {\n create,\n cancel,\n list,\n subscribe,\n };\n}\n\ntype ScheduleClientConstructor = {\n new (connection: Connection): ScheduleClient;\n (connection: Connection): ScheduleClient;\n};\n\nexport const ScheduleClient: ScheduleClientConstructor = function (connection: Connection) {\n return createScheduleClient(connection);\n} as unknown as ScheduleClientConstructor;\n\nexport * from \"./types\";\n\nfunction assertConcreteScheduleRoute(route: string): void {\n if (!isRouteShape(route, \"schedule\", 4)) {\n throw new ScheduleError(\n `Invalid schedule route: ${route} (expected schedule://{realm}/{area}/{resource}/{operation}, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n","/**\n * Main Fitz client facade.\n */\n\nimport { ConnectionState } from \"../core/types\";\nimport type { ClientConfig, ClientConnectOptions, TokenProvider } from \"../core/types\";\nimport { Connection, createConnection } from \"./connection\";\nimport { createTransport } from \"../transport/factory\";\nimport { ConnectionError } from \"../core/errors\";\nimport { KvClient } from \"../domains/kv/client\";\nimport { QueueClient } from \"../domains/queue/client\";\nimport { RpcClient } from \"../domains/rpc/client\";\nimport { LeaseClient } from \"../domains/lease/client\";\nimport { NoticeClient } from \"../domains/notice/client\";\nimport { StreamClient } from \"../domains/stream/client\";\nimport { ScheduleClient } from \"../domains/schedule/client\";\n\nexport type Client = ReturnType<typeof createClient>;\n\nexport function createClient(config: ClientConfig) {\n const observability = config.observability;\n const resolvedConfig: Required<\n Omit<ClientConfig, \"tokenProvider\" | \"reconnect\" | \"asyncHandlers\">\n > &\n Pick<ClientConfig, \"tokenProvider\" | \"reconnect\" | \"asyncHandlers\"> = {\n timeout: 30000,\n transport: \"auto\",\n maxFrameSize: 65535,\n authSettleDelayMs: 100,\n maxInFlightRequests: 256,\n maxRequestQueueSize: 1024,\n observability: config.observability ?? {},\n reconnect: {\n enabled: false,\n maxAttempts: Infinity,\n backoffMs: 250,\n maxBackoffMs: 5000,\n ...config.reconnect,\n },\n asyncHandlers: {\n maxConcurrency: Infinity,\n timeoutMs: 30000,\n ...config.asyncHandlers,\n },\n ...config,\n };\n\n if (!resolvedConfig.url) {\n throw new Error(\"URL is required\");\n }\n\n let connection: Connection | null = null;\n let kvClient: KvClient | null = null;\n let queueClient: QueueClient | null = null;\n let rpcClient: RpcClient | null = null;\n let leaseClient: LeaseClient | null = null;\n let noticeClient: NoticeClient | null = null;\n let streamClient: StreamClient | null = null;\n let scheduleClient: ScheduleClient | null = null;\n\n const resolveTokenProvider = (): TokenProvider => {\n if (resolvedConfig.tokenProvider) {\n return resolvedConfig.tokenProvider;\n }\n\n return () => \"\";\n };\n\n const ensureConnection = (): Connection => {\n if (!connection) {\n throw new ConnectionError(\"Not connected to Fitz server. Call connect() first.\", {\n state: getState(),\n });\n }\n\n return connection;\n };\n\n const connect = async (options: ClientConnectOptions = {}): Promise<void> => {\n if (connection?.isConnected()) {\n return;\n }\n\n const tokenProvider = resolveTokenProvider();\n\n connection = createConnection(\n () =>\n createTransport(resolvedConfig.url, resolvedConfig.transport, {\n timeout: resolvedConfig.timeout,\n maxFrameSize: resolvedConfig.maxFrameSize,\n }),\n tokenProvider,\n {\n timeout: resolvedConfig.timeout,\n authSettleDelayMs: resolvedConfig.authSettleDelayMs,\n maxInFlightRequests: resolvedConfig.maxInFlightRequests,\n maxRequestQueueSize: resolvedConfig.maxRequestQueueSize,\n reconnect: resolvedConfig.reconnect,\n observability,\n asyncHandlers: resolvedConfig.asyncHandlers,\n },\n );\n\n await connection.connect(options);\n };\n\n const close = async (): Promise<void> => {\n if (connection) {\n await connection.close();\n connection = null;\n }\n kvClient = null;\n queueClient = null;\n rpcClient = null;\n leaseClient = null;\n noticeClient = null;\n streamClient = null;\n scheduleClient = null;\n };\n\n const isConnected = (): boolean => {\n return connection?.isConnected() ?? false;\n };\n\n const kv = (): KvClient => {\n const activeConnection = ensureConnection();\n if (!kvClient) {\n kvClient = new KvClient(activeConnection);\n }\n return kvClient;\n };\n\n const queue = (): QueueClient => {\n const activeConnection = ensureConnection();\n if (!queueClient) {\n queueClient = new QueueClient(activeConnection);\n }\n return queueClient;\n };\n\n const rpc = (): RpcClient => {\n const activeConnection = ensureConnection();\n if (!rpcClient) {\n rpcClient = new RpcClient(activeConnection);\n }\n return rpcClient;\n };\n\n const lease = (): LeaseClient => {\n const activeConnection = ensureConnection();\n if (!leaseClient) {\n leaseClient = new LeaseClient(activeConnection);\n }\n return leaseClient;\n };\n\n const notice = (): NoticeClient => {\n const activeConnection = ensureConnection();\n if (!noticeClient) {\n noticeClient = new NoticeClient(activeConnection);\n }\n return noticeClient;\n };\n\n const stream = (): StreamClient => {\n const activeConnection = ensureConnection();\n if (!streamClient) {\n streamClient = new StreamClient(activeConnection);\n }\n return streamClient;\n };\n\n const schedule = (): ScheduleClient => {\n const activeConnection = ensureConnection();\n if (!scheduleClient) {\n scheduleClient = new ScheduleClient(activeConnection);\n }\n return scheduleClient;\n };\n\n const getUrl = (): string => {\n return ensureConnection().getUrl();\n };\n\n const getState = (): ConnectionState => {\n return connection?.getState() ?? ConnectionState.Disconnected;\n };\n\n return {\n config: resolvedConfig,\n connect,\n close,\n isConnected,\n kv,\n queue,\n rpc,\n lease,\n notice,\n stream,\n schedule,\n getUrl,\n getState,\n };\n}\n\ntype ClientConstructor = {\n new (config: ClientConfig): Client;\n (config: ClientConfig): Client;\n};\n\nexport const Client: ClientConstructor = function (config: ClientConfig) {\n return createClient(config);\n} as unknown as ClientConstructor;\n","export type TaskGroupStatus = \"idle\" | \"running\" | \"stopping\" | \"stopped\" | \"failed\";\nexport type TaskGroupErrorPolicy = \"stop-group\" | \"restart-task\" | \"ignore\";\n\nexport type TaskContext = {\n readonly name: string;\n readonly index: number;\n readonly signal: AbortSignal;\n};\n\nexport type TaskGroupOptions = {\n readonly name: string;\n readonly concurrency: number;\n readonly errorPolicy?: TaskGroupErrorPolicy;\n readonly run: (ctx: TaskContext) => Promise<void>;\n};\n\nimport { createDeferred, Deferred } from \"./types\";\n\nexport type TaskGroup = ReturnType<typeof createTaskGroup>;\n\ntype InternalState = {\n status: TaskGroupStatus;\n controller: AbortController | null;\n completion: Deferred<void> | null;\n error: unknown;\n};\n\nexport function createTaskGroup(options: TaskGroupOptions) {\n const name = options.name;\n const concurrency = options.concurrency;\n const errorPolicy = options.errorPolicy ?? \"stop-group\";\n const run = options.run;\n\n if (concurrency < 1) {\n throw new Error(\"TaskGroup concurrency must be at least 1\");\n }\n\n const state: InternalState = {\n status: \"idle\",\n controller: null,\n completion: null,\n error: null,\n };\n\n const tasks = new Set<Promise<void>>();\n\n const ensureCompletion = (): Deferred<void> => {\n if (!state.completion) {\n state.completion = createDeferred<void>();\n }\n return state.completion;\n };\n\n const complete = (error?: unknown): void => {\n const completion = ensureCompletion();\n\n if (error !== undefined) {\n state.status = \"failed\";\n state.error = error;\n completion.reject(error);\n return;\n }\n\n state.status = \"stopped\";\n completion.resolve();\n };\n\n const maybeFinish = () => {\n if (tasks.size > 0) {\n return;\n }\n\n if (state.error) {\n complete(state.error);\n return;\n }\n\n if (state.status === \"running\" || state.status === \"stopping\") {\n complete();\n return;\n }\n };\n\n const track = (promise: Promise<void>): void => {\n tasks.add(promise);\n void promise.finally(() => {\n tasks.delete(promise);\n maybeFinish();\n });\n };\n\n const shouldRestart = (error: unknown): boolean => {\n if (errorPolicy !== \"restart-task\") {\n return false;\n }\n\n if (state.status !== \"running\" || state.controller?.signal.aborted) {\n return false;\n }\n\n if (isAbortError(error)) {\n return false;\n }\n\n return true;\n };\n\n const handleWorkerError = (error: unknown) => {\n if (isAbortError(error)) {\n return;\n }\n\n if (state.status === \"stopping\") {\n return;\n }\n\n if (errorPolicy === \"stop-group\") {\n state.error = error;\n state.status = \"stopping\";\n state.controller?.abort();\n return;\n }\n };\n\n const runWorker = async (index: number): Promise<void> => {\n while (true) {\n const controller = state.controller;\n if (!controller) {\n return;\n }\n\n try {\n await run({ name, index, signal: controller.signal });\n } catch (error) {\n if (isAbortError(error) || state.status === \"stopping\") {\n return;\n }\n\n if (errorPolicy === \"stop-group\") {\n handleWorkerError(error);\n return;\n }\n\n if (errorPolicy === \"restart-task\") {\n if (shouldRestart(error)) {\n continue;\n }\n return;\n }\n\n if (errorPolicy === \"ignore\") {\n return;\n }\n }\n\n return;\n }\n };\n\n const start = async (): Promise<void> => {\n if (state.status === \"running\") {\n throw new Error(\"TaskGroup already running\");\n }\n\n if (state.status === \"stopping\") {\n throw new Error(\"TaskGroup is stopping\");\n }\n\n if (state.status === \"failed\") {\n throw new Error(\"TaskGroup has failed and cannot be restarted\");\n }\n\n const previousStatus = state.status;\n state.controller = new AbortController();\n if (previousStatus === \"stopped\") {\n state.completion = createDeferred<void>();\n } else {\n ensureCompletion();\n }\n state.error = null;\n state.status = \"running\";\n\n for (let index = 0; index < concurrency; index += 1) {\n track(runWorker(index));\n }\n };\n\n const stop = async (reason?: unknown): Promise<void> => {\n void reason;\n if (state.status === \"idle\") {\n state.status = \"stopped\";\n ensureCompletion().resolve();\n return;\n }\n\n if (state.status === \"stopped\") {\n return ensureCompletion().promise;\n }\n\n if (state.status === \"failed\") {\n return ensureCompletion().promise;\n }\n\n if (state.status === \"running\") {\n state.status = \"stopping\";\n state.controller?.abort();\n return ensureCompletion().promise;\n }\n\n return ensureCompletion().promise;\n };\n\n const join = async (): Promise<void> => {\n const completion = ensureCompletion();\n return completion.promise;\n };\n\n const dispose = async (reason?: unknown): Promise<void> => {\n return stop(reason);\n };\n\n return {\n get name() {\n return name;\n },\n get status() {\n return state.status;\n },\n start,\n stop,\n join,\n dispose,\n };\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\";\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["abortError","abortError","throwIfAborted","isAbortError","waitForSharedPromise","isNode","ScheduleError","ScheduleError"],"sources":["../src/core/types.ts","../src/core/lifecycle.ts","../src/core/buffer.ts","../src/core/errors.ts","../src/frame/codec.ts","../src/client/multiplexer.ts","../src/client/resilience.ts","../src/client/connection.ts","../src/transport/websocket.ts","../src/transport/tcp.ts","../src/transport/factory.ts","../src/domains/base.ts","../src/domains/kv/codec.ts","../src/core/iterator.ts","../src/domains/kv/transaction.ts","../src/domains/_routes.ts","../src/domains/kv/client.ts","../src/domains/queue/codec.ts","../src/domains/queue/types.ts","../src/domains/queue/client.ts","../src/domains/rpc/codec.ts","../src/domains/rpc/types.ts","../src/domains/rpc/client.ts","../src/domains/lease/codec.ts","../src/protocol/response.ts","../src/domains/lease/types.ts","../src/domains/lease/client.ts","../src/domains/notice/codec.ts","../src/domains/notice/types.ts","../src/domains/notice/client.ts","../src/domains/stream/codec.ts","../src/domains/stream/types.ts","../src/domains/stream/session.ts","../src/domains/stream/client.ts","../src/domains/schedule/codec.ts","../src/domains/schedule/types.ts","../src/domains/schedule/client.ts","../src/client/client.ts","../src/core/task-group.ts"],"sourcesContent":["/**\n * Common type definitions for Fitz client\n */\n\nexport type TransportType = \"ws\" | \"tcp\" | \"auto\";\n\nexport type TokenProvider = () => string | Promise<string>;\n\nexport type FitzLogLevel = \"debug\" | \"info\" | \"warn\" | \"error\";\n\nexport interface FitzLogger {\n log(level: FitzLogLevel, event: string, fields?: Record<string, unknown>): void;\n}\n\nexport interface FitzTracer {\n startSpan(name: string, attributes?: Record<string, unknown>): FitzSpan;\n}\n\nexport interface FitzSpan {\n setAttribute(key: string, value: unknown): void;\n recordException(error: unknown): void;\n end(): void;\n}\n\nexport interface FitzMeter {\n counter(name: string, value: number, attributes?: Record<string, unknown>): void;\n histogram(name: string, value: number, attributes?: Record<string, unknown>): void;\n gauge?(name: string, value: number, attributes?: Record<string, unknown>): void;\n}\n\nexport interface FitzLifecycleEvent {\n event: string;\n state: ConnectionState;\n transport?: string;\n url?: string;\n attempt?: number;\n error?: string;\n}\n\nexport interface FitzObservability {\n logger?: FitzLogger;\n tracer?: FitzTracer;\n meter?: FitzMeter;\n onLifecycleEvent?: (event: FitzLifecycleEvent) => void;\n}\n\nexport interface AsyncHandlerOptions {\n maxConcurrency?: number;\n timeoutMs?: number;\n}\n\nexport interface ReconnectOptions {\n enabled?: boolean;\n maxAttempts?: number;\n backoffMs?: number;\n maxBackoffMs?: number;\n}\n\nexport interface RetryOptions {\n enabled?: boolean;\n maxAttempts?: number;\n backoffMs?: number;\n maxBackoffMs?: number;\n}\n\nexport interface ClientConfig {\n url: string;\n tokenProvider?: TokenProvider;\n timeout?: number;\n transport?: TransportType;\n reconnect?: ReconnectOptions;\n retry?: RetryOptions;\n maxFrameSize?: number;\n authSettleDelayMs?: number;\n maxInFlightRequests?: number;\n maxRequestQueueSize?: number;\n observability?: FitzObservability;\n asyncHandlers?: AsyncHandlerOptions;\n}\n\nexport interface ClientConnectOptions {\n signal?: AbortSignal;\n}\n\nexport type TxMode = \"ReadOnly\" | \"ReadWrite\";\nexport type DurabilityMode = \"None\" | \"Async\" | \"Sync\";\n\n/**\n * Deferred is a Promise wrapper that exposes resolve/reject\n */\nexport interface Deferred<T = unknown> {\n promise: Promise<T>;\n resolve: (value: T | PromiseLike<T>) => void;\n reject: (reason?: unknown) => void;\n}\n\nexport function createDeferred<T = unknown>(): Deferred<T> {\n let resolve!: (value: T | PromiseLike<T>) => void;\n let reject!: (reason?: unknown) => void;\n\n const promise = new Promise<T>((res, rej) => {\n resolve = res;\n reject = rej;\n });\n\n return { promise, resolve, reject };\n}\n\ntype DeferredConstructor = {\n new <T = unknown>(): Deferred<T>;\n <T = unknown>(): Deferred<T>;\n};\n\nexport const Deferred: DeferredConstructor = createDeferred as unknown as DeferredConstructor;\n\n/**\n * Connection state machine\n */\nexport enum ConnectionState {\n Disconnected = \"DISCONNECTED\",\n Connecting = \"CONNECTING\",\n Connected = \"CONNECTED\",\n Authenticating = \"AUTHENTICATING\",\n Authenticated = \"AUTHENTICATED\",\n Reconnecting = \"RECONNECTING\",\n Closed = \"CLOSED\",\n}\n","import { createDeferred, Deferred } from \"./types\";\n\nexport type Disposable = {\n dispose(): void;\n};\n\nexport type AsyncDisposable = {\n dispose(): Promise<void>;\n};\n\nexport type Subscription = {\n readonly name?: string;\n readonly closed: boolean;\n unsubscribe(): Promise<void>;\n};\n\nexport interface SubscriptionGroup {\n readonly name: string;\n readonly size: number;\n readonly closed: boolean;\n add<T extends Subscription | Disposable | AsyncDisposable | (() => void | Promise<void>)>(\n resource: T,\n ): T;\n unsubscribe(): Promise<void>;\n}\n\nexport interface Scope {\n readonly name: string;\n readonly signal: AbortSignal;\n readonly disposed: boolean;\n add<T extends Subscription | Disposable | AsyncDisposable | (() => void | Promise<void>)>(\n resource: T,\n ): T;\n createSubscriptionGroup(groupName: string): SubscriptionGroup;\n dispose(): Promise<void>;\n}\n\nexport function createScope(name: string, parent?: Scope) {\n const controller = new AbortController();\n const signal = controller.signal;\n let disposed = false;\n let disposing = false;\n let completion: Deferred<void> | null = null;\n const resources: Array<\n Disposable | AsyncDisposable | Subscription | (() => void | Promise<void>)\n > = [];\n\n const ensureCompletion = (): Deferred<void> => {\n if (!completion) {\n completion = createDeferred<void>();\n }\n return completion;\n };\n\n const add = <\n T extends Subscription | Disposable | AsyncDisposable | (() => void | Promise<void>),\n >(\n resource: T,\n ): T => {\n if (disposed) {\n throw new Error(`Cannot add resource to disposed scope ${name}`);\n }\n resources.push(resource);\n return resource;\n };\n\n const disposeResource = async (\n resource: Disposable | AsyncDisposable | Subscription | (() => void | Promise<void>),\n ): Promise<void> => {\n if (typeof resource === \"function\") {\n await resource();\n return;\n }\n\n if (typeof (resource as Subscription).unsubscribe === \"function\") {\n await (resource as Subscription).unsubscribe();\n return;\n }\n\n if (typeof (resource as AsyncDisposable).dispose === \"function\") {\n await (resource as AsyncDisposable).dispose();\n return;\n }\n\n if (typeof (resource as Disposable).dispose === \"function\") {\n (resource as Disposable).dispose();\n return;\n }\n\n throw new Error(\"Unsupported resource type\");\n };\n\n const dispose = async (): Promise<void> => {\n if (disposed) {\n return ensureCompletion().promise;\n }\n if (disposing) {\n return ensureCompletion().promise;\n }\n\n disposing = true;\n controller.abort();\n const completionDeferred = ensureCompletion();\n const snapshot = resources.slice().reverse();\n resources.length = 0;\n\n const errors: unknown[] = [];\n for (const resource of snapshot) {\n try {\n await disposeResource(resource);\n } catch (error) {\n errors.push(error);\n }\n }\n\n disposed = true;\n disposing = false;\n\n if (errors.length > 0) {\n completionDeferred.reject(errors[0]);\n return;\n }\n\n completionDeferred.resolve();\n };\n\n const createSubscriptionGroup = (groupName: string) => {\n const group = createSubscriptionGroupInternal(groupName);\n add(group);\n return group;\n };\n\n if (parent) {\n parent.add({ dispose });\n }\n\n return {\n get name() {\n return name;\n },\n get signal() {\n return signal;\n },\n get disposed() {\n return disposed;\n },\n add,\n createSubscriptionGroup,\n dispose,\n };\n}\n\nfunction createSubscriptionGroupInternal(name: string) {\n let closed = false;\n const subscriptions: Array<\n Subscription | Disposable | AsyncDisposable | (() => void | Promise<void>)\n > = [];\n\n const add = <\n T extends Subscription | Disposable | AsyncDisposable | (() => void | Promise<void>),\n >(\n subscription: T,\n ): T => {\n if (closed) {\n throw new Error(`Cannot add subscription to closed group ${name}`);\n }\n\n subscriptions.push(subscription);\n return subscription;\n };\n\n const unsubscribe = async (): Promise<void> => {\n if (closed) {\n return;\n }\n\n closed = true;\n const snapshot = subscriptions.slice().reverse();\n subscriptions.length = 0;\n const errors: unknown[] = [];\n\n for (const subscription of snapshot) {\n try {\n if (typeof subscription === \"function\") {\n await subscription();\n continue;\n }\n\n if (typeof (subscription as Subscription).unsubscribe === \"function\") {\n await (subscription as Subscription).unsubscribe();\n continue;\n }\n\n if (typeof (subscription as AsyncDisposable).dispose === \"function\") {\n await (subscription as AsyncDisposable).dispose();\n continue;\n }\n\n if (typeof (subscription as Disposable).dispose === \"function\") {\n (subscription as Disposable).dispose();\n continue;\n }\n } catch (error) {\n errors.push(error);\n }\n }\n\n if (errors.length > 0) {\n throw errors[0];\n }\n };\n\n return {\n name,\n get size() {\n return subscriptions.length;\n },\n get closed() {\n return closed;\n },\n add,\n unsubscribe,\n };\n}\n","/**\n * Buffer utilities for big-endian encoding\n */\n\nexport const utf8Encoder = new TextEncoder();\nexport const utf8Decoder = new TextDecoder();\n\nconst routeEncodingCache = new Map<string, Uint8Array>();\nconst routeEncodingCacheMaxEntries = 256;\n\nexport function writeU32BEAt(buffer: Uint8Array, offset: number, value: number): number {\n buffer[offset++] = (value >> 24) & 0xff;\n buffer[offset++] = (value >> 16) & 0xff;\n buffer[offset++] = (value >> 8) & 0xff;\n buffer[offset++] = value & 0xff;\n return offset;\n}\n\nexport function writeU64BEAt(buffer: Uint8Array, offset: number, value: bigint): number {\n buffer[offset++] = Number((value >> 56n) & 0xffn);\n buffer[offset++] = Number((value >> 48n) & 0xffn);\n buffer[offset++] = Number((value >> 40n) & 0xffn);\n buffer[offset++] = Number((value >> 32n) & 0xffn);\n buffer[offset++] = Number((value >> 24n) & 0xffn);\n buffer[offset++] = Number((value >> 16n) & 0xffn);\n buffer[offset++] = Number((value >> 8n) & 0xffn);\n buffer[offset++] = Number(value & 0xffn);\n return offset;\n}\n\nexport function readU32BEAt(buffer: Uint8Array, offset: number): number {\n return (\n ((buffer[offset] << 24) |\n (buffer[offset + 1] << 16) |\n (buffer[offset + 2] << 8) |\n buffer[offset + 3]) >>>\n 0\n );\n}\n\nexport function readU128BEAt(buffer: Uint8Array, offset: number): bigint {\n const part0 = BigInt(readU32BEAt(buffer, offset));\n const part1 = BigInt(readU32BEAt(buffer, offset + 4));\n const part2 = BigInt(readU32BEAt(buffer, offset + 8));\n const part3 = BigInt(readU32BEAt(buffer, offset + 12));\n return (part0 << 96n) | (part1 << 64n) | (part2 << 32n) | part3;\n}\n\nexport function getRouteEncoding(route: string): Uint8Array {\n const cached = routeEncodingCache.get(route);\n if (cached) {\n return cached;\n }\n\n const encoded = utf8Encoder.encode(route);\n const routePayload = new Uint8Array(4 + encoded.length);\n const len = encoded.length;\n routePayload[0] = (len >> 24) & 0xff;\n routePayload[1] = (len >> 16) & 0xff;\n routePayload[2] = (len >> 8) & 0xff;\n routePayload[3] = len & 0xff;\n routePayload.set(encoded, 4);\n\n if (routeEncodingCache.size >= routeEncodingCacheMaxEntries) {\n const firstKey = routeEncodingCache.keys().next().value;\n if (firstKey !== undefined) {\n routeEncodingCache.delete(firstKey);\n }\n }\n routeEncodingCache.set(route, routePayload);\n return routePayload;\n}\n\nexport type BufferWriter = ReturnType<typeof createBufferWriter>;\n\nexport function createBufferWriter(capacity: number = 4096) {\n let buffer = new Uint8Array(capacity);\n let offset = 0;\n\n const ensureCapacity = (needed: number) => {\n if (offset + needed > buffer.length) {\n const newCapacity = Math.max(buffer.length * 2, offset + needed);\n const newBuffer = new Uint8Array(newCapacity);\n newBuffer.set(buffer);\n buffer = newBuffer;\n }\n };\n\n const writeU8 = (value: number): void => {\n ensureCapacity(1);\n buffer[offset++] = value & 0xff;\n };\n\n const writeU16BE = (value: number): void => {\n ensureCapacity(2);\n buffer[offset++] = (value >> 8) & 0xff;\n buffer[offset++] = value & 0xff;\n };\n\n const writeU32BE = (value: number): void => {\n ensureCapacity(4);\n buffer[offset++] = (value >> 24) & 0xff;\n buffer[offset++] = (value >> 16) & 0xff;\n buffer[offset++] = (value >> 8) & 0xff;\n buffer[offset++] = value & 0xff;\n };\n\n const writeU32LE = (value: number): void => {\n ensureCapacity(4);\n buffer[offset++] = value & 0xff;\n buffer[offset++] = (value >> 8) & 0xff;\n buffer[offset++] = (value >> 16) & 0xff;\n buffer[offset++] = (value >> 24) & 0xff;\n };\n\n const writeU64BE = (value: bigint): void => {\n ensureCapacity(8);\n buffer[offset++] = Number((value >> 56n) & 0xffn);\n buffer[offset++] = Number((value >> 48n) & 0xffn);\n buffer[offset++] = Number((value >> 40n) & 0xffn);\n buffer[offset++] = Number((value >> 32n) & 0xffn);\n buffer[offset++] = Number((value >> 24n) & 0xffn);\n buffer[offset++] = Number((value >> 16n) & 0xffn);\n buffer[offset++] = Number((value >> 8n) & 0xffn);\n buffer[offset++] = Number(value & 0xffn);\n };\n\n const writeU64LE = (value: bigint): void => {\n ensureCapacity(8);\n buffer[offset++] = Number(value & 0xffn);\n buffer[offset++] = Number((value >> 8n) & 0xffn);\n buffer[offset++] = Number((value >> 16n) & 0xffn);\n buffer[offset++] = Number((value >> 24n) & 0xffn);\n buffer[offset++] = Number((value >> 32n) & 0xffn);\n buffer[offset++] = Number((value >> 40n) & 0xffn);\n buffer[offset++] = Number((value >> 48n) & 0xffn);\n buffer[offset++] = Number((value >> 56n) & 0xffn);\n };\n\n const writeBytes = (data: Uint8Array): void => {\n ensureCapacity(data.length);\n buffer.set(data, offset);\n offset += data.length;\n };\n\n const overwriteU32BE = (position: number, value: number): void => {\n if (position + 4 > buffer.length) {\n throw new Error(\"Buffer overwrite out of bounds\");\n }\n buffer[position] = (value >> 24) & 0xff;\n buffer[position + 1] = (value >> 16) & 0xff;\n buffer[position + 2] = (value >> 8) & 0xff;\n buffer[position + 3] = value & 0xff;\n };\n\n const writeString = (str: string): void => {\n if (str.length === 0) {\n writeU32BE(0);\n return;\n }\n\n const maxBytes = str.length * 4;\n ensureCapacity(4 + maxBytes);\n const lengthOffset = offset;\n offset += 4;\n\n const slice = buffer.subarray(offset, offset + maxBytes);\n const { written } = utf8Encoder.encodeInto(str, slice);\n offset += written;\n\n buffer[lengthOffset] = (written >> 24) & 0xff;\n buffer[lengthOffset + 1] = (written >> 16) & 0xff;\n buffer[lengthOffset + 2] = (written >> 8) & 0xff;\n buffer[lengthOffset + 3] = written & 0xff;\n };\n\n const writeStringU64 = (str: string): void => {\n if (str.length === 0) {\n writeU64BE(0n);\n return;\n }\n\n const maxBytes = str.length * 4;\n ensureCapacity(8 + maxBytes);\n const lengthOffset = offset;\n offset += 8;\n\n const slice = buffer.subarray(offset, offset + maxBytes);\n const { written } = utf8Encoder.encodeInto(str, slice);\n offset += written;\n\n const length = BigInt(written);\n buffer[lengthOffset] = Number((length >> 56n) & 0xffn);\n buffer[lengthOffset + 1] = Number((length >> 48n) & 0xffn);\n buffer[lengthOffset + 2] = Number((length >> 40n) & 0xffn);\n buffer[lengthOffset + 3] = Number((length >> 32n) & 0xffn);\n buffer[lengthOffset + 4] = Number((length >> 24n) & 0xffn);\n buffer[lengthOffset + 5] = Number((length >> 16n) & 0xffn);\n buffer[lengthOffset + 6] = Number((length >> 8n) & 0xffn);\n buffer[lengthOffset + 7] = Number(length & 0xffn);\n };\n\n const writeStringU64LE = (str: string): void => {\n if (str.length === 0) {\n writeU64LE(0n);\n return;\n }\n\n const maxBytes = str.length * 4;\n ensureCapacity(8 + maxBytes);\n const lengthOffset = offset;\n offset += 8;\n\n const slice = buffer.subarray(offset, offset + maxBytes);\n const { written } = utf8Encoder.encodeInto(str, slice);\n offset += written;\n\n const length = BigInt(written);\n buffer[lengthOffset] = Number(length & 0xffn);\n buffer[lengthOffset + 1] = Number((length >> 8n) & 0xffn);\n buffer[lengthOffset + 2] = Number((length >> 16n) & 0xffn);\n buffer[lengthOffset + 3] = Number((length >> 24n) & 0xffn);\n buffer[lengthOffset + 4] = Number((length >> 32n) & 0xffn);\n buffer[lengthOffset + 5] = Number((length >> 40n) & 0xffn);\n buffer[lengthOffset + 6] = Number((length >> 48n) & 0xffn);\n buffer[lengthOffset + 7] = Number((length >> 56n) & 0xffn);\n };\n\n const writeRoute = (route: string): void => {\n const encoded = getRouteEncoding(route);\n writeBytes(encoded);\n };\n\n const getBuffer = (): Uint8Array => {\n return offset === buffer.length ? buffer : buffer.slice(0, offset);\n };\n\n const getBufferView = (): Uint8Array => {\n return buffer.subarray(0, offset);\n };\n\n const getLength = (): number => offset;\n\n const reset = (): void => {\n offset = 0;\n };\n\n const writeOptionalU64 = (value: bigint | undefined): void => {\n if (value === undefined) {\n writeU8(0);\n } else {\n writeU8(1);\n writeU64BE(value);\n }\n };\n\n const writeOptionalString = (value: string | undefined): void => {\n if (value === undefined) {\n writeU8(0);\n } else {\n writeU8(1);\n writeString(value);\n }\n };\n\n const writeOptionalBytes = (value: Uint8Array | undefined): void => {\n if (value === undefined) {\n writeU8(0);\n } else {\n writeU8(1);\n writeU32BE(value.length);\n writeBytes(value);\n }\n };\n\n return {\n writeU8,\n writeU16BE,\n writeU32BE,\n writeU32LE,\n writeU64BE,\n writeU64LE,\n writeBytes,\n writeString,\n writeStringU64,\n writeStringU64LE,\n writeRoute,\n getBuffer,\n getBufferView,\n getLength,\n reset,\n writeOptionalU64,\n writeOptionalString,\n writeOptionalBytes,\n overwriteU32BE,\n };\n}\n\ntype BufferWriterConstructor = {\n new (capacity?: number): BufferWriter;\n (capacity?: number): BufferWriter;\n};\n\nexport const BufferWriter: BufferWriterConstructor = function (capacity = 4096) {\n return createBufferWriter(capacity);\n} as unknown as BufferWriterConstructor;\n\nexport type BufferReader = ReturnType<typeof createBufferReader>;\n\nexport function createBufferReader(buffer: Uint8Array) {\n let internalBuffer = buffer;\n let offset = 0;\n\n const readU8 = (): number => {\n if (offset >= internalBuffer.length) {\n throw new Error(\"Buffer overflow: cannot read U8\");\n }\n return internalBuffer[offset++];\n };\n\n const readU16BE = (): number => {\n if (offset + 2 > internalBuffer.length) {\n throw new Error(\"Buffer overflow: cannot read U16BE\");\n }\n const value = (internalBuffer[offset] << 8) | internalBuffer[offset + 1];\n offset += 2;\n return value;\n };\n\n const readU32BE = (): number => {\n if (offset + 4 > internalBuffer.length) {\n throw new Error(\"Buffer overflow: cannot read U32BE\");\n }\n const value =\n (internalBuffer[offset] << 24) |\n (internalBuffer[offset + 1] << 16) |\n (internalBuffer[offset + 2] << 8) |\n internalBuffer[offset + 3];\n offset += 4;\n return value >>> 0;\n };\n\n const readU64BE = (): bigint => {\n if (offset + 8 > internalBuffer.length) {\n throw new Error(\"Buffer overflow: cannot read U64BE\");\n }\n const high =\n ((BigInt(internalBuffer[offset]) << 24n) |\n (BigInt(internalBuffer[offset + 1]) << 16n) |\n (BigInt(internalBuffer[offset + 2]) << 8n) |\n BigInt(internalBuffer[offset + 3])) &\n 0xffffffffn;\n\n const low =\n ((BigInt(internalBuffer[offset + 4]) << 24n) |\n (BigInt(internalBuffer[offset + 5]) << 16n) |\n (BigInt(internalBuffer[offset + 6]) << 8n) |\n BigInt(internalBuffer[offset + 7])) &\n 0xffffffffn;\n\n offset += 8;\n return (high << 32n) | low;\n };\n\n const readBytes = (count: number): Uint8Array => {\n if (offset + count > internalBuffer.length) {\n throw new Error(\"Buffer overflow: cannot read bytes\");\n }\n const data = internalBuffer.subarray(offset, offset + count);\n offset += count;\n return data;\n };\n\n const readString = (): string => {\n const length = readU32BE();\n if (length === 0) {\n return \"\";\n }\n\n const bytes = internalBuffer.subarray(offset, offset + length);\n offset += length;\n return utf8Decoder.decode(bytes);\n };\n\n const readRoute = (): string => readString();\n\n const remainingBytes = (): number => internalBuffer.length - offset;\n\n const isEOF = (): boolean => offset >= internalBuffer.length;\n\n const getOffset = (): number => offset;\n\n const setOffset = (value: number): void => {\n if (value < 0 || value > internalBuffer.length) {\n throw new Error(\"Invalid offset\");\n }\n offset = value;\n };\n\n const peekU8 = (): number => {\n if (offset >= internalBuffer.length) {\n throw new Error(\"Buffer overflow: cannot peek U8\");\n }\n return internalBuffer[offset];\n };\n\n const readOptionalU64 = (): bigint | undefined => {\n const hasValue = readU8();\n if (hasValue === 0) {\n return undefined;\n }\n return readU64BE();\n };\n\n const readOptionalString = (): string | undefined => {\n const hasValue = readU8();\n if (hasValue === 0) {\n return undefined;\n }\n return readString();\n };\n\n const readOptionalBytes = (): Uint8Array | undefined => {\n const hasValue = readU8();\n if (hasValue === 0) {\n return undefined;\n }\n const length = readU32BE();\n return readBytes(length);\n };\n\n const remaining = (): Uint8Array => internalBuffer.slice(offset);\n\n return {\n readU8,\n readU16BE,\n readU32BE,\n readU64BE,\n readBytes,\n readString,\n readRoute,\n remainingBytes,\n isEOF,\n getOffset,\n setOffset,\n peekU8,\n readOptionalU64,\n readOptionalString,\n readOptionalBytes,\n remaining,\n };\n}\n\ntype BufferReaderConstructor = {\n new (buffer: Uint8Array): BufferReader;\n (buffer: Uint8Array): BufferReader;\n};\n\nexport const BufferReader: BufferReaderConstructor = function (buffer: Uint8Array) {\n return createBufferReader(buffer);\n} as unknown as BufferReaderConstructor;\n","export const ErrKvTransactionAborted = 1;\nexport const ErrKvLeaseExpired = 2;\nexport const ErrKvConflictingWrite = 3;\nexport const ErrKvKeyNotFound = 4;\nexport const ErrKvOperationNotAllowed = 5;\n\nexport const ErrCodeKvIsolationConflict = 1004;\nexport const ErrCodeKvBackendError = 1009;\n\nexport const ErrQueueNotFound = 1;\nexport const ErrQueueMessageNotFound = 2;\nexport const ErrQueueInvalidToken = 3;\nexport const ErrQueueFull = 4;\nexport const ErrQueueInvalidDelay = 5;\n\nexport const ErrCodeQueueFull = 4005;\n\nexport const ErrRpcTimeout = 1;\nexport const ErrRpcHandlerNotFound = 2;\nexport const ErrRpcHandlerError = 3;\nexport const ErrRpcInvalidRequest = 4;\n\nexport const ErrCodeRpcTimeout = 6001;\nexport const ErrCodeRpcWorkerNotFound = 6002;\nexport const ErrCodeRpcBackpressure = 6003;\nexport const ErrCodeRpcRouteNotRegistered = 6004;\nexport const ErrCodeRpcCorrelationNotFound = 6005;\nexport const ErrCodeRpcUnauthorized = 6009;\n\nexport const ErrLeaseHeld = 1;\nexport const ErrLeaseNotFound = 2;\nexport const ErrLeaseInvalidToken = 3;\n\nexport const ErrCodeLeaseHeld = 5001;\n\nexport const ErrNoticeGeneral = 1;\n\nexport const ErrStreamNotFound = 1;\nexport const ErrStreamOffsetOutOfRange = 2;\nexport const ErrStreamInvalidOffset = 3;\nexport const ErrStreamFull = 4;\nexport const ErrStreamSessionNotFound = 5;\nexport const ErrStreamSessionClosed = 6;\nexport const ErrStreamExpectedOffsetMismatch = 7;\n\nexport const ErrScheduleNotFound = 1;\nexport const ErrScheduleTaskNotFound = 2;\nexport const ErrScheduleInvalidCron = 3;\nexport const ErrScheduleInvalidDelay = 4;\nexport const ErrScheduleInvalidTimestamp = 5;\n\nconst retryableErrorCodes = new Set([\n \"KV_3\",\n `KV_${ErrCodeKvIsolationConflict}`,\n `KV_${ErrCodeKvBackendError}`,\n \"QUEUE_4\",\n `QUEUE_${ErrCodeQueueFull}`,\n \"LEASE_1\",\n `LEASE_${ErrCodeLeaseHeld}`,\n \"RPC_1\",\n \"RPC_2\",\n `RPC_${ErrCodeRpcTimeout}`,\n `RPC_${ErrCodeRpcWorkerNotFound}`,\n `RPC_${ErrCodeRpcBackpressure}`,\n `RPC_${ErrCodeRpcRouteNotRegistered}`,\n]);\n\nfunction retryableKey(error: FitzError): string | null {\n const prefix = error.code.split(\"_\")[0];\n if (error.domainCode === undefined) {\n return null;\n }\n return `${prefix}_${error.domainCode}`;\n}\n\nfunction isTransientQueueCommitFailure(error: FitzError): boolean {\n if (!error.code.startsWith(\"QUEUE_\")) {\n return false;\n }\n\n const message = error.message.toLowerCase();\n if (!message.includes(\"failed to commit transaction:\")) {\n return false;\n }\n\n return (\n message.includes(\"writestall(\") ||\n message.includes(\"memory budget exceeded\") ||\n message.includes(\"lease heartbeat reports unhealthy\") ||\n message.includes(\"refusing writes\")\n );\n}\n\nexport function isRetryable(error: unknown): boolean {\n if (!(error instanceof FitzError)) {\n return false;\n }\n\n if (error instanceof TimeoutError || error instanceof TransportError) {\n return true;\n }\n\n const key = retryableKey(error);\n if (key !== null && retryableErrorCodes.has(key)) {\n return true;\n }\n\n return isTransientQueueCommitFailure(error);\n}\n\n/**\n * Error types for Fitz client\n */\n\nexport class FitzError extends Error {\n code: string;\n domainCode?: number;\n context?: Record<string, unknown>;\n\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message);\n this.name = \"FitzError\";\n this.code = code;\n this.domainCode = domainCode;\n this.context = context;\n Object.setPrototypeOf(this, FitzError.prototype);\n }\n\n getContext(): Record<string, unknown> | undefined {\n return this.context;\n }\n}\n\nexport class TransportError extends FitzError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, \"TRANSPORT_ERROR\", undefined, context);\n this.name = \"TransportError\";\n Object.setPrototypeOf(this, TransportError.prototype);\n }\n}\n\nexport class ConnectionError extends FitzError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, \"CONNECTION_ERROR\", undefined, context);\n this.name = \"ConnectionError\";\n Object.setPrototypeOf(this, ConnectionError.prototype);\n }\n}\n\nexport class RequestQueueFullError extends FitzError {\n constructor(message = \"Request queue is full\", context?: Record<string, unknown>) {\n super(message, \"REQUEST_QUEUE_FULL\", undefined, context);\n this.name = \"RequestQueueFullError\";\n Object.setPrototypeOf(this, RequestQueueFullError.prototype);\n }\n}\n\nexport class AuthenticationError extends FitzError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, \"AUTH_ERROR\", undefined, context);\n this.name = \"AuthenticationError\";\n Object.setPrototypeOf(this, AuthenticationError.prototype);\n }\n}\n\nexport class TimeoutError extends FitzError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, \"TIMEOUT\", undefined, context);\n this.name = \"TimeoutError\";\n Object.setPrototypeOf(this, TimeoutError.prototype);\n }\n}\n\nexport class ProtocolError extends FitzError {\n constructor(message: string, domainCode?: number, context?: Record<string, unknown>) {\n super(message, \"PROTOCOL_ERROR\", domainCode, context);\n this.name = \"ProtocolError\";\n Object.setPrototypeOf(this, ProtocolError.prototype);\n }\n}\n\nexport class CodecError extends FitzError {\n constructor(message: string, context?: Record<string, unknown>) {\n super(message, \"CODEC_ERROR\", undefined, context);\n this.name = \"CodecError\";\n Object.setPrototypeOf(this, CodecError.prototype);\n }\n}\n\n// Domain-specific errors\nexport class KvError extends FitzError {\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message, `KV_${code}`, domainCode, context);\n this.name = \"KvError\";\n Object.setPrototypeOf(this, KvError.prototype);\n }\n}\n\nexport class QueueError extends FitzError {\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message, `QUEUE_${code}`, domainCode, context);\n this.name = \"QueueError\";\n Object.setPrototypeOf(this, QueueError.prototype);\n }\n}\n\nexport class NoticeError extends FitzError {\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message, `NOTICE_${code}`, domainCode, context);\n this.name = \"NoticeError\";\n Object.setPrototypeOf(this, NoticeError.prototype);\n }\n}\n\nexport class RpcError extends FitzError {\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message, `RPC_${code}`, domainCode, context);\n this.name = \"RpcError\";\n Object.setPrototypeOf(this, RpcError.prototype);\n }\n}\n\nexport class LeaseError extends FitzError {\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message, `LEASE_${code}`, domainCode, context);\n this.name = \"LeaseError\";\n Object.setPrototypeOf(this, LeaseError.prototype);\n }\n}\n\nexport class StreamError extends FitzError {\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message, `STREAM_${code}`, domainCode, context);\n this.name = \"StreamError\";\n Object.setPrototypeOf(this, StreamError.prototype);\n }\n}\n\nexport class ScheduleError extends FitzError {\n constructor(\n message: string,\n code: string,\n domainCode?: number,\n context?: Record<string, unknown>,\n ) {\n super(message, `SCHEDULE_${code}`, domainCode, context);\n this.name = \"ScheduleError\";\n Object.setPrototypeOf(this, ScheduleError.prototype);\n }\n}\n","/**\n * Frame encoding/decoding for Fitz protocol\n * Format: [MessageType (variable)][Length (u16 BE)][Payload]\n * MessageType: 0-254 = single byte, 255+ = escape 0xFF + u16 BE\n */\n\nimport { CodecError } from \"../core/errors\";\n\nexport interface Frame {\n messageType: number;\n payload: Uint8Array;\n}\n\nconst encodeFrame = (messageType: number, payload: Uint8Array): Uint8Array => {\n if (messageType < 0) {\n throw new CodecError(`Invalid message type: ${messageType}`);\n }\n\n const payloadLength = payload.length;\n const typeSize = messageType <= 254 ? 1 : 3;\n const buffer = new Uint8Array(typeSize + 2 + payloadLength);\n let offset = 0;\n\n if (messageType <= 254) {\n buffer[offset++] = messageType;\n } else {\n buffer[offset++] = 0xff;\n buffer[offset++] = (messageType >> 8) & 0xff;\n buffer[offset++] = messageType & 0xff;\n }\n\n buffer[offset++] = (payloadLength >> 8) & 0xff;\n buffer[offset++] = payloadLength & 0xff;\n buffer.set(payload, offset);\n\n return buffer;\n};\n\nconst decodeFrame = (buffer: Uint8Array): Frame => {\n let offset = 0;\n\n const firstByte = buffer[offset++];\n let messageType: number;\n\n if (firstByte === 0xff) {\n if (offset + 2 > buffer.length) {\n throw new CodecError(\"Frame incomplete: invalid message type header\");\n }\n messageType = (buffer[offset] << 8) | buffer[offset + 1];\n offset += 2;\n } else {\n messageType = firstByte;\n }\n\n if (offset + 2 > buffer.length) {\n throw new CodecError(\"Frame incomplete: missing length header\");\n }\n\n const length = (buffer[offset] << 8) | buffer[offset + 1];\n offset += 2;\n\n const remaining = buffer.length - offset;\n if (remaining < length) {\n throw new CodecError(`Frame incomplete: expected ${length} bytes, got ${remaining}`);\n }\n\n const payload = buffer.subarray(offset, offset + length);\n return { messageType, payload };\n};\n\nconst getMessageTypeSize = (messageType: number): number => {\n if (messageType <= 254) {\n return 1;\n }\n return 3;\n};\n\nconst calculateFrameSize = (messageType: number, payloadLength: number): number => {\n return getMessageTypeSize(messageType) + 2 + payloadLength;\n};\n\nexport const FrameCodec = {\n encodeFrame,\n decodeFrame,\n getMessageTypeSize,\n calculateFrameSize,\n};\n\n/**\n * Helper for streaming frame parsing\n */\nexport type FrameParser = ReturnType<typeof createFrameParser>;\n\nexport function createFrameParser() {\n let buffer: Uint8Array = new Uint8Array(1024);\n let offset = 0;\n let end = 0;\n let messageType = -1;\n let payloadLength = -1;\n let state = 0; // 0=reading_type, 1=reading_length, 2=reading_payload\n\n const ensureCapacity = (needed: number): void => {\n if (buffer.length >= needed) {\n return;\n }\n\n const newCapacity = Math.max(buffer.length * 2, needed, 1024);\n const newBuffer = new Uint8Array(newCapacity);\n if (end > offset) {\n newBuffer.set(buffer.subarray(offset, end));\n end -= offset;\n offset = 0;\n } else {\n end = 0;\n offset = 0;\n }\n buffer = newBuffer;\n };\n\n const appendData = (data: Uint8Array): void => {\n if (data.length === 0) {\n return;\n }\n\n const remaining = end - offset;\n if (remaining === 0) {\n offset = 0;\n end = 0;\n } else if (buffer.length - end < data.length) {\n if (offset > 0) {\n buffer.copyWithin(0, offset, end);\n end = remaining;\n offset = 0;\n }\n }\n\n ensureCapacity(end + data.length);\n buffer.set(data, end);\n end += data.length;\n };\n\n const parseFrames = (data: Uint8Array): Frame[] => {\n appendData(data);\n\n const frames: Frame[] = [];\n\n while (true) {\n if (state === 0) {\n if (offset >= end) break;\n\n const firstByte = buffer[offset];\n if (firstByte === 0xff) {\n if (offset + 3 > end) break;\n messageType = (buffer[offset + 1] << 8) | buffer[offset + 2];\n offset += 3;\n } else {\n messageType = firstByte;\n offset += 1;\n }\n\n state = 1;\n }\n\n if (state === 1) {\n if (offset + 2 > end) break;\n payloadLength = (buffer[offset] << 8) | buffer[offset + 1];\n offset += 2;\n state = 2;\n }\n\n if (state === 2) {\n if (offset + payloadLength > end) break;\n frames.push({\n messageType,\n payload: buffer.slice(offset, offset + payloadLength),\n });\n offset += payloadLength;\n messageType = -1;\n payloadLength = -1;\n state = 0;\n }\n }\n\n if (offset === end) {\n offset = 0;\n end = 0;\n }\n\n return frames;\n };\n\n const hasCompleteFrame = (): boolean => {\n return state === 2 && payloadLength >= 0 && offset + payloadLength <= end;\n };\n\n return {\n parseFrames,\n hasCompleteFrame,\n };\n}\n\ntype FrameParserConstructor = {\n new (): FrameParser;\n};\n\nexport const FrameParser: FrameParserConstructor = function () {\n return createFrameParser();\n} as unknown as FrameParserConstructor;\n","/**\n * Multiplexer for correlating in-flight requests with responses\n * Per CLIENT_SPEC.md and fitz-go/internal/core/connection/mux.go\n *\n * Key Pattern: FIFO ordering per MessageType\n * - Responses matched to requests in order received per MessageType\n * - Matches server's sequential processing model per actor/route\n * - No correlation IDs for most operations (except RPC streaming)\n */\n\nimport { Deferred, ConnectionState, FitzMeter, FitzTracer } from \"../core/types\";\nimport { ConnectionError, TimeoutError } from \"../core/errors\";\nimport { MSG_RPC_REQUEST, MSG_RPC_RESPONSE } from \"../frame/types\";\n\nexport interface MultiplexerObservability {\n meter?: FitzMeter;\n tracer?: FitzTracer;\n}\n\nexport interface PendingRequest {\n deferred: Deferred<Uint8Array>;\n deadline: number;\n timeoutIndex: number;\n queueIndex: number;\n sentAt: number | undefined;\n rejectRequest: (error: Error) => void;\n onComplete?: () => void;\n}\n\n/**\n * Handler for server-pushed frames.\n *\n * Most pushed traffic uses dedicated `*_NOTIFY` message types. RPC is the\n * protocol exception: inbound worker requests and streaming responses arrive on\n * `MSG_RPC_REQUEST` and `MSG_RPC_RESPONSE`, so those frames are only treated as\n * pushes when there is no matching FIFO request waiting on the same type.\n */\nexport type NotificationHandler = (payload: Uint8Array) => void;\n\n/**\n * RPC correlation handler for streamed responses\n * @param correlationId 16-byte correlation ID\n * @param payload Response payload\n */\nexport type RpcCorrelationHandler = (correlationId: Uint8Array, payload: Uint8Array) => void;\n\nexport type Multiplexer = ReturnType<typeof createMultiplexer>;\n\nexport function createMultiplexer(observability: MultiplexerObservability = {}) {\n type PendingQueue = {\n queue: Array<PendingRequest | undefined>;\n head: number;\n tail: number;\n size: number;\n };\n\n const pending: Record<number, PendingQueue | undefined> = {};\n const notificationHandlers: Map<number, NotificationHandler> = new Map();\n const optionalResponses: Map<number, number> = new Map();\n let state: ConnectionState = ConnectionState.Disconnected;\n\n let timeoutEntries: PendingRequest[] = [];\n let timeoutHandle: ReturnType<typeof setTimeout> | undefined;\n let nextTimeoutDeadline = Infinity;\n\n const swapTimeoutEntries = (leftIndex: number, rightIndex: number): void => {\n const left = timeoutEntries[leftIndex];\n const right = timeoutEntries[rightIndex];\n timeoutEntries[leftIndex] = right;\n timeoutEntries[rightIndex] = left;\n left.timeoutIndex = rightIndex;\n right.timeoutIndex = leftIndex;\n };\n\n const heapifyUp = (index: number): void => {\n while (index > 0) {\n const parentIndex = (index - 1) >> 1;\n if (timeoutEntries[index].deadline >= timeoutEntries[parentIndex].deadline) {\n return;\n }\n swapTimeoutEntries(index, parentIndex);\n index = parentIndex;\n }\n };\n\n const heapifyDown = (index: number): void => {\n const length = timeoutEntries.length;\n while (true) {\n const leftIndex = index * 2 + 1;\n const rightIndex = index * 2 + 2;\n let smallest = index;\n\n if (\n leftIndex < length &&\n timeoutEntries[leftIndex].deadline < timeoutEntries[smallest].deadline\n ) {\n smallest = leftIndex;\n }\n if (\n rightIndex < length &&\n timeoutEntries[rightIndex].deadline < timeoutEntries[smallest].deadline\n ) {\n smallest = rightIndex;\n }\n if (smallest === index) {\n return;\n }\n swapTimeoutEntries(index, smallest);\n index = smallest;\n }\n };\n\n const getNextTimeoutDeadline = (): number => {\n return timeoutEntries.length === 0 ? Infinity : timeoutEntries[0].deadline;\n };\n\n const removeTimeoutEntry = (request: PendingRequest): void => {\n const index = request.timeoutIndex;\n if (index < 0 || index >= timeoutEntries.length) {\n return;\n }\n\n const last = timeoutEntries.pop();\n if (!last || index === timeoutEntries.length) {\n request.timeoutIndex = -1;\n return;\n }\n\n timeoutEntries[index] = last;\n last.timeoutIndex = index;\n request.timeoutIndex = -1;\n heapifyDown(index);\n heapifyUp(index);\n };\n\n let requestsInFlight = 0;\n let requestsTotal = 0;\n let responsesTotal = 0;\n let responsesDropped = 0;\n let responsesIgnored = 0;\n\n const meter = observability.meter;\n const tracer = observability.tracer;\n const hasObservability = meter !== undefined || tracer !== undefined;\n\n const getOrCreatePendingQueue = (messageType: number): PendingQueue => {\n const existing = pending[messageType];\n if (existing) {\n return existing;\n }\n\n const created: PendingQueue = {\n queue: Array.from({ length: 128 }) as Array<PendingRequest | undefined>,\n head: 0,\n tail: 0,\n size: 0,\n };\n pending[messageType] = created;\n return created;\n };\n\n const growPendingQueue = (queueEntry: PendingQueue): void => {\n const newCapacity = Math.max(queueEntry.queue.length * 2, 16);\n const newQueue = Array.from({ length: newCapacity }) as Array<PendingRequest | undefined>;\n\n for (let i = 0; i < queueEntry.size; i += 1) {\n const entry = queueEntry.queue[(queueEntry.head + i) % queueEntry.queue.length];\n newQueue[i] = entry;\n if (entry) {\n entry.queueIndex = i;\n }\n }\n\n queueEntry.queue = newQueue;\n queueEntry.head = 0;\n queueEntry.tail = queueEntry.size;\n };\n\n const enqueuePendingRequest = (queueEntry: PendingQueue, request: PendingRequest): void => {\n if (queueEntry.size >= queueEntry.queue.length) {\n growPendingQueue(queueEntry);\n }\n\n request.queueIndex = queueEntry.tail;\n queueEntry.queue[queueEntry.tail] = request;\n queueEntry.tail = (queueEntry.tail + 1) % queueEntry.queue.length;\n queueEntry.size += 1;\n };\n\n const dequeuePendingRequest = (queueEntry: PendingQueue): PendingRequest => {\n while (queueEntry.size > 0) {\n const request = queueEntry.queue[queueEntry.head];\n queueEntry.queue[queueEntry.head] = undefined;\n queueEntry.head = (queueEntry.head + 1) % queueEntry.queue.length;\n if (request) {\n queueEntry.size -= 1;\n return request;\n }\n }\n\n throw new Error(\"Pending queue invariant broken\");\n };\n\n const setConnected = (): void => {\n state = ConnectionState.Authenticated;\n };\n\n const setDisconnected = (): void => {\n state = ConnectionState.Disconnected;\n optionalResponses.clear();\n cancelAll();\n };\n\n const scheduleTimeout = (deadline: number): void => {\n if (timeoutHandle !== undefined && deadline >= nextTimeoutDeadline) {\n return;\n }\n\n if (timeoutHandle !== undefined) {\n clearTimeout(timeoutHandle);\n timeoutHandle = undefined;\n }\n\n nextTimeoutDeadline = deadline;\n const delay = Math.max(0, deadline - Date.now());\n timeoutHandle = setTimeout(handleTimeouts, delay);\n };\n\n const handleTimeouts = (): void => {\n timeoutHandle = undefined;\n nextTimeoutDeadline = Infinity;\n\n const nowMs = Date.now();\n\n while (timeoutEntries.length > 0 && timeoutEntries[0].deadline <= nowMs) {\n const request = timeoutEntries[0];\n removeTimeoutEntry(request);\n request.deadline = -1;\n meter?.counter(\"fitz.request.timeout\", 1);\n request.rejectRequest(\n new TimeoutError(`Request timeout after ${nowMs - (request.sentAt ?? nowMs)}ms`, undefined),\n );\n }\n\n nextTimeoutDeadline = getNextTimeoutDeadline();\n if (nextTimeoutDeadline !== Infinity) {\n const delay = Math.max(0, nextTimeoutDeadline - Date.now());\n timeoutHandle = setTimeout(handleTimeouts, delay);\n }\n };\n\n const registerNotificationHandler = (messageType: number, handler: NotificationHandler): void => {\n notificationHandlers.set(messageType, handler);\n };\n\n const unregisterNotificationHandler = (messageType: number): void => {\n notificationHandlers.delete(messageType);\n };\n\n const expectOptionalResponse = (messageType: number): (() => void) => {\n const nextCount = (optionalResponses.get(messageType) ?? 0) + 1;\n optionalResponses.set(messageType, nextCount);\n\n return () => {\n const currentCount = optionalResponses.get(messageType) ?? 0;\n if (currentCount <= 1) {\n optionalResponses.delete(messageType);\n return;\n }\n optionalResponses.set(messageType, currentCount - 1);\n };\n };\n\n const request = (\n messageType: number,\n frameData: Uint8Array,\n send: (data: Uint8Array) => Promise<void>,\n timeoutMs: number,\n signal?: AbortSignal,\n ): Promise<Uint8Array> => {\n const attributes = hasObservability ? { messageType } : undefined;\n const span = tracer?.startSpan(\"fitz.request\", attributes);\n let spanEnded = false;\n\n if (signal?.aborted) {\n const error = abortError();\n span?.recordException(error);\n span?.end();\n meter?.counter(\"fitz.request.failed\", 1, {\n ...attributes,\n error: error.name,\n });\n return Promise.reject(error);\n }\n\n const deferred = Deferred<Uint8Array>();\n let settled = false;\n let onAbort: (() => void) | undefined;\n\n const nowMs = Date.now();\n let requestEntry: PendingRequest;\n\n const finalize = (): boolean => {\n if (settled) {\n return false;\n }\n\n settled = true;\n removeTimeoutEntry(requestEntry);\n requestEntry.deadline = -1;\n if (signal && onAbort) {\n signal.removeEventListener(\"abort\", onAbort);\n }\n return true;\n };\n\n const failRequest = (error: Error): void => {\n if (!finalize()) {\n return;\n }\n\n unregisterRequest(messageType, requestEntry);\n meter?.counter(\"fitz.request.failed\", 1, {\n ...attributes,\n error: error.name,\n });\n span?.recordException(error);\n if (!spanEnded) {\n span?.end();\n spanEnded = true;\n }\n void deferred.promise.catch(() => undefined);\n deferred.reject(error);\n };\n\n requestEntry = {\n deferred,\n deadline: nowMs + timeoutMs,\n timeoutIndex: timeoutEntries.length,\n sentAt: nowMs,\n queueIndex: -1,\n rejectRequest: (error: Error) => {\n if (!finalize()) {\n return;\n }\n\n removeTimeoutEntry(requestEntry);\n unregisterRequest(messageType, requestEntry);\n meter?.counter(\"fitz.request.failed\", 1, {\n ...attributes,\n error: error.name,\n });\n span?.recordException(error);\n if (!spanEnded) {\n span?.end();\n spanEnded = true;\n }\n void deferred.promise.catch(() => undefined);\n deferred.reject(error);\n },\n onComplete: () => {\n if (!finalize()) {\n return;\n }\n\n const durationMs = Date.now() - requestEntry.sentAt!;\n span?.setAttribute(\"fitz.request.duration_ms\", durationMs);\n meter?.histogram(\"fitz.request.duration\", durationMs, attributes);\n if (!spanEnded) {\n span?.end();\n spanEnded = true;\n }\n },\n };\n\n timeoutEntries.push(requestEntry);\n heapifyUp(requestEntry.timeoutIndex);\n\n if (signal) {\n onAbort = () => {\n failRequest(abortError());\n };\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n\n scheduleTimeout(requestEntry.deadline);\n\n const queue = getOrCreatePendingQueue(messageType);\n enqueuePendingRequest(queue, requestEntry);\n\n requestsInFlight++;\n requestsTotal++;\n meter?.counter(\"fitz.request.started\", 1, attributes);\n meter?.gauge?.(\"fitz.requests.in_flight\", requestsInFlight, attributes);\n\n const sendResult = send(frameData);\n return sendResult.then(\n () => {\n if (state !== ConnectionState.Authenticated) {\n const error = new ConnectionError(\"Connection closed or reset\", { state });\n unregisterRequest(messageType, requestEntry);\n finalize();\n throw error;\n }\n return deferred.promise;\n },\n (err) => {\n const alreadySettled = !finalize();\n if (alreadySettled) {\n if (signal?.aborted) {\n throw abortError();\n }\n throw err;\n }\n\n unregisterRequest(messageType, requestEntry);\n meter?.counter(\"fitz.request.failed\", 1, {\n ...attributes,\n error: err instanceof Error ? err.name : \"unknown\",\n });\n if (!spanEnded) {\n span?.recordException(err);\n span?.end();\n spanEnded = true;\n }\n if (signal?.aborted) {\n throw abortError();\n }\n throw err;\n },\n );\n };\n\n const unregisterRequest = (messageType: number, requestEntry: PendingRequest): void => {\n const queueEntry = pending[messageType];\n if (!queueEntry || queueEntry.size === 0) return;\n\n const index = requestEntry.queueIndex;\n if (index < 0 || index >= queueEntry.queue.length) {\n return;\n }\n\n if (queueEntry.queue[index] !== requestEntry) {\n return;\n }\n\n queueEntry.queue[index] = undefined;\n queueEntry.size -= 1;\n\n if (index === queueEntry.head) {\n while (queueEntry.size > 0 && queueEntry.queue[queueEntry.head] === undefined) {\n queueEntry.head = (queueEntry.head + 1) % queueEntry.queue.length;\n }\n } else {\n const expectedTailIndex =\n queueEntry.tail === 0 ? queueEntry.queue.length - 1 : queueEntry.tail - 1;\n if (index === expectedTailIndex) {\n queueEntry.tail = index;\n }\n }\n\n if (queueEntry.size === 0) {\n delete pending[messageType];\n }\n\n requestsInFlight--;\n meter?.gauge?.(\"fitz.requests.in_flight\", requestsInFlight, {\n messageType,\n });\n };\n\n const dispatch = (messageType: number, payload: Uint8Array): void => {\n const handler = notificationHandlers.get(messageType);\n if (handler && isRpcPushFrame(messageType, payload)) {\n try {\n handler(payload);\n } catch {\n // Best-effort notification dispatch.\n }\n return;\n }\n\n const queueEntry = pending[messageType];\n if (queueEntry && queueEntry.size > 0) {\n const request = dequeuePendingRequest(queueEntry);\n if (queueEntry.size === 0) {\n delete pending[messageType];\n }\n\n request.deadline = -1;\n requestsInFlight--;\n responsesTotal++;\n meter?.counter(\"fitz.response.received\", 1, {\n messageType,\n });\n meter?.gauge?.(\"fitz.requests.in_flight\", requestsInFlight, {\n messageType,\n });\n\n request.deferred.resolve(payload);\n request.onComplete?.();\n return;\n }\n\n if (handler) {\n try {\n handler(payload);\n } catch {\n // Best-effort notification dispatch.\n }\n return;\n }\n\n const optionalCount = optionalResponses.get(messageType) ?? 0;\n if (optionalCount > 0) {\n if (optionalCount === 1) {\n optionalResponses.delete(messageType);\n } else {\n optionalResponses.set(messageType, optionalCount - 1);\n }\n responsesIgnored++;\n meter?.counter(\"fitz.response.ignored\", 1, {\n messageType,\n });\n return;\n }\n\n if (state !== ConnectionState.Authenticated) {\n responsesIgnored++;\n meter?.counter(\"fitz.response.ignored\", 1, {\n messageType,\n state,\n });\n return;\n }\n\n responsesDropped++;\n meter?.counter(\"fitz.response.dropped\", 1, {\n messageType,\n });\n };\n\n const cancelAll = (): void => {\n if (timeoutHandle !== undefined) {\n clearTimeout(timeoutHandle);\n timeoutHandle = undefined;\n }\n timeoutEntries = [];\n\n for (const queueEntry of Object.values(pending)) {\n if (!queueEntry) {\n continue;\n }\n for (let i = 0; i < queueEntry.size; i += 1) {\n const index = (queueEntry.head + i) % queueEntry.queue.length;\n const request = queueEntry.queue[index];\n if (!request) {\n continue;\n }\n void request.deferred.promise.catch(() => undefined);\n void Promise.resolve().then(() =>\n request.deferred.reject(\n new ConnectionError(\"Connection closed or reset\", {\n state,\n }),\n ),\n );\n }\n }\n\n for (const key in pending) {\n delete pending[key];\n }\n\n requestsInFlight = 0;\n meter?.gauge?.(\"fitz.requests.in_flight\", 0);\n };\n\n const getMetrics = () => ({\n requestsInFlight,\n requestsTotal,\n responsesTotal,\n responsesDropped,\n responsesIgnored,\n });\n\n const getInFlightCount = (): number => requestsInFlight;\n\n const hasPending = (): boolean => requestsInFlight > 0;\n\n const getState = (): ConnectionState => state;\n\n return {\n setConnected,\n setDisconnected,\n registerNotificationHandler,\n unregisterNotificationHandler,\n expectOptionalResponse,\n request,\n dispatch,\n cancelAll,\n getMetrics,\n getInFlightCount,\n hasPending,\n getState,\n };\n}\n\ninterface MultiplexerConstructor {\n new (observability?: MultiplexerObservability): Multiplexer;\n}\n\nexport const Multiplexer: MultiplexerConstructor = function (\n observability: MultiplexerObservability = {},\n) {\n return createMultiplexer(observability);\n} as unknown as MultiplexerConstructor;\n\nfunction abortError(): Error {\n const error = new Error(\"The operation was aborted\");\n error.name = \"AbortError\";\n return error;\n}\n\nfunction isRpcPushFrame(messageType: number, payload: Uint8Array): boolean {\n if (messageType === MSG_RPC_REQUEST) {\n return looksLikeRpcInboundRequest(payload);\n }\n\n if (messageType === MSG_RPC_RESPONSE) {\n return looksLikeRpcStreamResponse(payload);\n }\n\n return false;\n}\n\nfunction looksLikeRpcInboundRequest(payload: Uint8Array): boolean {\n let offset = 0;\n const correlationLength = readU32BE(payload, offset);\n if (correlationLength !== 16) {\n return false;\n }\n offset += 4 + correlationLength;\n\n const routeLength = readU32BE(payload, offset);\n if (routeLength === undefined) {\n return false;\n }\n offset += 4 + routeLength;\n\n const replyRouteLength = readU32BE(payload, offset);\n if (replyRouteLength === undefined) {\n return false;\n }\n offset += 4 + replyRouteLength;\n\n const bodyLength = readU32BE(payload, offset);\n if (bodyLength === undefined) {\n return false;\n }\n offset += 4 + bodyLength;\n\n return offset === payload.length;\n}\n\nfunction looksLikeRpcStreamResponse(payload: Uint8Array): boolean {\n let offset = 0;\n const correlationLength = readU32BE(payload, offset);\n if (correlationLength !== 16) {\n return false;\n }\n offset += 4 + correlationLength + 8;\n\n const bodyLength = readU32BE(payload, offset);\n if (bodyLength === undefined) {\n return false;\n }\n offset += 4 + bodyLength;\n\n if (offset >= payload.length) {\n return false;\n }\n\n const streamEnd = payload[offset];\n offset += 1;\n return offset === payload.length && (streamEnd === 0 || streamEnd === 1);\n}\n\nfunction readU32BE(payload: Uint8Array, offset: number): number | undefined {\n if (offset + 4 > payload.length) {\n return undefined;\n }\n\n return (\n ((payload[offset] << 24) |\n (payload[offset + 1] << 16) |\n (payload[offset + 2] << 8) |\n payload[offset + 3]) >>>\n 0\n );\n}\n","import {\n ConnectionError,\n FitzError,\n TimeoutError,\n TransportError,\n isRetryable,\n} from \"../core/errors\";\n\nexport type RetryClass = \"replayable_read\" | \"confirmed_negative_retry\" | \"wait_only\";\nexport type AttemptBoundary = \"pre-send\" | \"post-send\";\nexport type FailureKind = \"transport\" | \"connection\" | \"timeout\" | \"domain\" | \"other\";\n\nexport interface RetryOperation {\n domain: string;\n operation: string;\n retryClass: RetryClass;\n signal?: AbortSignal;\n waitTimeoutMs?: number;\n}\n\nexport interface ResilienceErrorMeta {\n boundary: AttemptBoundary;\n failureKind: FailureKind;\n explicitNegative: boolean;\n}\n\nconst resilienceMetaSymbol = Symbol(\"fitz.resilience.meta\");\n\nexport function attachResilienceMeta<T>(error: T, meta: ResilienceErrorMeta): T {\n if (error && (typeof error === \"object\" || typeof error === \"function\")) {\n Object.defineProperty(error, resilienceMetaSymbol, {\n value: meta,\n configurable: true,\n enumerable: false,\n writable: true,\n });\n }\n\n return error;\n}\n\nexport function getResilienceMeta(error: unknown): ResilienceErrorMeta | undefined {\n if (!error || (typeof error !== \"object\" && typeof error !== \"function\")) {\n return undefined;\n }\n\n return (error as Record<PropertyKey, ResilienceErrorMeta | undefined>)[resilienceMetaSymbol];\n}\n\nexport function classifyFailureKind(error: unknown): FailureKind {\n if (error instanceof TimeoutError) {\n return \"timeout\";\n }\n\n if (error instanceof TransportError) {\n return \"transport\";\n }\n\n if (error instanceof ConnectionError) {\n return \"connection\";\n }\n\n if (error instanceof FitzError) {\n return \"domain\";\n }\n\n return \"other\";\n}\n\nexport function isTransientRetryError(error: unknown): boolean {\n return (\n error instanceof TimeoutError ||\n error instanceof TransportError ||\n error instanceof ConnectionError ||\n isRetryable(error)\n );\n}\n\nexport function shouldRetryOperation(retryClass: RetryClass, error: unknown): boolean {\n switch (retryClass) {\n case \"wait_only\":\n return false;\n case \"replayable_read\":\n return isTransientRetryError(error);\n case \"confirmed_negative_retry\": {\n const meta = getResilienceMeta(error);\n return meta?.explicitNegative === true && meta.boundary === \"post-send\" && isRetryable(error);\n }\n default:\n return false;\n }\n}\n","/**\n * Connection manager for Fitz protocol.\n *\n * CONNECT is a silent-success handshake. A newly opened transport is treated as\n * authenticated only if it remains open for a short settle window after the\n * CONNECT frame is sent.\n */\n\nimport { Transport } from \"../transport/types\";\nimport {\n AsyncHandlerOptions,\n ConnectionState,\n Deferred,\n FitzObservability,\n RetryOptions,\n TokenProvider,\n} from \"../core/types\";\nimport { createScope, Scope } from \"../core/lifecycle\";\nimport { utf8Encoder } from \"../core/buffer\";\nimport { FrameCodec, FrameParser } from \"../frame/codec\";\nimport { MSG_CONNECT } from \"../frame/types\";\nimport {\n AuthenticationError,\n ConnectionError,\n FitzError,\n RequestQueueFullError,\n TransportError,\n} from \"../core/errors\";\nimport { Multiplexer } from \"./multiplexer\";\nimport {\n attachResilienceMeta,\n classifyFailureKind,\n getResilienceMeta,\n RetryOperation,\n shouldRetryOperation,\n} from \"./resilience\";\n\nexport interface ConnectionOptions {\n timeout?: number;\n maxInFlightRequests?: number;\n maxRequestQueueSize?: number;\n reconnect?: {\n enabled?: boolean;\n maxAttempts?: number;\n backoffMs?: number;\n maxBackoffMs?: number;\n };\n retry?: RetryOptions;\n authSettleDelayMs?: number;\n observability?: FitzObservability;\n asyncHandlers?: AsyncHandlerOptions;\n}\n\nexport interface ConnectOptions {\n signal?: AbortSignal;\n}\n\ntype TransportFactory = () => Transport;\ntype ReconnectListener = () => void | Promise<void>;\ntype DisconnectListener = () => void;\n\nconst sleep = (ms: number) => new Promise<void>((resolve) => setTimeout(resolve, ms));\n\nconst sleepWithAbort = async (ms: number, signal?: AbortSignal): Promise<void> => {\n if (signal?.aborted) {\n throw abortError();\n }\n\n if (ms <= 0) {\n return;\n }\n\n await new Promise<void>((resolve, reject) => {\n const timer = setTimeout(() => {\n cleanup();\n resolve();\n }, ms);\n\n const onAbort = () => {\n cleanup();\n reject(abortError());\n };\n\n const cleanup = () => {\n clearTimeout(timer);\n signal?.removeEventListener(\"abort\", onAbort);\n };\n\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n};\n\nfunction createAsyncHandlerDispatcher(\n maxConcurrency: number,\n timeoutMs: number,\n onError: (error: unknown) => void,\n) {\n let activeCount = 0;\n let closed = false;\n const queue: Array<() => void> = [];\n const activeTasks = new Set<Promise<void>>();\n\n const dispatch = (task: () => void | Promise<void>): void => {\n if (closed) {\n return;\n }\n\n const run = () => {\n if (closed) {\n return;\n }\n\n activeCount += 1;\n const activeTask = runTask(task).finally(() => {\n activeTasks.delete(activeTask);\n activeCount -= 1;\n flush();\n });\n activeTasks.add(activeTask);\n void activeTask;\n };\n\n if (activeCount < maxConcurrency) {\n run();\n return;\n }\n\n queue.push(run);\n };\n\n const flush = (): void => {\n if (closed) {\n queue.length = 0;\n return;\n }\n\n if (activeCount >= maxConcurrency) {\n return;\n }\n\n const next = queue.shift();\n next?.();\n };\n\n const runTask = async (task: () => void | Promise<void>): Promise<void> => {\n let reported = false;\n const reportOnce = (error: unknown): void => {\n if (reported) {\n return;\n }\n reported = true;\n onError(error);\n };\n\n const timeoutId = setTimeout(() => {\n reportOnce(new Error(`Async handler timeout after ${timeoutMs}ms`));\n }, timeoutMs);\n\n try {\n await Promise.resolve().then(task);\n } catch (error) {\n reportOnce(error);\n } finally {\n clearTimeout(timeoutId);\n }\n };\n\n const close = (): void => {\n closed = true;\n queue.length = 0;\n };\n\n const drain = async (): Promise<void> => {\n await Promise.allSettled(Array.from(activeTasks));\n };\n\n return {\n dispatch,\n close,\n drain,\n };\n}\n\nfunction createRequestGate(maxConcurrency: number, maxQueueSize: number) {\n let activeCount = 0;\n let closed = false;\n const queue: Array<{\n resolve: (release: () => void) => void;\n reject: (error: Error) => void;\n signal?: AbortSignal;\n onAbort?: () => void;\n }> = [];\n\n const acquire = async (signal?: AbortSignal): Promise<() => void> => {\n if (signal?.aborted) {\n throw abortError();\n }\n\n if (closed) {\n throw connectionClosedError();\n }\n\n return await new Promise<() => void>((resolve, reject) => {\n const grant = () => {\n if (closed) {\n reject(connectionClosedError());\n return;\n }\n\n activeCount += 1;\n resolve(() => release());\n };\n\n const waiter = {\n resolve,\n reject,\n signal,\n onAbort: undefined as (() => void) | undefined,\n };\n\n const cleanup = () => {\n if (signal && waiter.onAbort) {\n signal.removeEventListener(\"abort\", waiter.onAbort);\n }\n };\n\n waiter.onAbort = () => {\n removeWaiter(waiter);\n cleanup();\n reject(abortError());\n };\n\n if (signal) {\n signal.addEventListener(\"abort\", waiter.onAbort, { once: true });\n }\n\n if (activeCount < maxConcurrency) {\n cleanup();\n grant();\n return;\n }\n\n if (queue.length >= maxQueueSize) {\n cleanup();\n reject(new RequestQueueFullError());\n return;\n }\n\n queue.push(waiter);\n });\n };\n\n const close = (): void => {\n if (closed) {\n return;\n }\n\n closed = true;\n const error = connectionClosedError();\n for (const waiter of queue.splice(0)) {\n if (waiter.signal && waiter.onAbort) {\n waiter.signal.removeEventListener(\"abort\", waiter.onAbort);\n }\n waiter.reject(error);\n }\n };\n\n const release = (): void => {\n if (activeCount > 0) {\n activeCount -= 1;\n }\n\n while (!closed && activeCount < maxConcurrency) {\n const waiter = queue.shift();\n if (!waiter) {\n return;\n }\n\n if (waiter.signal?.aborted) {\n if (waiter.signal && waiter.onAbort) {\n waiter.signal.removeEventListener(\"abort\", waiter.onAbort);\n }\n continue;\n }\n\n if (waiter.signal && waiter.onAbort) {\n waiter.signal.removeEventListener(\"abort\", waiter.onAbort);\n }\n\n activeCount += 1;\n waiter.resolve(() => release());\n return;\n }\n };\n\n const removeWaiter = (waiter: {\n resolve: (release: () => void) => void;\n reject: (error: Error) => void;\n signal?: AbortSignal;\n onAbort?: () => void;\n }): void => {\n const index = queue.indexOf(waiter);\n if (index >= 0) {\n queue.splice(index, 1);\n }\n };\n\n return {\n acquire,\n close,\n };\n}\n\nfunction abortError(): Error {\n const error = new Error(\"The operation was aborted\");\n error.name = \"AbortError\";\n return error;\n}\n\nfunction connectionClosedError(): ConnectionError {\n return new ConnectionError(\"Connection closed\", { state: ConnectionState.Closed });\n}\n\nfunction throwIfAborted(signal?: AbortSignal): void {\n if (signal?.aborted) {\n throw abortError();\n }\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\";\n}\n\nconst waitForSharedPromise = async <T>(promise: Promise<T>, signal?: AbortSignal): Promise<T> => {\n if (!signal) {\n return promise;\n }\n\n if (signal.aborted) {\n throw abortError();\n }\n\n return await new Promise<T>((resolve, reject) => {\n let settled = false;\n\n const cleanup = () => {\n signal.removeEventListener(\"abort\", onAbort);\n };\n\n const settle = (callback: () => void) => {\n if (settled) {\n return;\n }\n\n settled = true;\n cleanup();\n callback();\n };\n\n const onAbort = () => {\n settle(() => reject(abortError()));\n };\n\n signal.addEventListener(\"abort\", onAbort, { once: true });\n\n void promise.then(\n (value) => {\n settle(() => resolve(value));\n },\n (error) => {\n settle(() => reject(error));\n },\n );\n });\n};\n\nexport type Connection = ReturnType<typeof createConnection>;\n\nexport function createConnection(\n transportFactory: TransportFactory,\n tokenProvider: TokenProvider,\n options: ConnectionOptions = {},\n) {\n const timeout = options.timeout ?? 30000;\n const authSettleDelayMs = options.authSettleDelayMs ?? 100;\n const reconnectEnabled = options.reconnect?.enabled ?? false;\n const reconnectMaxAttempts = options.reconnect?.maxAttempts ?? Infinity;\n const reconnectBackoffMs = options.reconnect?.backoffMs ?? 250;\n const reconnectMaxBackoffMs = options.reconnect?.maxBackoffMs ?? 5000;\n const retryEnabled = options.retry?.enabled ?? true;\n const retryMaxAttempts = options.retry?.maxAttempts ?? 3;\n const retryBackoffMs = options.retry?.backoffMs ?? 100;\n const retryMaxBackoffMs = options.retry?.maxBackoffMs ?? 1000;\n const maxInFlightRequests = options.maxInFlightRequests ?? 256;\n const maxRequestQueueSize = options.maxRequestQueueSize ?? 1024;\n const observability = options.observability;\n\n let transport: Transport | null = null;\n let state: ConnectionState = ConnectionState.Disconnected;\n let requestGate = createRequestGate(maxInFlightRequests, maxRequestQueueSize);\n const frameParser = new FrameParser();\n const reconnectListeners = new Set<ReconnectListener>();\n const disconnectListeners = new Set<DisconnectListener>();\n let writeChain: Promise<void> = Promise.resolve();\n\n let receiveLoop: Promise<void> | null = null;\n let receiveLoopAbort = false;\n let closeRequested = false;\n let permanentlyClosed = false;\n let connectPromise: Promise<void> | null = null;\n let reconnectPromise: Promise<void> | null = null;\n let reconnectRestoreActive = false;\n let authOutcome: Deferred<void> | null = null;\n let authRejected = false;\n let hasEstablishedSession = false;\n let reconnectExhausted = false;\n let readyWaiterCount = 0;\n const closeAbortController = new AbortController();\n const connectionScope = createScope(\"connection\");\n const readyListeners = new Set<() => void>();\n\n const log = (\n level: \"debug\" | \"info\" | \"warn\" | \"error\",\n event: string,\n fields?: Record<string, unknown>,\n ): void => {\n observability?.logger?.log(level, event, fields);\n };\n\n const describeError = (error: unknown): string => {\n if (error instanceof Error) {\n return error.message;\n }\n return String(error);\n };\n\n const describeErrorFields = (error: unknown): Record<string, unknown> => {\n if (error instanceof FitzError) {\n return {\n errorName: error.name,\n code: error.code,\n domainCode: error.domainCode,\n };\n }\n\n if (error instanceof Error) {\n return {\n errorName: error.name,\n code: (error as Error & { code?: unknown }).code,\n domainCode: (error as Error & { domainCode?: unknown }).domainCode,\n };\n }\n\n return {\n errorName: typeof error,\n code: undefined,\n domainCode: undefined,\n };\n };\n\n const describeConnectionLoss = (error: unknown): string => {\n if (error instanceof Error) {\n return error.message;\n }\n return \"connection closed during CONNECT\";\n };\n\n const handlePossibleTransportFailure = (error: unknown): void => {\n if (closeRequested) {\n return;\n }\n\n if (state !== ConnectionState.Authenticated) {\n return;\n }\n\n const resilienceMeta = getResilienceMeta(error);\n if (resilienceMeta?.boundary === \"pre-send\") {\n return;\n }\n\n if (\n error instanceof TransportError ||\n error instanceof ConnectionError ||\n error instanceof AuthenticationError\n ) {\n void handleConnectionLoss(error);\n }\n };\n\n const multiplexer = new Multiplexer({\n meter: observability?.meter,\n tracer: observability?.tracer,\n });\n\n const asyncHandlerDispatcher = createAsyncHandlerDispatcher(\n options.asyncHandlers?.maxConcurrency ?? Infinity,\n options.asyncHandlers?.timeoutMs ?? timeout,\n (error) => {\n log(\"warn\", \"fitz.connection.handler_failed\", {\n error: describeError(error),\n });\n },\n );\n\n const connect = async (options: ConnectOptions = {}): Promise<void> => {\n if (permanentlyClosed || closeRequested) {\n throw connectionClosedError();\n }\n\n throwIfAborted(options.signal);\n\n if (state === ConnectionState.Authenticated) {\n return;\n }\n\n if (connectPromise) {\n await waitForSharedPromise(connectPromise, options.signal);\n return;\n }\n\n if (\n reconnectPromise ||\n state === ConnectionState.Connecting ||\n state === ConnectionState.Connected ||\n state === ConnectionState.Authenticating ||\n state === ConnectionState.Reconnecting ||\n (state === ConnectionState.Disconnected && canWaitForReconnect())\n ) {\n await waitForReady(options.signal, timeout);\n return;\n }\n\n authRejected = false;\n reconnectExhausted = false;\n\n const sharedConnectPromise = openAndAuthenticate(false, options.signal).finally(() => {\n if (connectPromise === sharedConnectPromise) {\n connectPromise = null;\n }\n });\n connectPromise = sharedConnectPromise;\n\n await sharedConnectPromise;\n };\n\n const close = async (): Promise<void> => {\n if (state === ConnectionState.Closed && !transport) {\n await connectionScope.dispose();\n return;\n }\n\n permanentlyClosed = true;\n closeRequested = true;\n receiveLoopAbort = true;\n closeAbortController.abort();\n asyncHandlerDispatcher.close();\n const scopeDisposePromise = connectionScope.dispose();\n setState(ConnectionState.Closed);\n requestGate.close();\n authOutcome?.reject(new ConnectionError(\"Connection closed\", { state }));\n authOutcome = null;\n multiplexer.setDisconnected();\n emitDisconnect();\n emitLifecycleEvent(\"closed\");\n\n const activeReceiveLoop = receiveLoop;\n receiveLoop = null;\n if (activeReceiveLoop) {\n await Promise.race([activeReceiveLoop.catch(() => undefined), sleep(1000)]);\n }\n\n if (transport) {\n await transport.close();\n transport = null;\n }\n\n transport = null;\n await asyncHandlerDispatcher.drain();\n await scopeDisposePromise;\n };\n\n const waitForRequestReady = async (\n signal?: AbortSignal,\n allowReconnectRestore: boolean = false,\n ): Promise<void> => {\n if (\n allowReconnectRestore &&\n reconnectRestoreActive &&\n state === ConnectionState.Authenticating &&\n !closeRequested &&\n !authRejected &&\n transport\n ) {\n return;\n }\n\n const releaseReadyWaitSlot = acquireReadyWaitSlot();\n try {\n await waitForReady(signal, timeout);\n } finally {\n releaseReadyWaitSlot?.();\n }\n ensureAuthenticated();\n };\n\n const requestInternal = async (\n messageType: number,\n requestPayload: Uint8Array,\n signal?: AbortSignal,\n allowReconnectRestore: boolean = false,\n ): Promise<Uint8Array> => {\n let sendStarted = false;\n await waitForRequestReady(signal, allowReconnectRestore);\n const releaseRequestSlot = await requestGate.acquire(signal);\n const startedAt = Date.now();\n\n try {\n const activeTransport = ensureTransport();\n const frame = FrameCodec.encodeFrame(messageType, requestPayload);\n\n return await multiplexer.request(\n messageType,\n frame,\n (data) => {\n sendStarted = true;\n return sendSerialized(activeTransport, data);\n },\n timeout,\n signal,\n );\n } catch (error) {\n attachResilienceMeta(error, {\n boundary: sendStarted ? \"post-send\" : \"pre-send\",\n failureKind: classifyFailureKind(error),\n explicitNegative: false,\n });\n log(\"error\", \"fitz.connection.request_failed\", {\n operation: \"request\",\n state,\n messageType,\n latencyMs: Date.now() - startedAt,\n ...describeErrorFields(error),\n error: describeError(error),\n });\n handlePossibleTransportFailure(error);\n throw error;\n } finally {\n releaseRequestSlot();\n }\n };\n\n const request = async (\n messageType: number,\n requestPayload: Uint8Array,\n signal?: AbortSignal,\n ): Promise<Uint8Array> => {\n return await requestInternal(messageType, requestPayload, signal);\n };\n\n const requestDuringReconnectRestore = async (\n messageType: number,\n requestPayload: Uint8Array,\n signal?: AbortSignal,\n ): Promise<Uint8Array> => {\n return await requestInternal(messageType, requestPayload, signal, true);\n };\n\n const send = async (\n messageType: number,\n requestPayload: Uint8Array,\n signal?: AbortSignal,\n ): Promise<void> => {\n let sendStarted = false;\n const releaseReadyWaitSlot = acquireReadyWaitSlot();\n try {\n await waitForReady(signal, timeout);\n } finally {\n releaseReadyWaitSlot?.();\n }\n ensureAuthenticated();\n const releaseRequestSlot = await requestGate.acquire(signal);\n const startedAt = Date.now();\n\n try {\n const activeTransport = ensureTransport();\n const frame = FrameCodec.encodeFrame(messageType, requestPayload);\n\n sendStarted = true;\n await sendSerialized(activeTransport, frame);\n } catch (error) {\n attachResilienceMeta(error, {\n boundary: sendStarted ? \"post-send\" : \"pre-send\",\n failureKind: classifyFailureKind(error),\n explicitNegative: false,\n });\n log(\"error\", \"fitz.connection.send_failed\", {\n operation: \"send\",\n state,\n messageType,\n latencyMs: Date.now() - startedAt,\n ...describeErrorFields(error),\n error: describeError(error),\n });\n handlePossibleTransportFailure(error);\n throw error;\n } finally {\n releaseRequestSlot();\n }\n };\n\n const sendFireAndForget = async (\n messageType: number,\n requestPayload: Uint8Array,\n signal?: AbortSignal,\n ): Promise<void> => {\n await send(messageType, requestPayload, signal);\n };\n\n const registerNotificationHandler = (\n messageType: number,\n handler: (payload: Uint8Array) => void,\n ): void => {\n multiplexer.registerNotificationHandler(messageType, handler);\n };\n\n const unregisterNotificationHandler = (messageType: number): void => {\n multiplexer.unregisterNotificationHandler(messageType);\n };\n\n const onReconnect = (listener: ReconnectListener): (() => void) => {\n reconnectListeners.add(listener);\n return () => {\n reconnectListeners.delete(listener);\n };\n };\n\n const onDisconnect = (listener: DisconnectListener): (() => void) => {\n disconnectListeners.add(listener);\n return () => {\n disconnectListeners.delete(listener);\n };\n };\n\n const getMultiplexer = (): Multiplexer => multiplexer;\n\n const getScope = (): Scope => connectionScope;\n\n const dispatchAsyncHandler = (task: () => void | Promise<void>): void => {\n asyncHandlerDispatcher.dispatch(task);\n };\n\n const getState = (): ConnectionState => state;\n\n const isConnected = (): boolean => state === ConnectionState.Authenticated;\n\n const getUrl = (): string => ensureTransport().getUrl();\n\n const canWaitForReconnect = (): boolean => {\n return reconnectEnabled && hasEstablishedSession && !reconnectExhausted && !authRejected;\n };\n\n const readyFailure = (): Error | null => {\n if (state === ConnectionState.Authenticated) {\n return null;\n }\n\n if (closeRequested || state === ConnectionState.Closed) {\n return connectionClosedError();\n }\n\n if (authRejected) {\n return new AuthenticationError(\"Authentication rejected\", { state });\n }\n\n if (\n state === ConnectionState.Connecting ||\n state === ConnectionState.Connected ||\n state === ConnectionState.Authenticating ||\n state === ConnectionState.Reconnecting\n ) {\n return null;\n }\n\n if (state === ConnectionState.Disconnected && canWaitForReconnect()) {\n return null;\n }\n\n return new ConnectionError(`Cannot use connection while state is ${state}`, { state });\n };\n\n const notifyReadyListeners = (): void => {\n for (const listener of readyListeners) {\n listener();\n }\n };\n\n const acquireReadyWaitSlot = (): (() => void) | null => {\n const failure = readyFailure();\n if (state === ConnectionState.Authenticated || failure) {\n return null;\n }\n\n if (readyWaiterCount >= maxRequestQueueSize) {\n throw new RequestQueueFullError();\n }\n\n readyWaiterCount += 1;\n let released = false;\n\n return () => {\n if (released) {\n return;\n }\n\n released = true;\n readyWaiterCount = Math.max(readyWaiterCount - 1, 0);\n };\n };\n\n const waitForReady = async (\n signal?: AbortSignal,\n waitTimeoutMs: number = timeout,\n ): Promise<void> => {\n throwIfAborted(signal);\n const immediateFailure = readyFailure();\n if (!immediateFailure) {\n if (state === ConnectionState.Authenticated) {\n return;\n }\n } else {\n throw immediateFailure;\n }\n\n await new Promise<void>((resolve, reject) => {\n let settled = false;\n let timeoutId: ReturnType<typeof setTimeout> | null = null;\n\n const cleanup = () => {\n readyListeners.delete(onStateChange);\n if (timeoutId) {\n clearTimeout(timeoutId);\n }\n signal?.removeEventListener(\"abort\", onAbort);\n };\n\n const settle = (cb: () => void) => {\n if (settled) {\n return;\n }\n settled = true;\n cleanup();\n cb();\n };\n\n const onAbort = () => {\n settle(() => reject(abortError()));\n };\n\n const onStateChange = () => {\n const failure = readyFailure();\n if (state === ConnectionState.Authenticated) {\n settle(resolve);\n return;\n }\n\n if (failure) {\n settle(() => reject(failure));\n }\n };\n\n readyListeners.add(onStateChange);\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n timeoutId = setTimeout(() => {\n settle(() =>\n reject(\n new ConnectionError(\"Timed out waiting for connection to become ready\", {\n state,\n }),\n ),\n );\n }, waitTimeoutMs);\n\n onStateChange();\n });\n };\n\n const waitUntilReady = async (\n signal?: AbortSignal,\n waitTimeoutMs: number = timeout,\n ): Promise<void> => {\n await waitForReady(signal, waitTimeoutMs);\n };\n\n const shouldWaitForReconnect = (): boolean => {\n return (\n reconnectPromise !== null ||\n state === ConnectionState.Reconnecting ||\n (state === ConnectionState.Disconnected && canWaitForReconnect())\n );\n };\n\n const getRetryDelayMs = (baseDelayMs: number): number => {\n const jitter = Math.floor(Math.random() * baseDelayMs * 0.5);\n return Math.min(Math.max(baseDelayMs + jitter, 1), retryMaxBackoffMs);\n };\n\n const recordRetry = (\n operation: RetryOperation,\n attempt: number,\n delayMs: number,\n error: unknown,\n ): void => {\n const meta = getResilienceMeta(error);\n const fields = {\n domain: operation.domain,\n operation: operation.operation,\n attempt,\n delayMs,\n boundary: meta?.boundary ?? \"unknown\",\n error: describeError(error),\n ...describeErrorFields(error),\n };\n\n log(\"warn\", \"fitz.request.retry\", fields);\n observability?.meter?.counter(\"fitz.request.retry\", 1, {\n domain: operation.domain,\n operation: operation.operation,\n boundary: meta?.boundary ?? \"unknown\",\n });\n };\n\n const recordRetryExhausted = (\n operation: RetryOperation,\n attempt: number,\n error: unknown,\n ): void => {\n const meta = getResilienceMeta(error);\n const fields = {\n domain: operation.domain,\n operation: operation.operation,\n attempt,\n boundary: meta?.boundary ?? \"unknown\",\n error: describeError(error),\n ...describeErrorFields(error),\n };\n\n log(\"warn\", \"fitz.request.retry_exhausted\", fields);\n observability?.meter?.counter(\"fitz.request.retry_exhausted\", 1, {\n domain: operation.domain,\n operation: operation.operation,\n boundary: meta?.boundary ?? \"unknown\",\n });\n };\n\n const executeWithRetry = async <T>(\n operation: RetryOperation,\n task: () => Promise<T>,\n ): Promise<T> => {\n if (!retryEnabled || operation.retryClass === \"wait_only\") {\n return task();\n }\n\n let attempt = 0;\n let delayMs = retryBackoffMs;\n\n while (true) {\n attempt += 1;\n try {\n return await task();\n } catch (error) {\n if (isAbortError(error)) {\n throw error;\n }\n\n const retryable = shouldRetryOperation(operation.retryClass, error);\n if (!retryable) {\n throw error;\n }\n\n if (attempt >= retryMaxAttempts) {\n recordRetryExhausted(operation, attempt, error);\n throw error;\n }\n\n const actualDelayMs = getRetryDelayMs(delayMs);\n recordRetry(operation, attempt, actualDelayMs, error);\n await sleepWithAbort(actualDelayMs, operation.signal);\n delayMs = Math.min(delayMs * 2, retryMaxBackoffMs);\n }\n }\n };\n\n const openAndAuthenticate = async (isReconnect: boolean, signal?: AbortSignal): Promise<void> => {\n throwIfAborted(signal);\n receiveLoopAbort = false;\n frameParser.parseFrames(new Uint8Array(0));\n requestGate = createRequestGate(maxInFlightRequests, maxRequestQueueSize);\n const activeTransport = transportFactory();\n transport = activeTransport;\n setState(isReconnect ? ConnectionState.Reconnecting : ConnectionState.Connecting);\n emitLifecycleEvent(isReconnect ? \"reconnect_start\" : \"connect_start\");\n\n await activeTransport.connect();\n if (closeRequested) {\n await activeTransport.close().catch(() => undefined);\n if (transport === activeTransport) {\n transport = null;\n }\n throw connectionClosedError();\n }\n throwIfAborted(signal);\n receiveLoop = startReceiveLoop();\n\n setState(ConnectionState.Connected);\n setState(ConnectionState.Authenticating);\n emitLifecycleEvent(\"auth_start\");\n authOutcome = new Deferred<void>();\n\n try {\n await sendConnect();\n if (closeRequested) {\n throw connectionClosedError();\n }\n throwIfAborted(signal);\n await Promise.race([authOutcome.promise, sleep(authSettleDelayMs)]);\n if (closeRequested) {\n throw connectionClosedError();\n }\n throwIfAborted(signal);\n authOutcome?.resolve();\n authOutcome = null;\n if (isReconnect) {\n multiplexer.setConnected();\n reconnectRestoreActive = true;\n try {\n await restoreReconnectState();\n if (closeRequested) {\n throw connectionClosedError();\n }\n } finally {\n reconnectRestoreActive = false;\n }\n }\n hasEstablishedSession = true;\n reconnectExhausted = false;\n setState(ConnectionState.Authenticated);\n if (!isReconnect) {\n multiplexer.setConnected();\n }\n emitLifecycleEvent(isReconnect ? \"reconnect_succeeded\" : \"connect_succeeded\");\n } catch (error) {\n authOutcome = null;\n reconnectRestoreActive = false;\n multiplexer.setDisconnected();\n emitDisconnect();\n if (activeTransport) {\n await activeTransport.close().catch(() => undefined);\n }\n if (transport === activeTransport) {\n transport = null;\n }\n const rejectedAuth = error instanceof AuthenticationError;\n authRejected = rejectedAuth;\n if (closeRequested) {\n setState(ConnectionState.Closed);\n } else {\n setState(rejectedAuth ? ConnectionState.Closed : ConnectionState.Disconnected);\n }\n emitLifecycleEvent(isReconnect ? \"reconnect_failed\" : \"connect_failed\", error);\n if (isAbortError(error)) {\n throw abortError();\n }\n throw error;\n }\n };\n\n const sendConnect = async (): Promise<void> => {\n const token = await tokenProvider();\n const frame = FrameCodec.encodeFrame(MSG_CONNECT, utf8Encoder.encode(token));\n await ensureTransport().send(frame);\n };\n\n const startReceiveLoop = async (): Promise<void> => {\n while (!receiveLoopAbort && !closeRequested) {\n try {\n const activeTransport = ensureTransport();\n const data = await activeTransport.receive();\n const frames = frameParser.parseFrames(data);\n\n for (const frame of frames) {\n multiplexer.dispatch(frame.messageType, frame.payload);\n }\n } catch (error) {\n if (receiveLoopAbort || closeRequested) {\n return;\n }\n\n await handleConnectionLoss(error);\n return;\n }\n }\n };\n\n const handleConnectionLoss = async (error: unknown): Promise<void> => {\n multiplexer.setDisconnected();\n requestGate.close();\n emitDisconnect();\n log(\"warn\", \"fitz.connection.lost\", {\n error: describeError(error),\n state,\n });\n\n if (state === ConnectionState.Authenticating && authOutcome) {\n authRejected = true;\n authOutcome.reject(\n new AuthenticationError(describeConnectionLoss(error), {\n state,\n }),\n );\n }\n\n if (closeRequested) {\n setState(ConnectionState.Closed);\n return;\n }\n\n if (authRejected) {\n setState(ConnectionState.Closed);\n emitLifecycleEvent(\"auth_rejected\", error);\n return;\n }\n\n reconnectExhausted = false;\n setState(ConnectionState.Disconnected);\n emitLifecycleEvent(\"connection_lost\", error);\n\n if (!reconnectEnabled) {\n return;\n }\n\n if (!reconnectPromise) {\n reconnectPromise = reconnectLoop().finally(() => {\n reconnectPromise = null;\n });\n }\n\n await reconnectPromise;\n };\n\n const getReconnectDelayMs = (baseDelayMs: number): number => {\n const jitter = Math.floor(Math.random() * baseDelayMs * 0.5);\n return Math.min(Math.max(baseDelayMs + jitter, 1), reconnectMaxBackoffMs);\n };\n\n const reconnectLoop = async (): Promise<void> => {\n let attempts = 0;\n let delayMs = reconnectBackoffMs;\n\n while (!closeRequested && attempts < reconnectMaxAttempts) {\n attempts += 1;\n setState(ConnectionState.Reconnecting);\n emitLifecycleEvent(\"reconnect_scheduled\", undefined, attempts);\n\n const actualDelayMs = getReconnectDelayMs(delayMs);\n try {\n await sleepWithAbort(actualDelayMs, closeAbortController.signal);\n if (closeRequested) {\n return;\n }\n await openAndAuthenticate(true);\n return;\n } catch (error) {\n if (closeRequested) {\n return;\n }\n if (isAbortError(error)) {\n return;\n }\n log(\"warn\", \"fitz.connection.reconnect_retry\", {\n attempts,\n delayMs: actualDelayMs,\n baseDelayMs: delayMs,\n error: describeError(error),\n });\n delayMs = Math.min(delayMs * 2, reconnectMaxBackoffMs);\n }\n }\n\n if (closeRequested) {\n setState(ConnectionState.Closed);\n return;\n }\n\n reconnectExhausted = true;\n setState(ConnectionState.Disconnected);\n emitLifecycleEvent(\"reconnect_exhausted\", undefined, attempts);\n };\n\n const restoreReconnectState = async (): Promise<void> => {\n for (const listener of reconnectListeners) {\n try {\n await listener();\n } catch (error) {\n log(\"warn\", \"fitz.connection.reconnect_restore_failed\", {\n error: describeError(error),\n });\n emitLifecycleEvent(\"reconnect_restore_failed\", error);\n }\n }\n };\n\n const ensureTransport = (): Transport => {\n if (!transport) {\n throw new ConnectionError(\"No active transport\", { state });\n }\n return transport;\n };\n\n const ensureAuthenticated = (): void => {\n if (closeRequested || state !== ConnectionState.Authenticated) {\n throw new ConnectionError(`Cannot use connection while state is ${state}`, {\n state,\n });\n }\n };\n\n const setState = (newState: ConnectionState): void => {\n state = newState;\n notifyReadyListeners();\n };\n\n const sendSerialized = async (transport: Transport, data: Uint8Array): Promise<void> => {\n const prior = writeChain;\n let release!: () => void;\n writeChain = new Promise<void>((resolve) => {\n release = resolve;\n });\n\n await prior;\n try {\n await transport.send(data);\n } finally {\n release();\n }\n };\n\n const emitLifecycleEvent = (event: string, error?: unknown, attempt?: number): void => {\n const payload = {\n event,\n state,\n transport: transport?.constructor.name,\n url: transport?.getUrl(),\n attempt,\n error: error ? describeError(error) : undefined,\n };\n\n observability?.onLifecycleEvent?.(payload);\n log(\"info\", `fitz.connection.${event}`, payload);\n observability?.meter?.counter(\"fitz.connection.lifecycle\", 1, {\n event,\n state,\n });\n };\n\n const emitDisconnect = (): void => {\n for (const listener of disconnectListeners) {\n try {\n listener();\n } catch {\n // Best-effort disconnect fanout.\n }\n }\n };\n\n return {\n connect,\n close,\n request,\n requestDuringReconnectRestore,\n send,\n sendFireAndForget,\n registerNotificationHandler,\n unregisterNotificationHandler,\n onReconnect,\n onDisconnect,\n getMultiplexer,\n dispatchAsyncHandler,\n executeWithRetry,\n waitUntilReady,\n shouldWaitForReconnect,\n getScope,\n getState,\n isConnected,\n getUrl,\n };\n}\n\ninterface ConnectionConstructor {\n new (\n transportFactory: TransportFactory,\n tokenProvider: TokenProvider,\n options?: ConnectionOptions,\n ): Connection;\n (\n transportFactory: TransportFactory,\n tokenProvider: TokenProvider,\n options?: ConnectionOptions,\n ): Connection;\n prototype: any;\n}\n\nexport const Connection: ConnectionConstructor = function (\n transportFactory: TransportFactory,\n tokenProvider: TokenProvider,\n options: ConnectionOptions = {},\n) {\n const connection = createConnection(transportFactory, tokenProvider, options);\n Object.setPrototypeOf(connection, Connection.prototype);\n return connection;\n} as unknown as ConnectionConstructor;\n","/**\n * WebSocket transport implementation for Node.js and browser\n */\n\nimport { Transport, TransportOptions } from \"./types\";\nimport { TransportError, TimeoutError } from \"../core/errors\";\n\ntype NodeLikeProcess = {\n versions?: {\n node?: string;\n };\n};\n\ntype WebSocketConstructor = new (url: string) => WebSocketLike;\ntype WebSocketMessageEvent = {\n data: ArrayBuffer | Uint8Array | Blob;\n};\ntype WebSocketLike = {\n binaryType: string;\n onopen: (() => void) | null;\n onmessage: ((event: WebSocketMessageEvent) => void) | null;\n onerror: ((event: { message?: string }) => void) | null;\n onclose: (() => void) | null;\n send(data: Uint8Array, callback?: (err?: Error) => void): void;\n close(code?: number, reason?: string): void;\n terminate?(): void;\n};\n\nlet cachedWebSocketConstructor: WebSocketConstructor | null = null;\n\nconst isNodeEnv = (): boolean => {\n try {\n const candidate = globalThis as typeof globalThis & {\n process?: NodeLikeProcess;\n };\n return (\n typeof candidate.process !== \"undefined\" &&\n typeof candidate.process?.versions?.node === \"string\"\n );\n } catch {\n return false;\n }\n};\n\nfunction getWebSocketConstructor(): WebSocketConstructor {\n if (cachedWebSocketConstructor) {\n return cachedWebSocketConstructor;\n }\n\n if (isNodeEnv()) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n cachedWebSocketConstructor = require(\"ws\") as WebSocketConstructor;\n return cachedWebSocketConstructor;\n } catch {\n throw new TransportError(\"ws package is required for Node.js. Install with: npm install ws\");\n }\n }\n\n const browserWebSocket = globalThis.WebSocket as unknown as WebSocketConstructor | undefined;\n if (!browserWebSocket) {\n throw new TransportError(\"WebSocket is not available in this environment\");\n }\n\n cachedWebSocketConstructor = browserWebSocket;\n return cachedWebSocketConstructor;\n}\n\nexport function createWebSocketTransport(url: string, options: TransportOptions = {}): Transport {\n let ws: WebSocketLike | null = null;\n let connected = false;\n const receiveQueue: Uint8Array[] = [];\n let receiverResolve: ((data: Uint8Array | null) => void) | null = null;\n const timeout = options.timeout ?? 30000;\n const maxFrameSize = options.maxFrameSize ?? 65535;\n\n const enqueueMessage = (data: Uint8Array) => {\n if (receiverResolve) {\n receiverResolve(data);\n receiverResolve = null;\n } else {\n receiveQueue.push(data);\n }\n };\n\n const connect = async (): Promise<void> => {\n return new Promise((resolve, reject) => {\n try {\n let wsUrl = url;\n if (!wsUrl.startsWith(\"ws://\") && !wsUrl.startsWith(\"wss://\")) {\n if (wsUrl.startsWith(\"https://\")) {\n wsUrl = wsUrl.replace(\"https://\", \"wss://\");\n } else if (wsUrl.startsWith(\"http://\")) {\n wsUrl = wsUrl.replace(\"http://\", \"ws://\");\n } else {\n wsUrl = `ws://${wsUrl}`;\n }\n }\n\n ws = new (getWebSocketConstructor())(wsUrl);\n ws.binaryType = \"arraybuffer\";\n\n const connectTimeout = setTimeout(() => {\n ws?.close?.();\n reject(new TimeoutError(`WebSocket connection timeout after ${timeout}ms`));\n }, timeout);\n\n ws.onopen = () => {\n clearTimeout(connectTimeout);\n connected = true;\n resolve();\n };\n\n ws.onmessage = (event: WebSocketMessageEvent) => {\n let data: Uint8Array;\n if (event.data instanceof ArrayBuffer) {\n data = new Uint8Array(event.data);\n } else if (event.data instanceof Uint8Array) {\n data = event.data;\n } else {\n if (event.data instanceof Blob) {\n void event.data.arrayBuffer().then((ab: ArrayBuffer) => {\n enqueueMessage(new Uint8Array(ab));\n });\n return;\n }\n return;\n }\n if (data.length > maxFrameSize) {\n ws?.close?.(1009, \"Frame too large\");\n return;\n }\n enqueueMessage(data);\n };\n\n ws.onerror = (event: { message?: string }) => {\n clearTimeout(connectTimeout);\n const error = new TransportError(`WebSocket error: ${event.message || \"unknown error\"}`);\n reject(error);\n };\n\n ws.onclose = () => {\n connected = false;\n if (receiverResolve) {\n receiverResolve(null);\n }\n };\n } catch (err) {\n reject(\n new TransportError(\n `Failed to create WebSocket: ${err instanceof Error ? err.message : String(err)}`,\n ),\n );\n }\n });\n };\n\n const send = async (data: Uint8Array): Promise<void> => {\n if (!connected) {\n throw new TransportError(\"WebSocket is not connected\");\n }\n\n return new Promise((resolve, reject) => {\n try {\n const timeoutId = setTimeout(() => {\n reject(new TimeoutError(`WebSocket send timeout after ${timeout}ms`));\n }, timeout);\n\n ws?.send(data, (err?: Error) => {\n clearTimeout(timeoutId);\n if (err) {\n reject(new TransportError(`WebSocket send failed: ${err.message}`));\n } else {\n resolve();\n }\n });\n } catch (err) {\n reject(\n new TransportError(\n `WebSocket send error: ${err instanceof Error ? err.message : String(err)}`,\n ),\n );\n }\n });\n };\n\n const receive = async (): Promise<Uint8Array> => {\n if (receiveQueue.length > 0) {\n const message = receiveQueue.shift();\n if (!message) {\n throw new TransportError(\"WebSocket receive queue was unexpectedly empty\");\n }\n return message;\n }\n\n if (!connected) {\n throw new TransportError(\"Connection closed\");\n }\n\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n receiverResolve = null;\n reject(new TimeoutError(`WebSocket receive timeout after ${timeout}ms`));\n }, timeout);\n\n receiverResolve = (data: Uint8Array | null) => {\n clearTimeout(timeoutId);\n receiverResolve = null;\n if (data === null) {\n reject(new TransportError(\"Connection closed\"));\n return;\n }\n resolve(data);\n };\n });\n };\n\n const close = async (): Promise<void> => {\n if (ws) {\n const activeWs = ws;\n return new Promise<void>((resolve) => {\n const timeoutId = setTimeout(() => {\n activeWs.terminate?.();\n connected = false;\n resolve();\n }, 5000);\n\n activeWs.onclose = () => {\n clearTimeout(timeoutId);\n connected = false;\n resolve();\n };\n\n activeWs.close(1000, \"Normal closure\");\n });\n }\n\n connected = false;\n };\n\n const getUrl = (): string => url;\n const isConnected = (): boolean => connected;\n\n return {\n connect,\n send,\n receive,\n close,\n getUrl,\n isConnected,\n };\n}\n","/**\n * TCP transport implementation (Node.js only)\n */\n\nimport { Transport, TransportOptions } from \"./types\";\nimport { TransportError, TimeoutError } from \"../core/errors\";\n\ntype NodeLikeProcess = {\n versions?: {\n node?: string;\n };\n};\n\ntype NetModule = {\n createConnection(options: { host: string; port: number; timeout: number }): TcpSocket;\n};\n\ntype TcpSocket = {\n on(event: \"connect\", listener: () => void): void;\n on(event: \"data\", listener: (chunk: Uint8Array | Buffer) => void): void;\n on(event: \"error\", listener: (err: Error) => void): void;\n on(event: \"close\", listener: () => void): void;\n on(event: \"timeout\", listener: () => void): void;\n write(data: Uint8Array, callback: (err?: Error | null) => void): void;\n setNoDelay(noDelay?: boolean): void;\n setTimeout(timeout: number): void;\n end(): void;\n destroy(error?: Error): void;\n};\n\nconst isNode = (): boolean => {\n try {\n const candidate = globalThis as typeof globalThis & {\n process?: NodeLikeProcess;\n };\n return (\n typeof candidate.process !== \"undefined\" &&\n typeof candidate.process?.versions?.node === \"string\"\n );\n } catch {\n return false;\n }\n};\n\nlet netModule: NetModule | undefined;\nif (isNode()) {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n netModule = require(\"net\") as NetModule;\n}\n\nexport function createTcpTransport(url: string, options: TransportOptions = {}): Transport {\n if (!isNode()) {\n throw new Error(\"TCP transport is only available in Node.js\");\n }\n\n let socket: TcpSocket | null = null;\n let connected = false;\n const receiveQueue: Uint8Array[] = [];\n let receiverResolve: ((data: Uint8Array) => void) | null = null;\n const timeout = options.timeout ?? 30000;\n const maxFrameSize = options.maxFrameSize ?? 65535;\n let lengthBuffer = new Uint8Array(4);\n let lengthOffset = 0;\n let currentMessageLength: number | null = null;\n let messageBuffer: Uint8Array | null = null;\n let messageOffset = 0;\n\n const urlObj = new URL(url.startsWith(\"tcp://\") ? url : `tcp://${url}`);\n const host = urlObj.hostname || \"localhost\";\n const port = parseInt(urlObj.port || \"4090\", 10);\n\n const handleData = (chunk: Uint8Array) => {\n let offset = 0;\n\n while (offset < chunk.length) {\n if (currentMessageLength === null) {\n const needed = 4 - lengthOffset;\n const available = chunk.length - offset;\n const toCopy = Math.min(needed, available);\n\n lengthBuffer.set(chunk.slice(offset, offset + toCopy), lengthOffset);\n lengthOffset += toCopy;\n offset += toCopy;\n\n if (lengthOffset === 4) {\n const lengthView = new DataView(lengthBuffer.buffer);\n currentMessageLength = lengthView.getUint32(0, false);\n if (currentMessageLength > maxFrameSize) {\n socket?.destroy(\n new Error(\n `TCP frame length ${currentMessageLength} exceeds max frame size ${maxFrameSize}`,\n ),\n );\n currentMessageLength = null;\n lengthOffset = 0;\n return;\n }\n messageBuffer = new Uint8Array(currentMessageLength);\n messageOffset = 0;\n }\n }\n\n if (currentMessageLength !== null && messageBuffer !== null) {\n const needed = currentMessageLength - messageOffset;\n const available = chunk.length - offset;\n const toCopy = Math.min(needed, available);\n\n messageBuffer.set(chunk.slice(offset, offset + toCopy), messageOffset);\n messageOffset += toCopy;\n offset += toCopy;\n\n if (messageOffset === currentMessageLength) {\n enqueueMessage(messageBuffer);\n currentMessageLength = null;\n lengthOffset = 0;\n messageBuffer = null;\n messageOffset = 0;\n }\n }\n }\n };\n\n const enqueueMessage = (data: Uint8Array) => {\n if (receiverResolve) {\n receiverResolve(data);\n receiverResolve = null;\n } else {\n receiveQueue.push(data);\n }\n };\n\n const connect = async (): Promise<void> => {\n return new Promise((resolve, reject) => {\n try {\n if (!netModule) {\n reject(new TransportError(\"TCP transport module unavailable\"));\n return;\n }\n\n socket = netModule.createConnection({\n host,\n port,\n timeout,\n });\n\n const connectTimeout = setTimeout(() => {\n socket?.destroy();\n reject(new TimeoutError(`TCP connection timeout after ${timeout}ms`));\n }, timeout);\n\n const activeSocket = socket;\n\n activeSocket.on(\"connect\", () => {\n clearTimeout(connectTimeout);\n connected = true;\n activeSocket.setNoDelay(true);\n activeSocket.setTimeout(timeout);\n resolve();\n });\n\n activeSocket.on(\"data\", (chunk: Uint8Array | Buffer) => {\n handleData(chunk instanceof Uint8Array ? chunk : new Uint8Array(chunk));\n });\n\n activeSocket.on(\"error\", (err: Error) => {\n clearTimeout(connectTimeout);\n connected = false;\n const error = new TransportError(`TCP error: ${err.message || \"unknown error\"}`);\n if (receiverResolve) {\n receiverResolve(new Uint8Array(0));\n }\n reject(error);\n });\n\n activeSocket.on(\"close\", () => {\n connected = false;\n if (receiverResolve) {\n receiverResolve(new Uint8Array(0));\n }\n });\n\n activeSocket.on(\"timeout\", () => {\n activeSocket.destroy();\n connected = false;\n });\n } catch (err) {\n reject(\n new TransportError(\n `Failed to create TCP socket: ${err instanceof Error ? err.message : String(err)}`,\n ),\n );\n }\n });\n };\n\n const send = async (data: Uint8Array): Promise<void> => {\n if (!connected) {\n throw new TransportError(\"TCP socket is not connected\");\n }\n\n return new Promise((resolve, reject) => {\n const lengthBuffer = new Uint8Array(4);\n const lengthView = new DataView(lengthBuffer.buffer);\n lengthView.setUint32(0, data.length, false);\n\n const fullMessage = new Uint8Array(lengthBuffer.length + data.length);\n fullMessage.set(lengthBuffer, 0);\n fullMessage.set(data, lengthBuffer.length);\n\n const timeoutId = setTimeout(() => {\n reject(new TimeoutError(`TCP send timeout after ${timeout}ms`));\n }, timeout);\n\n socket?.write(fullMessage, (err?: Error | null) => {\n clearTimeout(timeoutId);\n if (err) {\n reject(new TransportError(`TCP send failed: ${err.message}`));\n } else {\n resolve();\n }\n });\n });\n };\n\n const receive = async (): Promise<Uint8Array> => {\n if (receiveQueue.length > 0) {\n const message = receiveQueue.shift();\n if (!message) {\n throw new TransportError(\"TCP receive queue was unexpectedly empty\");\n }\n return message;\n }\n\n return new Promise((resolve, reject) => {\n const timeoutId = setTimeout(() => {\n receiverResolve = null;\n reject(new TimeoutError(`TCP receive timeout after ${timeout}ms`));\n }, timeout);\n\n receiverResolve = (data: Uint8Array) => {\n clearTimeout(timeoutId);\n receiverResolve = null;\n if (data.length === 0) {\n reject(new TransportError(\"Connection closed\"));\n } else {\n resolve(data);\n }\n };\n });\n };\n\n const close = async (): Promise<void> => {\n if (socket) {\n const activeSocket = socket;\n return new Promise<void>((resolve) => {\n const timeoutId = setTimeout(() => {\n activeSocket.destroy();\n connected = false;\n resolve();\n }, 5000);\n\n activeSocket.on(\"close\", () => {\n clearTimeout(timeoutId);\n connected = false;\n resolve();\n });\n\n activeSocket.end();\n });\n }\n\n connected = false;\n };\n\n const getUrl = (): string => url;\n const isConnected = (): boolean => connected;\n\n return {\n connect,\n send,\n receive,\n close,\n getUrl,\n isConnected,\n };\n}\n","/**\n * Transport factory to create appropriate transport based on URL\n */\n\nimport { Transport, TransportOptions } from \"./types\";\nimport { createWebSocketTransport } from \"./websocket\";\nimport { createTcpTransport } from \"./tcp\";\nimport { TransportError } from \"../core/errors\";\n\ntype NodeLikeProcess = {\n versions?: {\n node?: string;\n };\n};\n\nconst isNode = (): boolean => {\n try {\n const candidate = globalThis as typeof globalThis & {\n process?: NodeLikeProcess;\n };\n return (\n typeof candidate.process !== \"undefined\" &&\n typeof candidate.process?.versions?.node === \"string\"\n );\n } catch {\n return false;\n }\n};\n\nexport function createTransport(\n url: string,\n transportType: \"ws\" | \"tcp\" | \"auto\" = \"auto\",\n options: TransportOptions = {},\n): Transport {\n if (transportType === \"auto\") {\n // Detect from URL\n if (url.startsWith(\"ws://\") || url.startsWith(\"wss://\")) {\n return createWebSocketTransport(url, options);\n }\n if (url.startsWith(\"tcp://\")) {\n if (!isNode()) {\n throw new TransportError(\n \"TCP transport requires Node.js. Use WebSocket (ws://) for browser\",\n );\n }\n return createTcpTransport(url, options);\n }\n if (url.startsWith(\"http://\") || url.startsWith(\"https://\")) {\n // Convert HTTP to WebSocket\n const wsUrl = url.replace(/^https?:\\/\\//, (match) => {\n return match === \"https://\" ? \"wss://\" : \"ws://\";\n });\n return createWebSocketTransport(wsUrl, options);\n }\n\n // Default to WebSocket\n return createWebSocketTransport(url, options);\n }\n\n if (transportType === \"ws\") {\n return createWebSocketTransport(url, options);\n }\n\n if (transportType === \"tcp\") {\n if (!isNode()) {\n throw new TransportError(\"TCP transport requires Node.js. Use WebSocket (ws://) for browser\");\n }\n return createTcpTransport(url, options);\n }\n\n throw new TransportError(\"Unknown transport type\");\n}\n","/**\n * Shared utilities for domain clients\n */\n\nimport { Connection } from \"../client/connection\";\nimport type { RetryOperation } from \"../client/resilience\";\n\ntype ResilientConnection = Connection & {\n executeWithRetry?: <T>(operation: RetryOperation, task: () => Promise<T>) => Promise<T>;\n requestDuringReconnectRestore?: (\n messageType: number,\n payload: Uint8Array,\n signal?: AbortSignal,\n ) => Promise<Uint8Array>;\n};\n\nexport function createDomainClient(connection: Connection) {\n const requestFrame = async (\n messageType: number,\n payload: Uint8Array,\n signal?: AbortSignal,\n ): Promise<Uint8Array> => connection.request(messageType, payload, signal);\n\n const requestReconnectFrame = async (\n messageType: number,\n payload: Uint8Array,\n signal?: AbortSignal,\n ): Promise<Uint8Array> => {\n const resilientConnection = connection as ResilientConnection;\n if (typeof resilientConnection.requestDuringReconnectRestore === \"function\") {\n return await resilientConnection.requestDuringReconnectRestore(messageType, payload, signal);\n }\n\n return await connection.request(messageType, payload, signal);\n };\n\n const sendFrame = async (messageType: number, payload: Uint8Array): Promise<void> =>\n connection.send(messageType, payload);\n\n const runWithRetry = async <T>(operation: RetryOperation, task: () => Promise<T>): Promise<T> => {\n const resilientConnection = connection as ResilientConnection;\n if (typeof resilientConnection.executeWithRetry === \"function\") {\n return resilientConnection.executeWithRetry(operation, task);\n }\n\n return task();\n };\n\n return {\n connection,\n requestFrame,\n requestReconnectFrame,\n sendFrame,\n runWithRetry,\n };\n}\n","/**\n * KV domain codec.\n */\n\nimport { BufferWriter, BufferReader } from \"../../core/buffer\";\nimport { CodecError } from \"../../core/errors\";\nimport {\n KvBeginResponse,\n KvGetResponse,\n KvScanOptions,\n KvScanResponse,\n KvStatusResponse,\n TxMode,\n DurabilityMode,\n} from \"./types\";\n\nexport const KvCodec = {\n encodeBegin(route: string, mode: TxMode, durability: DurabilityMode): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeRoute(route);\n writer.writeU8(mode === \"ReadWrite\" ? 1 : 0);\n writer.writeU8(this.encodeDurability(durability));\n return writer.getBufferView();\n },\n\n decodeBeginResponse(payload: Uint8Array): KvBeginResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n const txId = reader.isEOF() ? undefined : reader.readU64BE();\n return { status, txId };\n },\n\n encodePut(txId: bigint, route: string, key: Uint8Array, value: Uint8Array): Uint8Array {\n const writer = new BufferWriter(512);\n writer.writeU64BE(txId);\n writer.writeRoute(route);\n writer.writeU32BE(key.length);\n writer.writeBytes(key);\n writer.writeU32BE(value.length);\n writer.writeBytes(value);\n return writer.getBufferView();\n },\n\n encodeInsert(txId: bigint, route: string, key: Uint8Array, value: Uint8Array): Uint8Array {\n return this.encodePut(txId, route, key, value);\n },\n\n decodeStatusResponse(payload: Uint8Array): KvStatusResponse {\n const reader = new BufferReader(payload);\n return { status: reader.readU8() };\n },\n\n decodePutResponse(payload: Uint8Array): KvStatusResponse {\n return this.decodeStatusResponse(payload);\n },\n\n encodeGet(txId: bigint, route: string, key: Uint8Array): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeU64BE(txId);\n writer.writeRoute(route);\n writer.writeU32BE(key.length);\n writer.writeBytes(key);\n return writer.getBufferView();\n },\n\n decodeGetResponse(payload: Uint8Array): KvGetResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n const found = !reader.isEOF() && reader.readU8() === 1;\n\n if (!found || reader.isEOF()) {\n return { status, found: false };\n }\n\n const valueLen = reader.readU32BE();\n\n return {\n status,\n found: true,\n value: reader.readBytes(valueLen),\n };\n },\n\n encodeDelete(txId: bigint, route: string, key: Uint8Array): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeU64BE(txId);\n writer.writeRoute(route);\n writer.writeU32BE(key.length);\n writer.writeBytes(key);\n return writer.getBufferView();\n },\n\n encodeDeleteRange(\n txId: bigint,\n route: string,\n startKey: Uint8Array,\n endKey: Uint8Array,\n ): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeU64BE(txId);\n writer.writeRoute(route);\n writer.writeU32BE(startKey.length);\n writer.writeBytes(startKey);\n writer.writeU32BE(endKey.length);\n writer.writeBytes(endKey);\n return writer.getBufferView();\n },\n\n encodeCommit(txId: bigint, route: string): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeU64BE(txId);\n writer.writeRoute(route);\n return writer.getBufferView();\n },\n\n encodeRollback(txId: bigint, route: string): Uint8Array {\n return this.encodeCommit(txId, route);\n },\n\n encodeScan(txId: bigint, route: string, options: KvScanOptions = {}): Uint8Array {\n const writer = new BufferWriter(512);\n writer.writeU64BE(txId);\n writer.writeRoute(route);\n\n if (options.startKey) {\n writer.writeU8(1);\n writer.writeU32BE(options.startKey.length);\n writer.writeBytes(options.startKey);\n } else {\n writer.writeU8(0);\n }\n\n if (options.endKey) {\n writer.writeU8(1);\n writer.writeU32BE(options.endKey.length);\n writer.writeBytes(options.endKey);\n } else {\n writer.writeU8(0);\n }\n\n if (typeof options.limit === \"number\" && options.limit > 0) {\n writer.writeU8(1);\n writer.writeU32BE(options.limit);\n } else {\n writer.writeU8(0);\n }\n\n writer.writeU8(options.reverse ? 1 : 0);\n return writer.getBufferView();\n },\n\n decodeScanResponse(payload: Uint8Array): KvScanResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n\n if (reader.isEOF()) {\n return { status, keys: [] };\n }\n\n const count = reader.readU32BE();\n const keys: Uint8Array[] = [];\n for (let i = 0; i < count; i += 1) {\n const keyLen = reader.readU32BE();\n keys.push(reader.readBytes(keyLen));\n\n const valueLen = reader.readU32BE();\n reader.readBytes(valueLen);\n }\n\n const hasMore = !reader.isEOF() ? reader.readU8() : 0;\n const nextCursor = hasMore === 1 ? new Uint8Array(0) : undefined;\n\n return { status, keys, nextCursor };\n },\n\n encodeDurability(durability: DurabilityMode): number {\n switch (durability) {\n case \"Buffered\":\n return 0;\n case \"Sync\":\n return 1;\n default:\n throw new CodecError(\"Unknown durability mode\");\n }\n },\n};\n","/**\n * Iterator[T] is a generic streaming iterator modeled after fitz-go's Iterator[T].\n *\n * Usage pattern (manual):\n * ```ts\n * const it = await tx.scan(prefix, 100);\n * try {\n * while (it.next()) {\n * const value = it.value();\n * // use value\n * }\n * if (it.err()) throw it.err();\n * } finally {\n * it.close();\n * }\n * ```\n *\n * Usage pattern (with forEach helper):\n * ```ts\n * const it = await tx.scan(prefix, 100);\n * return forEach(it, (value) => {\n * // use value\n * return Promise.resolve(undefined);\n * });\n * ```\n */\nexport interface Iterator<T> {\n /**\n * Advances the iterator and returns true if a value is available.\n */\n next(): boolean;\n\n /**\n * Returns the current item (valid only after a successful next()).\n */\n value(): T;\n\n /**\n * Returns the first non-EOF error encountered.\n */\n err(): Error | null;\n\n /**\n * Closes/releases any resources associated with the iterator.\n */\n close(): void;\n}\n\n/**\n * SliceIterator iterates over an in-memory slice/array.\n * Used for batch results like KV SCAN where all items arrive in one response.\n */\nexport function createSliceIterator<T>(items: T[]): Iterator<T> {\n let index = -1;\n\n const next = (): boolean => {\n index += 1;\n return index < items.length;\n };\n\n const value = (): T => {\n if (index < 0 || index >= items.length) {\n throw new Error(\"SliceIterator.value() called in invalid state\");\n }\n return items[index];\n };\n\n const err = (): Error | null => null;\n\n const close = (): void => {\n // No-op: no resources to release\n };\n\n return {\n next,\n value,\n err,\n close,\n };\n}\n\nexport type AsyncIterableIterator<T> = AsyncIterable<T>;\n\nexport function createAsyncIterableIterator<T>(iterator: Iterator<T>): AsyncIterableIterator<T> {\n return {\n async *[Symbol.asyncIterator]() {\n while (iterator.next()) {\n yield iterator.value();\n }\n\n const err = iterator.err();\n iterator.close();\n if (err) {\n throw err;\n }\n },\n };\n}\n\n/**\n * forEach iterates over all items in the iterator, calling fn for each.\n * Automatically handles close() and error checking.\n * Iteration stops on first error from either callback or iterator.\n *\n * Example:\n * ```ts\n * const it = await tx.scan(startKey, 100);\n * return forEach(it, async (kv) => {\n * console.log(`${kv.key}: ${kv.value}`);\n * });\n * ```\n */\nexport async function forEach<T>(it: Iterator<T>, fn: (item: T) => Promise<void>): Promise<void> {\n try {\n while (it.next()) {\n await fn(it.value());\n }\n const err = it.err();\n if (err) {\n throw err;\n }\n } finally {\n it.close();\n }\n}\n","/**\n * KV transaction wrapper.\n */\n\nimport { Connection } from \"../../client/connection\";\nimport type { RetryOperation } from \"../../client/resilience\";\nimport { KvCodec } from \"./codec\";\nimport { KvGetResult, KvScanOptions, KvStatus } from \"./types\";\nimport {\n MSG_KV_PUT,\n MSG_KV_INSERT,\n MSG_KV_GET,\n MSG_KV_DELETE,\n MSG_KV_DELETE_RANGE,\n MSG_KV_COMMIT,\n MSG_KV_ROLLBACK,\n MSG_KV_SCAN,\n} from \"../../frame/types\";\nimport { KvError } from \"../../core/errors\";\nimport { createSliceIterator, createAsyncIterableIterator } from \"../../core/iterator\";\n\nexport type KvTransaction = ReturnType<typeof createKvTransaction>;\n\nexport function createKvTransaction(connection: Connection, route: string, txId: bigint) {\n let closed = false;\n const resilientConnection = connection as Connection & {\n executeWithRetry?: <T>(operation: RetryOperation, task: () => Promise<T>) => Promise<T>;\n };\n let unsubscribeDisconnect: () => void = () => undefined;\n unsubscribeDisconnect = connection.onDisconnect(() => {\n closed = true;\n unsubscribeDisconnect();\n });\n\n const ensureOpen = (): void => {\n if (closed) {\n throw new KvError(\"Transaction already closed\", \"TX_CLOSED\");\n }\n };\n\n const checkStatus = (status: number, operation: string): void => {\n if (status === KvStatus.Ok) {\n return;\n }\n\n const statusNames: Record<number, string> = {\n [KvStatus.TransactionAborted]: \"TransactionAborted\",\n [KvStatus.LeaseExpired]: \"LeaseExpired\",\n [KvStatus.ConflictingWrite]: \"ConflictingWrite\",\n [KvStatus.KeyNotFound]: \"KeyNotFound\",\n [KvStatus.OperationNotAllowed]: \"OperationNotAllowed\",\n };\n\n throw new KvError(\n `${operation} failed: ${statusNames[status] ?? `Unknown(${status})`}`,\n operation,\n status,\n );\n };\n\n const runWithRetry = async <T>(operation: RetryOperation, task: () => Promise<T>): Promise<T> => {\n if (typeof resilientConnection.executeWithRetry === \"function\") {\n return resilientConnection.executeWithRetry(operation, task);\n }\n\n return task();\n };\n\n const put = async (key: Uint8Array, value: Uint8Array, signal?: AbortSignal): Promise<void> => {\n ensureOpen();\n const payload = KvCodec.encodePut(txId, route, key, value);\n const response = await connection.request(MSG_KV_PUT, payload, signal);\n checkStatus(KvCodec.decodeStatusResponse(response).status, \"PUT\");\n };\n\n const insert = async (\n key: Uint8Array,\n value: Uint8Array,\n signal?: AbortSignal,\n ): Promise<void> => {\n ensureOpen();\n const payload = KvCodec.encodeInsert(txId, route, key, value);\n const response = await connection.request(MSG_KV_INSERT, payload, signal);\n checkStatus(KvCodec.decodeStatusResponse(response).status, \"INSERT\");\n };\n\n const get = async (key: Uint8Array, signal?: AbortSignal): Promise<KvGetResult> => {\n ensureOpen();\n return runWithRetry(\n {\n domain: \"kv\",\n operation: \"get\",\n retryClass: \"replayable_read\",\n signal,\n },\n async () => {\n const payload = KvCodec.encodeGet(txId, route, key);\n const response = await connection.request(MSG_KV_GET, payload, signal);\n const decoded = KvCodec.decodeGetResponse(response);\n checkStatus(decoded.status, \"GET\");\n if (!decoded.found || !decoded.value) {\n return { type: \"not-found\" };\n }\n return { type: \"found\", value: decoded.value };\n },\n );\n };\n\n const deleteItem = async (key: Uint8Array, signal?: AbortSignal): Promise<void> => {\n ensureOpen();\n const payload = KvCodec.encodeDelete(txId, route, key);\n const response = await connection.request(MSG_KV_DELETE, payload, signal);\n checkStatus(KvCodec.decodeStatusResponse(response).status, \"DELETE\");\n };\n\n const deleteRange = async (\n startKey: Uint8Array,\n endKey: Uint8Array,\n signal?: AbortSignal,\n ): Promise<void> => {\n ensureOpen();\n const payload = KvCodec.encodeDeleteRange(txId, route, startKey, endKey);\n const response = await connection.request(MSG_KV_DELETE_RANGE, payload, signal);\n checkStatus(KvCodec.decodeStatusResponse(response).status, \"DELETE_RANGE\");\n };\n\n const scan = async (\n options: KvScanOptions = {},\n signal?: AbortSignal,\n ): Promise<AsyncIterable<Uint8Array>> => {\n ensureOpen();\n return runWithRetry(\n {\n domain: \"kv\",\n operation: \"scan\",\n retryClass: \"replayable_read\",\n signal,\n },\n async () => {\n const payload = KvCodec.encodeScan(txId, route, options);\n const response = await connection.request(MSG_KV_SCAN, payload, signal);\n const decoded = KvCodec.decodeScanResponse(response);\n checkStatus(decoded.status, \"SCAN\");\n return createAsyncIterableIterator(createSliceIterator(decoded.keys));\n },\n );\n };\n\n const commit = async (signal?: AbortSignal): Promise<void> => {\n ensureOpen();\n closed = true;\n unsubscribeDisconnect();\n const payload = KvCodec.encodeCommit(txId, route);\n const response = await connection.request(MSG_KV_COMMIT, payload, signal);\n checkStatus(KvCodec.decodeStatusResponse(response).status, \"COMMIT\");\n };\n\n const rollback = async (signal?: AbortSignal): Promise<void> => {\n if (closed) {\n return;\n }\n\n closed = true;\n unsubscribeDisconnect();\n const payload = KvCodec.encodeRollback(txId, route);\n try {\n const response = await connection.request(MSG_KV_ROLLBACK, payload, signal);\n checkStatus(KvCodec.decodeStatusResponse(response).status, \"ROLLBACK\");\n } catch {\n // Best-effort cleanup.\n }\n };\n\n const getTxId = (): bigint => txId;\n\n const isOpen = (): boolean => !closed;\n\n return {\n put,\n insert,\n get,\n delete: deleteItem,\n deleteRange,\n scan,\n commit,\n rollback,\n getTxId,\n isOpen,\n };\n}\n","export type RouteShapeOptions = {\n allowBareRoute?: boolean;\n};\n\nexport function isRouteShape(\n route: string,\n _scheme: string,\n _segmentCount: number,\n _options: RouteShapeOptions = {},\n): boolean {\n // Route strings are opaque protocol inputs; semantic validation is broker-owned.\n return typeof route === \"string\";\n}\n\nexport function isConcreteRouteShape(route: string, _scheme: string): boolean {\n return typeof route === \"string\";\n}\n\nexport type SelectorRouteShapeOptions = {\n allowRealmWildcard?: boolean;\n};\n\nexport function isSelectorRouteShape(\n route: string,\n _scheme: string,\n _segmentCount: number,\n _options: SelectorRouteShapeOptions = {},\n): boolean {\n return typeof route === \"string\";\n}\n","/**\n * KV domain client.\n */\n\nimport { createDomainClient } from \"../base\";\nimport { KvCodec } from \"./codec\";\nimport { createKvTransaction, KvTransaction } from \"./transaction\";\nimport { KvBeginOptions, KvStatus } from \"./types\";\nimport { MSG_KV_BEGIN } from \"../../frame/types\";\nimport { KvError } from \"../../core/errors\";\nimport { isRouteShape } from \"../_routes\";\nimport type { Connection } from \"../../client/connection\";\n\nexport type KvClient = ReturnType<typeof createKvClient>;\n\nexport function createKvClient(connection: Connection) {\n const { requestFrame } = createDomainClient(connection);\n\n const begin = async (route: string, options: KvBeginOptions): Promise<KvTransaction> => {\n if (!isRouteShape(route, \"kv\", 3, { allowBareRoute: true })) {\n throw new KvError(\n `Invalid kv route: ${route} (expected kv://{realm}/{area}/{resource} or {realm}/{area}/{resource}, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n if (!options?.durability) {\n throw new KvError(\"BEGIN requires explicit durability\", \"MISSING_DURABILITY\");\n }\n\n const payload = KvCodec.encodeBegin(route, options.mode ?? \"ReadWrite\", options.durability);\n const response = await requestFrame(MSG_KV_BEGIN, payload);\n const decoded = KvCodec.decodeBeginResponse(response);\n\n if (decoded.status !== KvStatus.Ok || decoded.txId === undefined) {\n throw new KvError(\"BEGIN failed\", \"BEGIN_FAILED\", decoded.status);\n }\n\n return createKvTransaction(connection, route, decoded.txId);\n };\n\n return {\n begin,\n };\n}\n\ntype KvClientConstructor = {\n new (connection: Connection): KvClient;\n (connection: Connection): KvClient;\n};\n\nexport const KvClient: KvClientConstructor = function (connection: Connection) {\n return createKvClient(connection);\n} as unknown as KvClientConstructor;\n\nexport type { KvTransaction } from \"./transaction\";\nexport * from \"./types\";\n","/**\n * Queue domain codec for encoding and decoding protocol messages.\n */\n\nimport { BufferWriter, BufferReader, utf8Decoder } from \"../../core/buffer\";\nimport {\n QueueEnqueueResponse,\n QueueReserveResponse,\n QueueCompleteResponse,\n QueueExtendResponse,\n QueueSubscribeResponse,\n QueueUnsubscribeResponse,\n EnqueueOptions,\n} from \"./types\";\n\nexport const QueueCodec = {\n /**\n * Encode ENQUEUE request.\n * Payload: [route: string][body_len: u32][body: bytes][has_delay: u8][delay_seconds: u64 if has_delay]\n */\n encodeEnqueue(route: string, body: Uint8Array, options?: EnqueueOptions): Uint8Array {\n const writer = new BufferWriter(512);\n writer.writeRoute(route);\n writer.writeU32BE(body.length);\n writer.writeBytes(body);\n\n const delaySeconds = options?.delayMs ? Math.floor(options.delayMs / 1000) : 0;\n const hasDelay = delaySeconds > 0 ? 1 : 0;\n writer.writeU8(hasDelay);\n if (hasDelay) {\n writer.writeU64BE(BigInt(delaySeconds));\n }\n\n return writer.getBufferView();\n },\n\n /**\n * Decode ENQUEUE response.\n * Payload: [status: u8][message_id: u64]\n */\n decodeEnqueueResponse(payload: Uint8Array): QueueEnqueueResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status, ...this.decodeErrorResponse(reader) };\n }\n\n let messageId: bigint | undefined;\n if (reader.remainingBytes() >= 8) {\n messageId = reader.readU64BE();\n }\n return { status, messageId };\n },\n\n /**\n * Encode RESERVE request.\n * Payload: [route: string][lease_seconds: u64][has_batch_size: u8][batch_size: u32]\n *\n * Long polling is handled client-side by QueueClient.reserve().\n */\n encodeReserve(route: string, leaseSeconds: number, batchSize?: number): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeRoute(route);\n writer.writeU64BE(BigInt(leaseSeconds));\n\n const hasBatchSize = batchSize !== undefined && batchSize > 0 ? 1 : 0;\n writer.writeU8(hasBatchSize);\n if (hasBatchSize && batchSize !== undefined) {\n writer.writeU32BE(batchSize);\n }\n\n return writer.getBufferView();\n },\n\n /**\n * Decode RESERVE response.\n * Payload: [status: u8][lease_count: u32]([message_id: u64][lease_token: u64][body_len: u32][body: bytes] ...)\n */\n decodeReserveResponse(payload: Uint8Array): QueueReserveResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n\n if (status !== 0) {\n return { status, ...this.decodeErrorResponse(reader) };\n }\n\n if (reader.isEOF() || reader.remainingBytes() < 4) {\n return { status, items: [] };\n }\n\n const leaseCount = reader.readU32BE();\n const items: Array<{ id: bigint; token: bigint; body: Uint8Array }> = [];\n\n for (let i = 0; i < leaseCount; i++) {\n const id = reader.readU64BE();\n const token = reader.readU64BE();\n const bodyLen = reader.readU32BE();\n const body = reader.readBytes(bodyLen);\n\n items.push({ id, token, body });\n }\n\n return { status, items };\n },\n\n /**\n * Encode COMPLETE request.\n * Payload: [route: string][message_id: u64][lease_token: u64]\n */\n encodeComplete(route: string, messageId: bigint, leaseToken: bigint): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(route);\n writer.writeU64BE(messageId);\n writer.writeU64BE(leaseToken);\n return writer.getBufferView();\n },\n\n /**\n * Decode COMPLETE response.\n * Payload: [status: u8]\n */\n decodeCompleteResponse(payload: Uint8Array): QueueCompleteResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status, ...this.decodeErrorResponse(reader) };\n }\n\n return { status };\n },\n\n /**\n * Encode EXTEND request.\n * Payload: [route: string][message_id: u64][lease_token: u64][lease_seconds: u64]\n */\n encodeExtend(\n route: string,\n messageId: bigint,\n leaseToken: bigint,\n leaseSeconds: number,\n ): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(route);\n writer.writeU64BE(messageId);\n writer.writeU64BE(leaseToken);\n writer.writeU64BE(BigInt(leaseSeconds));\n return writer.getBufferView();\n },\n\n /**\n * Decode EXTEND response.\n * Payload: [status: u8]\n */\n decodeExtendResponse(payload: Uint8Array): QueueExtendResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status, ...this.decodeErrorResponse(reader) };\n }\n\n return { status };\n },\n\n /**\n * Encode SUBSCRIBE request.\n * Payload: [pattern: string]\n */\n encodeSubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(pattern);\n return writer.getBufferView();\n },\n\n /**\n * Decode SUBSCRIBE response.\n * Payload: [status: u8][sub_id: u64]\n */\n decodeSubscribeResponse(payload: Uint8Array): QueueSubscribeResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status, ...this.decodeErrorResponse(reader) };\n }\n\n if (reader.remainingBytes() === 8) {\n return { status, subId: reader.readU64BE() };\n }\n\n if (reader.remainingBytes() >= 9) {\n const hasSubId = reader.readU8();\n if (hasSubId === 1 && reader.remainingBytes() >= 8) {\n return { status, subId: reader.readU64BE() };\n }\n }\n\n if (reader.isEOF()) {\n return { status };\n }\n\n return { status };\n },\n\n /**\n * Encode UNSUBSCRIBE request.\n * Payload: [pattern: string]\n */\n encodeUnsubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(pattern);\n return writer.getBufferView();\n },\n\n /**\n * Decode UNSUBSCRIBE response.\n * Payload: [status: u8]\n */\n decodeUnsubscribeResponse(payload: Uint8Array): QueueUnsubscribeResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status, ...this.decodeErrorResponse(reader) };\n }\n\n return { status };\n },\n\n /**\n * Decode notification payload.\n * Payload: [sub_id: u64][route: string]\n */\n decodeNotification(payload: Uint8Array): {\n subId: bigint;\n route: string;\n } {\n const reader = new BufferReader(payload);\n const subId = reader.readU64BE();\n const route = reader.readRoute();\n\n return { subId, route };\n },\n\n decodeErrorResponse(reader: BufferReader): {\n errorCode?: number;\n errorMessage?: string;\n } {\n if (reader.remainingBytes() === 1) {\n return { errorCode: reader.readU8() };\n }\n\n if (reader.remainingBytes() >= 4) {\n const messageLength = reader.readU32BE();\n if (messageLength <= reader.remainingBytes()) {\n return {\n errorMessage: utf8Decoder.decode(reader.readBytes(messageLength)),\n };\n }\n }\n\n return {};\n },\n};\n","/**\n * Queue domain types\n * Per fitz-go/internal/domains/queue/queue.go\n */\n\nimport { Connection } from \"../../client/connection\";\nimport { QueueCodec } from \"./codec\";\nimport { QueueError } from \"../../core/errors\";\nimport { MSG_QUEUE_EXTEND, MSG_QUEUE_COMPLETE } from \"../../frame/types\";\n\n/**\n * Queue item represents a reserved queue message.\n * It carries the route and token required for `extend()` and `complete()`.\n */\nexport type QueueItem = ReturnType<typeof createQueueItem>;\n\nexport function createQueueItem(\n id: bigint,\n token: bigint,\n body: Uint8Array,\n route: string,\n connection: Connection,\n) {\n let closed = false;\n let unsubscribeDisconnect: () => void = () => undefined;\n unsubscribeDisconnect = connection.onDisconnect(() => {\n closed = true;\n unsubscribeDisconnect();\n });\n\n const ensureOpen = (): void => {\n if (closed) {\n throw new QueueError(\"Queue item is no longer valid after disconnect\", \"ITEM_CLOSED\");\n }\n };\n\n const extend = async (leaseSecs: number, signal?: AbortSignal): Promise<void> => {\n ensureOpen();\n const payload = QueueCodec.encodeExtend(route, id, token, leaseSecs);\n const response = await connection.request(MSG_QUEUE_EXTEND, payload, signal);\n const decoded = QueueCodec.decodeExtendResponse(response);\n\n if (decoded.status !== QueueStatus.Ok) {\n const errorCode = decoded.errorCode ?? decoded.status;\n const statusName = QueueStatus[errorCode] || `Unknown(${errorCode})`;\n const reason = decoded.errorMessage ?? statusName;\n throw new QueueError(`EXTEND failed: ${reason}`, statusName, errorCode);\n }\n };\n\n const complete = async (signal?: AbortSignal): Promise<void> => {\n ensureOpen();\n const requestPayload = QueueCodec.encodeComplete(route, id, token);\n const response = await connection.request(MSG_QUEUE_COMPLETE, requestPayload, signal);\n const decoded = QueueCodec.decodeCompleteResponse(response);\n\n if (decoded.status !== QueueStatus.Ok) {\n const errorCode = decoded.errorCode ?? decoded.status;\n const statusName = QueueStatus[errorCode] || `Unknown(${errorCode})`;\n const reason = decoded.errorMessage ?? statusName;\n throw new QueueError(`COMPLETE failed: ${reason}`, statusName, errorCode);\n }\n\n closed = true;\n unsubscribeDisconnect();\n };\n\n const testOnlyInvalidToken = (): bigint => id + 1n;\n\n const testOnlyCompleteWithToken = async (\n tokenToUse: bigint,\n signal?: AbortSignal,\n ): Promise<void> => {\n ensureOpen();\n const requestPayload = QueueCodec.encodeComplete(route, id, tokenToUse);\n const response = await connection.request(MSG_QUEUE_COMPLETE, requestPayload, signal);\n const decoded = QueueCodec.decodeCompleteResponse(response);\n\n if (decoded.status !== QueueStatus.Ok) {\n const errorCode = decoded.errorCode ?? decoded.status;\n const statusName = QueueStatus[errorCode] || `Unknown(${errorCode})`;\n const reason = decoded.errorMessage ?? statusName;\n throw new QueueError(`COMPLETE failed: ${reason}`, statusName, errorCode);\n }\n\n closed = true;\n unsubscribeDisconnect();\n };\n\n return {\n body,\n extend,\n complete,\n testOnlyInvalidToken,\n testOnlyCompleteWithToken,\n };\n}\n\n/**\n * Availability notification from a queue.\n */\nexport interface AvailabilityNotification {\n route: string;\n}\n\n/**\n * Handler for availability notifications.\n */\nexport type AvailabilityHandler = (notification: AvailabilityNotification) => void | Promise<void>;\n\n/**\n * Queue availability subscription.\n */\nexport type QueueSubscription = ReturnType<typeof createQueueSubscription>;\n\nexport function createQueueSubscription(\n subId: bigint,\n pattern: string,\n unsubscribeFn: (subId: bigint) => Promise<void>,\n) {\n const unsubscribe = async (): Promise<void> => {\n await unsubscribeFn(subId);\n };\n\n return {\n subId,\n pattern,\n unsubscribe,\n };\n}\n\n/**\n * Queue operation status codes\n */\nexport enum QueueStatus {\n Ok = 0,\n QueueNotFound = 1,\n MessageNotFound = 2,\n InvalidToken = 3,\n QueueFull = 4,\n InvalidDelay = 5,\n}\n\n/**\n * Options for enqueue operations.\n */\nexport interface EnqueueOptions {\n priority?: number;\n delayMs?: number;\n ttlMs?: number;\n}\n\n/**\n * Internal codec response types.\n */\nexport interface QueueEnqueueResponse {\n status: number;\n messageId?: bigint;\n errorCode?: number;\n errorMessage?: string;\n}\n\nexport interface QueueReserveResponse {\n status: number;\n items?: Array<{\n id: bigint;\n token: bigint;\n body: Uint8Array;\n }>;\n cursor?: Uint8Array;\n errorCode?: number;\n errorMessage?: string;\n}\n\nexport interface QueueExtendResponse {\n status: number;\n errorCode?: number;\n errorMessage?: string;\n}\n\nexport interface QueueCompleteResponse {\n status: number;\n errorCode?: number;\n errorMessage?: string;\n}\n\nexport interface QueueSubscribeResponse {\n status: number;\n subId?: bigint;\n errorCode?: number;\n errorMessage?: string;\n}\n\nexport interface QueueUnsubscribeResponse {\n status: number;\n errorCode?: number;\n errorMessage?: string;\n}\n","/**\n * Queue domain client.\n */\n\nimport { createDomainClient } from \"../base\";\nimport { attachResilienceMeta } from \"../../client/resilience\";\nimport type { Connection } from \"../../client/connection\";\nimport { QueueError } from \"../../core/errors\";\nimport {\n MSG_QUEUE_ENQUEUE,\n MSG_QUEUE_NOTIFY,\n MSG_QUEUE_RESERVE,\n MSG_QUEUE_SUBSCRIBE,\n MSG_QUEUE_UNSUBSCRIBE,\n} from \"../../frame/types\";\nimport { isRouteShape, isSelectorRouteShape } from \"../_routes\";\nimport { QueueCodec } from \"./codec\";\nimport {\n AvailabilityHandler,\n AvailabilityNotification,\n EnqueueOptions,\n QueueItem,\n QueueStatus,\n QueueSubscription,\n createQueueItem,\n createQueueSubscription,\n} from \"./types\";\n\ntype QueueSubscriptionState = {\n subId: bigint;\n handlers: Map<number, AvailabilityHandler>;\n};\n\nexport type QueueClient = ReturnType<typeof createQueueClient>;\n\nexport function createQueueClient(connection: Connection) {\n const { requestFrame, requestReconnectFrame, runWithRetry } = createDomainClient(connection);\n const subscriptionsByPattern = new Map<string, QueueSubscriptionState>();\n const patternsBySubId = new Map<bigint, string>();\n let notificationHandlerRegistered = false;\n let nextHandlerId = 1;\n\n connection.onReconnect(async () => {\n if (subscriptionsByPattern.size === 0) {\n return;\n }\n\n const subscriptions = Array.from(subscriptionsByPattern.entries(), ([pattern, state]) => ({\n pattern,\n handlers: Array.from(state.handlers.entries()),\n }));\n subscriptionsByPattern.clear();\n patternsBySubId.clear();\n\n for (const subscription of subscriptions) {\n const subId = await subscribeWire(subscription.pattern, requestReconnectFrame);\n subscriptionsByPattern.set(subscription.pattern, {\n subId,\n handlers: new Map(subscription.handlers),\n });\n patternsBySubId.set(subId, subscription.pattern);\n }\n });\n\n const enqueue = async (\n route: string,\n body: Uint8Array,\n options?: EnqueueOptions,\n ): Promise<bigint> => {\n assertQueueRoute(route);\n return runWithRetry(\n {\n domain: \"queue\",\n operation: \"enqueue\",\n retryClass: \"confirmed_negative_retry\",\n },\n async () => {\n const payload = QueueCodec.encodeEnqueue(route, body, options);\n const response = await requestFrame(MSG_QUEUE_ENQUEUE, payload);\n const decoded = QueueCodec.decodeEnqueueResponse(response);\n checkStatus(decoded, \"ENQUEUE\");\n\n if (decoded.messageId === undefined) {\n throw new QueueError(\"ENQUEUE response missing messageId\", \"MISSING_MESSAGE_ID\");\n }\n\n return decoded.messageId;\n },\n );\n };\n\n const reserve = async (\n route: string,\n leaseSeconds: number,\n batchSize: number = 1,\n waitSeconds: number = 0,\n ): Promise<QueueItem[]> => {\n assertQueueReserveRoute(route);\n if (waitSeconds <= 0) {\n return reserveOnce(route, leaseSeconds, batchSize);\n }\n\n let items = await reserveOnce(route, leaseSeconds, batchSize);\n if (items.length > 0) {\n return items;\n }\n\n const deadline = Date.now() + waitSeconds * 1000;\n let pendingNotifications = 0;\n let waiter: (() => void) | undefined;\n const subscription = await subscribe(route, async () => {\n pendingNotifications += 1;\n if (!waiter) {\n return;\n }\n\n const resolve = waiter;\n waiter = undefined;\n pendingNotifications = 0;\n resolve();\n });\n\n try {\n while (true) {\n items = await reserveOnce(route, leaseSeconds, batchSize);\n if (items.length > 0) {\n return items;\n }\n\n const remainingMs = deadline - Date.now();\n if (remainingMs <= 0) {\n return items;\n }\n\n await new Promise<void>((resolve) => {\n if (pendingNotifications > 0) {\n pendingNotifications = 0;\n resolve();\n return;\n }\n\n const release = () => {\n clearTimeout(timeoutId);\n if (waiter === release) {\n waiter = undefined;\n }\n resolve();\n };\n const timeoutId = setTimeout(release, remainingMs);\n waiter = release;\n });\n }\n } finally {\n await subscription.unsubscribe();\n }\n };\n\n const reserveOnce = async (\n route: string,\n leaseSeconds: number,\n batchSize: number,\n ): Promise<QueueItem[]> => {\n const payload = QueueCodec.encodeReserve(route, leaseSeconds, batchSize);\n const response = await requestFrame(MSG_QUEUE_RESERVE, payload);\n const decoded = QueueCodec.decodeReserveResponse(response);\n checkStatus(decoded, \"RESERVE\");\n\n return (decoded.items ?? []).map((item) =>\n createQueueItem(item.id, item.token, item.body, route, connection),\n );\n };\n\n const subscribe = async (\n pattern: string,\n handler: AvailabilityHandler,\n ): Promise<QueueSubscription> => {\n assertQueueSubscriptionPattern(pattern);\n initNotificationHandler();\n const existing = subscriptionsByPattern.get(pattern);\n if (existing) {\n return addLocalSubscription(pattern, existing.subId, handler);\n }\n\n const subId = await subscribeWire(pattern);\n return addLocalSubscription(pattern, subId, handler);\n };\n\n const subscribeWire = async (pattern: string, request = requestFrame): Promise<bigint> => {\n const payload = QueueCodec.encodeSubscribe(wireWatchPattern(pattern));\n const response = await request(MSG_QUEUE_SUBSCRIBE, payload);\n const decoded = QueueCodec.decodeSubscribeResponse(response);\n checkStatus(decoded, \"SUBSCRIBE\");\n\n if (decoded.subId === undefined) {\n throw new QueueError(\"SUBSCRIBE response missing subId\", \"MISSING_SUB_ID\");\n }\n\n return decoded.subId;\n };\n\n const addLocalSubscription = (\n pattern: string,\n subId: bigint,\n handler: AvailabilityHandler,\n ): QueueSubscription => {\n const handlerId = nextHandlerId++;\n let subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n subscription = { subId, handlers: new Map() };\n subscriptionsByPattern.set(pattern, subscription);\n patternsBySubId.set(subId, pattern);\n }\n\n subscription.handlers.set(handlerId, handler);\n\n return createQueueSubscription(subId, pattern, async () => {\n await unsubscribe(pattern, handlerId);\n });\n };\n\n const unsubscribe = async (pattern: string, handlerId: number): Promise<void> => {\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n subscription.handlers.delete(handlerId);\n if (subscription.handlers.size > 0) {\n return;\n }\n\n subscriptionsByPattern.delete(pattern);\n patternsBySubId.delete(subscription.subId);\n const payload = QueueCodec.encodeUnsubscribe(wireWatchPattern(pattern));\n const response = await requestFrame(MSG_QUEUE_UNSUBSCRIBE, payload);\n const decoded = QueueCodec.decodeUnsubscribeResponse(response);\n checkStatus(decoded, \"UNSUBSCRIBE\");\n };\n\n const initNotificationHandler = (): void => {\n if (notificationHandlerRegistered) {\n return;\n }\n\n notificationHandlerRegistered = true;\n connection.registerNotificationHandler(MSG_QUEUE_NOTIFY, (payload) => {\n try {\n const { subId, route } = QueueCodec.decodeNotification(payload);\n const pattern = patternsBySubId.get(subId);\n if (!pattern) {\n return;\n }\n\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n const notification: AvailabilityNotification = { route: publicQueueRoute(route) };\n for (const handler of subscription.handlers.values()) {\n connection.dispatchAsyncHandler(async () => {\n await handler(notification);\n });\n }\n } catch {\n // Best-effort notification dispatch.\n }\n });\n };\n\n const wireWatchPattern = (pattern: string): string => {\n if (pattern.endsWith(\"/ready\")) {\n return pattern;\n }\n\n return `${pattern}/ready`;\n };\n\n const publicQueueRoute = (route: string): string => {\n if (!route.endsWith(\"/ready\")) {\n return route;\n }\n\n return route.slice(0, -\"/ready\".length);\n };\n\n const checkStatus = (\n response: { status: number; errorCode?: number; errorMessage?: string },\n operation: string,\n ): void => {\n if (response.status === QueueStatus.Ok) {\n return;\n }\n\n const errorCode = response.errorCode ?? response.status;\n const statusNames: Record<number, string> = {\n [QueueStatus.QueueNotFound]: \"QueueNotFound\",\n [QueueStatus.MessageNotFound]: \"MessageNotFound\",\n [QueueStatus.InvalidToken]: \"InvalidToken\",\n [QueueStatus.QueueFull]: \"QueueFull\",\n [QueueStatus.InvalidDelay]: \"InvalidDelay\",\n };\n\n const statusName = statusNames[errorCode] ?? `Unknown(${errorCode})`;\n const reason = response.errorMessage ?? statusName;\n\n throw attachResilienceMeta(\n new QueueError(`${operation} failed: ${reason}`, statusName, errorCode),\n {\n boundary: \"post-send\",\n failureKind: \"domain\",\n explicitNegative: true,\n },\n );\n };\n\n return {\n enqueue,\n reserve,\n subscribe,\n };\n}\n\ntype QueueClientConstructor = {\n new (connection: Connection): QueueClient;\n (connection: Connection): QueueClient;\n};\n\nexport const QueueClient: QueueClientConstructor = function (connection: Connection) {\n return createQueueClient(connection);\n} as unknown as QueueClientConstructor;\n\nexport * from \"./types\";\n\nfunction assertQueueRoute(route: string): void {\n if (!isRouteShape(route, \"queue\", 3)) {\n throw new QueueError(\n `Invalid queue route: ${route} (expected queue://{realm}/{area}/{resource}, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n\nfunction assertQueueReserveRoute(route: string): void {\n if (!isSelectorRouteShape(route, \"queue\", 3)) {\n throw new QueueError(\n `Invalid queue route: ${route} (expected queue://{realm}/{area}/{resource} or queue://{realm}/{area}/*, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n\nfunction assertQueueSubscriptionPattern(pattern: string): void {\n if (!isSelectorRouteShape(pattern, \"queue\", 3, { allowRealmWildcard: true })) {\n throw new QueueError(\n `Invalid queue pattern: ${pattern} (expected queue://{realm}/{area}/{resource}, queue://{realm}/{area}/*, or queue://{realm}/**)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n","/**\n * RPC domain codec for encoding/decoding messages\n * Per fitz-go/internal/domains/rpc/protocol.go\n */\n\nimport {\n BufferReader,\n getRouteEncoding,\n readU128BEAt,\n readU32BEAt,\n utf8Decoder,\n} from \"../../core/buffer\";\nimport { ProtocolError } from \"../../core/errors\";\nimport { SubscribeResponse, UnsubscribeResponse } from \"./types\";\n\nconst CORRELATION_ID_LENGTH = 16;\nconst getCryptoProvider = (): Crypto | undefined => globalThis.crypto as Crypto | undefined;\nconst correlationIdPool: Uint8Array[] = [];\nconst maxCorrelationIdPoolSize = 64;\n\nconst secureRandomValues = (buffer: Uint8Array): Uint8Array => {\n const provider = getCryptoProvider();\n if (!provider?.getRandomValues) {\n throw new ProtocolError(\n \"Cryptographic randomness is required for RPC correlation IDs\",\n undefined,\n { operation: \"RPC_GENERATE_CORRELATION_ID\" },\n );\n }\n\n provider.getRandomValues(buffer as unknown as ArrayBufferView<ArrayBuffer>);\n return buffer;\n};\n\nexport const acquirePooledCorrelationId = (): Uint8Array => {\n const correlationId = correlationIdPool.pop() ?? new Uint8Array(CORRELATION_ID_LENGTH);\n return secureRandomValues(correlationId);\n};\n\nexport const releasePooledCorrelationId = (correlationId: Uint8Array): void => {\n if (\n correlationId.length !== CORRELATION_ID_LENGTH ||\n correlationIdPool.length >= maxCorrelationIdPoolSize\n ) {\n return;\n }\n correlationIdPool.push(correlationId);\n};\n\nconst readCorrelationKey = (payload: Uint8Array, offset: number): bigint => {\n return readU128BEAt(payload, offset);\n};\n\nconst readStringFromPayload = (\n payload: Uint8Array,\n offset: number,\n): { value: string; nextOffset: number } => {\n if (offset + 4 > payload.length) {\n throw new ProtocolError(\"Unexpected end of buffer while reading string length\", undefined, {\n operation: \"RPC_DECODE\",\n });\n }\n\n const length = readU32BEAt(payload, offset);\n offset += 4;\n\n if (length === 0) {\n return { value: \"\", nextOffset: offset };\n }\n\n if (offset + length > payload.length) {\n throw new ProtocolError(\"Unexpected end of buffer while reading string contents\", undefined, {\n operation: \"RPC_DECODE\",\n });\n }\n\n const value = utf8Decoder.decode(payload.subarray(offset, offset + length));\n return { value, nextOffset: offset + length };\n};\n\nexport const RpcCodec = {\n /**\n * Generate a random 16-byte correlation ID\n * Per fitz-go rpc.go: crypto/rand.Read(correlationID[:])\n */\n generateCorrelationId(): Uint8Array {\n const correlationId = new Uint8Array(CORRELATION_ID_LENGTH);\n secureRandomValues(correlationId);\n return correlationId;\n },\n\n /**\n * Encode RPC_REQUEST (302)\n * Payload: [bytes correlation_id][string route][string reply_route][bytes body]\n * Where bytes/string = [u32 BE len][data]\n */\n encodeRequest(\n correlationId: Uint8Array,\n route: string,\n replyRoute: string,\n body: Uint8Array,\n ): Uint8Array {\n const routeBytes = getRouteEncoding(route);\n const replyRouteBytes = getRouteEncoding(replyRoute);\n const payloadLength =\n 4 + CORRELATION_ID_LENGTH + routeBytes.length + replyRouteBytes.length + 4 + body.length;\n\n const buffer = new Uint8Array(payloadLength);\n let offset = 0;\n\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = CORRELATION_ID_LENGTH;\n buffer.set(correlationId, offset);\n offset += CORRELATION_ID_LENGTH;\n buffer.set(routeBytes, offset);\n offset += routeBytes.length;\n buffer.set(replyRouteBytes, offset);\n offset += replyRouteBytes.length;\n buffer[offset++] = (body.length >> 24) & 0xff;\n buffer[offset++] = (body.length >> 16) & 0xff;\n buffer[offset++] = (body.length >> 8) & 0xff;\n buffer[offset++] = body.length & 0xff;\n buffer.set(body, offset);\n\n return buffer;\n },\n\n encodeCallRequest(correlationId: Uint8Array, route: string, body: Uint8Array): Uint8Array {\n const routeBytes = getRouteEncoding(route);\n const payloadLength = 4 + CORRELATION_ID_LENGTH + routeBytes.length + 4 + 4 + body.length;\n\n const buffer = new Uint8Array(payloadLength);\n let offset = 0;\n\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = CORRELATION_ID_LENGTH;\n buffer.set(correlationId, offset);\n offset += CORRELATION_ID_LENGTH;\n buffer.set(routeBytes, offset);\n offset += routeBytes.length;\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = (body.length >> 24) & 0xff;\n buffer[offset++] = (body.length >> 16) & 0xff;\n buffer[offset++] = (body.length >> 8) & 0xff;\n buffer[offset++] = body.length & 0xff;\n buffer.set(body, offset);\n\n return buffer;\n },\n\n /**\n * Decode RPC_REQUEST response (standard [u8 status][payload])\n * Just validates OK status; no additional payload expected\n */\n decodeRequestResponse(payload: Uint8Array): { status: number } {\n if (payload.length === 0) {\n throw new ProtocolError(\"Empty REQUEST response\", undefined, {\n operation: \"RPC_REQUEST\",\n });\n }\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n return { status };\n },\n\n /**\n * Encode RPC_RESPONSE (303)\n * Payload: [bytes correlation_id][u64 sequence][bytes body][u8 stream_end]\n */\n encodeResponse(\n correlationId: Uint8Array,\n sequence: bigint,\n body: Uint8Array,\n streamEnd: boolean,\n ): Uint8Array {\n const payloadLength = 4 + CORRELATION_ID_LENGTH + 8 + 4 + body.length + 1;\n const buffer = new Uint8Array(payloadLength);\n let offset = 0;\n\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = 0;\n buffer[offset++] = CORRELATION_ID_LENGTH;\n buffer.set(correlationId, offset);\n offset += CORRELATION_ID_LENGTH;\n buffer[offset++] = Number((sequence >> 56n) & 0xffn);\n buffer[offset++] = Number((sequence >> 48n) & 0xffn);\n buffer[offset++] = Number((sequence >> 40n) & 0xffn);\n buffer[offset++] = Number((sequence >> 32n) & 0xffn);\n buffer[offset++] = Number((sequence >> 24n) & 0xffn);\n buffer[offset++] = Number((sequence >> 16n) & 0xffn);\n buffer[offset++] = Number((sequence >> 8n) & 0xffn);\n buffer[offset++] = Number(sequence & 0xffn);\n buffer[offset++] = (body.length >> 24) & 0xff;\n buffer[offset++] = (body.length >> 16) & 0xff;\n buffer[offset++] = (body.length >> 8) & 0xff;\n buffer[offset++] = body.length & 0xff;\n buffer.set(body, offset);\n offset += body.length;\n buffer[offset] = streamEnd ? 1 : 0;\n\n return buffer;\n },\n\n decodeResponse(payload: Uint8Array): {\n correlationId: Uint8Array;\n sequence: bigint;\n body: Uint8Array;\n streamEnd: boolean;\n } {\n if (payload.length < 4 + CORRELATION_ID_LENGTH + 8 + 4) {\n throw new ProtocolError(\"Invalid RPC response payload length\", undefined, {\n operation: \"RPC_DECODE_RESPONSE\",\n });\n }\n\n const corrLen = readU32BEAt(payload, 0);\n if (corrLen !== CORRELATION_ID_LENGTH) {\n throw new ProtocolError(`Invalid correlation ID length: ${corrLen}, expected 16`, undefined, {\n correlationLength: corrLen,\n expectedLength: CORRELATION_ID_LENGTH,\n });\n }\n\n const correlationId = payload.subarray(4, 4 + corrLen);\n let offset = 4 + corrLen;\n\n const sequence =\n (BigInt(readU32BEAt(payload, offset)) << 32n) | BigInt(readU32BEAt(payload, offset + 4));\n offset += 8;\n\n const bodyLen = readU32BEAt(payload, offset);\n offset += 4;\n if (offset + bodyLen > payload.length) {\n throw new ProtocolError(\"Invalid RPC response body length\", undefined, {\n operation: \"RPC_DECODE_RESPONSE\",\n });\n }\n\n const body = payload.subarray(offset, offset + bodyLen);\n offset += bodyLen;\n\n let streamEnd = false;\n if (offset < payload.length) {\n streamEnd = payload[offset] === 1;\n offset += 1;\n }\n\n if (offset !== payload.length) {\n throw new ProtocolError(\"Invalid RPC response payload structure\", undefined, {\n operation: \"RPC_DECODE_RESPONSE\",\n });\n }\n\n return { correlationId, sequence, body, streamEnd };\n },\n\n decodeResponseKey(payload: Uint8Array): {\n correlationKey: bigint;\n sequence: bigint;\n body: Uint8Array;\n streamEnd: boolean;\n } {\n if (payload.length < 4 + CORRELATION_ID_LENGTH + 8 + 4) {\n throw new ProtocolError(\"Invalid RPC response payload length\", undefined, {\n operation: \"RPC_DECODE_RESPONSE_KEY\",\n });\n }\n\n const corrLen = readU32BEAt(payload, 0);\n if (corrLen !== CORRELATION_ID_LENGTH) {\n throw new ProtocolError(`Invalid correlation ID length: ${corrLen}, expected 16`, undefined, {\n correlationLength: corrLen,\n expectedLength: CORRELATION_ID_LENGTH,\n });\n }\n\n const correlationIdOffset = 4;\n const correlationKey = readCorrelationKey(payload, correlationIdOffset);\n let offset = correlationIdOffset + corrLen;\n\n const sequence =\n (BigInt(readU32BEAt(payload, offset)) << 32n) | BigInt(readU32BEAt(payload, offset + 4));\n offset += 8;\n\n const bodyLen = readU32BEAt(payload, offset);\n offset += 4;\n if (offset + bodyLen > payload.length) {\n throw new ProtocolError(\"Invalid RPC response body length\", undefined, {\n operation: \"RPC_DECODE_RESPONSE_KEY\",\n });\n }\n\n const body = payload.subarray(offset, offset + bodyLen);\n offset += bodyLen;\n\n let streamEnd = false;\n if (offset < payload.length) {\n streamEnd = payload[offset] === 1;\n offset += 1;\n }\n\n if (offset !== payload.length) {\n throw new ProtocolError(\"Invalid RPC response payload structure\", undefined, {\n operation: \"RPC_DECODE_RESPONSE_KEY\",\n });\n }\n\n return { correlationKey, sequence, body, streamEnd };\n },\n\n /**\n * Encode RPC_SUBSCRIBE_WORKER (304)\n * Payload: [string worker_route]\n */\n encodeSubscribeWorker(route: string): Uint8Array {\n return getRouteEncoding(route).slice();\n },\n\n /**\n * Decode SUBSCRIBE_WORKER response (standard [u8 status])\n */\n decodeSubscribeWorkerResponse(payload: Uint8Array): SubscribeResponse {\n if (payload.length === 0) {\n throw new ProtocolError(\"Empty SUBSCRIBE_WORKER response\", undefined, {\n operation: \"RPC_SUBSCRIBE_WORKER\",\n });\n }\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n return { status };\n },\n\n /**\n * Encode RPC_UNSUBSCRIBE_WORKER (305)\n * Payload: [string worker_route]\n */\n encodeUnsubscribeWorker(route: string): Uint8Array {\n return getRouteEncoding(route).slice();\n },\n\n /**\n * Decode UNSUBSCRIBE_WORKER response (standard [u8 status])\n */\n decodeUnsubscribeWorkerResponse(payload: Uint8Array): UnsubscribeResponse {\n if (payload.length === 0) {\n throw new ProtocolError(\"Empty UNSUBSCRIBE_WORKER response\", undefined, {\n operation: \"RPC_UNSUBSCRIBE_WORKER\",\n });\n }\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n return { status };\n },\n\n /**\n * Decode a standard RPC error body.\n * Format: [u8 status=1][u32 error_code][string message]\n */\n decodeErrorBody(payload: Uint8Array): { code: number; message: string } | null {\n if (payload.length < 5) {\n return null;\n }\n\n const reader = new BufferReader(payload);\n if (reader.readU8() !== 1) {\n return null;\n }\n\n const code = reader.readU32BE();\n const message = reader.readString();\n if (!reader.isEOF()) {\n return null;\n }\n\n return { code, message };\n },\n\n /**\n * Decode incoming RPC_REQUEST (302) for worker mode\n * Payload: [u32 corrLen=16][16 bytes correlation_id][string route][string reply_route][bytes body]\n */\n decodeInboundRequest(payload: Uint8Array): {\n correlationId: Uint8Array;\n route: string;\n replyRoute: string;\n body: Uint8Array;\n } {\n let offset = 0;\n if (offset + 4 > payload.length) {\n throw new ProtocolError(\"Invalid RPC request payload length\", undefined, {\n operation: \"RPC_DECODE_INBOUND_REQUEST\",\n });\n }\n\n const corrLen = readU32BEAt(payload, offset);\n offset += 4;\n if (corrLen !== CORRELATION_ID_LENGTH) {\n throw new ProtocolError(`Invalid correlation ID length: ${corrLen}, expected 16`, undefined, {\n correlationLength: corrLen,\n expectedLength: CORRELATION_ID_LENGTH,\n });\n }\n\n if (offset + corrLen > payload.length) {\n throw new ProtocolError(\"Invalid RPC request payload length\", undefined, {\n operation: \"RPC_DECODE_INBOUND_REQUEST\",\n });\n }\n const correlationId = payload.subarray(offset, offset + corrLen);\n offset += corrLen;\n\n const routeResult = readStringFromPayload(payload, offset);\n const route = routeResult.value;\n offset = routeResult.nextOffset;\n\n const replyRouteResult = readStringFromPayload(payload, offset);\n const replyRoute = replyRouteResult.value;\n offset = replyRouteResult.nextOffset;\n\n const bodyLen = readU32BEAt(payload, offset);\n offset += 4;\n if (offset + bodyLen > payload.length) {\n throw new ProtocolError(\"Invalid RPC request body length\", undefined, {\n operation: \"RPC_DECODE_INBOUND_REQUEST\",\n });\n }\n const body = payload.subarray(offset, offset + bodyLen);\n\n return { correlationId, route, replyRoute, body };\n },\n};\n","/**\n * RPC domain types\n * Per fitz-go/internal/domains/rpc/rpc.go\n */\n\n/**\n * Single response frame from a streaming RPC call\n */\nexport interface ResponseFrame {\n body: Uint8Array;\n sequence: bigint;\n}\n\n/**\n * Inbound RPC request received by a worker\n */\nexport interface InboundRequest {\n route: string;\n replyRoute: string;\n body: Uint8Array;\n}\n\n/**\n * Allows a worker to send responses back to the caller\n */\nexport interface ResponseWriter {\n send(body: Uint8Array, isEnd: boolean): Promise<void>;\n}\n\n/**\n * Handler for incoming RPC requests (worker mode)\n */\nexport type RpcHandler = (req: InboundRequest, writer: ResponseWriter) => Promise<void>;\n\n/**\n * Active worker registration\n */\nexport type RpcSubscription = ReturnType<typeof createRpcSubscription>;\n\nexport function createRpcSubscription(\n route: string,\n unsubscribeFn: (route: string) => Promise<void>,\n) {\n const unsubscribe = async (): Promise<void> => {\n await unsubscribeFn(route);\n };\n\n return {\n route,\n unsubscribe,\n };\n}\n\n/**\n * RPC request options\n */\nexport interface RequestOptions {\n timeoutMs?: number;\n signal?: AbortSignal;\n}\n\n/**\n * RPC status codes (from server responses)\n */\nexport enum RpcStatus {\n Ok = 0,\n Timeout = 1,\n HandlerNotFound = 2,\n HandlerError = 3,\n InvalidRequest = 4,\n}\n\n/**\n * Response to RPC_SUBSCRIBE request\n */\nexport interface SubscribeResponse {\n status: number;\n}\n\n/**\n * Response to RPC_UNSUBSCRIBE request\n */\nexport interface UnsubscribeResponse {\n status: number;\n}\n","/**\n * RPC domain client.\n */\n\nimport { createDomainClient } from \"../base\";\nimport { RpcCodec, acquirePooledCorrelationId, releasePooledCorrelationId } from \"./codec\";\nimport {\n RequestOptions,\n ResponseFrame,\n RpcHandler,\n RpcSubscription,\n ResponseWriter,\n RpcStatus,\n createRpcSubscription,\n} from \"./types\";\nimport {\n MSG_RPC_REQUEST,\n MSG_RPC_RESPONSE,\n MSG_RPC_ACK,\n MSG_RPC_SUBSCRIBE_WORKER,\n MSG_RPC_UNSUBSCRIBE_WORKER,\n} from \"../../frame/types\";\nimport {\n ConnectionError,\n ErrCodeRpcWorkerNotFound,\n RpcError,\n TransportError,\n} from \"../../core/errors\";\nimport { ConnectionState } from \"../../core/types\";\nimport { readU128BEAt, utf8Encoder } from \"../../core/buffer\";\nimport { isConcreteRouteShape } from \"../_routes\";\nimport type { Connection } from \"../../client/connection\";\n\ntype DecodedInboundRequest = {\n correlationId: Uint8Array;\n route: string;\n replyRoute: string;\n body: Uint8Array;\n};\n\ntype ManagedResponseWriter = ResponseWriter & {\n dispose(): void;\n};\n\nfunction createRpcResponseWriter(\n connection: Connection,\n correlationId: Uint8Array,\n): ManagedResponseWriter {\n let sequence = 0n;\n let stale = false;\n let unsubscribeDisconnect: () => void = () => undefined;\n\n const dispose = (): void => {\n if (stale) {\n return;\n }\n\n stale = true;\n unsubscribeDisconnect();\n unsubscribeDisconnect = () => undefined;\n };\n\n unsubscribeDisconnect = connection.onDisconnect(() => {\n dispose();\n });\n\n const send = async (body: Uint8Array, isEnd: boolean): Promise<void> => {\n if (stale) {\n throw new ConnectionError(\"RPC response writer is no longer valid\");\n }\n\n const payload = RpcCodec.encodeResponse(correlationId, sequence++, body, isEnd);\n\n try {\n await connection.send(MSG_RPC_RESPONSE, payload);\n if (isEnd) {\n dispose();\n }\n } catch (error) {\n if (isBenignShutdownError(error, connection)) {\n dispose();\n return;\n }\n throw error;\n }\n };\n\n return {\n send,\n dispose,\n };\n}\n\nfunction isBenignShutdownError(error: unknown, connection: Connection): boolean {\n if (connection.getState() !== ConnectionState.Authenticated) {\n return true;\n }\n\n if (error instanceof ConnectionError) {\n return true;\n }\n\n if (!(error instanceof TransportError)) {\n return false;\n }\n\n return /closed|not connected|reset/i.test(error.message);\n}\n\ntype RpcIterator = AsyncIterableIterator<ResponseFrame> & {\n push(frame: ResponseFrame): void;\n end(): void;\n fail(reason: unknown): void;\n};\n\nfunction createRpcIterator(\n cleanupPendingRpc: () => void,\n timeoutMs: number,\n signal?: AbortSignal,\n): RpcIterator {\n const buffer: ResponseFrame[] = [];\n let done = false;\n let failureReason: unknown;\n let resolveNext: ((frame: ResponseFrame | null) => void) | null = null;\n let rejectNext: ((reason?: unknown) => void) | null = null;\n let abortListener: (() => void) | null = null;\n let clearPendingNext: (() => void) | null = null;\n\n const clearPendingWait = (): void => {\n clearPendingNext?.();\n clearPendingNext = null;\n detachAbortListener();\n resolveNext = null;\n rejectNext = null;\n };\n\n const push = (frame: ResponseFrame): void => {\n if (done) {\n return;\n }\n\n if (resolveNext) {\n const resolve = resolveNext;\n resolveNext = null;\n rejectNext = null;\n resolve(frame);\n } else {\n buffer.push(frame);\n }\n };\n\n const end = (): void => {\n done = true;\n if (resolveNext) {\n const resolve = resolveNext;\n clearPendingWait();\n resolve(null);\n }\n };\n\n const fail = (reason: unknown): void => {\n done = true;\n failureReason = reason;\n cleanupPendingRpc();\n if (rejectNext) {\n const reject = rejectNext;\n clearPendingWait();\n const rejectWithCurrentSignalState = () => {\n reject(signal?.aborted ? abortError() : reason);\n };\n if (signal) {\n setTimeout(rejectWithCurrentSignalState, 0);\n } else {\n void Promise.resolve().then(rejectWithCurrentSignalState);\n }\n return;\n }\n };\n\n const next = async (): Promise<IteratorResult<ResponseFrame>> => {\n if (signal?.aborted) {\n done = true;\n cleanupPendingRpc();\n throw abortError();\n }\n\n if (failureReason !== undefined) {\n throw failureReason;\n }\n\n if (buffer.length > 0) {\n const value = buffer.shift();\n if (!value) {\n return { value: undefined, done: true };\n }\n return { value, done: false };\n }\n\n if (done) {\n return { value: undefined, done: true };\n }\n\n const frame = await new Promise<ResponseFrame | null>((resolve, reject) => {\n const timer = setTimeout(() => {\n clearPendingWait();\n done = true;\n cleanupPendingRpc();\n reject(new RpcError(\"RPC call timeout\", \"TIMEOUT\", RpcStatus.Timeout));\n }, timeoutMs);\n clearPendingNext = () => {\n clearTimeout(timer);\n };\n\n const onAbort = () => {\n clearPendingWait();\n done = true;\n cleanupPendingRpc();\n reject(abortError());\n };\n\n if (signal) {\n signal.addEventListener(\"abort\", onAbort, { once: true });\n abortListener = () => {\n signal.removeEventListener(\"abort\", onAbort);\n };\n }\n\n resolveNext = (f) => {\n clearPendingWait();\n resolve(f);\n };\n rejectNext = reject;\n });\n\n if (frame === null) {\n return { value: undefined, done: true };\n }\n\n if (failureReason !== undefined) {\n throw failureReason;\n }\n\n return { value: frame, done: false };\n };\n\n const returnMethod = async (): Promise<IteratorResult<ResponseFrame>> => {\n done = true;\n clearPendingWait();\n cleanupPendingRpc();\n return { value: undefined, done: true };\n };\n\n const detachAbortListener = (): void => {\n abortListener?.();\n abortListener = null;\n };\n\n const abortError = (): Error => {\n const error = new Error(\"The operation was aborted\");\n error.name = \"AbortError\";\n return error;\n };\n\n return {\n push,\n end,\n fail,\n next,\n return: returnMethod,\n [Symbol.asyncIterator]() {\n return this;\n },\n };\n}\n\nexport type RpcClient = ReturnType<typeof createRpcClient>;\n\ntype RpcClientConstructor = {\n new (connection: Connection): RpcClient;\n (connection: Connection): RpcClient;\n};\n\nexport const RpcClient: RpcClientConstructor = function (connection: Connection) {\n return createRpcClient(connection);\n} as unknown as RpcClientConstructor;\n\nexport function createRpcClient(connection: Connection) {\n const { requestFrame, requestReconnectFrame } = createDomainClient(connection);\n type PendingRpcEntry = { iterator: RpcIterator; correlationId: Uint8Array };\n const pendingRpcs = new Map<bigint, PendingRpcEntry>();\n const workers = new Map<string, RpcHandler>();\n let initialized = false;\n\n const cleanupPendingRpc = (correlationKey: bigint, correlationId: Uint8Array): void => {\n if (!pendingRpcs.has(correlationKey)) {\n return;\n }\n pendingRpcs.delete(correlationKey);\n releasePooledCorrelationId(correlationId);\n };\n\n connection.onDisconnect(() => {\n const pending = Array.from(pendingRpcs.values());\n for (const entry of pending) {\n if (typeof (entry.iterator as any).fail === \"function\") {\n (entry.iterator as any).fail(\n new ConnectionError(\"Connection closed while RPC response was pending\"),\n );\n }\n }\n pendingRpcs.clear();\n });\n\n connection.onReconnect(async () => {\n if (workers.size === 0) {\n return;\n }\n\n const registeredWorkers = Array.from(workers.entries());\n workers.clear();\n for (const [route, handler] of registeredWorkers) {\n await registerWorkerInternal(route, handler, requestReconnectFrame);\n }\n });\n\n const call = async (\n route: string,\n body: Uint8Array,\n options?: RequestOptions,\n ): Promise<AsyncIterableIterator<ResponseFrame>> => {\n assertRpcRoute(route);\n initRpcHandler();\n\n const timeoutMs = options?.timeoutMs ?? 30000;\n const correlationId = acquirePooledCorrelationId();\n const correlationKey = correlationIdToKey(correlationId);\n\n const iterator = createRpcIterator(\n () => cleanupPendingRpc(correlationKey, correlationId),\n timeoutMs,\n options?.signal,\n );\n pendingRpcs.set(correlationKey, { iterator, correlationId });\n\n try {\n const payload = RpcCodec.encodeCallRequest(correlationId, route, body);\n const response = await requestFrame(MSG_RPC_REQUEST, payload, options?.signal);\n\n const decoded = RpcCodec.decodeRequestResponse(response);\n if (decoded.status !== RpcStatus.Ok) {\n cleanupPendingRpc(correlationKey, correlationId);\n throw new RpcError(\n `RPC REQUEST failed: status ${decoded.status}`,\n \"REQUEST_FAILED\",\n decoded.status,\n );\n }\n\n return iterator;\n } catch (error) {\n cleanupPendingRpc(correlationKey, correlationId);\n throw error;\n }\n };\n\n const registerWorkerInternal = async (\n route: string,\n handler: RpcHandler,\n request = requestFrame,\n ): Promise<void> => {\n const payload = RpcCodec.encodeSubscribeWorker(route);\n const response = await request(MSG_RPC_SUBSCRIBE_WORKER, payload);\n const decoded = RpcCodec.decodeSubscribeWorkerResponse(response);\n\n if (decoded.status !== RpcStatus.Ok) {\n throw new RpcError(\n `RPC SUBSCRIBE_WORKER failed: status ${decoded.status}`,\n \"SUBSCRIBE_FAILED\",\n decoded.status,\n );\n }\n\n workers.set(route, handler);\n };\n\n const registerWorker = async (route: string, handler: RpcHandler): Promise<RpcSubscription> => {\n assertRpcRoute(route);\n initRpcHandler();\n await registerWorkerInternal(route, handler);\n\n const unsubscribeFn = async (registeredRoute: string) => {\n await unregisterWorker(registeredRoute);\n };\n\n return createRpcSubscription(route, unsubscribeFn);\n };\n\n const unregisterWorker = async (route: string): Promise<void> => {\n workers.delete(route);\n\n try {\n const payload = RpcCodec.encodeUnsubscribeWorker(route);\n const response = await requestFrame(MSG_RPC_UNSUBSCRIBE_WORKER, payload);\n const decoded = RpcCodec.decodeUnsubscribeWorkerResponse(response);\n\n if (decoded.status !== RpcStatus.Ok) {\n return;\n }\n } catch {\n return;\n }\n };\n\n const initRpcHandler = (): void => {\n if (initialized) {\n return;\n }\n initialized = true;\n\n connection.registerNotificationHandler(MSG_RPC_RESPONSE, (payload: Uint8Array) => {\n try {\n const { correlationKey, sequence, body, streamEnd } = RpcCodec.decodeResponseKey(payload);\n handleRpcResponse(correlationKey, sequence, body, streamEnd);\n } catch {\n // Best-effort decode for background frames.\n }\n });\n\n connection.registerNotificationHandler(MSG_RPC_ACK, () => {\n // Worker ACK frames are broker-internal flow control signals. The current\n // public RPC API does not surface them.\n });\n\n connection.registerNotificationHandler(MSG_RPC_REQUEST, (payload: Uint8Array) => {\n try {\n const request = RpcCodec.decodeInboundRequest(payload);\n handleRpcRequest(request);\n } catch {\n // Best-effort decode for background frames.\n }\n });\n };\n\n const handleRpcResponse = (\n correlationKey: bigint,\n sequence: bigint,\n body: Uint8Array,\n streamEnd: boolean,\n ): void => {\n const entry = pendingRpcs.get(correlationKey);\n\n if (!entry) {\n return;\n }\n const iterator = entry.iterator;\n\n const terminalError = RpcCodec.decodeErrorBody(body);\n if (terminalError?.code === ErrCodeRpcWorkerNotFound) {\n iterator.fail(\n new RpcError(\n terminalError.message || \"RPC worker not found\",\n \"WORKER_NOT_FOUND\",\n terminalError.code,\n ),\n );\n return;\n }\n\n if (streamEnd) {\n if (body.length > 0) {\n iterator.push({ body, sequence });\n }\n cleanupPendingRpc(correlationKey, entry.correlationId);\n iterator.end();\n } else {\n iterator.push({ body, sequence });\n }\n };\n\n const handleRpcRequest = (req: DecodedInboundRequest): void => {\n const handler = workers.get(req.route);\n\n if (!handler) {\n return;\n }\n\n const writer = createRpcResponseWriter(connection, req.correlationId);\n\n connection.dispatchAsyncHandler(async () => {\n try {\n await handler(\n {\n route: req.route,\n replyRoute: req.replyRoute,\n body: req.body,\n },\n writer,\n );\n } catch (error) {\n if (isBenignShutdownError(error, connection)) {\n return;\n }\n\n const message = error instanceof Error ? error.message : \"Handler error\";\n try {\n await writer.send(utf8Encoder.encode(`Handler error: ${message}`), true);\n } catch {\n // Best-effort error response.\n }\n } finally {\n writer.dispose();\n }\n });\n };\n\n const correlationIdToKey = (correlationId: Uint8Array): bigint => {\n return readU128BEAt(correlationId, 0);\n };\n\n return {\n call,\n registerWorker,\n };\n}\n\nexport * from \"./types\";\n\nfunction assertRpcRoute(route: string): void {\n if (!isConcreteRouteShape(route, \"rpc\")) {\n throw new RpcError(\n `Invalid rpc route: ${route} (expected rpc://{realm}/{area}/{resource} or any other concrete rpc route, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n","/**\n * Lease domain codec for encoding/decoding messages\n * Per fitz-go/internal/domains/lease/protocol.go\n */\n\nimport { BufferWriter, BufferReader } from \"../../core/buffer\";\nimport { ProtocolError } from \"../../core/errors\";\nimport { AcquireResponse, QueryResponse, SubscribeResponse, UnsubscribeResponse } from \"./types\";\n\nexport const LeaseCodec = {\n /**\n * Encode ACQUIRE request\n * Payload: [string route][string client_id (empty)][u64 ttl_seconds]\n */\n encodeAcquire(route: string, ttlSecs: number): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(route);\n writer.writeRoute(\"\"); // client_id (empty = server assigns)\n writer.writeU64BE(BigInt(ttlSecs));\n return writer.getBufferView();\n },\n\n /**\n * Decode ACQUIRE response\n * Standard response: [u8 status=0][u8 response_type][u64 fencing_token]\n * response_type: 0=Acquired, 1=AlreadyHeld (idempotent)\n */\n decodeAcquireResponse(payload: Uint8Array): AcquireResponse {\n if (payload.length < 10) {\n throw new ProtocolError(\n `ACQUIRE response too short: got ${payload.length} bytes, expected >= 10`,\n undefined,\n { operation: \"LEASE_ACQUIRE\", payloadLength: payload.length },\n );\n }\n\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n throw new ProtocolError(`ACQUIRE failed with status ${status}`, status, {\n operation: \"LEASE_ACQUIRE\",\n status,\n });\n }\n reader.readU8(); // responseType: 0=Acquired, 1=AlreadyHeld\n const fencingToken = reader.readU64BE();\n\n // response_type: 0=Acquired, 1=AlreadyHeld\n // For now, treat both as success\n return { token: fencingToken };\n },\n\n /**\n * Encode EXTEND request\n * Payload: [string route][string client_id (empty)][u64 fencing_token][u64 ttl_seconds]\n */\n encodeExtend(route: string, token: bigint, ttlSecs: number): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(route);\n writer.writeRoute(\"\"); // client_id (empty = use existing)\n writer.writeU64BE(token);\n writer.writeU64BE(BigInt(ttlSecs));\n return writer.getBufferView();\n },\n\n encodeRenew(route: string, token: bigint, ttlSecs: number): Uint8Array {\n return this.encodeExtend(route, token, ttlSecs);\n },\n\n /**\n * Encode RELEASE request\n * Payload: [string route][string client_id (empty)][u64 fencing_token]\n */\n encodeRelease(route: string, token: bigint): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(route);\n writer.writeRoute(\"\"); // client_id (empty = use existing)\n writer.writeU64BE(token);\n return writer.getBufferView();\n },\n\n /**\n * Encode QUERY request\n * Payload: [string route]\n */\n encodeQuery(route: string): Uint8Array {\n const writer = new BufferWriter(64);\n writer.writeRoute(route);\n return writer.getBufferView();\n },\n\n /**\n * Decode QUERY response\n * Free: [u8 has_holder=0][u32 pending_waiters]\n * Held: [u8 has_holder=1][string owner_id][u64 ttl_remaining_secs][u32 pending_waiters]\n */\n decodeQueryResponse(payload: Uint8Array): QueryResponse {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status };\n }\n const hasHolder = reader.readU8();\n\n if (hasHolder === 0) {\n // Free\n reader.readU32BE(); // pendingWaiters\n return { status, isHeld: false };\n }\n\n // Held\n const owner = reader.readRoute();\n const ttlRemainingSecs = reader.readU64BE();\n reader.readU32BE(); // pendingWaiters\n\n // Note: token not returned in QUERY response\n return {\n status,\n isHeld: true,\n owner,\n ttlRemainingSecs,\n expiresAt: BigInt(Math.floor(Date.now() / 1000)) + ttlRemainingSecs,\n };\n },\n\n /**\n * Encode SUBSCRIBE request\n * Payload: [string pattern]\n */\n encodeSubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(64);\n writer.writeRoute(pattern);\n return writer.getBufferView();\n },\n\n /**\n * Decode SUBSCRIBE response\n * Standard response: [u8 status=0][u64 subscription_id]\n */\n decodeSubscribeResponse(payload: Uint8Array): SubscribeResponse {\n if (payload.length < 9) {\n throw new ProtocolError(\n `SUBSCRIBE response too short: got ${payload.length} bytes, expected >= 9`,\n undefined,\n { operation: \"LEASE_SUBSCRIBE\", payloadLength: payload.length },\n );\n }\n\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status };\n }\n const subId = reader.readU64BE();\n\n return { status, subId };\n },\n\n /**\n * Encode UNSUBSCRIBE request\n * Payload: [string pattern]\n */\n encodeUnsubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(64);\n writer.writeRoute(pattern);\n return writer.getBufferView();\n },\n\n /**\n * Decode UNSUBSCRIBE response\n * Standard response: [u8 status=0]\n */\n decodeUnsubscribeResponse(payload: Uint8Array): UnsubscribeResponse {\n if (payload.length === 0) {\n return { status: 0 };\n }\n\n const reader = new BufferReader(payload);\n return { status: reader.readU8() };\n },\n\n /**\n * Decode NOTIFY (409) message\n * Payload: [u64 subscription_id][string route][bytes payload]\n */\n decodeNotification(payload: Uint8Array): {\n subId: bigint;\n route: string;\n } {\n const reader = new BufferReader(payload);\n const subId = reader.readU64BE();\n const route = reader.readRoute();\n\n return { subId, route };\n },\n};\n","/**\n * Standard response parsing utilities\n * Per CLIENT_SPEC.md and fitz-go/internal/core/connection/connection.go\n *\n * Standard Response Format:\n * [u8 status][payload...]\n *\n * status=0: success, remaining payload follows\n * status=1: error, followed by [u32 len][error message]\n */\n\nimport { BufferReader } from \"../core/buffer\";\nimport { ProtocolError } from \"../core/errors\";\n\nexport interface ParsedResponse {\n success: boolean;\n data: Uint8Array;\n error?: string;\n}\n\n/**\n * Parse standard response format\n * Returns {success: true, data: remaining} on status=0\n * Returns {success: false, error: message} on status=1\n */\nexport function parseStandardResponse(payload: Uint8Array): ParsedResponse {\n if (payload.length === 0) {\n throw new ProtocolError(\"Response payload is empty\", undefined, {\n payloadLength: 0,\n });\n }\n\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n\n if (status === 0) {\n // Success - return remaining payload\n const remaining = reader.remaining();\n return { success: true, data: remaining };\n }\n\n if (status === 1) {\n // Error - read error message\n if (reader.isEOF()) {\n return {\n success: false,\n data: new Uint8Array(0),\n error: \"Unknown error (no message)\",\n };\n }\n const errorMsg = reader.readString();\n return { success: false, data: new Uint8Array(0), error: errorMsg };\n }\n\n // Unknown status code\n throw new ProtocolError(`Unknown response status: ${status}`, status, {\n status,\n });\n}\n\n/**\n * Check if response is success, throw error if not\n * Returns remaining data on success\n */\nexport function assertSuccess(payload: Uint8Array, operation: string): Uint8Array {\n const result = parseStandardResponse(payload);\n if (!result.success) {\n throw new ProtocolError(`${operation} failed: ${result.error || \"Unknown error\"}`, 1, {\n operation,\n error: result.error || \"Unknown error\",\n });\n }\n return result.data;\n}\n","/**\n * Lease domain types\n * Per fitz-go/internal/domains/lease/lease.go\n */\n\nimport type { Connection } from \"../../client/connection\";\nimport { LeaseError } from \"../../core/errors\";\n\n/**\n * Change notification when a lease is released or expires\n */\nexport interface ChangeNotification {\n route: string;\n}\n\n/**\n * Handler for lease change notifications\n */\nexport type ChangeHandler = (notif: ChangeNotification) => Promise<void>;\n\n/**\n * Active lease change subscription\n */\nexport type LeaseSubscription = ReturnType<typeof createLeaseSubscription>;\n\nexport function createLeaseSubscription(\n subId: bigint,\n pattern: string,\n unsubscribeFn: (subId: bigint) => Promise<void>,\n) {\n const unsubscribe = async (): Promise<void> => {\n await unsubscribeFn(subId);\n };\n\n return {\n subId,\n pattern,\n unsubscribe,\n };\n}\n\n/**\n * Lease handle representing an acquired lease\n * Provides renew() and release() methods\n */\nexport type Lease = ReturnType<typeof createLease>;\n\nexport function createLease(\n token: bigint,\n expiresAt: bigint,\n route: string,\n connection: Connection,\n) {\n let currentToken = token;\n let currentExpiry = expiresAt;\n let closed = false;\n let unsubscribeDisconnect: () => void = () => undefined;\n unsubscribeDisconnect = connection.onDisconnect(() => {\n closed = true;\n unsubscribeDisconnect();\n });\n\n const ensureOpen = (): void => {\n if (closed) {\n throw new LeaseError(\"Lease handle is no longer valid after disconnect\", \"CLOSED\");\n }\n };\n\n const extend = async (ttlSecs: number, signal?: AbortSignal): Promise<bigint> => {\n ensureOpen();\n const requestPayload = LeaseCodec.encodeExtend(route, currentToken, ttlSecs);\n const response = await connection.request(MSG_LEASE_RENEW, requestPayload, signal);\n const data = assertSuccess(response, \"EXTEND\");\n\n if (data && data.length >= 8) {\n const reader = new BufferReader(data);\n currentToken = reader.readU64BE();\n }\n\n currentExpiry = BigInt(Math.floor(Date.now() / 1000)) + BigInt(ttlSecs);\n return currentExpiry;\n };\n\n const release = async (signal?: AbortSignal): Promise<void> => {\n ensureOpen();\n const payload = LeaseCodec.encodeRelease(route, currentToken);\n const response = await connection.request(MSG_LEASE_RELEASE, payload, signal);\n assertSuccess(response, \"RELEASE\");\n closed = true;\n unsubscribeDisconnect();\n };\n\n const getExpiry = (): bigint => currentExpiry;\n\n const testOnlyInvalidToken = (): bigint => currentToken + 1n;\n\n const testOnlyExtendWithToken = async (\n tokenToUse: bigint,\n ttlSecs: number,\n signal?: AbortSignal,\n ): Promise<bigint> => {\n ensureOpen();\n const requestPayload = LeaseCodec.encodeExtend(route, tokenToUse, ttlSecs);\n const response = await connection.request(MSG_LEASE_RENEW, requestPayload, signal);\n const data = assertSuccess(response, \"EXTEND\");\n\n if (data && data.length >= 8) {\n const reader = new BufferReader(data);\n currentToken = reader.readU64BE();\n }\n\n currentExpiry = BigInt(Math.floor(Date.now() / 1000)) + BigInt(ttlSecs);\n return currentExpiry;\n };\n\n const testOnlyReleaseWithToken = async (\n tokenToUse: bigint,\n signal?: AbortSignal,\n ): Promise<void> => {\n ensureOpen();\n const payload = LeaseCodec.encodeRelease(route, tokenToUse);\n const response = await connection.request(MSG_LEASE_RELEASE, payload, signal);\n assertSuccess(response, \"RELEASE\");\n closed = true;\n unsubscribeDisconnect();\n };\n\n return {\n extend,\n release,\n getExpiry,\n testOnlyInvalidToken,\n testOnlyExtendWithToken,\n testOnlyReleaseWithToken,\n };\n}\n\n/**\n * Response to ACQUIRE request\n */\nexport interface AcquireResponse {\n token: bigint;\n expiresAt?: bigint;\n}\n\n/**\n * Lease information from QUERY request\n */\nexport interface LeaseInfo {\n isHeld: boolean;\n owner?: string;\n token?: bigint;\n ttlRemainingSecs?: bigint;\n expiresAt?: bigint;\n}\n\n/**\n * Response to QUERY request\n */\nexport interface QueryResponse {\n status: number;\n isHeld?: boolean;\n owner?: string;\n token?: bigint;\n ttlRemainingSecs?: bigint;\n expiresAt?: bigint;\n}\n\n/**\n * Response to SUBSCRIBE request\n */\nexport interface SubscribeResponse {\n status: number;\n subId?: bigint;\n}\n\n/**\n * Response to UNSUBSCRIBE request\n */\nexport interface UnsubscribeResponse {\n status: number;\n}\n\n/**\n * Lease status codes\n */\nexport enum LeaseStatus {\n Ok = 0,\n LeaseHeld = 1,\n NotFound = 2,\n InvalidToken = 3,\n}\n\n// Import needed types for Lease class methods\nimport { BufferReader } from \"../../core/buffer\";\nimport { assertSuccess } from \"../../protocol/response\";\nimport { MSG_LEASE_RENEW, MSG_LEASE_RELEASE } from \"../../frame/types\";\nimport { LeaseCodec } from \"./codec\";\n","/**\n * Lease domain client.\n */\n\nimport { createDomainClient } from \"../base\";\nimport type { Connection } from \"../../client/connection\";\nimport { LeaseError } from \"../../core/errors\";\nimport {\n MSG_LEASE_ACQUIRE,\n MSG_LEASE_NOTIFY,\n MSG_LEASE_QUERY,\n MSG_LEASE_SUBSCRIBE,\n MSG_LEASE_UNSUBSCRIBE,\n} from \"../../frame/types\";\nimport { isRouteShape } from \"../_routes\";\nimport { LeaseCodec } from \"./codec\";\nimport {\n ChangeHandler,\n ChangeNotification,\n Lease,\n LeaseInfo,\n LeaseSubscription,\n createLease,\n createLeaseSubscription,\n} from \"./types\";\n\ntype LeaseSubscriptionState = {\n subId: bigint;\n handlers: Map<number, ChangeHandler>;\n};\n\nexport type LeaseClient = ReturnType<typeof createLeaseClient>;\n\nexport function createLeaseClient(connection: Connection) {\n const { requestFrame, requestReconnectFrame, runWithRetry } = createDomainClient(connection);\n const subscriptionsByPattern = new Map<string, LeaseSubscriptionState>();\n let initialized = false;\n let nextHandlerId = 1;\n\n connection.onReconnect(async () => {\n if (subscriptionsByPattern.size === 0) {\n return;\n }\n\n const subscriptions = Array.from(subscriptionsByPattern.entries(), ([pattern, state]) => ({\n pattern,\n handlers: Array.from(state.handlers.entries()),\n }));\n subscriptionsByPattern.clear();\n\n for (const subscription of subscriptions) {\n const subId = await subscribeWire(subscription.pattern, requestReconnectFrame);\n subscriptionsByPattern.set(subscription.pattern, {\n subId,\n handlers: new Map(subscription.handlers),\n });\n }\n });\n\n const acquire = async (route: string, ttlSecs: number): Promise<Lease> => {\n assertExactLeaseRoute(route);\n const payload = LeaseCodec.encodeAcquire(route, ttlSecs);\n const response = await requestFrame(MSG_LEASE_ACQUIRE, payload);\n const decoded = LeaseCodec.decodeAcquireResponse(response);\n\n if (decoded.token === undefined) {\n throw new LeaseError(\"ACQUIRE failed\", \"ACQUIRE_FAILED\");\n }\n\n const expiresAt = decoded.expiresAt ?? BigInt(Math.floor(Date.now() / 1000)) + BigInt(ttlSecs);\n return createLease(decoded.token, expiresAt, route, connection);\n };\n\n const query = async (route: string): Promise<LeaseInfo> => {\n assertExactLeaseRoute(route);\n return runWithRetry(\n {\n domain: \"lease\",\n operation: \"query\",\n retryClass: \"replayable_read\",\n },\n async () => {\n const payload = LeaseCodec.encodeQuery(route);\n const response = await requestFrame(MSG_LEASE_QUERY, payload);\n const decoded = LeaseCodec.decodeQueryResponse(response);\n if (decoded.status !== 0) {\n throw new LeaseError(\"QUERY failed\", \"QUERY_FAILED\", decoded.status);\n }\n return {\n isHeld: decoded.isHeld ?? false,\n owner: decoded.owner,\n token: decoded.token,\n ttlRemainingSecs: decoded.ttlRemainingSecs,\n expiresAt: decoded.expiresAt,\n };\n },\n );\n };\n\n const subscribe = async (pattern: string, handler: ChangeHandler): Promise<LeaseSubscription> => {\n assertExactLeaseRoute(pattern);\n initNotifyHandler();\n const existing = subscriptionsByPattern.get(pattern);\n if (existing) {\n return addLocalSubscription(pattern, existing.subId, handler);\n }\n\n const subId = await subscribeWire(pattern);\n return addLocalSubscription(pattern, subId, handler);\n };\n\n const subscribeWire = async (pattern: string, request = requestFrame): Promise<bigint> => {\n const payload = LeaseCodec.encodeSubscribe(pattern);\n const response = await request(MSG_LEASE_SUBSCRIBE, payload);\n const decoded = LeaseCodec.decodeSubscribeResponse(response);\n\n if (decoded.subId === undefined) {\n throw new LeaseError(\"SUBSCRIBE failed\", \"SUBSCRIBE_FAILED\");\n }\n\n return decoded.subId;\n };\n\n const addLocalSubscription = (\n pattern: string,\n subId: bigint,\n handler: ChangeHandler,\n ): LeaseSubscription => {\n const handlerId = nextHandlerId++;\n let subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n subscription = { subId, handlers: new Map() };\n subscriptionsByPattern.set(pattern, subscription);\n }\n\n subscription.handlers.set(handlerId, handler);\n return createLeaseSubscription(subId, pattern, async () => {\n await unsubscribe(pattern, handlerId);\n });\n };\n\n const unsubscribe = async (pattern: string, handlerId: number): Promise<void> => {\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n subscription.handlers.delete(handlerId);\n if (subscription.handlers.size > 0) {\n return;\n }\n\n subscriptionsByPattern.delete(pattern);\n const payload = LeaseCodec.encodeUnsubscribe(pattern);\n await requestFrame(MSG_LEASE_UNSUBSCRIBE, payload);\n };\n\n const initNotifyHandler = (): void => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n connection.registerNotificationHandler(MSG_LEASE_NOTIFY, (payload) => {\n try {\n const { route } = LeaseCodec.decodeNotification(payload);\n const subscription = subscriptionsByPattern.get(route);\n if (!subscription) {\n return;\n }\n\n const notification: ChangeNotification = { route };\n for (const handler of subscription.handlers.values()) {\n connection.dispatchAsyncHandler(async () => {\n await handler(notification);\n });\n }\n } catch {\n // Best-effort notification dispatch.\n }\n });\n };\n\n return {\n acquire,\n query,\n subscribe,\n };\n}\n\ntype LeaseClientConstructor = {\n new (connection: Connection): LeaseClient;\n (connection: Connection): LeaseClient;\n};\n\nexport const LeaseClient: LeaseClientConstructor = function (connection: Connection) {\n return createLeaseClient(connection);\n} as unknown as LeaseClientConstructor;\n\nexport * from \"./types\";\n\nfunction assertExactLeaseRoute(route: string): void {\n if (!isRouteShape(route, \"lease\", 3)) {\n throw new LeaseError(\n `Invalid lease route: ${route} (expected lease://{realm}/{area}/{resource}, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n","/**\n * Notice domain codec for encoding/decoding messages\n * Per fitz-go/internal/domains/notice/protocol.go\n */\n\nimport { BufferWriter, BufferReader } from \"../../core/buffer\";\nimport { SubscribeResponse, UnsubscribeResponse } from \"./types\";\n\nexport const NoticeCodec = {\n /**\n * Encode PUBLISH request (fire-and-forget, no response)\n * Payload: [string route][bytes body]\n */\n encodePublish(route: string, body: Uint8Array): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeRoute(route);\n writer.writeU32BE(body.length);\n writer.writeBytes(body);\n return writer.getBufferView();\n },\n\n /**\n * Encode SUBSCRIBE request\n * Payload: [string pattern]\n */\n encodeSubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(64);\n writer.writeRoute(pattern);\n return writer.getBufferView();\n },\n\n /**\n * Decode SUBSCRIBE response\n * Standard response: [u8 status=0][u8 has_sub_id][u64 sub_id if has=1]\n */\n decodeSubscribeResponse(payload: Uint8Array): SubscribeResponse {\n if (payload.length < 2) {\n throw new Error(\"SUBSCRIBE response too short\");\n }\n\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n const hasSubId = reader.readU8();\n\n if (hasSubId !== 1) {\n throw new Error(\"SUBSCRIBE response missing subscription_id\");\n }\n\n if (reader.remainingBytes() < 8) {\n throw new Error(\"SUBSCRIBE response too short for subscription_id\");\n }\n\n const subId = reader.readU64BE();\n return { status, subId };\n },\n\n /**\n * Encode UNSUBSCRIBE request\n * Payload: [u64 subscription_id]\n */\n encodeUnsubscribe(subId: bigint): Uint8Array {\n const writer = new BufferWriter(64);\n writer.writeU64BE(subId);\n return writer.getBufferView();\n },\n\n /**\n * Decode UNSUBSCRIBE response\n * Standard response: [u8 status=0]\n */\n decodeUnsubscribeResponse(): UnsubscribeResponse {\n return { status: 0 };\n },\n\n /**\n * Decode NOTIFY (504) message\n * Payload: [u64 subscription_id][string route][bytes body]\n */\n decodeNotification(payload: Uint8Array): {\n subId: bigint;\n route: string;\n body: Uint8Array;\n } {\n const reader = new BufferReader(payload);\n const subId = reader.readU64BE();\n const route = reader.readRoute();\n const bodyLen = reader.readU32BE();\n const body = reader.readBytes(bodyLen);\n\n return { subId, route, body };\n },\n};\n","/**\n * Notice domain types (Pub/Sub)\n * Per fitz-go/internal/domains/notice/notice.go\n */\n\n/**\n * Received notification message\n */\nexport interface NoticeMsg {\n route: string;\n body: Uint8Array;\n}\n\n/**\n * Handler for incoming notifications\n */\nexport type NoticeHandler = (msg: NoticeMsg) => Promise<void> | void;\n\n/**\n * Active notice subscription\n */\nexport type NoticeSubscription = ReturnType<typeof createNoticeSubscription>;\n\nexport function createNoticeSubscription(\n subId: bigint,\n pattern: string,\n unsubscribeFn: (subId: bigint) => Promise<void>,\n) {\n const unsubscribe = async (): Promise<void> => {\n await unsubscribeFn(subId);\n };\n\n return {\n subId,\n pattern,\n unsubscribe,\n };\n}\n\n/**\n * Response to SUBSCRIBE request\n */\nexport interface SubscribeResponse {\n status: number;\n subId?: bigint;\n}\n\n/**\n * Response to UNSUBSCRIBE request\n */\nexport interface UnsubscribeResponse {\n status: number;\n}\n\n/**\n * Notice status codes\n */\nexport enum NoticeStatus {\n Ok = 0,\n}\n","/**\n * Notice domain client.\n */\n\nimport { createDomainClient } from \"../base\";\nimport { NoticeError } from \"../../core/errors\";\nimport {\n MSG_NOTICE_NOTIFY,\n MSG_NOTICE_PUBLISH,\n MSG_NOTICE_SUBSCRIBE,\n MSG_NOTICE_UNSUBSCRIBE,\n} from \"../../frame/types\";\nimport { isRouteShape, isSelectorRouteShape } from \"../_routes\";\nimport { NoticeCodec } from \"./codec\";\nimport { createNoticeSubscription, NoticeHandler, NoticeMsg, NoticeSubscription } from \"./types\";\nimport type { Connection as ConnectionType } from \"../../client/connection\";\n\ntype NoticeSubscriptionState = {\n subId: bigint;\n handlers: Map<number, NoticeHandler>;\n};\n\nexport type NoticeClient = ReturnType<typeof createNoticeClient>;\n\nexport function createNoticeClient(connection: ConnectionType) {\n const { requestFrame, requestReconnectFrame } = createDomainClient(connection);\n const subscriptionsByPattern = new Map<string, NoticeSubscriptionState>();\n const patternsBySubId = new Map<bigint, string>();\n let initialized = false;\n let nextHandlerId = 1;\n\n connection.onReconnect(async () => {\n if (subscriptionsByPattern.size === 0) {\n return;\n }\n\n const subscriptions = Array.from(subscriptionsByPattern.entries(), ([pattern, state]) => ({\n pattern,\n handlers: Array.from(state.handlers.entries()),\n }));\n subscriptionsByPattern.clear();\n patternsBySubId.clear();\n\n for (const subscription of subscriptions) {\n const subId = await subscribeWire(subscription.pattern, requestReconnectFrame);\n subscriptionsByPattern.set(subscription.pattern, {\n subId,\n handlers: new Map(subscription.handlers),\n });\n patternsBySubId.set(subId, subscription.pattern);\n }\n });\n\n const publish = async (route: string, body: Uint8Array): Promise<void> => {\n assertNoticeRoute(route);\n const payload = NoticeCodec.encodePublish(route, body);\n const cancelOptionalResponse = connection\n .getMultiplexer()\n .expectOptionalResponse(MSG_NOTICE_PUBLISH);\n try {\n await connection.sendFireAndForget(MSG_NOTICE_PUBLISH, payload);\n } catch (error) {\n cancelOptionalResponse();\n throw error;\n }\n };\n\n const subscribe = async (\n pattern: string,\n handler: NoticeHandler,\n ): Promise<NoticeSubscription> => {\n assertNoticePattern(pattern);\n initNotifyHandler();\n const existing = subscriptionsByPattern.get(pattern);\n if (existing) {\n return addLocalSubscription(pattern, existing.subId, handler);\n }\n\n const subId = await subscribeWire(pattern);\n return addLocalSubscription(pattern, subId, handler);\n };\n\n const subscribeWire = async (pattern: string, request = requestFrame): Promise<bigint> => {\n const payload = NoticeCodec.encodeSubscribe(pattern);\n const response = await request(MSG_NOTICE_SUBSCRIBE, payload);\n const decoded = NoticeCodec.decodeSubscribeResponse(response);\n\n if (decoded.subId === undefined) {\n throw new NoticeError(\"SUBSCRIBE response missing subId\", \"MISSING_SUB_ID\");\n }\n\n return decoded.subId;\n };\n\n const addLocalSubscription = (\n pattern: string,\n subId: bigint,\n handler: NoticeHandler,\n ): NoticeSubscription => {\n const handlerId = nextHandlerId++;\n let subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n subscription = { subId, handlers: new Map() };\n subscriptionsByPattern.set(pattern, subscription);\n patternsBySubId.set(subId, pattern);\n }\n\n subscription.handlers.set(handlerId, handler);\n return createNoticeSubscription(subId, pattern, async (_subId: bigint) => {\n await unsubscribe(pattern, handlerId);\n });\n };\n\n const unsubscribe = async (pattern: string, handlerId: number): Promise<void> => {\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n subscription.handlers.delete(handlerId);\n if (subscription.handlers.size > 0) {\n return;\n }\n\n subscriptionsByPattern.delete(pattern);\n patternsBySubId.delete(subscription.subId);\n const payload = NoticeCodec.encodeUnsubscribe(subscription.subId);\n await requestFrame(MSG_NOTICE_UNSUBSCRIBE, payload);\n };\n\n const initNotifyHandler = (): void => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n connection.registerNotificationHandler(MSG_NOTICE_NOTIFY, (payload) => {\n try {\n const { subId, route, body } = NoticeCodec.decodeNotification(payload);\n const pattern = patternsBySubId.get(subId);\n if (!pattern) {\n return;\n }\n\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n const msg: NoticeMsg = { route, body };\n for (const handler of subscription.handlers.values()) {\n connection.dispatchAsyncHandler(async () => {\n await handler(msg);\n });\n }\n } catch {\n // Best-effort notification dispatch.\n }\n });\n };\n\n return {\n publish,\n subscribe,\n };\n}\n\ntype NoticeClientConstructor = {\n new (connection: ConnectionType): NoticeClient;\n (connection: ConnectionType): NoticeClient;\n};\n\nexport const NoticeClient: NoticeClientConstructor = function (connection: ConnectionType) {\n return createNoticeClient(connection);\n} as unknown as NoticeClientConstructor;\n\nexport * from \"./types\";\n\nfunction assertNoticeRoute(route: string): void {\n if (!isRouteShape(route, \"notice\", 3)) {\n throw new NoticeError(\n `Invalid notice route: ${route} (expected notice://{realm}/{area}/{resource}, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n\nfunction assertNoticePattern(pattern: string): void {\n if (!isSelectorRouteShape(pattern, \"notice\", 3, { allowRealmWildcard: true })) {\n throw new NoticeError(\n `Invalid notice pattern: ${pattern} (expected notice://{realm}/{area}/{resource}, notice://{realm}/{area}/*, or notice://{realm}/**)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n","/**\n * Stream domain codec for encoding/decoding messages\n * Per CLIENT_SPEC.md and fitz-go/internal/domains/stream/protocol.go\n */\n\nimport { BufferWriter, BufferReader, utf8Decoder } from \"../../core/buffer\";\nimport {\n StreamCommitMode,\n StreamCommitPayload,\n StreamDiscriminator,\n StreamFilterClause,\n StreamFilterSet,\n StreamFilteredReason,\n StreamMetadata,\n StreamRecord,\n StreamReadCursor,\n StreamReadItem,\n StreamReadOptions,\n} from \"./types\";\n\nexport const StreamCodec = {\n /**\n * Encode BEGIN request\n * Payload: [route: string][has_ingest_metadata: u8][ingest_metadata?: bytes]\n */\n encodeBegin(route: string, ingestMetadata?: Uint8Array): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeRoute(route);\n if (ingestMetadata && ingestMetadata.length > 0) {\n writer.writeU8(1);\n writer.writeU32BE(ingestMetadata.length);\n writer.writeBytes(ingestMetadata);\n } else {\n writer.writeU8(0);\n }\n return writer.getBufferView();\n },\n\n /**\n * Decode BEGIN response\n * Payload: [status: u8][has_session_id: u8][session_id?: u64][data: bytes]\n */\n decodeBeginResponse(payload: Uint8Array): {\n status: number;\n sessionId?: bigint;\n } {\n const decoded = this.decodeWrappedResponse(payload);\n return { status: decoded.status, sessionId: decoded.sessionId };\n },\n\n /**\n * Encode APPEND request\n * Payload: [session_id: u64][expected_offset: u64][body: bytes][has_metadata: u8][metadata?: bytes][has_discriminator: u8][discriminator?: string]\n */\n encodeAppend(\n sessionId: bigint,\n expectedOffset: bigint,\n body: Uint8Array,\n metadata?: Uint8Array,\n discriminator?: StreamDiscriminator,\n ): Uint8Array {\n const writer = new BufferWriter(512);\n writer.writeU64BE(sessionId);\n writer.writeU64BE(expectedOffset);\n writer.writeU32BE(body.length);\n writer.writeBytes(body);\n if (metadata && metadata.length > 0) {\n writer.writeU8(1);\n writer.writeU32BE(metadata.length);\n writer.writeBytes(metadata);\n } else {\n writer.writeU8(0);\n }\n\n if (discriminator !== undefined && discriminator.length > 0) {\n writer.writeU8(1);\n writer.writeString(discriminator);\n } else {\n writer.writeU8(0);\n }\n\n return writer.getBufferView();\n },\n\n /**\n * Decode APPEND response\n * Payload: [status: u8][has_session_id: u8][session_id?: u64][data: bytes]\n */\n decodeAppendResponse(payload: Uint8Array): {\n status: number;\n offset?: bigint;\n } {\n const decoded = this.decodeWrappedResponse(payload);\n if (decoded.status !== 0 || decoded.data.length < 8) {\n return { status: decoded.status };\n }\n\n const reader = new BufferReader(decoded.data);\n return { status: decoded.status, offset: reader.readU64BE() };\n },\n\n /**\n * Encode COMMIT request\n * Payload: [session_id: u64][mode: u8]\n */\n encodeCommit(sessionId: bigint, mode: StreamCommitMode): Uint8Array {\n const writer = new BufferWriter(64);\n writer.writeU64BE(sessionId);\n writer.writeU8(mode === \"Sync\" ? 1 : 0);\n return writer.getBufferView();\n },\n\n /**\n * Decode COMMIT response\n * Payload: [status: u8]\n */\n decodeCommitResponse(payload: Uint8Array): { status: number } {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n return { status };\n },\n\n /**\n * Encode ROLLBACK request\n * Payload: [session_id: u64]\n */\n encodeRollback(sessionId: bigint): Uint8Array {\n const writer = new BufferWriter(64);\n writer.writeU64BE(sessionId);\n return writer.getBufferView();\n },\n\n /**\n * Decode ROLLBACK response\n * Payload: [status: u8]\n */\n decodeRollbackResponse(payload: Uint8Array): { status: number } {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n return { status };\n },\n\n /**\n * Encode READ request\n * Payload: [route: string][start_offset: u64][limit: u64][has_max_bytes: u8][max_bytes?: u64][has_filter: u8][filter_length?: u32_be][filter?: custom]\n */\n encodeRead(\n route: string,\n startOffset: bigint,\n limit: number,\n options?: StreamReadOptions,\n ): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeRoute(route);\n writer.writeU64BE(startOffset);\n writer.writeU64BE(BigInt(limit));\n if (options?.maxBytes !== undefined) {\n writer.writeU8(1);\n writer.writeU64BE(options.maxBytes);\n } else {\n writer.writeU8(0);\n }\n\n const filter = options?.filter;\n if (filter && filter.clauses.length > 0) {\n writer.writeU8(1);\n const filterWriter = new BufferWriter(64);\n encodeStreamFilterSet(filter, filterWriter);\n const filterBytes = filterWriter.getBufferView();\n writer.writeU32BE(filterBytes.length);\n writer.writeBytes(filterBytes);\n } else {\n writer.writeU8(0);\n }\n return writer.getBufferView();\n },\n\n /**\n * Decode READ response\n * Payload: [status: u8][has_session_id: u8][session_id?: u64][data: bytes]\n */\n decodeReadResponse(payload: Uint8Array): {\n status: number;\n items: StreamReadItem[];\n cursor?: StreamReadCursor;\n } {\n const decoded = this.decodeWrappedResponse(payload);\n if (decoded.status !== 0) {\n return { status: decoded.status, items: [] };\n }\n\n if (decoded.data.length === 0) {\n return { status: decoded.status, items: [] };\n }\n\n const reader = new BufferReader(decoded.data);\n const count = reader.readU32BE();\n const items: StreamReadItem[] = [];\n\n for (let i = 0; i < count; i++) {\n items.push(this.decodeStreamReadItem(reader));\n }\n\n const cursor: StreamReadCursor = {\n lastResourceOffset: reader.readU64BE(),\n lastAreaOffset: reader.readOptionalU64() ?? undefined,\n lastRealmOffset: reader.readOptionalU64() ?? undefined,\n hasMore: reader.readU8() === 1,\n };\n\n if (!reader.isEOF()) {\n throw new Error(\"READ response has trailing bytes\");\n }\n\n return { status: decoded.status, items, cursor };\n },\n\n /**\n * Encode LAST request\n * Payload: [route: string]\n */\n encodeLast(route: string): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(route);\n return writer.getBufferView();\n },\n\n /**\n * Decode LAST response\n * Payload: [status: u8][has_session_id: u8][session_id?: u64][data: bytes]\n */\n decodeLastResponse(payload: Uint8Array): {\n status: number;\n record?: StreamRecord;\n } {\n const decoded = this.decodeWrappedResponse(payload);\n if (decoded.status !== 0 || decoded.data.length === 0) {\n return { status: decoded.status };\n }\n\n const reader = new BufferReader(decoded.data);\n const record = this.decodeStreamRecord(reader);\n\n return { status: decoded.status, record };\n },\n\n /**\n * Encode METADATA request.\n * Payload: [route: string]\n */\n encodeMetadata(route: string): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(route);\n return writer.getBufferView();\n },\n\n /**\n * Decode METADATA response.\n * Payload: [status: u8][has_session_id: u8][session_id?: u64][data: bytes]\n */\n decodeMetadataResponse(payload: Uint8Array): {\n status: number;\n metadata?: StreamMetadata;\n } {\n const decoded = this.decodeWrappedResponse(payload);\n if (decoded.status !== 0 || decoded.data.length === 0) {\n return { status: decoded.status };\n }\n\n const reader = new BufferReader(decoded.data);\n const firstResourceOffset = reader.readOptionalU64();\n const lastResourceOffset = reader.readOptionalU64();\n const recordCount = reader.readU64BE();\n const maxBatchEvents = reader.readU64BE();\n const maxBatchBytes = reader.readU64BE();\n const ttlSeconds = reader.readOptionalU64();\n const areaWatermark = reader.readU64BE();\n const realmWatermark = reader.readU64BE();\n\n return {\n status: decoded.status,\n metadata: {\n firstOffset: firstResourceOffset ?? 0n,\n lastOffset: lastResourceOffset ?? 0n,\n recordCount,\n maxBatchEvents,\n maxBatchBytes,\n ttlSeconds,\n areaWatermark,\n realmWatermark,\n },\n };\n },\n\n encodeSubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(pattern);\n return writer.getBufferView();\n },\n\n decodeSubscribeResponse(payload: Uint8Array): {\n status: number;\n subId?: bigint;\n } {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0 || reader.isEOF()) {\n return { status };\n }\n\n const hasValue = reader.readU8();\n if (hasValue !== 1 || reader.isEOF()) {\n return { status };\n }\n\n return { status, subId: reader.readU64BE() };\n },\n\n encodeUnsubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(128);\n writer.writeRoute(pattern);\n return writer.getBufferView();\n },\n\n decodeUnsubscribeResponse(payload: Uint8Array): { status: number } {\n const reader = new BufferReader(payload);\n return { status: reader.readU8() };\n },\n\n decodeNotification(payload: Uint8Array): {\n subId: bigint;\n route: string;\n rawPayload: Uint8Array;\n parsedPayload: StreamCommitPayload;\n } {\n const reader = new BufferReader(payload);\n const subId = reader.readU64BE();\n const route = reader.readRoute();\n const rawPayload = reader.readBytes(reader.readU32BE());\n let parsedPayload: StreamCommitPayload = {};\n if (rawPayload.length > 0) {\n try {\n parsedPayload = JSON.parse(utf8Decoder.decode(rawPayload)) as StreamCommitPayload;\n } catch {\n parsedPayload = {};\n }\n }\n return {\n subId,\n route,\n rawPayload,\n parsedPayload,\n };\n },\n\n decodeStreamRecord(reader: BufferReader): StreamRecord {\n const offset = reader.readU64BE();\n const areaOffset = reader.readOptionalU64();\n const realmOffset = reader.readOptionalU64();\n const body = reader.readBytes(reader.readU32BE());\n const metadata = this.readOptionalBytes(reader);\n const timestamp = reader.readU64BE();\n\n return {\n offset,\n timestamp,\n body,\n areaOffset,\n realmOffset,\n metadata,\n };\n },\n\n flattenStreamReadItems(items: StreamReadItem[]): StreamRecord[] {\n return items.flatMap((item) => (item.kind === \"event\" ? [item.record] : []));\n },\n\n decodeStreamReadItem(reader: BufferReader): StreamReadItem {\n const tag = reader.readU8();\n switch (tag) {\n case 0:\n return { kind: \"event\", record: this.decodeStreamRecord(reader) };\n case 1:\n return {\n kind: \"filtered\",\n offset: reader.readU64BE(),\n reason: this.decodeStreamFilteredReason(reader),\n };\n case 2:\n return {\n kind: \"filtered_range\",\n fromOffset: reader.readU64BE(),\n toOffset: reader.readU64BE(),\n reason: this.decodeStreamFilteredReason(reader),\n };\n default:\n throw new Error(`unknown stream read item tag: ${tag}`);\n }\n },\n\n decodeStreamFilteredReason(reader: BufferReader): StreamFilteredReason | undefined {\n const tag = reader.readU8();\n switch (tag) {\n case 0:\n return undefined;\n case 1:\n return \"server_filter\";\n case 2:\n return \"permission\";\n case 3:\n return \"projection\";\n default:\n throw new Error(`unknown stream filtered reason tag: ${tag}`);\n }\n },\n\n readOptionalBytes(reader: BufferReader): Uint8Array | undefined {\n const hasValue = reader.readU8();\n if (hasValue !== 1) {\n return undefined;\n }\n\n const length = reader.readU32BE();\n return reader.readBytes(length);\n },\n\n decodeWrappedResponse(payload: Uint8Array): {\n status: number;\n sessionId?: bigint;\n data: Uint8Array;\n } {\n const reader = new BufferReader(payload);\n const status = reader.readU8();\n if (status !== 0) {\n return { status, data: new Uint8Array(0) };\n }\n\n let sessionId: bigint | undefined;\n if (!reader.isEOF()) {\n const hasSessionId = reader.readU8();\n if (hasSessionId === 1 && reader.remainingBytes() >= 8) {\n sessionId = reader.readU64BE();\n }\n }\n\n if (reader.isEOF()) {\n return { status, sessionId, data: new Uint8Array(0) };\n }\n\n const dataLength = reader.readU32BE();\n const data = reader.readBytes(dataLength);\n return { status, sessionId, data };\n },\n};\n\nfunction encodeStreamFilterSet(filter: StreamFilterSet, writer: BufferWriter): void {\n writer.writeU8(0);\n writer.writeU8(0xf1);\n writer.writeU32BE(filter.clauses.length);\n\n for (const clause of filter.clauses) {\n encodeStreamFilterClause(writer, clause);\n }\n}\n\nfunction encodeStreamFilterClause(writer: BufferWriter, clause: StreamFilterClause): void {\n switch (clause.kind) {\n case \"Equals\":\n writer.writeU8(0);\n writer.writeString(clause.value);\n return;\n case \"NotEquals\":\n writer.writeU8(1);\n writer.writeString(clause.value);\n return;\n case \"StartsWith\":\n writer.writeU8(2);\n writer.writeString(clause.value);\n return;\n case \"AnyOf\":\n writer.writeU8(3);\n writer.writeU32BE(clause.values.length);\n for (const value of clause.values) {\n writer.writeString(value);\n }\n return;\n }\n}\n","/**\n * Stream domain type definitions\n * Stream uses session-based transactional semantics:\n * 1. Begin() returns a session with server-assigned sessionID\n * 2. Append(expectedOffset, ...) on session validates optimistic concurrency\n * 3. Commit() or Rollback() to finalize\n */\n\n/**\n * Stream record with offset, timestamp, and payload\n */\nexport interface StreamRecord {\n offset: bigint;\n timestamp: bigint;\n body: Uint8Array;\n areaOffset?: bigint;\n realmOffset?: bigint;\n metadata?: Uint8Array;\n}\n\n/**\n * Stream metadata.\n */\nexport interface StreamMetadata {\n firstOffset: bigint;\n lastOffset: bigint;\n recordCount: bigint;\n maxBatchEvents?: bigint;\n maxBatchBytes?: bigint;\n ttlSeconds?: bigint;\n areaWatermark?: bigint;\n realmWatermark?: bigint;\n}\n\nexport type StreamDiscriminator = string;\n\nexport type StreamFilteredReason = \"server_filter\" | \"permission\" | \"projection\";\n\nexport type StreamFilterClause =\n | { kind: \"Equals\"; value: string }\n | { kind: \"NotEquals\"; value: string }\n | { kind: \"StartsWith\"; value: string }\n | { kind: \"AnyOf\"; values: string[] };\n\nexport interface StreamFilterSet {\n clauses: StreamFilterClause[];\n}\n\nexport interface StreamAppendOptions {\n discriminator?: StreamDiscriminator;\n}\n\nexport interface StreamReadOptions {\n maxBytes?: bigint;\n filter?: StreamFilterSet;\n signal?: AbortSignal;\n}\n\nexport interface StreamReadCursor {\n lastResourceOffset: bigint;\n lastAreaOffset?: bigint;\n lastRealmOffset?: bigint;\n hasMore: boolean;\n}\n\nexport interface StreamReadEvent {\n kind: \"event\";\n record: StreamRecord;\n}\n\nexport interface StreamReadFiltered {\n kind: \"filtered\";\n offset: bigint;\n reason?: StreamFilteredReason;\n}\n\nexport interface StreamReadFilteredRange {\n kind: \"filtered_range\";\n fromOffset: bigint;\n toOffset: bigint;\n reason?: StreamFilteredReason;\n}\n\nexport type StreamReadItem = StreamReadEvent | StreamReadFiltered | StreamReadFilteredRange;\n\nexport interface StreamReadPage {\n items: StreamReadItem[];\n cursor: StreamReadCursor;\n}\n\nexport type StreamCommitMode = \"Buffered\" | \"Sync\";\n\nexport interface StreamCommitPayload {\n event?: string;\n first_resource_offset?: number;\n last_resource_offset?: number;\n first_area_offset?: number;\n last_area_offset?: number;\n first_realm_offset?: number;\n last_realm_offset?: number;\n batch_size?: number;\n}\n\nexport interface StreamCommitNotification {\n route: string;\n event?: string;\n firstResourceOffset?: bigint;\n lastResourceOffset?: bigint;\n firstAreaOffset?: bigint;\n lastAreaOffset?: bigint;\n firstRealmOffset?: bigint;\n lastRealmOffset?: bigint;\n batchSize?: number;\n payload: StreamCommitPayload;\n}\n\nexport type StreamCommitHandler = (notification: StreamCommitNotification) => void | Promise<void>;\n\nexport type StreamSubscription = ReturnType<typeof createStreamSubscription>;\n\nexport function createStreamSubscription(\n subId: bigint,\n pattern: string,\n unsubscribeFn: (pattern: string) => Promise<void>,\n) {\n const unsubscribe = async (): Promise<void> => {\n await unsubscribeFn(pattern);\n };\n\n return {\n subId,\n unsubscribe,\n };\n}\n\n/**\n * Stream session for write operations.\n * Obtained from `StreamClient.begin()`.\n */\nexport interface StreamSession {\n /**\n * Append a record to the stream.\n * Returns the assigned offset\n */\n append(expectedOffset: bigint, body: Uint8Array, signal?: AbortSignal): Promise<bigint>;\n append(\n expectedOffset: bigint,\n body: Uint8Array,\n options?: StreamAppendOptions,\n signal?: AbortSignal,\n ): Promise<bigint>;\n\n /**\n * Commit the write session and make appended records durable.\n */\n commit(mode: StreamCommitMode, signal?: AbortSignal): Promise<void>;\n\n /**\n * Roll back and discard uncommitted appends.\n */\n rollback(signal?: AbortSignal): Promise<void>;\n\n /**\n * Check if session is still open\n */\n isOpen(): boolean;\n}\n\n/**\n * Stream operation status codes\n */\nexport enum StreamStatus {\n Ok = 0,\n StreamNotFound = 1,\n OffsetOutOfRange = 2,\n InvalidOffset = 3,\n StreamFull = 4,\n SessionNotFound = 5,\n SessionClosed = 6,\n ExpectedOffsetMismatch = 7,\n}\n","/**\n * Stream session implementation\n * Per fitz-go/internal/domains/stream/stream.go\n */\n\nimport { Connection } from \"../../client/connection\";\nimport { StreamCodec } from \"./codec\";\nimport { StreamAppendOptions, StreamCommitMode, StreamSession, StreamStatus } from \"./types\";\nimport { StreamError } from \"../../core/errors\";\nimport { MSG_STREAM_APPEND, MSG_STREAM_COMMIT, MSG_STREAM_ROLLBACK } from \"../../frame/types\";\n\nexport function createStreamSession(\n connection: Connection,\n _route: string,\n sessionId: bigint,\n): StreamSession {\n let closed = false;\n let unsubscribeDisconnect: () => void = () => undefined;\n unsubscribeDisconnect = connection.onDisconnect(() => {\n closed = true;\n unsubscribeDisconnect();\n });\n\n const ensureOpen = (): void => {\n if (closed) {\n throw new StreamError(\"Stream session already closed\", \"SESSION_CLOSED\");\n }\n };\n\n const checkStatus = (status: number, operation: string): void => {\n if (status === StreamStatus.Ok) {\n return;\n }\n\n const statusNames: Record<number, string> = {\n [StreamStatus.StreamNotFound]: \"StreamNotFound\",\n [StreamStatus.OffsetOutOfRange]: \"OffsetOutOfRange\",\n [StreamStatus.InvalidOffset]: \"InvalidOffset\",\n [StreamStatus.StreamFull]: \"StreamFull\",\n [StreamStatus.SessionNotFound]: \"SessionNotFound\",\n [StreamStatus.SessionClosed]: \"SessionClosed\",\n [StreamStatus.ExpectedOffsetMismatch]: \"ExpectedOffsetMismatch\",\n };\n\n const statusName = statusNames[status] || `Unknown(${status})`;\n throw new StreamError(`${operation} failed: ${statusName}`, statusName, status);\n };\n\n const append = async (\n expectedOffset: bigint,\n body: Uint8Array,\n optionsOrSignal?: AbortSignal | StreamAppendOptions,\n signal?: AbortSignal,\n ): Promise<bigint> => {\n ensureOpen();\n\n const { options, requestSignal } = normalizeAppendArguments(optionsOrSignal, signal);\n const payload = StreamCodec.encodeAppend(\n sessionId,\n expectedOffset,\n body,\n undefined,\n options?.discriminator,\n );\n const response = await connection.request(MSG_STREAM_APPEND, payload, requestSignal);\n const decoded = StreamCodec.decodeAppendResponse(response);\n\n checkStatus(decoded.status, \"APPEND\");\n\n return decoded.offset ?? 0n;\n };\n\n const commit = async (mode: StreamCommitMode, signal?: AbortSignal): Promise<void> => {\n ensureOpen();\n closed = true;\n unsubscribeDisconnect();\n\n const payload = StreamCodec.encodeCommit(sessionId, mode);\n const response = await connection.request(MSG_STREAM_COMMIT, payload, signal);\n const decoded = StreamCodec.decodeCommitResponse(response);\n\n checkStatus(decoded.status, \"COMMIT\");\n };\n\n const rollback = async (signal?: AbortSignal): Promise<void> => {\n if (closed) {\n return;\n }\n\n closed = true;\n unsubscribeDisconnect();\n\n const payload = StreamCodec.encodeRollback(sessionId);\n try {\n const response = await connection.request(MSG_STREAM_ROLLBACK, payload, signal);\n const decoded = StreamCodec.decodeRollbackResponse(response);\n checkStatus(decoded.status, \"ROLLBACK\");\n } catch {\n // Ignore rollback errors\n }\n };\n\n const isOpen = (): boolean => !closed;\n\n return {\n append,\n commit,\n rollback,\n isOpen,\n };\n}\n\nfunction normalizeAppendArguments(\n optionsOrSignal?: AbortSignal | StreamAppendOptions,\n signal?: AbortSignal,\n): { options?: StreamAppendOptions; requestSignal?: AbortSignal } {\n if (isAbortSignal(optionsOrSignal)) {\n return { requestSignal: optionsOrSignal };\n }\n\n return {\n options: optionsOrSignal,\n requestSignal: signal,\n };\n}\n\nfunction isAbortSignal(value: unknown): value is AbortSignal {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"aborted\" in value &&\n typeof (value as AbortSignal).addEventListener === \"function\"\n );\n}\n","/**\n * Stream domain client for append-only log operations.\n *\n * Stream uses session-based transactional semantics:\n * 1. `begin()` starts a write session\n * 2. `append(expectedOffset, ...)` on the session adds records with OCC\n * 3. `commit()` or `rollback()` finalizes the session\n */\n\nimport { createDomainClient } from \"../base\";\nimport { StreamCodec } from \"./codec\";\nimport {\n StreamSession,\n StreamRecord,\n StreamMetadata,\n StreamReadOptions,\n StreamReadPage,\n StreamStatus,\n StreamCommitHandler,\n StreamCommitNotification,\n StreamSubscription,\n createStreamSubscription,\n} from \"./types\";\nimport { createStreamSession } from \"./session\";\nimport { StreamError } from \"../../core/errors\";\nimport { createSliceIterator, createAsyncIterableIterator } from \"../../core/iterator\";\nimport {\n MSG_STREAM_BEGIN,\n MSG_STREAM_READ,\n MSG_STREAM_LAST,\n MSG_STREAM_GET_METADATA,\n MSG_STREAM_SUBSCRIBE,\n MSG_STREAM_UNSUBSCRIBE,\n MSG_STREAM_NOTIFY,\n} from \"../../frame/types\";\nimport { isRouteShape, isSelectorRouteShape } from \"../_routes\";\nimport type { Connection } from \"../../client/connection\";\n\ntype StreamSubscriptionState = {\n subId: bigint;\n handlers: Map<number, StreamCommitHandler>;\n};\n\nexport type StreamClient = ReturnType<typeof createStreamClient>;\n\nexport function createStreamClient(connection: Connection) {\n const { requestFrame, requestReconnectFrame, runWithRetry } = createDomainClient(connection);\n const subscriptionsByPattern = new Map<string, StreamSubscriptionState>();\n const patternsBySubId = new Map<bigint, string>();\n let initialized = false;\n let nextHandlerId = 1;\n\n connection.onReconnect(async () => {\n if (subscriptionsByPattern.size === 0) {\n return;\n }\n\n const snapshot = Array.from(subscriptionsByPattern.entries(), ([pattern, state]) => ({\n pattern,\n handlers: Array.from(state.handlers.entries()),\n }));\n subscriptionsByPattern.clear();\n patternsBySubId.clear();\n\n for (const subscription of snapshot) {\n const subId = await subscribeWire(subscription.pattern, requestReconnectFrame);\n subscriptionsByPattern.set(subscription.pattern, {\n subId,\n handlers: new Map(subscription.handlers),\n });\n patternsBySubId.set(subId, subscription.pattern);\n }\n });\n\n const begin = async (route: string, ingestMetadata?: Uint8Array): Promise<StreamSession> => {\n assertStreamRoute(route);\n const payload = StreamCodec.encodeBegin(route, ingestMetadata);\n const response = await requestFrame(MSG_STREAM_BEGIN, payload);\n const decoded = StreamCodec.decodeBeginResponse(response);\n\n checkStatus(decoded.status, \"BEGIN\");\n\n if (decoded.sessionId === undefined) {\n throw new StreamError(\"BEGIN response missing sessionId\", \"MISSING_SESSION_ID\");\n }\n\n return createStreamSession(connection, route, decoded.sessionId);\n };\n\n const readPage = async (\n route: string,\n startOffset: bigint,\n limit: number = 100,\n options?: StreamReadOptions,\n ): Promise<StreamReadPage> => {\n assertStreamPattern(route);\n return runWithRetry(\n {\n domain: \"stream\",\n operation: \"read\",\n retryClass: \"replayable_read\",\n signal: options?.signal,\n },\n async () => {\n const payload = StreamCodec.encodeRead(route, startOffset, limit, options);\n const response = await requestFrame(MSG_STREAM_READ, payload, options?.signal);\n const decoded = StreamCodec.decodeReadResponse(response);\n\n checkStatus(decoded.status, \"READ\");\n\n return {\n items: decoded.items,\n cursor: decoded.cursor ?? {\n lastResourceOffset: startOffset,\n lastAreaOffset: undefined,\n lastRealmOffset: undefined,\n hasMore: false,\n },\n };\n },\n );\n };\n\n const read = async (\n route: string,\n startOffset: bigint,\n limit: number = 100,\n options?: StreamReadOptions,\n ): Promise<StreamRecord[]> => {\n const page = await readPage(route, startOffset, limit, options);\n return StreamCodec.flattenStreamReadItems(page.items);\n };\n\n const consume = async (\n route: string,\n startOffset: bigint,\n limit: number = 100,\n options?: StreamReadOptions,\n ): Promise<AsyncIterable<StreamRecord>> => {\n const records = await read(route, startOffset, limit, options);\n return createAsyncIterableIterator(createSliceIterator(records));\n };\n\n const peek = async (route: string): Promise<StreamRecord | null> => {\n assertStreamRoute(route);\n return runWithRetry(\n {\n domain: \"stream\",\n operation: \"last\",\n retryClass: \"replayable_read\",\n },\n async () => {\n const payload = StreamCodec.encodeLast(route);\n const response = await requestFrame(MSG_STREAM_LAST, payload);\n const decoded = StreamCodec.decodeLastResponse(response);\n\n checkStatus(decoded.status, \"LAST\");\n\n return decoded.record ?? null;\n },\n );\n };\n\n const metadata = async (route: string): Promise<StreamMetadata> => {\n assertStreamRoute(route);\n return runWithRetry(\n {\n domain: \"stream\",\n operation: \"metadata\",\n retryClass: \"replayable_read\",\n },\n async () => {\n const payload = StreamCodec.encodeMetadata(route);\n const response = await requestFrame(MSG_STREAM_GET_METADATA, payload);\n const decoded = StreamCodec.decodeMetadataResponse(response);\n\n checkStatus(decoded.status, \"GET_METADATA\");\n\n return (\n decoded.metadata ?? {\n firstOffset: 0n,\n lastOffset: 0n,\n recordCount: 0n,\n }\n );\n },\n );\n };\n\n const subscribe = async (\n pattern: string,\n handler: StreamCommitHandler,\n ): Promise<StreamSubscription> => {\n assertStreamPattern(pattern);\n initNotifyHandler();\n const existing = subscriptionsByPattern.get(pattern);\n if (existing) {\n return addLocalSubscription(pattern, existing.subId, handler);\n }\n\n const subId = await subscribeWire(pattern);\n return addLocalSubscription(pattern, subId, handler);\n };\n\n const subscribeWire = async (pattern: string, request = requestFrame): Promise<bigint> => {\n const payload = StreamCodec.encodeSubscribe(pattern);\n const response = await request(MSG_STREAM_SUBSCRIBE, payload);\n const decoded = StreamCodec.decodeSubscribeResponse(response);\n checkStatus(decoded.status, \"SUBSCRIBE\");\n\n if (decoded.subId === undefined) {\n throw new StreamError(\"SUBSCRIBE response missing subId\", \"MISSING_SESSION_ID\");\n }\n\n return decoded.subId;\n };\n\n const addLocalSubscription = (\n pattern: string,\n subId: bigint,\n handler: StreamCommitHandler,\n ): StreamSubscription => {\n const handlerId = nextHandlerId++;\n let subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n subscription = { subId, handlers: new Map() };\n subscriptionsByPattern.set(pattern, subscription);\n patternsBySubId.set(subId, pattern);\n }\n\n subscription.handlers.set(handlerId, handler);\n return createStreamSubscription(subId, pattern, async () => {\n await unsubscribe(pattern, handlerId);\n });\n };\n\n const unsubscribe = async (pattern: string, handlerId: number): Promise<void> => {\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n subscription.handlers.delete(handlerId);\n if (subscription.handlers.size > 0) {\n return;\n }\n\n subscriptionsByPattern.delete(pattern);\n patternsBySubId.delete(subscription.subId);\n const payload = StreamCodec.encodeUnsubscribe(pattern);\n const response = await requestFrame(MSG_STREAM_UNSUBSCRIBE, payload);\n const decoded = StreamCodec.decodeUnsubscribeResponse(response);\n checkStatus(decoded.status, \"UNSUBSCRIBE\");\n };\n\n const initNotifyHandler = (): void => {\n if (initialized) {\n return;\n }\n\n initialized = true;\n connection.registerNotificationHandler(MSG_STREAM_NOTIFY, (payload) => {\n try {\n const decoded = StreamCodec.decodeNotification(payload);\n const pattern = patternsBySubId.get(decoded.subId);\n if (!pattern) {\n return;\n }\n\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n const parsedPayload = decoded.parsedPayload;\n\n const notification: StreamCommitNotification = {\n route: decoded.route,\n event: parsedPayload?.event,\n firstResourceOffset:\n parsedPayload?.first_resource_offset !== undefined\n ? BigInt(parsedPayload.first_resource_offset)\n : undefined,\n lastResourceOffset:\n parsedPayload?.last_resource_offset !== undefined\n ? BigInt(parsedPayload.last_resource_offset)\n : undefined,\n firstAreaOffset:\n parsedPayload?.first_area_offset !== undefined\n ? BigInt(parsedPayload.first_area_offset)\n : undefined,\n lastAreaOffset:\n parsedPayload?.last_area_offset !== undefined\n ? BigInt(parsedPayload.last_area_offset)\n : undefined,\n firstRealmOffset:\n parsedPayload?.first_realm_offset !== undefined\n ? BigInt(parsedPayload.first_realm_offset)\n : undefined,\n lastRealmOffset:\n parsedPayload?.last_realm_offset !== undefined\n ? BigInt(parsedPayload.last_realm_offset)\n : undefined,\n batchSize: parsedPayload?.batch_size,\n payload: parsedPayload,\n };\n\n for (const handler of subscription.handlers.values()) {\n connection.dispatchAsyncHandler(async () => {\n await handler(notification);\n });\n }\n } catch {\n // Best-effort notification dispatch.\n }\n });\n };\n\n const checkStatus = (status: number, operation: string): void => {\n if (status === StreamStatus.Ok) {\n return;\n }\n\n const statusNames: Record<number, string> = {\n [StreamStatus.StreamNotFound]: \"StreamNotFound\",\n [StreamStatus.OffsetOutOfRange]: \"OffsetOutOfRange\",\n [StreamStatus.InvalidOffset]: \"InvalidOffset\",\n [StreamStatus.StreamFull]: \"StreamFull\",\n [StreamStatus.SessionNotFound]: \"SessionNotFound\",\n [StreamStatus.SessionClosed]: \"SessionClosed\",\n [StreamStatus.ExpectedOffsetMismatch]: \"ExpectedOffsetMismatch\",\n };\n\n const statusName = statusNames[status] || `Unknown(${status})`;\n throw new StreamError(`${operation} failed: ${statusName}`, statusName, status);\n };\n\n return {\n begin,\n readPage,\n read,\n consume,\n peek,\n metadata,\n subscribe,\n };\n}\n\ntype StreamClientConstructor = {\n new (connection: Connection): StreamClient;\n (connection: Connection): StreamClient;\n};\n\nexport const StreamClient: StreamClientConstructor = function (connection: Connection) {\n return createStreamClient(connection);\n} as unknown as StreamClientConstructor;\n\nexport * from \"./types\";\n\nfunction assertStreamRoute(route: string): void {\n if (!isRouteShape(route, \"stream\", 3)) {\n throw new StreamError(\n `Invalid stream route: ${route} (expected stream://{realm}/{area}/{resource}, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n\nfunction assertStreamPattern(pattern: string): void {\n if (!isSelectorRouteShape(pattern, \"stream\", 3, { allowRealmWildcard: true })) {\n throw new StreamError(\n `Invalid stream pattern: ${pattern} (expected stream://{realm}/{area}/{resource}, stream://{realm}/{area}/*, or stream://{realm}/**)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n","/**\n * Schedule domain codec for encoding/decoding messages\n * Per fitz-go/internal/domains/schedule\n */\n\nimport { BufferWriter, BufferReader } from \"../../core/buffer\";\nimport {\n DecodedScheduleNotification,\n ScheduleEntry,\n ScheduleCreateResponse,\n ScheduleCancelResponse,\n ScheduleListResponse,\n ScheduleSubscribeResponse,\n ScheduleUnsubscribeResponse,\n} from \"./types\";\n\nexport const ScheduleCodec = {\n /**\n * Encode CREATE request\n * Payload: [route: string][cron: string][payload: bytes]\n */\n encodeCreate(route: string, cronExpr: string, payload: Uint8Array): Uint8Array {\n const writer = new BufferWriter(512);\n writer.writeRoute(route);\n writer.writeString(cronExpr);\n writer.writeU32BE(payload.length);\n writer.writeBytes(payload);\n return writer.getBufferView();\n },\n\n /**\n * Decode CREATE response\n * Success payload: [optional has_schedule_id: u8][schedule_id: string if has=1]\n */\n decodeCreateResponse(data: Uint8Array): ScheduleCreateResponse {\n const reader = new BufferReader(data);\n let scheduleId: string | undefined;\n if (!reader.isEOF() && reader.readU8() === 1) {\n scheduleId = reader.readString();\n }\n\n return { scheduleId };\n },\n\n /**\n * Encode CANCEL request\n * Payload: [route: string]\n */\n encodeCancel(route: string): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeRoute(route);\n return writer.getBufferView();\n },\n\n /**\n * Decode CANCEL response\n * Success payload: empty\n */\n decodeCancelResponse(_data: Uint8Array): ScheduleCancelResponse {\n return {};\n },\n\n /**\n * Encode LIST request\n * Payload: [optional offset: u64][optional limit: u64]\n */\n encodeList(offset: bigint = 0n, limit: bigint = 0n): Uint8Array {\n const writer = new BufferWriter(32);\n writer.writeOptionalU64(offset);\n writer.writeOptionalU64(limit);\n return writer.getBufferView();\n },\n\n /**\n * Decode LIST response\n * Success payload: [total_count: u64][has_entry: u8]...[route: string][cron: string][payload: bytes when has_entry=1]\n */\n decodeListResponse(data: Uint8Array): ScheduleListResponse {\n const reader = new BufferReader(data);\n if (reader.remainingBytes() < 8) {\n throw new Error(\"LIST response missing total_count\");\n }\n const totalCount = reader.readU64BE();\n const entries: ScheduleEntry[] = [];\n\n while (!reader.isEOF()) {\n const hasEntry = reader.readU8();\n if (hasEntry === 0) {\n break;\n }\n\n const route = reader.readString();\n const cron = reader.readString();\n const payloadBytes = reader.readBytes(reader.readU32BE());\n\n entries.push({\n id: route, // Route as identity\n route,\n cron,\n payload: payloadBytes,\n });\n }\n\n return { totalCount, entries };\n },\n\n /**\n * Encode SUBSCRIBE request\n * Payload: [pattern: string]\n */\n encodeSubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeString(pattern);\n return writer.getBufferView();\n },\n\n /**\n * Decode SUBSCRIBE response\n * Success payload: [has_sub_id: u8][sub_id: u64 if has=1]\n */\n decodeSubscribeResponse(data: Uint8Array): ScheduleSubscribeResponse {\n const reader = new BufferReader(data);\n if (reader.isEOF()) {\n throw new Error(\"SUBSCRIBE response missing subscription_id\");\n }\n\n if (reader.readU8() !== 1) {\n throw new Error(\"SUBSCRIBE response missing subscription_id\");\n }\n\n if (reader.remainingBytes() < 8) {\n throw new Error(\"SUBSCRIBE response too short for subscription_id\");\n }\n\n return { subId: reader.readU64BE() };\n },\n\n /**\n * Encode UNSUBSCRIBE request\n * Payload: [pattern: string]\n */\n encodeUnsubscribe(pattern: string): Uint8Array {\n const writer = new BufferWriter(256);\n writer.writeString(pattern);\n return writer.getBufferView();\n },\n\n /**\n * Decode UNSUBSCRIBE response\n * Success payload: empty\n */\n decodeUnsubscribeResponse(_data: Uint8Array): ScheduleUnsubscribeResponse {\n return {};\n },\n\n /**\n * Decode NOTIFY notification (MSG_SCHEDULE_NOTIFY 705)\n * Payload: [subscription_id: u64][payload: bytes]\n */\n decodeNotification(payload: Uint8Array): DecodedScheduleNotification {\n if (payload.length < 12) {\n throw new Error(\"SCHEDULE_NOTIFY payload too short\");\n }\n\n const reader = new BufferReader(payload);\n const subId = reader.readU64BE();\n const payloadLength = reader.readU32BE();\n if (reader.remainingBytes() < payloadLength) {\n throw new Error(\"SCHEDULE_NOTIFY payload truncated\");\n }\n\n return { subId, payload: reader.readBytes(payloadLength) };\n },\n};\n","/**\n * Schedule domain types\n * Per fitz-go/internal/domains/schedule (cron-based task scheduling)\n */\n\n/**\n * ScheduleEntry represents a schedule returned by List\n * Per CLIENT_SPEC: route, cron, payload\n */\nexport interface ScheduleEntry {\n id: string; // Route as identity\n route: string;\n cron: string;\n payload: Uint8Array;\n}\n\n/**\n * Notification is the payload delivered when a schedule fires (SCHEDULE_NOTIFY 705)\n */\nexport interface ScheduleNotification {\n payload: Uint8Array;\n}\n\nexport interface DecodedScheduleNotification {\n subId: bigint;\n payload: Uint8Array;\n}\n\n/**\n * ScheduleHandler is called when a schedule fires for a subscribed pattern\n * It is fire-and-forget; the return value is not used\n */\nexport type ScheduleHandler = (notification: ScheduleNotification) => void | Promise<void>;\n\n/**\n * ScheduleSubscription represents an active subscription to schedule fire notifications\n */\nexport type ScheduleSubscription = ReturnType<typeof createScheduleSubscription>;\n\nexport function createScheduleSubscription(\n subId: bigint,\n pattern: string,\n unsubscribeFn: () => Promise<void>,\n) {\n const unsubscribe = async (): Promise<void> => {\n return unsubscribeFn();\n };\n\n return {\n subId,\n pattern,\n unsubscribe,\n };\n}\n\nexport interface ScheduleCreateResponse {\n scheduleId?: string;\n}\n\nexport type ScheduleCancelResponse = Record<string, never>;\n\nexport interface ScheduleListResponse {\n totalCount: bigint;\n entries: ScheduleEntry[];\n}\n\nexport interface ScheduleSubscribeResponse {\n subId: bigint;\n}\n\nexport type ScheduleUnsubscribeResponse = Record<string, never>;\n\n/**\n * Schedule domain errors\n */\nexport class ScheduleError extends Error {\n public readonly code?: string;\n\n constructor(message: string, code?: string) {\n super(message);\n this.name = \"ScheduleError\";\n this.code = code;\n }\n}\n\n/**\n * Schedule operation status codes\n */\nexport enum ScheduleStatus {\n Ok = 0,\n ScheduleNotFound = 1,\n TaskNotFound = 2,\n InvalidCron = 3,\n InvalidDelay = 4,\n InvalidTimestamp = 5,\n}\n","/**\n * Schedule domain client.\n */\n\nimport { createDomainClient } from \"../base\";\nimport type { Connection } from \"../../client/connection\";\nimport {\n MSG_SCHEDULE_CANCEL,\n MSG_SCHEDULE_CREATE,\n MSG_SCHEDULE_LIST,\n MSG_SCHEDULE_NOTIFY,\n MSG_SCHEDULE_SUBSCRIBE,\n MSG_SCHEDULE_UNSUBSCRIBE,\n} from \"../../frame/types\";\nimport { parseStandardResponse } from \"../../protocol/response\";\nimport { ScheduleCodec } from \"./codec\";\nimport {\n ScheduleEntry,\n ScheduleError,\n ScheduleHandler,\n ScheduleNotification,\n ScheduleSubscription,\n createScheduleSubscription,\n} from \"./types\";\nimport { isRouteShape } from \"../_routes\";\n\ntype ScheduleSubscriptionState = {\n subId: bigint;\n handlers: Map<number, ScheduleHandler>;\n};\n\nexport type ScheduleClient = ReturnType<typeof createScheduleClient>;\n\nexport function createScheduleClient(connection: Connection) {\n const { requestFrame, requestReconnectFrame } = createDomainClient(connection);\n const subscriptionsByPattern = new Map<string, ScheduleSubscriptionState>();\n const patternsBySubId = new Map<bigint, string>();\n let notifyHandlerInitialized = false;\n let nextHandlerId = 1;\n\n connection.onReconnect(async () => {\n if (subscriptionsByPattern.size === 0) {\n return;\n }\n\n const subscriptions = Array.from(subscriptionsByPattern.entries(), ([pattern, state]) => ({\n pattern,\n handlers: Array.from(state.handlers.entries()),\n }));\n subscriptionsByPattern.clear();\n patternsBySubId.clear();\n\n for (const subscription of subscriptions) {\n const subId = await subscribeWire(subscription.pattern, requestReconnectFrame);\n subscriptionsByPattern.set(subscription.pattern, {\n subId,\n handlers: new Map(subscription.handlers),\n });\n patternsBySubId.set(subId, subscription.pattern);\n }\n });\n\n const create = async (\n route: string,\n cronExpr: string,\n payload: Uint8Array = new Uint8Array(),\n ): Promise<string> => {\n assertConcreteScheduleRoute(route);\n\n const response = await requestFrame(\n MSG_SCHEDULE_CREATE,\n ScheduleCodec.encodeCreate(route, cronExpr, payload),\n );\n const decoded = ScheduleCodec.decodeCreateResponse(assertSuccess(response, \"CREATE\"));\n return decoded.scheduleId ?? route;\n };\n\n const cancel = async (route: string): Promise<void> => {\n assertConcreteScheduleRoute(route);\n\n const response = await requestFrame(MSG_SCHEDULE_CANCEL, ScheduleCodec.encodeCancel(route));\n ScheduleCodec.decodeCancelResponse(assertSuccess(response, \"CANCEL\"));\n };\n\n const list = async (\n offset: bigint = 0n,\n limit: bigint = 0n,\n ): Promise<[ScheduleEntry[], bigint]> => {\n const response = await requestFrame(MSG_SCHEDULE_LIST, ScheduleCodec.encodeList(offset, limit));\n const decoded = ScheduleCodec.decodeListResponse(assertSuccess(response, \"LIST\"));\n return [decoded.entries, decoded.totalCount];\n };\n\n const subscribe = async (\n pattern: string,\n handler: ScheduleHandler,\n ): Promise<ScheduleSubscription> => {\n assertConcreteScheduleRoute(pattern);\n\n initNotifyHandler();\n const existing = subscriptionsByPattern.get(pattern);\n if (existing) {\n return addLocalSubscription(pattern, existing.subId, handler);\n }\n\n const subId = await subscribeWire(pattern);\n return addLocalSubscription(pattern, subId, handler);\n };\n\n const subscribeWire = async (pattern: string, request = requestFrame): Promise<bigint> => {\n const response = await request(MSG_SCHEDULE_SUBSCRIBE, ScheduleCodec.encodeSubscribe(pattern));\n const decoded = ScheduleCodec.decodeSubscribeResponse(assertSuccess(response, \"SUBSCRIBE\"));\n\n return decoded.subId;\n };\n\n const addLocalSubscription = (\n pattern: string,\n subId: bigint,\n handler: ScheduleHandler,\n ): ScheduleSubscription => {\n const handlerId = nextHandlerId++;\n let subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n subscription = { subId, handlers: new Map() };\n subscriptionsByPattern.set(pattern, subscription);\n patternsBySubId.set(subId, pattern);\n }\n\n subscription.handlers.set(handlerId, handler);\n return createScheduleSubscription(subId, pattern, async () => {\n await unsubscribe(pattern, handlerId);\n });\n };\n\n const unsubscribe = async (pattern: string, handlerId: number): Promise<void> => {\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n subscription.handlers.delete(handlerId);\n if (subscription.handlers.size > 0) {\n return;\n }\n\n subscriptionsByPattern.delete(pattern);\n patternsBySubId.delete(subscription.subId);\n const response = await requestFrame(\n MSG_SCHEDULE_UNSUBSCRIBE,\n ScheduleCodec.encodeUnsubscribe(pattern),\n );\n ScheduleCodec.decodeUnsubscribeResponse(assertSuccess(response, \"UNSUBSCRIBE\"));\n };\n\n const initNotifyHandler = (): void => {\n if (notifyHandlerInitialized) {\n return;\n }\n\n notifyHandlerInitialized = true;\n connection.registerNotificationHandler(MSG_SCHEDULE_NOTIFY, (payload) => {\n try {\n const decoded = ScheduleCodec.decodeNotification(payload);\n const pattern = patternsBySubId.get(decoded.subId);\n if (!pattern) {\n return;\n }\n\n const subscription = subscriptionsByPattern.get(pattern);\n if (!subscription) {\n return;\n }\n\n const notification: ScheduleNotification = {\n payload: decoded.payload,\n };\n for (const handler of subscription.handlers.values()) {\n connection.dispatchAsyncHandler(async () => {\n await handler(notification);\n });\n }\n } catch {\n // Best-effort notification dispatch.\n }\n });\n };\n\n const assertSuccess = (payload: Uint8Array, operation: string): Uint8Array => {\n const result = parseStandardResponse(payload);\n if (result.success) {\n return result.data;\n }\n\n throw new ScheduleError(\n `${operation} failed: ${result.error ?? \"Unknown error\"}`,\n mapErrorCode(result.error),\n );\n };\n\n const mapErrorCode = (message?: string): string => {\n const normalized = message?.toLowerCase() ?? \"\";\n if (normalized.includes(\"not found\")) {\n return \"NOT_FOUND\";\n }\n if (normalized.includes(\"invalid route\")) {\n return \"INVALID_ROUTE\";\n }\n if (normalized.includes(\"cron\")) {\n return \"INVALID_CRON\";\n }\n return \"REQUEST_FAILED\";\n };\n\n return {\n create,\n cancel,\n list,\n subscribe,\n };\n}\n\ntype ScheduleClientConstructor = {\n new (connection: Connection): ScheduleClient;\n (connection: Connection): ScheduleClient;\n};\n\nexport const ScheduleClient: ScheduleClientConstructor = function (connection: Connection) {\n return createScheduleClient(connection);\n} as unknown as ScheduleClientConstructor;\n\nexport * from \"./types\";\n\nfunction assertConcreteScheduleRoute(route: string): void {\n if (!isRouteShape(route, \"schedule\", 4)) {\n throw new ScheduleError(\n `Invalid schedule route: ${route} (expected schedule://{realm}/{area}/{resource}/{operation}, no empty segments or wildcards)`,\n \"INVALID_ROUTE\",\n );\n }\n}\n","/**\n * Main Fitz client facade.\n */\n\nimport { ConnectionState } from \"../core/types\";\nimport type { ClientConfig, ClientConnectOptions, TokenProvider } from \"../core/types\";\nimport { Connection, createConnection } from \"./connection\";\nimport { createTransport } from \"../transport/factory\";\nimport { ConnectionError } from \"../core/errors\";\nimport { KvClient } from \"../domains/kv/client\";\nimport { QueueClient } from \"../domains/queue/client\";\nimport { RpcClient } from \"../domains/rpc/client\";\nimport { LeaseClient } from \"../domains/lease/client\";\nimport { NoticeClient } from \"../domains/notice/client\";\nimport { StreamClient } from \"../domains/stream/client\";\nimport { ScheduleClient } from \"../domains/schedule/client\";\n\nexport type Client = ReturnType<typeof createClient>;\n\ntype ManagedConnection = Connection & {\n waitUntilReady?: (signal?: AbortSignal, waitTimeoutMs?: number) => Promise<void>;\n shouldWaitForReconnect?: () => boolean;\n};\n\nconst abortError = (): Error => {\n const error = new Error(\"The operation was aborted\");\n error.name = \"AbortError\";\n return error;\n};\n\nconst throwIfAborted = (signal?: AbortSignal): void => {\n if (signal?.aborted) {\n throw abortError();\n }\n};\n\nconst waitForSharedPromise = async <T>(promise: Promise<T>, signal?: AbortSignal): Promise<T> => {\n if (!signal) {\n return promise;\n }\n\n if (signal.aborted) {\n throw abortError();\n }\n\n return await new Promise<T>((resolve, reject) => {\n let settled = false;\n\n const cleanup = () => {\n signal.removeEventListener(\"abort\", onAbort);\n };\n\n const settle = (callback: () => void) => {\n if (settled) {\n return;\n }\n\n settled = true;\n cleanup();\n callback();\n };\n\n const onAbort = () => {\n settle(() => reject(abortError()));\n };\n\n signal.addEventListener(\"abort\", onAbort, { once: true });\n\n void promise.then(\n (value) => {\n settle(() => resolve(value));\n },\n (error) => {\n settle(() => reject(error));\n },\n );\n });\n};\n\nexport function createClient(config: ClientConfig) {\n const observability = config.observability;\n const resolvedConfig: Required<\n Omit<ClientConfig, \"tokenProvider\" | \"reconnect\" | \"asyncHandlers\" | \"retry\">\n > &\n Pick<ClientConfig, \"tokenProvider\" | \"reconnect\" | \"asyncHandlers\" | \"retry\"> = {\n timeout: 30000,\n transport: \"auto\",\n maxFrameSize: 65535,\n authSettleDelayMs: 100,\n maxInFlightRequests: 256,\n maxRequestQueueSize: 1024,\n observability: config.observability ?? {},\n reconnect: {\n enabled: true,\n maxAttempts: Infinity,\n backoffMs: 250,\n maxBackoffMs: 5000,\n ...config.reconnect,\n },\n retry: {\n enabled: true,\n maxAttempts: 3,\n backoffMs: 100,\n maxBackoffMs: 1000,\n ...config.retry,\n },\n asyncHandlers: {\n maxConcurrency: Infinity,\n timeoutMs: 30000,\n ...config.asyncHandlers,\n },\n ...config,\n };\n\n if (!resolvedConfig.url) {\n throw new Error(\"URL is required\");\n }\n\n let connection: Connection | null = null;\n let kvClient: KvClient | null = null;\n let queueClient: QueueClient | null = null;\n let rpcClient: RpcClient | null = null;\n let leaseClient: LeaseClient | null = null;\n let noticeClient: NoticeClient | null = null;\n let streamClient: StreamClient | null = null;\n let scheduleClient: ScheduleClient | null = null;\n let clientClosed = false;\n let pendingConnectPromise: Promise<void> | null = null;\n\n const resolveTokenProvider = (): TokenProvider => {\n if (resolvedConfig.tokenProvider) {\n return resolvedConfig.tokenProvider;\n }\n\n return () => \"\";\n };\n\n const ensureConnection = (): Connection => {\n if (clientClosed) {\n throw new ConnectionError(\"Client is closed\", {\n state: ConnectionState.Closed,\n });\n }\n\n if (!connection) {\n throw new ConnectionError(\"Not connected to Fitz server. Call connect() first.\", {\n state: getState(),\n });\n }\n\n return connection;\n };\n\n const createOwnedConnection = (): ManagedConnection => {\n if (connection) {\n return connection as ManagedConnection;\n }\n\n const tokenProvider = resolveTokenProvider();\n\n connection = createConnection(\n () =>\n createTransport(resolvedConfig.url, resolvedConfig.transport, {\n timeout: resolvedConfig.timeout,\n maxFrameSize: resolvedConfig.maxFrameSize,\n }),\n tokenProvider,\n {\n timeout: resolvedConfig.timeout,\n authSettleDelayMs: resolvedConfig.authSettleDelayMs,\n maxInFlightRequests: resolvedConfig.maxInFlightRequests,\n maxRequestQueueSize: resolvedConfig.maxRequestQueueSize,\n reconnect: resolvedConfig.reconnect,\n retry: resolvedConfig.retry,\n observability,\n asyncHandlers: resolvedConfig.asyncHandlers,\n },\n );\n\n return connection as ManagedConnection;\n };\n\n const connect = async (options: ClientConnectOptions = {}): Promise<void> => {\n if (clientClosed) {\n throw new ConnectionError(\"Client is closed\", {\n state: ConnectionState.Closed,\n });\n }\n\n throwIfAborted(options.signal);\n\n const activeConnection = createOwnedConnection();\n\n if (activeConnection.isConnected()) {\n return;\n }\n\n if (pendingConnectPromise) {\n await waitForSharedPromise(pendingConnectPromise, options.signal);\n return;\n }\n\n const state = activeConnection.getState();\n const shouldWait =\n state === ConnectionState.Connecting ||\n state === ConnectionState.Connected ||\n state === ConnectionState.Authenticating ||\n state === ConnectionState.Reconnecting ||\n (state === ConnectionState.Disconnected &&\n typeof activeConnection.shouldWaitForReconnect === \"function\" &&\n activeConnection.shouldWaitForReconnect());\n\n const sharedConnectPromise = shouldWait\n ? typeof activeConnection.waitUntilReady === \"function\"\n ? activeConnection.waitUntilReady(undefined, resolvedConfig.timeout)\n : activeConnection.connect()\n : activeConnection.connect(options);\n\n const trackedConnectPromise = sharedConnectPromise.finally(() => {\n if (pendingConnectPromise === trackedConnectPromise) {\n pendingConnectPromise = null;\n }\n });\n pendingConnectPromise = trackedConnectPromise;\n\n await waitForSharedPromise(trackedConnectPromise, options.signal);\n };\n\n const close = async (): Promise<void> => {\n if (clientClosed && !connection) {\n kvClient = null;\n queueClient = null;\n rpcClient = null;\n leaseClient = null;\n noticeClient = null;\n streamClient = null;\n scheduleClient = null;\n return;\n }\n\n clientClosed = true;\n pendingConnectPromise = null;\n\n if (connection) {\n const activeConnection = connection;\n try {\n await activeConnection.close();\n } finally {\n if (connection === activeConnection) {\n connection = null;\n }\n }\n }\n kvClient = null;\n queueClient = null;\n rpcClient = null;\n leaseClient = null;\n noticeClient = null;\n streamClient = null;\n scheduleClient = null;\n };\n\n const isConnected = (): boolean => {\n return !clientClosed && (connection?.isConnected() ?? false);\n };\n\n const kv = (): KvClient => {\n const activeConnection = ensureConnection();\n if (!kvClient) {\n kvClient = new KvClient(activeConnection);\n }\n return kvClient;\n };\n\n const queue = (): QueueClient => {\n const activeConnection = ensureConnection();\n if (!queueClient) {\n queueClient = new QueueClient(activeConnection);\n }\n return queueClient;\n };\n\n const rpc = (): RpcClient => {\n const activeConnection = ensureConnection();\n if (!rpcClient) {\n rpcClient = new RpcClient(activeConnection);\n }\n return rpcClient;\n };\n\n const lease = (): LeaseClient => {\n const activeConnection = ensureConnection();\n if (!leaseClient) {\n leaseClient = new LeaseClient(activeConnection);\n }\n return leaseClient;\n };\n\n const notice = (): NoticeClient => {\n const activeConnection = ensureConnection();\n if (!noticeClient) {\n noticeClient = new NoticeClient(activeConnection);\n }\n return noticeClient;\n };\n\n const stream = (): StreamClient => {\n const activeConnection = ensureConnection();\n if (!streamClient) {\n streamClient = new StreamClient(activeConnection);\n }\n return streamClient;\n };\n\n const schedule = (): ScheduleClient => {\n const activeConnection = ensureConnection();\n if (!scheduleClient) {\n scheduleClient = new ScheduleClient(activeConnection);\n }\n return scheduleClient;\n };\n\n const getUrl = (): string => {\n return ensureConnection().getUrl();\n };\n\n const getState = (): ConnectionState => {\n if (clientClosed) {\n return ConnectionState.Closed;\n }\n\n if (!connection) {\n return ConnectionState.Disconnected;\n }\n\n const state = connection.getState();\n return state === ConnectionState.Closed ? ConnectionState.Disconnected : state;\n };\n\n return {\n config: resolvedConfig,\n connect,\n close,\n isConnected,\n kv,\n queue,\n rpc,\n lease,\n notice,\n stream,\n schedule,\n getUrl,\n getState,\n };\n}\n\ntype ClientConstructor = {\n new (config: ClientConfig): Client;\n (config: ClientConfig): Client;\n};\n\nexport const Client: ClientConstructor = function (config: ClientConfig) {\n return createClient(config);\n} as unknown as ClientConstructor;\n","export type TaskGroupStatus = \"idle\" | \"running\" | \"stopping\" | \"stopped\" | \"failed\";\nexport type TaskGroupErrorPolicy = \"stop-group\" | \"restart-task\" | \"ignore\";\n\nexport type TaskContext = {\n readonly name: string;\n readonly index: number;\n readonly signal: AbortSignal;\n};\n\nexport type TaskGroupOptions = {\n readonly name: string;\n readonly concurrency: number;\n readonly errorPolicy?: TaskGroupErrorPolicy;\n readonly run: (ctx: TaskContext) => Promise<void>;\n};\n\nimport { createDeferred, Deferred } from \"./types\";\n\nexport type TaskGroup = ReturnType<typeof createTaskGroup>;\n\ntype InternalState = {\n status: TaskGroupStatus;\n controller: AbortController | null;\n completion: Deferred<void> | null;\n error: unknown;\n};\n\nexport function createTaskGroup(options: TaskGroupOptions) {\n const name = options.name;\n const concurrency = options.concurrency;\n const errorPolicy = options.errorPolicy ?? \"stop-group\";\n const run = options.run;\n\n if (concurrency < 1) {\n throw new Error(\"TaskGroup concurrency must be at least 1\");\n }\n\n const state: InternalState = {\n status: \"idle\",\n controller: null,\n completion: null,\n error: null,\n };\n\n const tasks = new Set<Promise<void>>();\n\n const ensureCompletion = (): Deferred<void> => {\n if (!state.completion) {\n state.completion = createDeferred<void>();\n }\n return state.completion;\n };\n\n const complete = (error?: unknown): void => {\n const completion = ensureCompletion();\n\n if (error !== undefined) {\n state.status = \"failed\";\n state.error = error;\n completion.reject(error);\n return;\n }\n\n state.status = \"stopped\";\n completion.resolve();\n };\n\n const maybeFinish = () => {\n if (tasks.size > 0) {\n return;\n }\n\n if (state.error) {\n complete(state.error);\n return;\n }\n\n if (state.status === \"running\" || state.status === \"stopping\") {\n complete();\n return;\n }\n };\n\n const track = (promise: Promise<void>): void => {\n tasks.add(promise);\n void promise.finally(() => {\n tasks.delete(promise);\n maybeFinish();\n });\n };\n\n const shouldRestart = (error: unknown): boolean => {\n if (errorPolicy !== \"restart-task\") {\n return false;\n }\n\n if (state.status !== \"running\" || state.controller?.signal.aborted) {\n return false;\n }\n\n if (isAbortError(error)) {\n return false;\n }\n\n return true;\n };\n\n const handleWorkerError = (error: unknown) => {\n if (isAbortError(error)) {\n return;\n }\n\n if (state.status === \"stopping\") {\n return;\n }\n\n if (errorPolicy === \"stop-group\") {\n state.error = error;\n state.status = \"stopping\";\n state.controller?.abort();\n return;\n }\n };\n\n const runWorker = async (index: number): Promise<void> => {\n while (true) {\n const controller = state.controller;\n if (!controller) {\n return;\n }\n\n try {\n await run({ name, index, signal: controller.signal });\n } catch (error) {\n if (isAbortError(error) || state.status === \"stopping\") {\n return;\n }\n\n if (errorPolicy === \"stop-group\") {\n handleWorkerError(error);\n return;\n }\n\n if (errorPolicy === \"restart-task\") {\n if (shouldRestart(error)) {\n continue;\n }\n return;\n }\n\n if (errorPolicy === \"ignore\") {\n return;\n }\n }\n\n return;\n }\n };\n\n const start = async (): Promise<void> => {\n if (state.status === \"running\") {\n throw new Error(\"TaskGroup already running\");\n }\n\n if (state.status === \"stopping\") {\n throw new Error(\"TaskGroup is stopping\");\n }\n\n if (state.status === \"failed\") {\n throw new Error(\"TaskGroup has failed and cannot be restarted\");\n }\n\n const previousStatus = state.status;\n state.controller = new AbortController();\n if (previousStatus === \"stopped\") {\n state.completion = createDeferred<void>();\n } else {\n ensureCompletion();\n }\n state.error = null;\n state.status = \"running\";\n\n for (let index = 0; index < concurrency; index += 1) {\n track(runWorker(index));\n }\n };\n\n const stop = async (reason?: unknown): Promise<void> => {\n void reason;\n if (state.status === \"idle\") {\n state.status = \"stopped\";\n ensureCompletion().resolve();\n return;\n }\n\n if (state.status === \"stopped\") {\n return ensureCompletion().promise;\n }\n\n if (state.status === \"failed\") {\n return ensureCompletion().promise;\n }\n\n if (state.status === \"running\") {\n state.status = \"stopping\";\n state.controller?.abort();\n return ensureCompletion().promise;\n }\n\n return ensureCompletion().promise;\n };\n\n const join = async (): Promise<void> => {\n const completion = ensureCompletion();\n return completion.promise;\n };\n\n const dispose = async (reason?: unknown): Promise<void> => {\n return stop(reason);\n };\n\n return {\n get name() {\n return name;\n },\n get status() {\n return state.status;\n },\n start,\n stop,\n join,\n dispose,\n };\n}\n\nfunction isAbortError(error: unknown): boolean {\n return error instanceof Error && error.name === \"AbortError\";\n}\n"],"mappings":"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"}