@ferricstore/ferricstore 0.1.6 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +232 -9
- package/dist/index.cjs +14910 -4799
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1637 -867
- package/dist/index.d.ts +1637 -867
- package/dist/index.js +14963 -4862
- package/dist/index.js.map +1 -1
- package/docs/api/assets/hierarchy.js +1 -1
- package/docs/api/assets/navigation.js +1 -1
- package/docs/api/assets/search.js +1 -1
- package/docs/api/classes/BitmapStore.html +2 -2
- package/docs/api/classes/BloomFilterStore.html +4 -2
- package/docs/api/classes/ClaimHydrationError.html +41 -0
- package/docs/api/classes/ConnectionClosedError.html +40 -0
- package/docs/api/classes/CountMinSketchStore.html +3 -2
- package/docs/api/classes/CuckooFilterStore.html +3 -2
- package/docs/api/classes/FerricStoreClient.html +204 -146
- package/docs/api/classes/FerricStoreError.html +6 -3
- package/docs/api/classes/FlowAlreadyExistsError.html +6 -3
- package/docs/api/classes/FlowBatchError.html +42 -0
- package/docs/api/classes/FlowNotFoundError.html +6 -3
- package/docs/api/classes/FlowWrongStateError.html +6 -3
- package/docs/api/classes/GeoStore.html +4 -2
- package/docs/api/classes/HashStore.html +2 -2
- package/docs/api/classes/HyperLogLogStore.html +3 -2
- package/docs/api/classes/InvalidCommandError.html +6 -3
- package/docs/api/classes/KeyValueStore.html +2 -2
- package/docs/api/classes/LeaseRenewalError.html +34 -0
- package/docs/api/classes/ListStore.html +6 -2
- package/docs/api/classes/LockHeldError.html +6 -3
- package/docs/api/classes/LockNotOwnedError.html +6 -3
- package/docs/api/classes/NativeAdapter.html +4 -2
- package/docs/api/classes/OverloadedError.html +6 -4
- package/docs/api/classes/Queue.html +2 -2
- package/docs/api/classes/QueueClient.html +2 -2
- package/docs/api/classes/QueueCompletionError.html +35 -0
- package/docs/api/classes/QueueWorker.html +2 -2
- package/docs/api/classes/ReconnectingExecutor.html +8 -2
- package/docs/api/classes/RequestTimeoutError.html +41 -0
- package/docs/api/classes/RerouteError.html +39 -0
- package/docs/api/classes/RoutingTopology.html +2 -2
- package/docs/api/classes/SetStore.html +4 -2
- package/docs/api/classes/SortedSetStore.html +3 -2
- package/docs/api/classes/StaleLeaseError.html +6 -3
- package/docs/api/classes/StreamStore.html +2 -2
- package/docs/api/classes/TDigestStore.html +2 -2
- package/docs/api/classes/TopKStore.html +6 -2
- package/docs/api/classes/TopologyNativeAdapterPool.html +7 -2
- package/docs/api/classes/Workflow.html +4 -2
- package/docs/api/classes/WorkflowClient.html +2 -2
- package/docs/api/classes/WorkflowContext.html +2 -2
- package/docs/api/classes/WorkflowFlowCommands.html +3 -2
- package/docs/api/classes/WorkflowWorker.html +2 -2
- package/docs/api/functions/classifyServerError.html +1 -1
- package/docs/api/functions/complete.html +1 -1
- package/docs/api/functions/fail.html +1 -1
- package/docs/api/functions/isOutcome.html +1 -0
- package/docs/api/functions/isReconnectableClosedConnectionError.html +1 -1
- package/docs/api/functions/mapException.html +1 -1
- package/docs/api/functions/retry.html +1 -1
- package/docs/api/functions/transition.html +1 -1
- package/docs/api/hierarchy.html +1 -1
- package/docs/api/index.html +162 -12
- package/docs/api/interfaces/AdminListOptions.html +4 -0
- package/docs/api/interfaces/ApprovalListOptions.html +6 -0
- package/docs/api/interfaces/ApprovalRequestOptions.html +11 -0
- package/docs/api/interfaces/AttributeQueryOptions.html +5 -0
- package/docs/api/interfaces/AutoBatchOptions.html +3 -2
- package/docs/api/interfaces/BackpressurePolicy.html +2 -2
- package/docs/api/interfaces/BudgetCommitOptions.html +3 -0
- package/docs/api/interfaces/BudgetReserveOptions.html +5 -0
- package/docs/api/interfaces/CancelOptions.html +12 -6
- package/docs/api/interfaces/ChildSpec.html +2 -2
- package/docs/api/interfaces/CircuitOpenOptions.html +4 -0
- package/docs/api/interfaces/ClaimDueOptions.html +4 -2
- package/docs/api/interfaces/ClaimHydrationItem.html +3 -0
- package/docs/api/interfaces/ClaimedItem.html +4 -3
- package/docs/api/interfaces/CommandExecutor.html +7 -2
- package/docs/api/interfaces/CompleteJobsAndClaimJobsResult.html +11 -0
- package/docs/api/interfaces/CompleteManyOptions.html +14 -0
- package/docs/api/interfaces/CompleteOptions.html +4 -2
- package/docs/api/interfaces/CompleteOutcome.html +4 -2
- package/docs/api/interfaces/CountMinMergeOptions.html +2 -2
- package/docs/api/interfaces/CreateItem.html +3 -2
- package/docs/api/interfaces/CreateManyOptions.html +10 -2
- package/docs/api/interfaces/CreateOptions.html +6 -2
- package/docs/api/interfaces/EffectCompensateOptions.html +7 -0
- package/docs/api/interfaces/EffectConfirmOptions.html +7 -0
- package/docs/api/interfaces/EffectFailOptions.html +8 -0
- package/docs/api/interfaces/EffectReserveOptions.html +8 -0
- package/docs/api/interfaces/EffectStatusOptions.html +5 -0
- package/docs/api/interfaces/ExecutePipelineOptions.html +6 -2
- package/docs/api/interfaces/ExtendLeaseOptions.html +7 -0
- package/docs/api/interfaces/FailOptions.html +4 -2
- package/docs/api/interfaces/FailOutcome.html +4 -2
- package/docs/api/interfaces/FencedItem.html +2 -2
- package/docs/api/interfaces/FerricStoreClientFromUrlOptions.html +6 -2
- package/docs/api/interfaces/FerricStoreClientOptions.html +6 -2
- package/docs/api/interfaces/FetchOrComputeComputeResult.html +9 -0
- package/docs/api/interfaces/FetchOrComputeHitResult.html +6 -0
- package/docs/api/interfaces/FlowBatchCompletedItem.html +3 -0
- package/docs/api/interfaces/FlowMaxActiveFailure.html +3 -0
- package/docs/api/interfaces/FlowPolicyOptions.html +6 -2
- package/docs/api/interfaces/FlowRecord.html +5 -2
- package/docs/api/interfaces/FlowStatePolicy.html +2 -2
- package/docs/api/interfaces/FlowStatsOptions.html +6 -0
- package/docs/api/interfaces/GeoMember.html +2 -2
- package/docs/api/interfaces/GovernanceLedgerOptions.html +6 -0
- package/docs/api/interfaces/HistoryOptions.html +16 -0
- package/docs/api/interfaces/InvocationCreateOptions.html +2 -2
- package/docs/api/interfaces/KeyInfo.html +2 -2
- package/docs/api/interfaces/LeaseMutationOptions.html +14 -0
- package/docs/api/interfaces/LimitAmountOptions.html +4 -0
- package/docs/api/interfaces/LimitLeaseOptions.html +6 -0
- package/docs/api/interfaces/LimitListOptions.html +5 -0
- package/docs/api/interfaces/LimitReleaseOptions.html +4 -0
- package/docs/api/interfaces/MutateOptions.html +4 -2
- package/docs/api/interfaces/NamedValueMutation.html +4 -2
- package/docs/api/interfaces/NativeAdapterOptions.html +21 -9
- package/docs/api/interfaces/NativeClientOptions.html +43 -0
- package/docs/api/interfaces/NativeProtocolEvent.html +5 -0
- package/docs/api/interfaces/ProtocolCommand.html +2 -2
- package/docs/api/interfaces/QueueOptions.html +2 -2
- package/docs/api/interfaces/QueueWorkerResult.html +2 -2
- package/docs/api/interfaces/RangeLimit.html +2 -2
- package/docs/api/interfaces/RateLimitResult.html +2 -2
- package/docs/api/interfaces/ReadOptions.html +2 -2
- package/docs/api/interfaces/ReclaimOptions.html +4 -2
- package/docs/api/interfaces/ReconnectOptions.html +8 -2
- package/docs/api/interfaces/RequestContext.html +2 -2
- package/docs/api/interfaces/RequestContextOptions.html +2 -2
- package/docs/api/interfaces/RetryOptions.html +4 -2
- package/docs/api/interfaces/RetryOutcome.html +4 -2
- package/docs/api/interfaces/RetryPolicy.html +2 -2
- package/docs/api/interfaces/RoutingEndpoint.html +2 -2
- package/docs/api/interfaces/RoutingRoute.html +2 -2
- package/docs/api/interfaces/RunStepsItem.html +3 -0
- package/docs/api/interfaces/RunStepsManyOptions.html +11 -0
- package/docs/api/interfaces/ScanOptions.html +4 -2
- package/docs/api/interfaces/ScheduleFireDueOptions.html +5 -0
- package/docs/api/interfaces/ScheduleListOptions.html +9 -0
- package/docs/api/interfaces/ScheduleOptions.html +16 -0
- package/docs/api/interfaces/SearchOptions.html +2 -2
- package/docs/api/interfaces/StartAndClaimOptions.html +19 -0
- package/docs/api/interfaces/StateOptions.html +2 -2
- package/docs/api/interfaces/StateRegistration.html +2 -2
- package/docs/api/interfaces/StepContinueOptions.html +20 -0
- package/docs/api/interfaces/StoreCommandClient.html +3 -2
- package/docs/api/interfaces/TDigestCreateOptions.html +2 -2
- package/docs/api/interfaces/TDigestMergeOptions.html +2 -2
- package/docs/api/interfaces/TopologyNativeAdapterOptions.html +39 -0
- package/docs/api/interfaces/TransitionOptions.html +4 -2
- package/docs/api/interfaces/TransitionOutcome.html +4 -2
- package/docs/api/interfaces/ValueConfig.html +2 -2
- package/docs/api/interfaces/WorkerConfig.html +23 -2
- package/docs/api/interfaces/WorkflowOptions.html +2 -2
- package/docs/api/interfaces/WorkflowWorkerResult.html +2 -2
- package/docs/api/interfaces/XReadStream.html +2 -2
- package/docs/api/interfaces/ZAddMember.html +2 -2
- package/docs/api/media/kv-store.ts +2 -2
- package/docs/api/modules.html +1 -1
- package/docs/api/types/BackoffKind.html +1 -1
- package/docs/api/types/CollectionScanOptions.html +2 -0
- package/docs/api/types/Command.html +1 -1
- package/docs/api/types/CommandArgument.html +1 -1
- package/docs/api/types/ConnectionRequestDisposition.html +2 -0
- package/docs/api/types/EndpointPolicy.html +2 -1
- package/docs/api/types/ExceptionPolicy.html +1 -1
- package/docs/api/types/ExpiryCondition.html +1 -0
- package/docs/api/types/FencingToken.html +2 -0
- package/docs/api/types/FetchOrComputeFencedResult.html +1 -0
- package/docs/api/types/FetchOrComputeResult.html +1 -0
- package/docs/api/types/FlowAdminRecord.html +1 -0
- package/docs/api/types/FlowStateMode.html +1 -1
- package/docs/api/types/FlowStatePolicyLike.html +1 -1
- package/docs/api/types/GeoAddOptions.html +2 -0
- package/docs/api/types/GetExOptions.html +2 -0
- package/docs/api/types/HashScanResult.html +2 -0
- package/docs/api/types/IntegerReply.html +2 -0
- package/docs/api/types/ManagementPairs.html +1 -1
- package/docs/api/types/MaxActiveMs.html +1 -0
- package/docs/api/types/Outcome.html +1 -1
- package/docs/api/types/QueueBatchHandler.html +1 -1
- package/docs/api/types/QueueHandler.html +1 -1
- package/docs/api/types/QueueJob.html +1 -1
- package/docs/api/types/RequestDisposition.html +1 -0
- package/docs/api/types/SearchStateMeta.html +1 -1
- package/docs/api/types/SetOptions.html +2 -0
- package/docs/api/types/SetScanResult.html +2 -0
- package/docs/api/types/SortedSetScanResult.html +2 -0
- package/docs/api/types/StateMeta.html +1 -1
- package/docs/api/types/StateMetaValue.html +1 -1
- package/docs/api/types/TopKReserveOptions.html +1 -0
- package/docs/api/types/WorkerProfile.html +1 -1
- package/docs/api/types/WorkerRefillStrategy.html +1 -0
- package/docs/api/types/WorkflowHandler.html +1 -1
- package/docs/api/types/ZAddOptions.html +2 -0
- package/docs/api/variables/COMMAND_OPCODES.html +1 -1
- package/docs/api/variables/FERRICSTORE_MINIMUM_SERVER_VERSION.html +2 -0
- package/docs/api/variables/FERRICSTORE_NATIVE_PROTOCOL_VERSION.html +2 -0
- package/docs/api/variables/FERRICSTORE_SDK_VERSION.html +2 -0
- package/docs/python-parity.md +12 -6
- package/package.json +10 -1
- package/docs/api/classes/JsonStore.html +0 -15
- package/docs/api/interfaces/FetchOrComputeResult.html +0 -6
- package/docs/api/interfaces/GeoAddOptions.html +0 -4
- package/docs/api/interfaces/GetExOptions.html +0 -6
- package/docs/api/interfaces/JsonSetOptions.html +0 -3
- package/docs/api/interfaces/SetOptions.html +0 -9
- package/docs/api/interfaces/TopKReserveOptions.html +0 -4
- package/docs/api/interfaces/ZAddOptions.html +0 -6
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/adapters.ts","../src/errors.ts","../src/protocol.ts","../src/topology.ts","../src/codecs.ts","../src/internal.ts","../src/store.ts","../src/modules.ts","../src/types.ts","../src/client.ts","../src/outcomes.ts","../src/queue.ts","../src/workflow.ts"],"sourcesContent":["export {\n NativeAdapter,\n ReconnectingExecutor,\n isReconnectableClosedConnectionError,\n type CommandExecutor,\n type ExecutePipelineOptions,\n type NativeAdapterOptions,\n type ReconnectOptions\n} from \"./adapters.js\";\nexport {\n RoutingTopology,\n TopologyNativeAdapterPool,\n type EndpointPolicy,\n type RoutingEndpoint,\n type RoutingRoute\n} from \"./topology.js\";\nexport {\n FerricStoreClient,\n type AutoBatchOptions,\n type CancelOptions,\n type ClaimDueOptions,\n type CompleteOptions,\n type CreateManyOptions,\n type CreateOptions,\n type FailOptions,\n type FerricStoreClientFromUrlOptions,\n type FerricStoreClientOptions,\n type FlowPolicyOptions,\n type FlowStateMode,\n type FlowStatePolicy,\n type FlowStatePolicyLike,\n type InvocationCreateOptions,\n type ManagementPairs,\n type MutateOptions,\n type ReadOptions,\n type ReclaimOptions,\n type RequestContext,\n type RequestContextOptions,\n type RetryOptions,\n type SearchOptions,\n type SearchStateMeta,\n type TransitionOptions\n} from \"./client.js\";\nexport { JsonCodec, RawCodec, type Codec } from \"./codecs.js\";\nexport {\n FerricStoreError,\n FlowAlreadyExistsError,\n FlowNotFoundError,\n FlowWrongStateError,\n InvalidCommandError,\n LockHeldError,\n LockNotOwnedError,\n OverloadedError,\n StaleLeaseError,\n classifyServerError,\n mapException\n} from \"./errors.js\";\nexport {\n complete,\n fail,\n retry,\n transition,\n type CompleteOutcome,\n type FailOutcome,\n type NamedValueMutation,\n type Outcome,\n type RetryOutcome,\n type TransitionOutcome\n} from \"./outcomes.js\";\nexport type { Command, CommandArgument } from \"./internal.js\";\nexport { COMMAND_OPCODES } from \"./protocol.js\";\nexport type { ProtocolCommand } from \"./protocol.js\";\nexport {\n BloomFilterStore,\n CountMinSketchStore,\n CuckooFilterStore,\n JsonStore,\n TDigestStore,\n TopKStore,\n type CountMinMergeOptions,\n type JsonSetOptions,\n type TDigestCreateOptions,\n type TDigestMergeOptions,\n type TopKReserveOptions\n} from \"./modules.js\";\nexport { Queue, QueueClient, QueueWorker, type QueueBatchHandler, type QueueHandler, type QueueJob, type QueueOptions, type QueueWorkerResult } from \"./queue.js\";\nexport {\n BitmapStore,\n GeoStore,\n HashStore,\n HyperLogLogStore,\n KeyValueStore,\n ListStore,\n SetStore,\n SortedSetStore,\n StreamStore,\n type GeoAddOptions,\n type GeoMember,\n type GetExOptions,\n type RangeLimit,\n type ScanOptions,\n type SetOptions,\n type StoreCommandClient,\n type XReadStream,\n type ZAddMember,\n type ZAddOptions\n} from \"./store.js\";\nexport {\n Workflow,\n WorkflowClient,\n WorkflowContext,\n WorkflowFlowCommands,\n WorkflowWorker,\n type StateOptions,\n type StateRegistration,\n type WorkflowHandler,\n type WorkflowOptions,\n type WorkflowWorkerResult\n} from \"./workflow.js\";\nexport type {\n BackoffKind,\n BackpressurePolicy,\n ChildSpec,\n ClaimedItem,\n CreateItem,\n ExceptionPolicy,\n FencedItem,\n FetchOrComputeResult,\n FlowRecord,\n KeyInfo,\n RateLimitResult,\n RetryPolicy,\n StateMeta,\n StateMetaValue,\n ValueConfig,\n WorkerConfig,\n WorkerProfile\n} from \"./types.js\";\n","import net from \"node:net\";\nimport tls from \"node:tls\";\nimport { Buffer } from \"node:buffer\";\nimport { FerricStoreError, classifyServerError } from \"./errors.js\";\nimport type { Command, CommandArgument } from \"./internal.js\";\nimport type { EndpointPolicy, RoutingEndpoint, RoutingRoute, RoutingTopology } from \"./topology.js\";\nimport {\n FLAG_MORE_CHUNKS,\n OPCODES,\n buildProtocolCommand,\n decodeResponse,\n encodeRequest,\n pipelineCommand,\n tryDecodeFrame,\n unwrapPipelineResponse,\n type ProtocolCommand,\n type ResponseFrame\n} from \"./protocol.js\";\n\nexport interface CommandExecutor {\n executeCommand(...args: CommandArgument[]): Promise<unknown>;\n executePipeline?(commands: readonly Command[], options?: ExecutePipelineOptions): Promise<unknown[]>;\n refreshTopology?(): Promise<RoutingTopology>;\n route?(key: string | Buffer): Promise<RoutingRoute> | RoutingRoute;\n close?(): Promise<void> | void;\n}\n\nexport interface ExecutePipelineOptions {\n throwOnItemError?: boolean;\n}\n\nexport interface NativeAdapterOptions {\n autoReconnect?: boolean | ReconnectOptions;\n clientName?: string;\n connectTimeoutMs?: number;\n endpointPolicy?: EndpointPolicy;\n endpointValidator?: (endpoint: RoutingEndpoint) => boolean | void;\n haRouting?: boolean;\n heartbeatIntervalMs?: number;\n keepAlive?: boolean;\n keepAliveInitialDelayMs?: number;\n maxChunkBytes?: number;\n protocolLanes?: number;\n seeds?: readonly string[];\n timeoutMs?: number;\n trustedHosts?: readonly string[];\n username?: string;\n password?: string;\n tlsOptions?: tls.ConnectionOptions;\n warmConnections?: boolean;\n}\n\nexport interface ReconnectOptions {\n maxRetries?: number;\n}\n\ninterface PendingRequest {\n readonly opcode: number;\n readonly reject: (reason: unknown) => void;\n readonly resolve: (value: unknown) => void;\n}\n\ninterface ParsedUrl {\n readonly host: string;\n readonly password?: string;\n readonly port: number;\n readonly tls: boolean;\n readonly username?: string;\n}\n\nexport class NativeAdapter implements CommandExecutor {\n private readonly socket: net.Socket | tls.TLSSocket;\n private readonly pending = new Map<bigint, PendingRequest>();\n private readonly chunks = new Map<string, Buffer[]>();\n private readonly chunkBytes = new Map<string, number>();\n private buffer: Buffer = Buffer.alloc(0);\n private closed = false;\n private dataLane = 0;\n private readonly maxChunkBytes: number;\n private requestId = 0n;\n private readonly protocolLanes: number;\n private readonly heartbeatIntervalMs?: number;\n private heartbeatInFlight = false;\n private heartbeatTimer?: NodeJS.Timeout;\n private lastActivityMs = Date.now();\n private readonly timeoutMs: number;\n\n private constructor(\n socket: net.Socket | tls.TLSSocket,\n timeoutMs: number,\n protocolLanes: number,\n maxChunkBytes: number,\n heartbeatIntervalMs?: number\n ) {\n this.socket = socket;\n this.maxChunkBytes = Math.max(1, Math.trunc(maxChunkBytes));\n this.timeoutMs = timeoutMs;\n this.protocolLanes = Math.max(1, Math.trunc(protocolLanes));\n this.heartbeatIntervalMs = normalizeHeartbeatInterval(heartbeatIntervalMs);\n this.socket.on(\"data\", (chunk: Buffer) => this.onData(chunk));\n this.socket.on(\"error\", (error) => this.failAll(error));\n this.socket.on(\"close\", () => this.failAll(new FerricStoreError(\"FerricStore connection closed\")));\n this.startHeartbeat();\n }\n\n static async fromUrl(url: string, options: NativeAdapterOptions = {}): Promise<NativeAdapter> {\n const parsed = parseFerricUrl(url);\n const socket = await connect(parsed, options);\n const adapter = new NativeAdapter(\n socket,\n options.timeoutMs ?? 30_000,\n options.protocolLanes ?? 8,\n options.maxChunkBytes ?? 64 * 1024 * 1024,\n options.heartbeatIntervalMs\n );\n await adapter.startup(options.clientName);\n const password = options.password ?? parsed.password;\n if (password != null && password !== \"\") {\n await adapter.auth(options.username ?? parsed.username ?? \"default\", password);\n }\n return adapter;\n }\n\n async executeCommand(...args: CommandArgument[]): Promise<unknown> {\n const command = buildProtocolCommand(args);\n return await this.request(command);\n }\n\n async executeProtocolCommand(command: ProtocolCommand, laneId?: number): Promise<unknown> {\n return await this.request(laneId == null ? command : { ...command, laneId });\n }\n\n async executePipeline(commands: readonly Command[], options: ExecutePipelineOptions = {}): Promise<unknown[]> {\n if (commands.length === 0) {\n return [];\n }\n return unwrapPipelineResponse(await this.request(pipelineCommand(commands)), options);\n }\n\n async close(): Promise<void> {\n if (this.closed) {\n return;\n }\n this.closed = true;\n this.stopHeartbeat();\n this.socket.end();\n }\n\n private async startup(clientName?: string): Promise<void> {\n await this.request({\n laneId: 0,\n opcode: OPCODES.startup,\n payload: {\n client_name: clientName ?? \"ferricstore-typescript\",\n compact_flow_responses: true,\n compression: \"none\",\n driver_name: clientName ?? \"ferricstore-typescript\"\n }\n });\n }\n\n private async auth(username: string, password: string): Promise<void> {\n await this.request({ laneId: 0, opcode: OPCODES.auth, payload: { password, username } });\n }\n\n private async request(command: ProtocolCommand): Promise<unknown> {\n if (this.closed) {\n throw new FerricStoreError(\"FerricStore connection is closed\");\n }\n this.lastActivityMs = Date.now();\n const requestId = this.nextRequestId();\n const frame = encodeRequest(this.assignLane(command), requestId);\n\n return await new Promise<unknown>((resolve, reject) => {\n const timer = setTimeout(() => {\n this.pending.delete(requestId);\n this.cleanupChunksForRequest(requestId);\n reject(new FerricStoreError(`FerricStore request timed out after ${this.timeoutMs}ms`));\n }, this.timeoutMs);\n timer.unref?.();\n\n this.pending.set(requestId, {\n opcode: command.opcode,\n reject: (reason: unknown) => {\n clearTimeout(timer);\n this.lastActivityMs = Date.now();\n reject(reason instanceof Error ? reason : classifyServerError(String(reason), reason));\n },\n resolve: (value: unknown) => {\n clearTimeout(timer);\n this.lastActivityMs = Date.now();\n resolve(value);\n }\n });\n\n this.socket.write(frame, (error) => {\n if (error != null) {\n this.pending.delete(requestId);\n this.cleanupChunksForRequest(requestId);\n clearTimeout(timer);\n this.lastActivityMs = Date.now();\n reject(error);\n }\n });\n });\n }\n\n private startHeartbeat(): void {\n if (this.heartbeatIntervalMs == null) {\n return;\n }\n this.heartbeatTimer = setInterval(() => {\n void this.sendHeartbeat();\n }, this.heartbeatIntervalMs);\n this.heartbeatTimer.unref?.();\n }\n\n private stopHeartbeat(): void {\n if (this.heartbeatTimer == null) {\n return;\n }\n clearInterval(this.heartbeatTimer);\n this.heartbeatTimer = undefined;\n }\n\n private async sendHeartbeat(): Promise<void> {\n if (this.closed || this.heartbeatInFlight || this.pending.size > 0 || this.heartbeatIntervalMs == null) {\n return;\n }\n if (Date.now() - this.lastActivityMs < this.heartbeatIntervalMs) {\n return;\n }\n this.heartbeatInFlight = true;\n try {\n await this.request(buildProtocolCommand([\"PING\"]));\n } catch {\n // Socket close/error handlers own adapter shutdown and pending request rejection.\n } finally {\n this.heartbeatInFlight = false;\n }\n }\n\n private onData(chunk: Buffer): void {\n try {\n this.buffer = this.buffer.byteLength === 0 ? chunk : Buffer.concat([this.buffer, chunk]);\n for (;;) {\n const parsed = tryDecodeFrame(this.buffer);\n if (parsed == null) {\n return;\n }\n this.buffer = parsed.rest;\n this.handleFrame(parsed.frame);\n }\n } catch (error) {\n this.failAll(error);\n this.socket.destroy(error instanceof Error ? error : undefined);\n }\n }\n\n private handleFrame(frame: ResponseFrame): void {\n if (frame.requestId === 0n) {\n return;\n }\n if ((frame.flags & FLAG_MORE_CHUNKS) !== 0) {\n const key = `${frame.requestId}:${frame.opcode}:${frame.laneId}`;\n const bytes = (this.chunkBytes.get(key) ?? 0) + frame.body.byteLength;\n if (bytes > this.maxChunkBytes) {\n throw new FerricStoreError(`native protocol chunked response exceeded ${this.maxChunkBytes} bytes`);\n }\n this.chunkBytes.set(key, bytes);\n this.chunks.set(key, [...(this.chunks.get(key) ?? []), frame.body]);\n return;\n }\n\n let completeFrame = frame;\n if (this.chunks.size > 0) {\n const key = `${frame.requestId}:${frame.opcode}:${frame.laneId}`;\n const previous = this.chunks.get(key);\n this.chunks.delete(key);\n this.chunkBytes.delete(key);\n if (previous != null) {\n const body = Buffer.concat([...previous, frame.body]);\n completeFrame = { ...frame, body, bodyLength: body.byteLength };\n }\n }\n\n const pending = this.pending.get(frame.requestId);\n if (pending == null) {\n return;\n }\n this.pending.delete(frame.requestId);\n this.cleanupChunksForRequest(frame.requestId);\n\n try {\n pending.resolve(decodeResponse(completeFrame, pending.opcode));\n } catch (error) {\n pending.reject(error);\n }\n }\n\n private failAll(reason: unknown): void {\n if (this.closed) {\n return;\n }\n this.closed = true;\n this.stopHeartbeat();\n const error = reason instanceof Error ? reason : classifyServerError(String(reason), reason);\n for (const pending of this.pending.values()) {\n pending.reject(error);\n }\n this.pending.clear();\n this.chunks.clear();\n this.chunkBytes.clear();\n }\n\n private cleanupChunksForRequest(requestId: bigint): void {\n const prefix = `${requestId}:`;\n for (const key of this.chunks.keys()) {\n if (key.startsWith(prefix)) {\n this.chunks.delete(key);\n this.chunkBytes.delete(key);\n }\n }\n }\n\n private nextRequestId(): bigint {\n this.requestId = this.requestId === 0xffff_ffff_ffff_ffffn ? 1n : this.requestId + 1n;\n return this.requestId;\n }\n\n private assignLane(command: ProtocolCommand): ProtocolCommand {\n if (command.laneId != null) {\n return command;\n }\n if (command.opcode < 0x0100 && command.opcode !== OPCODES.pipeline) {\n return { ...command, laneId: 0 };\n }\n this.dataLane = (this.dataLane % this.protocolLanes) + 1;\n return { ...command, laneId: this.dataLane };\n }\n}\n\nexport class ReconnectingExecutor implements CommandExecutor {\n private closed = false;\n private readonly maxRetries: number;\n private executorPromise: Promise<CommandExecutor>;\n private reconnectPromise?: Promise<CommandExecutor>;\n\n constructor(\n private readonly createExecutor: () => Promise<CommandExecutor>,\n options: ReconnectOptions = {}\n ) {\n this.maxRetries = Math.max(0, Math.trunc(options.maxRetries ?? 1));\n this.executorPromise = createExecutor();\n }\n\n async executeCommand(...args: CommandArgument[]): Promise<unknown> {\n return await this.withReconnect((executor) => executor.executeCommand(...args));\n }\n\n async executePipeline(commands: readonly Command[], options: ExecutePipelineOptions = {}): Promise<unknown[]> {\n return await this.withReconnect(async (executor) => {\n if (executor.executePipeline != null) {\n return await executor.executePipeline(commands, options);\n }\n return await Promise.all(commands.map((command) => executor.executeCommand(...command)));\n });\n }\n\n async refreshTopology(): Promise<RoutingTopology> {\n const executor = await this.executorPromise;\n if (executor.refreshTopology == null) {\n throw new FerricStoreError(\"topology refresh requires a topology-aware native executor\");\n }\n return await executor.refreshTopology();\n }\n\n async route(key: string | Buffer): Promise<RoutingRoute> {\n const executor = await this.executorPromise;\n if (executor.route == null) {\n throw new FerricStoreError(\"route lookup requires a topology-aware native executor\");\n }\n return await executor.route(key);\n }\n\n async close(): Promise<void> {\n if (this.closed) {\n return;\n }\n this.closed = true;\n const executor = await this.executorPromise.catch(() => undefined);\n await Promise.resolve(executor?.close?.());\n }\n\n private async withReconnect<T>(operation: (executor: CommandExecutor) => Promise<T>): Promise<T> {\n let executor = await this.executorPromise;\n for (let attempt = 0; ; attempt++) {\n try {\n return await operation(executor);\n } catch (error) {\n if (this.closed || attempt >= this.maxRetries || !isReconnectableClosedConnectionError(error)) {\n throw error;\n }\n executor = await this.reconnect(executor);\n }\n }\n }\n\n private async reconnect(staleExecutor: CommandExecutor): Promise<CommandExecutor> {\n if (this.closed) {\n throw new FerricStoreError(\"FerricStore client is closed\");\n }\n if (this.reconnectPromise != null) {\n return await this.reconnectPromise;\n }\n const currentExecutor = await this.executorPromise.catch(() => undefined);\n if (currentExecutor != null && currentExecutor !== staleExecutor) {\n return currentExecutor;\n }\n this.reconnectPromise = (async () => {\n await Promise.resolve(staleExecutor.close?.()).catch(() => undefined);\n const nextExecutor = await this.createExecutor();\n this.executorPromise = Promise.resolve(nextExecutor);\n return nextExecutor;\n })().finally(() => {\n this.reconnectPromise = undefined;\n });\n return await this.reconnectPromise;\n }\n}\n\nexport function isReconnectableClosedConnectionError(error: unknown): boolean {\n return error instanceof Error && error.message === \"FerricStore connection is closed\";\n}\n\nfunction parseFerricUrl(value: string): ParsedUrl {\n const url = new URL(value);\n if (url.protocol !== \"ferric:\" && url.protocol !== \"ferrics:\") {\n throw new FerricStoreError(`unsupported FerricStore URL scheme: ${url.protocol}`);\n }\n return {\n host: url.hostname || \"127.0.0.1\",\n ...(url.password === \"\" ? {} : { password: decodeURIComponent(url.password) }),\n port: Number(url.port || (url.protocol === \"ferrics:\" ? 6389 : 6388)),\n tls: url.protocol === \"ferrics:\",\n ...(url.username === \"\" ? {} : { username: decodeURIComponent(url.username) })\n };\n}\n\nasync function connect(parsed: ParsedUrl, options: NativeAdapterOptions): Promise<net.Socket | tls.TLSSocket> {\n const timeoutMs = options.connectTimeoutMs ?? options.timeoutMs ?? 30_000;\n return await new Promise((resolve, reject) => {\n const socket = parsed.tls\n ? tls.connect({ host: parsed.host, port: parsed.port, ...options.tlsOptions })\n : net.createConnection({ host: parsed.host, port: parsed.port });\n const timer = setTimeout(() => {\n socket.destroy();\n reject(new FerricStoreError(`FerricStore connection timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n timer.unref?.();\n\n socket.setNoDelay(true);\n socket.setKeepAlive(options.keepAlive ?? true, normalizeKeepAliveInitialDelay(options.keepAliveInitialDelayMs));\n socket.once(\"connect\", () => {\n clearTimeout(timer);\n resolve(socket);\n });\n socket.once(\"error\", (error) => {\n clearTimeout(timer);\n reject(error instanceof Error ? error : classifyServerError(String(error), error));\n });\n });\n}\n\nfunction normalizeHeartbeatInterval(value: number | undefined): number | undefined {\n if (value != null && value <= 0) {\n return undefined;\n }\n return Math.trunc(value ?? 60_000);\n}\n\nfunction normalizeKeepAliveInitialDelay(value: number | undefined): number {\n return Math.max(0, Math.trunc(value ?? 30_000));\n}\n","export class FerricStoreError extends Error {\n readonly code: string = \"ferricstore_error\";\n readonly raw: unknown;\n\n constructor(message: string, options: { raw?: unknown; cause?: unknown } = {}) {\n super(message, { cause: options.cause });\n this.name = new.target.name;\n this.raw = options.raw;\n }\n}\n\nexport class FlowNotFoundError extends FerricStoreError {\n override readonly code = \"flow_not_found\";\n}\n\nexport class FlowWrongStateError extends FerricStoreError {\n override readonly code = \"flow_wrong_state\";\n}\n\nexport class StaleLeaseError extends FerricStoreError {\n override readonly code = \"stale_lease\";\n}\n\nexport class FlowAlreadyExistsError extends FerricStoreError {\n override readonly code = \"flow_already_exists\";\n}\n\nexport class LockHeldError extends FerricStoreError {\n override readonly code = \"lock_held\";\n}\n\nexport class LockNotOwnedError extends FerricStoreError {\n override readonly code = \"lock_not_owned\";\n}\n\nexport class InvalidCommandError extends FerricStoreError {\n override readonly code = \"invalid_command\";\n}\n\nexport class OverloadedError extends FerricStoreError {\n override readonly code = \"overloaded\";\n readonly retryAfterMs: number | undefined;\n readonly reason: string | undefined;\n\n constructor(\n message: string,\n options: { raw?: unknown; cause?: unknown; retryAfterMs?: number; reason?: string } = {}\n ) {\n super(message, options);\n this.retryAfterMs = options.retryAfterMs;\n this.reason = options.reason;\n }\n}\n\nexport function classifyServerError(message: string, raw?: unknown, cause?: unknown): FerricStoreError {\n const lower = message.toLowerCase();\n\n if (lower.includes(\"overloaded\") || lower.includes(\"busy\")) {\n return new OverloadedError(message, {\n cause,\n raw,\n reason: stringField(lower, \"reason\"),\n retryAfterMs: intField(lower, \"retry_after_ms\")\n });\n }\n if (lower.includes(\"already exists\")) {\n return new FlowAlreadyExistsError(message, { cause, raw });\n }\n if (lower.includes(\"wrong state\")) {\n return new FlowWrongStateError(message, { cause, raw });\n }\n if (lower.includes(\"stale flow lease\") || lower.includes(\"stale lease\") || lower.includes(\"stale token\")) {\n return new StaleLeaseError(message, { cause, raw });\n }\n if (lower.includes(\"not found\") || lower.includes(\"does not exist\")) {\n return new FlowNotFoundError(message, { cause, raw });\n }\n if (lower.includes(\"lock is held\") || lower.includes(\"held by another owner\")) {\n return new LockHeldError(message, { cause, raw });\n }\n if (lower.includes(\"not the lock owner\") || lower.includes(\"caller is not the lock owner\")) {\n return new LockNotOwnedError(message, { cause, raw });\n }\n if (lower.includes(\"wrong number of arguments\") || lower.includes(\"syntax error\")) {\n return new InvalidCommandError(message, { cause, raw });\n }\n\n return new FerricStoreError(message, { cause, raw });\n}\n\nexport function mapException(error: unknown): unknown {\n if (error instanceof FerricStoreError) {\n return error;\n }\n\n if (!(error instanceof Error)) {\n return error;\n }\n\n const message = error.message;\n const serverLike =\n error.name === \"ResponseError\" ||\n message.startsWith(\"ERR \") ||\n message.startsWith(\"WRONGTYPE \") ||\n message.startsWith(\"DISTLOCK \");\n\n if (!serverLike) {\n return error;\n }\n\n return classifyServerError(message, error, error);\n}\n\nfunction intField(message: string, name: string): number | undefined {\n const match = new RegExp(`\\\\b${name}=([0-9]+)\\\\b`).exec(message);\n return match?.[1] == null ? undefined : Number.parseInt(match[1], 10);\n}\n\nfunction stringField(message: string, name: string): string | undefined {\n const match = new RegExp(`\\\\b${name}=([a-z0-9_:-]+)\\\\b`).exec(message);\n return match?.[1];\n}\n","import { Buffer } from \"node:buffer\";\nimport { FerricStoreError, classifyServerError } from \"./errors.js\";\nimport type { Command, CommandArgument } from \"./internal.js\";\n\nexport const MAGIC = \"FSNP\";\nexport const REQUEST_VERSION = 0x01;\nexport const RESPONSE_VERSION = 0x81;\nexport const HEADER_SIZE = 24;\n\nexport const FLAG_CUSTOM_PAYLOAD = 0x02;\nexport const FLAG_COMPRESSED = 0x08;\nexport const FLAG_MORE_CHUNKS = 0x20;\n\nexport const STATUS_OK = 0;\n\nexport const COMMAND_OPCODES = {\n \"HELLO\": 0x0001,\n \"AUTH\": 0x0002,\n \"PING\": 0x0003,\n \"CLIENT.SETNAME\": 0x0004,\n \"CLIENT.INFO\": 0x0005,\n \"ROUTE\": 0x0006,\n \"SHARDS\": 0x0007,\n \"BACKPRESSURE\": 0x0008,\n \"QUIT\": 0x0009,\n \"GOAWAY\": 0x000a,\n \"OPTIONS\": 0x000b,\n \"STARTUP\": 0x000c,\n \"WINDOW_UPDATE\": 0x000d,\n \"PIPELINE\": 0x000e,\n \"ROUTE_BATCH\": 0x000f,\n \"EVENT\": 0x0010,\n \"SUBSCRIBE_EVENTS\": 0x0011,\n \"UNSUBSCRIBE_EVENTS\": 0x0012,\n \"COMMAND_EXEC\": 0x0100,\n \"GET\": 0x0101,\n \"SET\": 0x0102,\n \"DEL\": 0x0103,\n \"MGET\": 0x0104,\n \"MSET\": 0x0105,\n \"CAS\": 0x0106,\n \"LOCK\": 0x0107,\n \"UNLOCK\": 0x0108,\n \"EXTEND\": 0x0109,\n \"RATELIMIT.ADD\": 0x010a,\n \"FETCH_OR_COMPUTE\": 0x010b,\n \"FETCH_OR_COMPUTE_RESULT\": 0x010c,\n \"FETCH_OR_COMPUTE_ERROR\": 0x010d,\n \"HSET\": 0x0110,\n \"HGET\": 0x0111,\n \"HMGET\": 0x0112,\n \"HGETALL\": 0x0113,\n \"LPUSH\": 0x0120,\n \"RPUSH\": 0x0121,\n \"LPOP\": 0x0122,\n \"RPOP\": 0x0123,\n \"LRANGE\": 0x0124,\n \"SADD\": 0x0130,\n \"SREM\": 0x0131,\n \"SMEMBERS\": 0x0132,\n \"SISMEMBER\": 0x0133,\n \"ZADD\": 0x0140,\n \"ZREM\": 0x0141,\n \"ZRANGE\": 0x0142,\n \"ZSCORE\": 0x0143,\n \"FLOW.CREATE\": 0x0201,\n \"FLOW.GET\": 0x0202,\n \"FLOW.CLAIM_DUE\": 0x0203,\n \"FLOW.COMPLETE\": 0x0204,\n \"FLOW.TRANSITION\": 0x0205,\n \"FLOW.RETRY\": 0x0206,\n \"FLOW.FAIL\": 0x0207,\n \"FLOW.CANCEL\": 0x0208,\n \"FLOW.EXTEND_LEASE\": 0x0209,\n \"FLOW.HISTORY\": 0x020a,\n \"FLOW.VALUE.PUT\": 0x020b,\n \"FLOW.VALUE.MGET\": 0x020c,\n \"FLOW.SIGNAL\": 0x020d,\n \"FLOW.LIST\": 0x020e,\n \"FLOW.CREATE_MANY\": 0x020f,\n \"FLOW.COMPLETE_MANY\": 0x0210,\n \"FLOW.TRANSITION_MANY\": 0x0211,\n \"FLOW.RETRY_MANY\": 0x0212,\n \"FLOW.FAIL_MANY\": 0x0213,\n \"FLOW.CANCEL_MANY\": 0x0214,\n \"FLOW.RECLAIM\": 0x0215,\n \"FLOW.REWIND\": 0x0216,\n \"FLOW.TERMINALS\": 0x0217,\n \"FLOW.FAILURES\": 0x0218,\n \"FLOW.BY_PARENT\": 0x0219,\n \"FLOW.BY_ROOT\": 0x021a,\n \"FLOW.BY_CORRELATION\": 0x021b,\n \"FLOW.INFO\": 0x021c,\n \"FLOW.STUCK\": 0x021d,\n \"FLOW.POLICY.SET\": 0x021e,\n \"FLOW.POLICY.GET\": 0x021f,\n \"FLOW.SPAWN_CHILDREN\": 0x0220,\n \"FLOW.RETENTION_CLEANUP\": 0x0221,\n \"FLOW.STEP_CONTINUE\": 0x0222,\n \"FLOW.START_AND_CLAIM\": 0x0223,\n \"FLOW.RUN_STEPS_MANY\": 0x0224,\n \"FLOW.SCHEDULE.CREATE\": 0x0225,\n \"FLOW.SCHEDULE.GET\": 0x0226,\n \"FLOW.SCHEDULE.DELETE\": 0x0227,\n \"FLOW.SCHEDULE.FIRE_DUE\": 0x0228,\n \"FLOW.SCHEDULE.LIST\": 0x0229,\n \"FLOW.SCHEDULE.FIRE\": 0x022a,\n \"FLOW.SCHEDULE.PAUSE\": 0x022b,\n \"FLOW.SCHEDULE.RESUME\": 0x022c,\n \"FLOW.STATS\": 0x022d,\n \"FLOW.ATTRIBUTES\": 0x022e,\n \"FLOW.ATTRIBUTE_VALUES\": 0x022f,\n \"FLOW.SEARCH\": 0x0230,\n \"FLOW.EFFECT.RESERVE\": 0x0240,\n \"FLOW.EFFECT.CONFIRM\": 0x0241,\n \"FLOW.EFFECT.FAIL\": 0x0242,\n \"FLOW.EFFECT.COMPENSATE\": 0x0243,\n \"FLOW.EFFECT.GET\": 0x0244,\n \"FLOW.GOVERNANCE.LEDGER\": 0x0245,\n \"FLOW.APPROVAL.REQUEST\": 0x0246,\n \"FLOW.APPROVAL.APPROVE\": 0x0247,\n \"FLOW.APPROVAL.REJECT\": 0x0248,\n \"FLOW.APPROVAL.GET\": 0x0249,\n \"FLOW.CIRCUIT.OPEN\": 0x024a,\n \"FLOW.CIRCUIT.CLOSE\": 0x024b,\n \"FLOW.CIRCUIT.GET\": 0x024c,\n \"FLOW.BUDGET.RESERVE\": 0x024d,\n \"FLOW.BUDGET.GET\": 0x024e,\n \"FLOW.LIMIT.LEASE\": 0x024f,\n \"FLOW.LIMIT.SPEND\": 0x0250,\n \"FLOW.LIMIT.RELEASE\": 0x0251,\n \"FLOW.LIMIT.GET\": 0x0252,\n \"FLOW.APPROVAL.LIST\": 0x0253,\n \"FLOW.GOVERNANCE.OVERVIEW\": 0x0254,\n \"FLOW.BUDGET.LIST\": 0x0255,\n \"FLOW.LIMIT.LIST\": 0x0256,\n \"FLOW.BUDGET.COMMIT\": 0x0257,\n \"FLOW.BUDGET.RELEASE\": 0x0258,\n \"CLUSTER.HEALTH\": 0x0301,\n \"CLUSTER.STATS\": 0x0302,\n \"CLUSTER.KEYSLOT\": 0x0303,\n \"CLUSTER.SLOTS\": 0x0304,\n \"CLUSTER.STATUS\": 0x0305,\n \"CLUSTER.JOIN\": 0x0306,\n \"CLUSTER.LEAVE\": 0x0307,\n \"CLUSTER.FAILOVER\": 0x0308,\n \"CLUSTER.PROMOTE\": 0x0309,\n \"CLUSTER.DEMOTE\": 0x030a,\n \"CLUSTER.ROLE\": 0x030b,\n \"FERRICSTORE.KEY_INFO\": 0x030c,\n \"FERRICSTORE.CONFIG\": 0x030d,\n \"FERRICSTORE.HOTNESS\": 0x030e,\n \"FERRICSTORE.METRICS\": 0x030f,\n \"FERRICSTORE.BLOBGC\": 0x0310\n} as const;\n\nexport const OPCODES = {\n startup: COMMAND_OPCODES.STARTUP,\n auth: COMMAND_OPCODES.AUTH,\n ping: COMMAND_OPCODES.PING,\n clientSetName: COMMAND_OPCODES[\"CLIENT.SETNAME\"],\n clientInfo: COMMAND_OPCODES[\"CLIENT.INFO\"],\n route: COMMAND_OPCODES.ROUTE,\n routeBatch: COMMAND_OPCODES.ROUTE_BATCH,\n shards: COMMAND_OPCODES.SHARDS,\n backpressure: COMMAND_OPCODES.BACKPRESSURE,\n options: COMMAND_OPCODES.OPTIONS,\n quit: COMMAND_OPCODES.QUIT,\n commandExec: COMMAND_OPCODES.COMMAND_EXEC,\n get: COMMAND_OPCODES.GET,\n set: COMMAND_OPCODES.SET,\n del: COMMAND_OPCODES.DEL,\n mget: COMMAND_OPCODES.MGET,\n mset: COMMAND_OPCODES.MSET,\n pipeline: COMMAND_OPCODES.PIPELINE,\n flowCreate: COMMAND_OPCODES[\"FLOW.CREATE\"],\n flowClaimDue: COMMAND_OPCODES[\"FLOW.CLAIM_DUE\"],\n flowComplete: COMMAND_OPCODES[\"FLOW.COMPLETE\"],\n flowCreateMany: COMMAND_OPCODES[\"FLOW.CREATE_MANY\"],\n flowCompleteMany: COMMAND_OPCODES[\"FLOW.COMPLETE_MANY\"],\n flowSearch: COMMAND_OPCODES[\"FLOW.SEARCH\"]\n} as const;\n\nconst COMPACT_FLOW_CLAIM_JOBS = 0x80;\nconst COMPACT_OK_LIST = 0x81;\nconst COMPACT_KV_GET = 0x82;\nconst COMPACT_KV_MGET = 0x83;\nconst COMPACT_FLOW_RECORD = 0x84;\nconst COMPACT_FLOW_RECORD_LIST = 0x85;\nconst COMPACT_KV_MGET_FIXED = 0x89;\nconst COMPACT_FLOW_CREATE_MANY_REQUEST = 0x90;\nconst COMPACT_FLOW_CLAIM_DUE_REQUEST = 0x91;\nconst COMPACT_FLOW_COMPLETE_MANY_REQUEST = 0x92;\nconst COMPACT_FLOW_COMPLETE_MANY_OK_REQUEST = 0x93;\nconst COMPACT_FLOW_CREATE_MANY_PARTITION_REQUEST = 0x96;\nconst COMPACT_FLOW_CREATE_MANY_MIXED_REQUEST = 0x9e;\nconst COMPACT_PIPELINE_REQUEST = 0x94;\nconst COMPACT_PIPELINE_RESPONSE = 0x95;\nconst NULL_U32 = 0xffff_ffff;\nconst MIN_I64 = -9_223_372_036_854_775_808n;\nconst MAX_SAFE_INTEGER_BIGINT = BigInt(Number.MAX_SAFE_INTEGER);\nconst MIN_SAFE_INTEGER_BIGINT = BigInt(Number.MIN_SAFE_INTEGER);\n\nconst FLOW_RECORD_FIELD_KEYS = [\n \"\",\n \"id\",\n \"type\",\n \"state\",\n \"version\",\n \"priority\",\n \"partition_key\",\n \"payload_ref\",\n \"result_ref\",\n \"error_ref\",\n \"payload\",\n \"result\",\n \"error\",\n \"created_at_ms\",\n \"updated_at_ms\",\n \"next_run_at_ms\",\n \"lease_deadline_ms\",\n \"lease_owner\",\n \"lease_token\",\n \"fencing_token\",\n \"attempts\",\n \"history_max_events\",\n \"history_hot_max_events\",\n \"child_groups\",\n \"parent_flow_id\",\n \"parent_partition_key\",\n \"root_flow_id\",\n \"correlation_id\",\n \"terminal_retention_until_ms\",\n \"ttl_ms\",\n \"retention_ttl_ms\",\n \"run_state\",\n \"value_refs\",\n \"values\",\n \"payload_omitted\",\n \"payload_size\",\n \"result_omitted\",\n \"result_size\",\n \"error_omitted\",\n \"error_size\",\n \"max_attempts\",\n \"attributes\"\n] as const;\n\nexport interface ProtocolCommand {\n readonly opcode: number;\n readonly payload: unknown;\n readonly flags?: number;\n readonly laneId?: number;\n}\n\nexport interface ResponseFrame {\n readonly flags: number;\n readonly laneId: number;\n readonly opcode: number;\n readonly requestId: bigint;\n readonly bodyLength: number;\n readonly body: Buffer;\n}\n\nexport function encodeRequest(command: ProtocolCommand, requestId: bigint): Buffer {\n const body = ((command.flags ?? 0) & FLAG_CUSTOM_PAYLOAD) !== 0 ? toBuffer(command.payload) : encodeValue(command.payload);\n const flags = command.flags ?? 0;\n const frame = Buffer.allocUnsafe(HEADER_SIZE + body.byteLength);\n frame.write(MAGIC, 0, \"ascii\");\n frame.writeUInt8(REQUEST_VERSION, 4);\n frame.writeUInt8(flags, 5);\n frame.writeUInt32BE(command.laneId ?? laneForOpcode(command.opcode), 6);\n frame.writeUInt16BE(command.opcode, 10);\n frame.writeBigUInt64BE(requestId, 12);\n frame.writeUInt32BE(body.byteLength, 20);\n body.copy(frame, HEADER_SIZE);\n return frame;\n}\n\nexport function tryDecodeFrame(buffer: Buffer): { readonly frame: ResponseFrame; readonly rest: Buffer } | null {\n if (buffer.byteLength < HEADER_SIZE) {\n return null;\n }\n if (buffer.toString(\"ascii\", 0, 4) !== MAGIC) {\n throw new FerricStoreError(\"invalid FerricStore protocol magic\", { raw: buffer.subarray(0, 4) });\n }\n const version = buffer.readUInt8(4);\n if (version !== RESPONSE_VERSION) {\n throw new FerricStoreError(`invalid FerricStore protocol response version ${version}`);\n }\n const bodyLength = buffer.readUInt32BE(20);\n const frameLength = HEADER_SIZE + bodyLength;\n if (buffer.byteLength < frameLength) {\n return null;\n }\n const frame: ResponseFrame = {\n body: buffer.subarray(HEADER_SIZE, frameLength),\n bodyLength,\n flags: buffer.readUInt8(5),\n laneId: buffer.readUInt32BE(6),\n opcode: buffer.readUInt16BE(10),\n requestId: buffer.readBigUInt64BE(12)\n };\n return { frame, rest: buffer.subarray(frameLength) };\n}\n\nexport function decodeResponse(frame: ResponseFrame, expectedOpcode: number): unknown {\n if (frame.opcode !== expectedOpcode) {\n throw new FerricStoreError(\n `protocol response mismatch: expected opcode ${expectedOpcode}, got ${frame.opcode}`,\n { raw: frame }\n );\n }\n if ((frame.flags & FLAG_COMPRESSED) !== 0) {\n throw new FerricStoreError(\"compressed native protocol responses are not supported by this SDK yet\");\n }\n if (frame.body.byteLength < 2) {\n throw new FerricStoreError(\"short native protocol response body\", { raw: frame.body });\n }\n const status = frame.body.readUInt16BE(0);\n const body = frame.body.subarray(2);\n const value = decodeResponseValue(frame.opcode, body);\n if (status === STATUS_OK) {\n return value;\n }\n const message = errorMessage(status, value);\n throw classifyServerError(message, value);\n}\n\nexport function buildProtocolCommand(args: readonly CommandArgument[]): ProtocolCommand {\n if (args.length === 0) {\n throw new FerricStoreError(\"command requires at least one argument\");\n }\n const command = asText(args[0]).toUpperCase();\n const commandArgs = args.slice(1);\n\n if (command === \"COMMAND_EXEC\" && commandArgs.length >= 1) {\n return commandExec(commandArgs);\n }\n if (command === \"HELLO\" || command === \"STARTUP\" || command === \"WINDOW_UPDATE\") {\n return { laneId: 0, opcode: COMMAND_OPCODES[command], payload: optionMap(commandArgs) };\n }\n if (command === \"AUTH\") {\n const payload =\n commandArgs.length === 1\n ? { password: commandArgs[0], username: \"default\" }\n : { password: commandArgs[1], username: commandArgs[0] };\n return { laneId: 0, opcode: OPCODES.auth, payload };\n }\n if (command === \"PING\") {\n return { laneId: 0, opcode: OPCODES.ping, payload: commandArgs.length === 0 ? {} : { message: commandArgs[0] } };\n }\n if (command === \"OPTIONS\") {\n return { laneId: 0, opcode: OPCODES.options, payload: {} };\n }\n if (command === \"BACKPRESSURE\") {\n return { laneId: 0, opcode: OPCODES.backpressure, payload: {} };\n }\n if (command === \"QUIT\") {\n return { laneId: 0, opcode: OPCODES.quit, payload: {} };\n }\n if (command === \"ROUTE\" && commandArgs.length >= 1) {\n return { laneId: 0, opcode: OPCODES.route, payload: { key: commandArgs[0] } };\n }\n if (command === \"ROUTE_BATCH\") {\n return { laneId: 0, opcode: OPCODES.routeBatch, payload: { keys: commandArgs } };\n }\n if (command === \"SHARDS\") {\n return { laneId: 0, opcode: OPCODES.shards, payload: {} };\n }\n if (command === \"CLIENT\" && asText(commandArgs[0]).toUpperCase() === \"SETNAME\" && commandArgs.length === 2) {\n return { laneId: 0, opcode: OPCODES.clientSetName, payload: { name: commandArgs[1] } };\n }\n if (command === \"CLIENT.SETNAME\" && commandArgs.length === 1) {\n return { laneId: 0, opcode: OPCODES.clientSetName, payload: { name: commandArgs[0] } };\n }\n if (\n (command === \"CLIENT\" && asText(commandArgs[0]).toUpperCase() === \"INFO\" && commandArgs.length === 1) ||\n (command === \"CLIENT.INFO\" && commandArgs.length === 0)\n ) {\n return { laneId: 0, opcode: OPCODES.clientInfo, payload: {} };\n }\n if (command === \"GET\" && commandArgs.length >= 1) {\n return { opcode: OPCODES.get, payload: { key: commandArgs[0] } };\n }\n if (command === \"SET\" && commandArgs.length >= 2) {\n return { opcode: OPCODES.set, payload: kvSetPayload(commandArgs) };\n }\n if (command === \"MGET\") {\n return compactKeyPipelinePayload(OPCODES.mget, commandArgs, 2) ?? {\n opcode: OPCODES.mget,\n payload: { keys: commandArgs }\n };\n }\n if (command === \"MSET\") {\n return compactMsetPayload(commandArgs) ?? { opcode: OPCODES.mset, payload: { pairs: pairs(commandArgs) } };\n }\n if (command === \"DEL\") {\n return { opcode: OPCODES.del, payload: { keys: commandArgs } };\n }\n if (command.startsWith(\"FLOW.\") && hasFlowCommandOnlyOption(command, commandArgs)) {\n return commandExec(args);\n }\n if (command === \"FLOW.CREATE\") {\n return flowCreatePayload(commandArgs) ?? commandExec(args);\n }\n if (command === \"FLOW.CREATE_MANY\") {\n return flowCreateManyPayload(commandArgs) ?? commandExec(args);\n }\n if (command === \"FLOW.CLAIM_DUE\") {\n return flowClaimDuePayload(commandArgs) ?? commandExec(args);\n }\n if (command === \"FLOW.COMPLETE\") {\n return flowCompletePayload(commandArgs) ?? commandExec(args);\n }\n if (command === \"FLOW.COMPLETE_MANY\") {\n return flowCompleteManyPayload(commandArgs) ?? commandExec(args);\n }\n if (command === \"FLOW.SEARCH\") {\n return flowSearchPayload(commandArgs) ?? commandExec(args);\n }\n\n return commandExec(args);\n}\n\nexport function commandExec(args: readonly CommandArgument[]): ProtocolCommand {\n if (args.length === 0) {\n throw new FerricStoreError(\"command requires at least one argument\");\n }\n const commandArgs = args.slice(1);\n const payload: Record<string, unknown> = {\n args: commandArgs,\n command: asText(args[0]).toUpperCase()\n };\n if (commandArgs.length >= 2 && commandTokenIs(commandArgs[commandArgs.length - 2], \"REQUEST_CONTEXT\")) {\n const requestContext = normalizeRequestContext(commandArgs[commandArgs.length - 1]);\n payload.args = commandArgs.slice(0, -2);\n if (requestContext != null) {\n payload.request_context = requestContext;\n }\n }\n return {\n opcode: OPCODES.commandExec,\n payload\n };\n}\n\nfunction normalizeRequestContext(context: unknown): Record<string, unknown> | undefined {\n if (!isPlainObject(context)) {\n return undefined;\n }\n\n const out: Record<string, unknown> = {};\n const subject = optionalText(context.subject);\n const tenant = optionalText(context.tenant);\n const scopes = normalizeRequestContextScopes(context.scopes);\n if (subject != null) {\n out.subject = subject;\n }\n if (tenant != null) {\n out.tenant = tenant;\n }\n if (scopes.length > 0) {\n out.scopes = scopes;\n }\n return Object.keys(out).length > 0 ? out : undefined;\n}\n\nfunction normalizeRequestContextScopes(scopes: unknown): string[] {\n const values = typeof scopes === \"string\" || Buffer.isBuffer(scopes) || scopes instanceof Uint8Array\n ? asText(scopes).split(/\\s+/u)\n : Array.isArray(scopes)\n ? scopes.map((scope) => optionalText(scope)).filter((scope): scope is string => scope != null)\n : [];\n return [...new Set(values.filter((scope) => scope.length > 0))];\n}\n\nfunction optionalText(value: unknown): string | undefined {\n if (value == null || value === \"\") {\n return undefined;\n }\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n typeof value === \"boolean\" ||\n Buffer.isBuffer(value) ||\n value instanceof Uint8Array\n ) {\n return asText(value);\n }\n return undefined;\n}\n\nfunction commandTokenIs(value: unknown, expected: string): boolean {\n if (typeof value === \"string\") {\n return value.toUpperCase() === expected;\n }\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) {\n return asText(value).toUpperCase() === expected;\n }\n return false;\n}\n\nexport function pipelineCommand(commands: readonly Command[]): ProtocolCommand {\n const compact = compactPipelinePayload(commands);\n if (compact != null) {\n return { flags: FLAG_CUSTOM_PAYLOAD, opcode: OPCODES.pipeline, payload: compact };\n }\n\n return {\n opcode: OPCODES.pipeline,\n payload: {\n atomicity: \"none\",\n commands: commands.map((command, index) => {\n const protocol = buildProtocolCommand(command);\n return {\n body: protocol.payload,\n lane_id: protocol.laneId ?? laneForOpcode(protocol.opcode),\n opcode: protocol.opcode,\n request_id: index + 1\n };\n }),\n return: \"compact\"\n }\n };\n}\n\nexport function unwrapPipelineResponse(\n value: unknown,\n options: { readonly throwOnItemError?: boolean } = {}\n): unknown[] {\n if (!Array.isArray(value)) {\n return [];\n }\n const items = value as unknown[];\n\n let hasStatusTuple = false;\n for (const item of items) {\n if (Array.isArray(item) && item.length >= 2 && pipelineStatus(item[0]) != null) {\n hasStatusTuple = true;\n break;\n }\n }\n if (!hasStatusTuple) {\n return items;\n }\n\n const out = new Array<unknown>(items.length);\n for (let index = 0; index < items.length; index += 1) {\n const item = items[index];\n if (Array.isArray(item) && item.length >= 2) {\n const status = pipelineStatus(item[0]);\n if (status != null) {\n const payload: unknown = item[1];\n if (status === \"ok\") {\n out[index] = payload;\n continue;\n }\n const error = classifyServerError(errorMessage(status === \"busy\" ? 4 : 1, payload), payload);\n if (options.throwOnItemError !== false) {\n throw error;\n }\n out[index] = error;\n continue;\n }\n }\n out[index] = item;\n }\n return out;\n}\n\nfunction pipelineStatus(value: unknown): \"busy\" | \"error\" | \"ok\" | null {\n if (typeof value !== \"string\" && !Buffer.isBuffer(value) && !(value instanceof Uint8Array)) {\n return null;\n }\n const status = asText(value).toLowerCase();\n return status === \"ok\" || status === \"busy\" || status === \"error\" ? status : null;\n}\n\nexport function encodeValue(value: unknown): Buffer {\n if (value == null) {\n return Buffer.from([0]);\n }\n if (value === true) {\n return Buffer.from([1]);\n }\n if (value === false) {\n return Buffer.from([2]);\n }\n if (typeof value === \"number\" && Number.isInteger(value)) {\n const buffer = Buffer.allocUnsafe(9);\n buffer.writeUInt8(3, 0);\n buffer.writeBigInt64BE(BigInt(value), 1);\n return buffer;\n }\n if (typeof value === \"bigint\") {\n const buffer = Buffer.allocUnsafe(9);\n buffer.writeUInt8(3, 0);\n buffer.writeBigInt64BE(value, 1);\n return buffer;\n }\n if (typeof value === \"number\") {\n const buffer = Buffer.allocUnsafe(9);\n buffer.writeUInt8(7, 0);\n buffer.writeDoubleBE(value, 1);\n return buffer;\n }\n if (typeof value === \"string\" || Buffer.isBuffer(value) || value instanceof Uint8Array) {\n return encodeBinary(toBuffer(value), 4);\n }\n if (Array.isArray(value)) {\n const items = value.map((item) => encodeValue(item));\n return Buffer.concat([u8(5), u32(items.length), ...items]);\n }\n if (typeof value === \"object\") {\n const entries = Object.entries(value as Record<string, unknown>);\n const encoded = entries.flatMap(([key, item]) => [u32(Buffer.byteLength(key)), Buffer.from(key), encodeValue(item)]);\n return Buffer.concat([u8(6), u32(entries.length), ...encoded]);\n }\n throw new FerricStoreError(`unsupported native protocol value type: ${typeof value}`);\n}\n\nexport function decodeValue(data: Buffer, offset = 0): { readonly value: unknown; readonly offset: number } {\n requireAvailable(data, offset, 1);\n const tag = data.readUInt8(offset);\n offset += 1;\n if (tag === 0) return { value: null, offset };\n if (tag === 1) return { value: true, offset };\n if (tag === 2) return { value: false, offset };\n if (tag === 3) {\n requireAvailable(data, offset, 8);\n return { value: Number(data.readBigInt64BE(offset)), offset: offset + 8 };\n }\n if (tag === 4) {\n const read = readBinary(data, offset);\n return { value: read.value, offset: read.offset };\n }\n if (tag === 5) {\n requireAvailable(data, offset, 4);\n const count = data.readUInt32BE(offset);\n offset += 4;\n const values: unknown[] = [];\n for (let index = 0; index < count; index += 1) {\n const read = decodeValue(data, offset);\n values.push(read.value);\n offset = read.offset;\n }\n return { value: values, offset };\n }\n if (tag === 6) {\n requireAvailable(data, offset, 4);\n const count = data.readUInt32BE(offset);\n offset += 4;\n const value: Record<string, unknown> = {};\n for (let index = 0; index < count; index += 1) {\n const key = readBinary(data, offset);\n offset = key.offset;\n const item = decodeValue(data, offset);\n value[key.value.toString(\"utf8\")] = item.value;\n offset = item.offset;\n }\n return { value, offset };\n }\n if (tag === 7) {\n requireAvailable(data, offset, 8);\n return { value: data.readDoubleBE(offset), offset: offset + 8 };\n }\n throw new FerricStoreError(`unknown protocol value tag ${tag}`);\n}\n\nfunction decodeResponseValue(opcode: number, body: Buffer): unknown {\n const compact = tryDecodeCompactResponse(opcode, body);\n if (compact.found) {\n return compact.value;\n }\n const decoded = decodeValue(body);\n if (decoded.offset !== body.byteLength) {\n throw new FerricStoreError(\"native protocol response has trailing bytes\", { raw: body });\n }\n return decoded.value;\n}\n\nfunction tryDecodeCompactResponse(opcode: number, body: Buffer): { readonly found: boolean; readonly value: unknown } {\n if (body.byteLength === 0) {\n return { found: false, value: undefined };\n }\n const tag = body.readUInt8(0);\n if (tag === COMPACT_OK_LIST && isOkListOpcode(opcode)) {\n const values = decodeCompactOkList(body);\n return { found: true, value: opcode === OPCODES.pipeline ? values : values.length === 1 ? \"OK\" : values };\n }\n if (tag === COMPACT_KV_GET && opcode === OPCODES.get) {\n return { found: true, value: decodeCompactKvGet(body) };\n }\n if ((tag === COMPACT_KV_MGET || tag === COMPACT_KV_MGET_FIXED) && (opcode === OPCODES.mget || opcode === OPCODES.pipeline)) {\n return { found: true, value: tag === COMPACT_KV_MGET ? decodeCompactMget(body) : decodeCompactMgetFixed(body) };\n }\n if (tag === COMPACT_PIPELINE_RESPONSE && opcode === OPCODES.pipeline) {\n return { found: true, value: decodeCompactPipeline(body) };\n }\n if (tag === COMPACT_FLOW_CLAIM_JOBS) {\n return { found: true, value: decodeCompactClaimJobs(body) };\n }\n if (tag === COMPACT_FLOW_RECORD) {\n const read = readCompactFlowRecord(body, 0);\n if (read.offset !== body.byteLength) throw new FerricStoreError(\"trailing compact Flow record bytes\");\n return { found: true, value: read.value };\n }\n if (tag === COMPACT_FLOW_RECORD_LIST) {\n const read = readCompactFlowRecordList(body, 0);\n if (read.offset !== body.byteLength) throw new FerricStoreError(\"trailing compact Flow record list bytes\");\n return { found: true, value: read.value };\n }\n return { found: false, value: undefined };\n}\n\nfunction kvSetPayload(args: readonly CommandArgument[]): Record<string, unknown> {\n const payload: Record<string, unknown> = { key: args[0], value: args[1] };\n for (let index = 2; index < args.length; ) {\n const token = asText(args[index]).toUpperCase();\n if (token === \"EX\") {\n payload.ttl = Number(args[index + 1]) * 1_000;\n index += 2;\n } else if (token === \"PX\") {\n payload.ttl = Number(args[index + 1]);\n index += 2;\n } else if (token === \"NX\") {\n payload.nx = true;\n index += 1;\n } else if (token === \"XX\") {\n payload.xx = true;\n index += 1;\n } else if (token === \"GET\") {\n payload.get = true;\n index += 1;\n } else if (token === \"KEEPTTL\") {\n payload.keep_ttl = true;\n index += 1;\n } else {\n payload.args = args.slice(2);\n break;\n }\n }\n return payload;\n}\n\nfunction pairs(args: readonly CommandArgument[]): unknown[][] {\n if (args.length % 2 !== 0) {\n throw new FerricStoreError(\"MSET requires key/value pairs\");\n }\n const result: unknown[][] = [];\n for (let index = 0; index < args.length; index += 2) {\n result.push([args[index], args[index + 1]]);\n }\n return result;\n}\n\nfunction compactMsetPayload(args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (args.length % 2 !== 0) {\n throw new FerricStoreError(\"MSET requires key/value pairs\");\n }\n const items: Buffer[] = [u8(COMPACT_PIPELINE_REQUEST), u8(1), u32(args.length / 2)];\n for (let index = 0; index < args.length; index += 2) {\n items.push(compactBinary(args[index]), compactBinary(args[index + 1]));\n }\n return { flags: FLAG_CUSTOM_PAYLOAD, opcode: OPCODES.mset, payload: Buffer.concat(items) };\n}\n\nfunction compactKeyPipelinePayload(opcode: number, args: readonly CommandArgument[], mode: number): ProtocolCommand | undefined {\n const items: Buffer[] = [u8(COMPACT_PIPELINE_REQUEST), u8(mode), u32(args.length)];\n for (const arg of args) {\n items.push(compactBinary(arg));\n }\n return { flags: FLAG_CUSTOM_PAYLOAD, opcode, payload: Buffer.concat(items) };\n}\n\nfunction compactPipelinePayload(commands: readonly Command[]): Buffer | undefined {\n if (commands.length === 0) {\n return Buffer.concat([u8(COMPACT_PIPELINE_REQUEST), u8(0x80 | 2), u32(0)]);\n }\n if (commandNameIs(commands[0]?.[0], \"SET\")) {\n return compactSetPipelinePayload(commands);\n }\n if (commandNameIs(commands[0]?.[0], \"GET\")) {\n return compactGetPipelinePayload(commands);\n }\n return undefined;\n}\n\nfunction compactSetPipelinePayload(commands: readonly Command[]): Buffer | undefined {\n const keys = new Array<Buffer>(commands.length);\n const values = new Array<Buffer>(commands.length);\n let total = 6;\n\n for (let index = 0; index < commands.length; index += 1) {\n const command = commands[index];\n if (command == null) return undefined;\n if (command.length !== 3 || !commandNameIs(command[0], \"SET\")) return undefined;\n const key = toBuffer(command[1]);\n const value = toBuffer(command[2]);\n keys[index] = key;\n values[index] = value;\n total += 8 + key.byteLength + value.byteLength;\n }\n\n const out = Buffer.allocUnsafe(total);\n let offset = writeCompactPipelineHeader(out, 0x80 | 1, commands.length);\n for (let index = 0; index < commands.length; index += 1) {\n const key = keys[index];\n const value = values[index];\n if (key == null || value == null) return undefined;\n offset = writeBinary(out, offset, key);\n offset = writeBinary(out, offset, value);\n }\n return out;\n}\n\nfunction compactGetPipelinePayload(commands: readonly Command[]): Buffer | undefined {\n const keys = new Array<Buffer>(commands.length);\n let total = 6;\n\n for (let index = 0; index < commands.length; index += 1) {\n const command = commands[index];\n if (command == null) return undefined;\n if (command.length !== 2 || !commandNameIs(command[0], \"GET\")) return undefined;\n const key = toBuffer(command[1]);\n keys[index] = key;\n total += 4 + key.byteLength;\n }\n\n const out = Buffer.allocUnsafe(total);\n let offset = writeCompactPipelineHeader(out, 0x80 | 2, commands.length);\n for (const key of keys) {\n offset = writeBinary(out, offset, key);\n }\n return out;\n}\n\nfunction writeCompactPipelineHeader(out: Buffer, mode: number, count: number): number {\n out.writeUInt8(COMPACT_PIPELINE_REQUEST, 0);\n out.writeUInt8(mode, 1);\n out.writeUInt32BE(count, 2);\n return 6;\n}\n\nfunction writeBinary(out: Buffer, offset: number, value: Buffer): number {\n out.writeUInt32BE(value.byteLength, offset);\n offset += 4;\n value.copy(out, offset);\n return offset + value.byteLength;\n}\n\nfunction writeOptionalBinary(out: Buffer, offset: number, value: Buffer | null): number {\n if (value == null) {\n out.writeUInt32BE(NULL_U32, offset);\n return offset + 4;\n }\n return writeBinary(out, offset, value);\n}\n\nfunction hasFlowCommandOnlyOption(command: string, args: readonly CommandArgument[]): boolean {\n return args.some((arg) => {\n if (typeof arg !== \"string\" && !Buffer.isBuffer(arg)) {\n return false;\n }\n const token = asText(arg).toUpperCase();\n return token === \"INDEXED_STATE_META\" || (command !== \"FLOW.SEARCH\" && token === \"STATE_META\");\n });\n}\n\nfunction flowCreatePayload(args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (args.length < 7) return undefined;\n const id = args[0];\n if (hasToken(args, \"PAYLOAD\", 1) || hasToken(args, \"VALUES\", 1) || hasToken(args, \"VALUE_REFS\", 1)) {\n return undefined;\n }\n const options = parseFlowOptions(args, 1, args.length, {\n allowed: new Set([\"TYPE\", \"STATE\", \"NOW\", \"PARTITION\", \"RUN_AT\", \"PRIORITY\", \"IDEMPOTENT\", \"RETENTION_TTL_MS\"]),\n required: new Set([\"TYPE\", \"STATE\", \"NOW\"])\n });\n if (options == null) return undefined;\n return { opcode: OPCODES.flowCreate, payload: { id, ...options } };\n}\n\nfunction flowCreateManyPayload(args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (args.length < 2) return undefined;\n const partition = asText(args[0]);\n const itemsIndex = findToken(args, \"ITEMS\", 1);\n if (itemsIndex < 0 || hasToken(args, \"ITEMS_EXT\", 1)) return undefined;\n\n const options = parseFlowOptions(args, 1, itemsIndex, {\n allowed: new Set([\"TYPE\", \"STATE\", \"NOW\", \"RUN_AT\", \"PRIORITY\", \"IDEMPOTENT\", \"INDEPENDENT\", \"RETENTION_TTL_MS\"]),\n required: new Set([\"TYPE\"])\n });\n if (options == null) return undefined;\n\n const mixed = partition.toUpperCase() === \"MIXED\";\n const auto = partition.toUpperCase() === \"AUTO\";\n const rawItems = args.slice(itemsIndex + 1);\n const width = mixed ? 3 : 2;\n if (rawItems.length === 0 || rawItems.length % width !== 0) return undefined;\n\n const items: unknown[][] = [];\n for (let index = 0; index < rawItems.length; index += width) {\n if (mixed) {\n items.push([rawItems[index], rawItems[index + 1], rawItems[index + 2]]);\n } else {\n items.push([rawItems[index], rawItems[index + 1]]);\n }\n }\n\n const payload: Record<string, unknown> = { ...options, items };\n if (!auto && !mixed) payload.partition_key = partition;\n const compact = compactFlowCreateManyPayload(partition, rawItems, mixed, auto, options);\n if (compact != null) return compact;\n return { opcode: OPCODES.flowCreateMany, payload };\n}\n\nfunction flowClaimDuePayload(args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (args.length < 1) return undefined;\n const options = parseFlowOptions(args, 1, args.length, {\n allowed: new Set([\n \"STATE\",\n \"STATES\",\n \"PARTITION\",\n \"PARTITIONS\",\n \"WORKER\",\n \"LEASE_MS\",\n \"LIMIT\",\n \"PRIORITY\",\n \"NOW\",\n \"BLOCK\",\n \"BLOCK_MS\",\n \"RECLAIM_EXPIRED\",\n \"RECLAIM_RATIO\",\n \"RETURN\",\n \"PAYLOAD\",\n \"NOPAYLOAD\",\n \"MAXBYTES\",\n \"INCLUDE_STATE\"\n ])\n });\n if (options == null) return undefined;\n const returnMode = options.return == null ? \"\" : asText(options.return).toUpperCase();\n if (!returnMode.startsWith(\"JOBS_COMPACT\")) return undefined;\n const compact = compactFlowClaimDuePayload(args[0], options);\n if (compact != null) return compact;\n return { opcode: OPCODES.flowClaimDue, payload: { ...options, type: args[0] } };\n}\n\nfunction flowCompletePayload(args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (args.length < 6) return undefined;\n const id = args[0];\n const leaseToken = args[1];\n if (\n hasToken(args, \"RESULT\", 2) ||\n hasToken(args, \"PAYLOAD\", 2) ||\n hasToken(args, \"VALUES\", 2) ||\n hasToken(args, \"VALUE_REFS\", 2)\n ) {\n return undefined;\n }\n const options = parseFlowOptions(args, 2, args.length, {\n allowed: new Set([\"FENCING\", \"NOW\", \"PARTITION\", \"TTL\"]),\n required: new Set([\"FENCING\", \"NOW\"])\n });\n if (options == null) return undefined;\n return { opcode: OPCODES.flowComplete, payload: { id, lease_token: leaseToken, ...options } };\n}\n\nfunction flowCompleteManyPayload(args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (args.length < 2) return undefined;\n const partition = asText(args[0]);\n const itemsIndex = findToken(args, \"ITEMS\", 1);\n if (itemsIndex < 0) return undefined;\n\n const options = parseFlowOptions(args, 1, itemsIndex, {\n allowed: new Set([\"TTL\", \"NOW\", \"INDEPENDENT\", \"RETURN\"])\n });\n if (options == null) return undefined;\n\n const mixed = partition.toUpperCase() === \"MIXED\";\n const auto = partition.toUpperCase() === \"AUTO\";\n const rawItems = args.slice(itemsIndex + 1);\n const width = mixed ? 4 : 3;\n if (rawItems.length === 0 || rawItems.length % width !== 0) return undefined;\n\n const compact = compactFlowCompleteManyPayload(partition, rawItems, mixed, auto, options);\n if (compact != null) return compact;\n\n const items: unknown[][] = [];\n for (let index = 0; index < rawItems.length; index += width) {\n if (mixed) {\n items.push([rawItems[index], rawItems[index + 1], rawItems[index + 2], numberArg(rawItems[index + 3])]);\n } else {\n items.push([rawItems[index], rawItems[index + 1], numberArg(rawItems[index + 2])]);\n }\n }\n\n const payload: Record<string, unknown> = { ...options, items };\n if (!auto && !mixed) payload.partition_key = partition;\n return { opcode: OPCODES.flowCompleteMany, payload };\n}\n\nfunction flowSearchPayload(args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (args.length < 1) return undefined;\n const payload = optionMap(args.slice(1));\n normalizeFlowSearchStateMeta(payload);\n return { opcode: OPCODES.flowSearch, payload: { type: args[0], ...payload } };\n}\n\nfunction compactFlowCreateManyPayload(\n partition: string,\n rawItems: readonly CommandArgument[],\n mixed: boolean,\n auto: boolean,\n options: Record<string, unknown>\n): ProtocolCommand | undefined {\n if (\n \"priority\" in options ||\n \"idempotent\" in options ||\n \"retention_ttl_ms\" in options ||\n typeof options.type === \"undefined\" ||\n typeof options.state === \"undefined\" ||\n typeof options.now_ms !== \"number\"\n ) {\n return undefined;\n }\n const runAtMs = typeof options.run_at_ms === \"number\" ? options.run_at_ms : options.now_ms;\n\n const tag = mixed ? COMPACT_FLOW_CREATE_MANY_MIXED_REQUEST : auto ? COMPACT_FLOW_CREATE_MANY_REQUEST : COMPACT_FLOW_CREATE_MANY_PARTITION_REQUEST;\n const items: Buffer[] = [\n u8(tag),\n compactBinary(options.type),\n compactBinary(options.state)\n ];\n if (!auto && !mixed) {\n items.push(compactOptionalBinary(partition));\n }\n items.push(\n i64(BigInt(options.now_ms)),\n i64(BigInt(runAtMs)),\n u8(independentMode(options.independent)),\n u8(1),\n u32(mixed ? rawItems.length / 3 : rawItems.length / 2)\n );\n const width = mixed ? 3 : 2;\n for (let index = 0; index < rawItems.length; index += width) {\n items.push(compactBinary(rawItems[index]));\n if (mixed) items.push(compactBinary(rawItems[index + 1]));\n items.push(compactBinary(rawItems[index + width - 1]));\n }\n return { flags: FLAG_CUSTOM_PAYLOAD, opcode: OPCODES.flowCreateMany, payload: Buffer.concat(items) };\n}\n\nfunction compactFlowClaimDuePayload(type: CommandArgument, options: Record<string, unknown>): ProtocolCommand | undefined {\n if (\n \"states\" in options ||\n \"now_ms\" in options ||\n \"payload_max_bytes\" in options ||\n \"include_state\" in options ||\n options.payload === true ||\n typeof options.worker === \"undefined\" ||\n typeof options.lease_ms !== \"number\" ||\n typeof options.limit !== \"number\"\n ) {\n return undefined;\n }\n const returnMode = compactClaimReturnMode(options.return);\n if (returnMode == null) return undefined;\n const items: Buffer[] = [\n u8(COMPACT_FLOW_CLAIM_DUE_REQUEST),\n compactBinary(type),\n compactOptionalBinary(options.state),\n compactBinary(options.worker),\n i64(BigInt(options.lease_ms)),\n i64(BigInt(options.limit)),\n i64(optionalI64(options.block_ms)),\n u8(options.reclaim_expired === false ? 0 : options.reclaim_expired === true ? 1 : 0),\n i64(BigInt(typeof options.reclaim_ratio === \"number\" ? options.reclaim_ratio : 25)),\n i64(optionalI64(options.priority)),\n u8(returnMode)\n ];\n const partitionKeys = Array.isArray(options.partition_keys) ? options.partition_keys : undefined;\n if (partitionKeys != null) {\n items.push(u8(2), u32(partitionKeys.length), ...partitionKeys.map((key) => compactBinary(key)));\n } else if (options.partition_key != null) {\n items.push(u8(1), compactBinary(options.partition_key));\n } else {\n items.push(u8(0));\n }\n return { flags: FLAG_CUSTOM_PAYLOAD, opcode: OPCODES.flowClaimDue, payload: Buffer.concat(items) };\n}\n\nfunction compactFlowCompleteManyPayload(\n partition: string,\n rawItems: readonly CommandArgument[],\n mixed: boolean,\n auto: boolean,\n options: Record<string, unknown>\n): ProtocolCommand | undefined {\n if (\"ttl_ms\" in options || typeof options.now_ms !== \"number\") {\n return undefined;\n }\n const returnMode = options.return == null ? \"\" : asText(options.return).toUpperCase();\n if (returnMode !== \"\" && returnMode !== \"OK_ON_SUCCESS\") {\n return undefined;\n }\n const width = mixed ? 4 : 3;\n const count = rawItems.length / width;\n const items = new Array<{\n readonly id: Buffer;\n readonly partition: Buffer | null;\n readonly lease: Buffer;\n readonly fencing: bigint;\n }>(count);\n\n let total = 1 + 4 + 8 + 1 + 4;\n const headerPartition = !auto && !mixed ? toBuffer(partition) : null;\n if (headerPartition != null) {\n total += headerPartition.byteLength;\n }\n\n for (let rawIndex = 0, itemIndex = 0; rawIndex < rawItems.length; rawIndex += width, itemIndex += 1) {\n const id = toBuffer(rawItems[rawIndex]);\n const itemPartition = mixed ? toBuffer(rawItems[rawIndex + 1]) : null;\n const lease = toBuffer(rawItems[rawIndex + width - 2]);\n const fencing = BigInt(numberArg(rawItems[rawIndex + width - 1]));\n items[itemIndex] = { id, partition: itemPartition, lease, fencing };\n total += 4 + id.byteLength + 4 + (itemPartition?.byteLength ?? 0) + 4 + lease.byteLength + 8;\n }\n\n const out = Buffer.allocUnsafe(total);\n let offset = 0;\n out.writeUInt8(returnMode === \"OK_ON_SUCCESS\" ? COMPACT_FLOW_COMPLETE_MANY_OK_REQUEST : COMPACT_FLOW_COMPLETE_MANY_REQUEST, offset);\n offset += 1;\n offset = writeOptionalBinary(out, offset, headerPartition);\n out.writeBigInt64BE(BigInt(options.now_ms), offset);\n offset += 8;\n out.writeUInt8(independentMode(options.independent), offset);\n offset += 1;\n out.writeUInt32BE(count, offset);\n offset += 4;\n for (const item of items) {\n offset = writeBinary(out, offset, item.id);\n offset = writeOptionalBinary(out, offset, item.partition);\n offset = writeBinary(out, offset, item.lease);\n out.writeBigInt64BE(item.fencing, offset);\n offset += 8;\n }\n return { flags: FLAG_CUSTOM_PAYLOAD, opcode: OPCODES.flowCompleteMany, payload: out };\n}\n\nconst OPTION_FIELDS: Record<string, string> = {\n CONSISTENT_PROJECTION: \"consistent_projection\",\n COUNT: \"count\",\n FROM_MS: \"from_ms\",\n INCLUDE_COLD: \"include_cold\",\n PARTITION: \"partition_key\",\n REV: \"rev\",\n STATE: \"state\",\n TERMINAL_ONLY: \"terminal_only\",\n TO_MS: \"to_ms\"\n};\n\nconst BOOL_OPTION_FIELDS = new Set([\"consistent_projection\", \"include_cold\", \"rev\", \"terminal_only\"]);\n\nfunction optionMap(args: readonly CommandArgument[]): Record<string, unknown> {\n const payload: Record<string, unknown> = {};\n for (let index = 0; index < args.length; ) {\n const token = asText(args[index]).toUpperCase();\n if (token === \"ATTRIBUTE\") {\n if (index + 2 >= args.length) {\n throw new FerricStoreError(\"ATTRIBUTE requires name and value\");\n }\n const name = asText(args[index + 1]);\n const attributes = ensureObjectField(payload, \"attributes\");\n attributes[name] = args[index + 2];\n index += 3;\n continue;\n }\n if (token === \"STATE_META\") {\n if (index + 2 >= args.length) {\n throw new FerricStoreError(\"STATE_META requires name and value\");\n }\n const name = asText(args[index + 1]);\n const stateMeta = ensureObjectField(payload, \"state_meta\");\n stateMeta[name] = args[index + 2];\n index += 3;\n continue;\n }\n\n const field = OPTION_FIELDS[token] ?? token.toLowerCase();\n if (index + 1 >= args.length) {\n throw new FerricStoreError(`${token} requires a value`);\n }\n const value = args[index + 1];\n payload[field] = BOOL_OPTION_FIELDS.has(field) ? boolArg(value) : value;\n index += 2;\n }\n return payload;\n}\n\nfunction ensureObjectField(payload: Record<string, unknown>, field: string): Record<string, unknown> {\n const value = payload[field];\n if (isPlainObject(value)) {\n return value;\n }\n const next: Record<string, unknown> = {};\n payload[field] = next;\n return next;\n}\n\nfunction normalizeFlowSearchStateMeta(payload: Record<string, unknown>): void {\n const stateMeta = payload.state_meta;\n if (!isPlainObject(stateMeta) || Object.keys(stateMeta).length === 0) {\n return;\n }\n if (Object.values(stateMeta).every(isPlainObject)) {\n return;\n }\n\n const state = payload.state;\n if (state == null) {\n throw new FerricStoreError(\"FLOW.SEARCH STATE_META filters require STATE or nested state metadata\");\n }\n payload.state_meta = { [asText(state)]: stateMeta };\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value != null && !Array.isArray(value) && !Buffer.isBuffer(value) && !(value instanceof Uint8Array);\n}\n\nfunction parseFlowOptions(\n args: readonly CommandArgument[],\n start: number,\n end: number,\n config: { readonly allowed: ReadonlySet<string>; readonly required?: ReadonlySet<string> }\n): Record<string, unknown> | undefined {\n const payload: Record<string, unknown> = {};\n const seen = new Set<string>();\n for (let index = start; index < end; ) {\n const token = asText(args[index]).toUpperCase();\n if (!config.allowed.has(token)) return undefined;\n seen.add(token);\n switch (token) {\n case \"TYPE\":\n if (!putScalar(payload, \"type\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"STATE\":\n if (!putScalar(payload, \"state\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"STATES\": {\n const count = numberArg(args[index + 1]);\n if (!Number.isInteger(count) || count < 0 || index + 2 + count > end) return undefined;\n payload.states = args.slice(index + 2, index + 2 + count);\n index += 2 + count;\n break;\n }\n case \"PARTITION\":\n if (!putScalar(payload, \"partition_key\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"PARTITIONS\": {\n const count = numberArg(args[index + 1]);\n if (!Number.isInteger(count) || count < 0 || index + 2 + count > end) return undefined;\n payload.partition_keys = args.slice(index + 2, index + 2 + count);\n index += 2 + count;\n break;\n }\n case \"WORKER\":\n if (!putScalar(payload, \"worker\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"LEASE_MS\":\n if (!putNumber(payload, \"lease_ms\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"LIMIT\":\n if (!putNumber(payload, \"limit\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"PRIORITY\":\n if (!putNumber(payload, \"priority\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"NOW\":\n if (!putNumber(payload, \"now_ms\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"RUN_AT\":\n if (!putNumber(payload, \"run_at_ms\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"RETENTION_TTL_MS\":\n if (!putNumber(payload, \"retention_ttl_ms\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"TTL\":\n if (!putNumber(payload, \"ttl_ms\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"FENCING\":\n if (!putNumber(payload, \"fencing_token\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"BLOCK\":\n case \"BLOCK_MS\":\n if (!putNumber(payload, \"block_ms\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"RECLAIM_RATIO\":\n if (!putNumber(payload, \"reclaim_ratio\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"MAXBYTES\":\n if (!putNumber(payload, \"payload_max_bytes\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"RETURN\":\n if (!putScalar(payload, \"return\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"IDEMPOTENT\":\n index = putOptionalBool(payload, \"idempotent\", args, index, end);\n if (index < 0) return undefined;\n break;\n case \"INDEPENDENT\":\n index = putOptionalBool(payload, \"independent\", args, index, end);\n if (index < 0) return undefined;\n break;\n case \"RECLAIM_EXPIRED\":\n index = putOptionalBool(payload, \"reclaim_expired\", args, index, end);\n if (index < 0) return undefined;\n break;\n case \"INCLUDE_STATE\":\n index = putOptionalBool(payload, \"include_state\", args, index, end);\n if (index < 0) return undefined;\n break;\n case \"PAYLOAD\":\n payload.payload = true;\n index += 1;\n break;\n case \"NOPAYLOAD\":\n payload.payload = false;\n index += 1;\n break;\n default:\n return undefined;\n }\n }\n for (const required of config.required ?? []) {\n if (!seen.has(required)) return undefined;\n }\n return payload;\n}\n\nfunction putScalar(payload: Record<string, unknown>, key: string, args: readonly CommandArgument[], index: number, end: number): boolean {\n if (index >= end) return false;\n payload[key] = args[index];\n return true;\n}\n\nfunction putNumber(payload: Record<string, unknown>, key: string, args: readonly CommandArgument[], index: number, end: number): boolean {\n if (index >= end) return false;\n payload[key] = numberArg(args[index]);\n return true;\n}\n\nfunction putOptionalBool(\n payload: Record<string, unknown>,\n key: string,\n args: readonly CommandArgument[],\n index: number,\n end: number\n): number {\n if (index + 1 < end && isBoolToken(args[index + 1])) {\n payload[key] = boolArg(args[index + 1]);\n return index + 2;\n }\n payload[key] = true;\n return index + 1;\n}\n\nfunction findToken(args: readonly CommandArgument[], token: string, start: number): number {\n for (let index = start; index < args.length; index += 1) {\n if (asText(args[index]).toUpperCase() === token) return index;\n }\n return -1;\n}\n\nfunction hasToken(args: readonly CommandArgument[], token: string, start: number): boolean {\n return findToken(args, token, start) >= 0;\n}\n\nfunction numberArg(value: CommandArgument): number {\n if (typeof value === \"number\") return value;\n if (typeof value === \"bigint\") return Number(value);\n return Number(asText(value));\n}\n\nfunction boolArg(value: CommandArgument): boolean {\n if (typeof value === \"boolean\") return value;\n const text = asText(value).toUpperCase();\n return text === \"1\" || text === \"TRUE\" || text === \"YES\" || text === \"ON\";\n}\n\nfunction isBoolToken(value: CommandArgument): boolean {\n if (typeof value === \"boolean\") return true;\n const text = asText(value).toUpperCase();\n return text === \"1\" || text === \"0\" || text === \"TRUE\" || text === \"FALSE\" || text === \"YES\" || text === \"NO\" || text === \"ON\" || text === \"OFF\";\n}\n\nfunction isOkListOpcode(opcode: number): boolean {\n return (\n opcode === OPCODES.set ||\n opcode === OPCODES.mset ||\n opcode === OPCODES.pipeline ||\n opcode === OPCODES.flowCreateMany ||\n opcode === OPCODES.flowCompleteMany\n );\n}\n\nfunction decodeCompactOkList(data: Buffer): Buffer[] {\n requireAvailable(data, 0, 5);\n const count = data.readUInt32BE(1);\n if (data.byteLength !== 5) {\n throw new FerricStoreError(\"invalid compact OK list response\");\n }\n return Array.from({ length: count }, () => Buffer.from(\"OK\"));\n}\n\nfunction decodeCompactKvGet(data: Buffer): Buffer | null {\n requireAvailable(data, 0, 2);\n const present = data.readUInt8(1);\n if (present === 0) return null;\n if (present !== 1) throw new FerricStoreError(\"invalid compact GET response\");\n const read = readBinary(data, 2);\n if (read.offset !== data.byteLength) throw new FerricStoreError(\"trailing compact GET bytes\");\n return read.value;\n}\n\nfunction decodeCompactMget(data: Buffer): (Buffer | null)[] {\n requireAvailable(data, 0, 5);\n const count = data.readUInt32BE(1);\n let offset = 5;\n const values: (Buffer | null)[] = [];\n for (let index = 0; index < count; index += 1) {\n requireAvailable(data, offset, 1);\n const present = data.readUInt8(offset);\n offset += 1;\n if (present === 0) {\n values.push(null);\n } else if (present === 1) {\n const read = readBinary(data, offset);\n values.push(read.value);\n offset = read.offset;\n } else {\n throw new FerricStoreError(\"invalid compact MGET value marker\");\n }\n }\n if (offset !== data.byteLength) throw new FerricStoreError(\"trailing compact MGET bytes\");\n return values;\n}\n\nfunction decodeCompactMgetFixed(data: Buffer): Buffer[] {\n requireAvailable(data, 0, 9);\n const count = data.readUInt32BE(1);\n const size = data.readUInt32BE(5);\n const expected = 9 + count * size;\n if (size === NULL_U32 || data.byteLength !== expected) {\n throw new FerricStoreError(\"invalid compact fixed MGET response\");\n }\n const values: Buffer[] = [];\n for (let offset = 9; offset < expected; offset += size) {\n values.push(data.subarray(offset, offset + size));\n }\n return values;\n}\n\nfunction decodeCompactPipeline(data: Buffer): unknown[] {\n requireAvailable(data, 0, 5);\n const count = data.readUInt32BE(1);\n let offset = 5;\n const values = new Array<unknown>(count);\n for (let index = 0; index < count; index += 1) {\n requireAvailable(data, offset, 1);\n const status = data.readUInt8(offset);\n offset += 1;\n if (status === 0) {\n requireAvailable(data, offset, 1);\n const kind = data.readUInt8(offset);\n offset += 1;\n if (kind === 0) {\n values[index] = null;\n } else if (kind === 1) {\n const read = readBinary(data, offset);\n values[index] = read.value;\n offset = read.offset;\n } else if (kind === 2) {\n const read = readCompactFlowRecord(data, offset);\n values[index] = read.value;\n offset = read.offset;\n } else if (kind === 3) {\n const read = readCompactFlowRecordList(data, offset);\n values[index] = read.value;\n offset = read.offset;\n } else if (kind === 4) {\n const read = readCompactClaimJob(data, offset);\n values[index] = read.value;\n offset = read.offset;\n } else if (kind === 5) {\n const read = readCompactFlowValueRef(data, offset);\n values[index] = read.value;\n offset = read.offset;\n } else if (kind === 6) {\n const read = readCompactBinaryList(data, offset);\n values[index] = read.value;\n offset = read.offset;\n } else if (kind === 7) {\n const read = readCompactBinaryMap(data, offset);\n values[index] = read.value;\n offset = read.offset;\n } else {\n throw new FerricStoreError(\"unknown compact pipeline success kind\");\n }\n } else if (status === 1 || status === 2) {\n const read = readBinary(data, offset);\n values[index] = [status === 1 ? \"busy\" : \"error\", read.value];\n offset = read.offset;\n } else {\n throw new FerricStoreError(\"unknown compact pipeline status\");\n }\n }\n if (offset !== data.byteLength) throw new FerricStoreError(\"trailing compact pipeline bytes\");\n return values;\n}\n\nfunction decodeCompactClaimJobs(data: Buffer): unknown[] {\n requireAvailable(data, 0, 5);\n const count = data.readUInt32BE(1);\n for (const mode of [\"stateAttrs\", \"attrs\", \"base\"] as const) {\n const decoded = tryReadCompactClaimJobs(data, 5, count, mode);\n if (decoded?.offset === data.byteLength) {\n return decoded.value;\n }\n }\n try {\n readCompactClaimJob(data, 5, \"base\");\n } catch (error) {\n if (error instanceof FerricStoreError && error.message === \"unsafe compact Flow fencing token\") throw error;\n }\n throw new FerricStoreError(\"trailing compact claim jobs bytes\");\n}\n\nfunction tryReadCompactClaimJobs(\n data: Buffer,\n offset: number,\n count: number,\n mode: \"base\" | \"attrs\" | \"stateAttrs\"\n): { readonly value: unknown[]; readonly offset: number } | null {\n try {\n const values: unknown[] = [];\n for (let index = 0; index < count; index += 1) {\n const read = readCompactClaimJob(data, offset, mode);\n values.push(read.value);\n offset = read.offset;\n }\n return { value: values, offset };\n } catch (error) {\n if (error instanceof FerricStoreError || error instanceof RangeError) return null;\n throw error;\n }\n}\n\nfunction readCompactClaimJob(\n data: Buffer,\n offset: number,\n mode: \"base\" | \"attrs\" | \"stateAttrs\" = \"base\"\n): { readonly value: unknown[]; readonly offset: number } {\n const id = readBinary(data, offset);\n const partition = readOptionalBinary(data, id.offset);\n const lease = readBinary(data, partition.offset);\n requireAvailable(data, lease.offset, 8);\n const fencingBig = data.readBigInt64BE(lease.offset);\n if (fencingBig > MAX_SAFE_INTEGER_BIGINT || fencingBig < MIN_SAFE_INTEGER_BIGINT) {\n throw new FerricStoreError(\"unsafe compact Flow fencing token\");\n }\n const fencing = Number(fencingBig);\n offset = lease.offset + 8;\n if (mode === \"base\") {\n return { value: [id.value, partition.value, lease.value, fencing], offset };\n }\n if (mode === \"attrs\") {\n const attrs = decodeValue(data, offset);\n return { value: [id.value, partition.value, lease.value, fencing, null, attrs.value], offset: attrs.offset };\n }\n const runState = readOptionalBinary(data, offset);\n const attrs = decodeValue(data, runState.offset);\n return {\n value: [id.value, partition.value, lease.value, fencing, runState.value, attrs.value],\n offset: attrs.offset\n };\n}\n\nfunction readCompactFlowValueRef(data: Buffer, offset: number): { readonly value: Record<string, unknown>; readonly offset: number } {\n const ref = readBinary(data, offset);\n const partition = readOptionalBinary(data, ref.offset);\n const owner = readOptionalBinary(data, partition.offset);\n const value: Record<string, unknown> = { ref: ref.value };\n if (partition.value != null) value.partition_key = partition.value;\n if (owner.value != null) value.owner_flow_id = owner.value;\n return { value, offset: owner.offset };\n}\n\nfunction readCompactFlowRecord(data: Buffer, offset: number): { readonly value: Record<string, unknown>; readonly offset: number } {\n requireAvailable(data, offset, 5);\n if (data.readUInt8(offset) !== COMPACT_FLOW_RECORD) {\n throw new FerricStoreError(\"expected compact Flow record\");\n }\n offset += 1;\n const count = data.readUInt32BE(offset);\n offset += 4;\n const record: Record<string, unknown> = {};\n for (let index = 0; index < count; index += 1) {\n requireAvailable(data, offset, 1);\n const keyId = data.readUInt8(offset);\n offset += 1;\n let key: string;\n if (keyId === 0) {\n const read = readBinary(data, offset);\n key = read.value.toString(\"utf8\");\n offset = read.offset;\n } else {\n key = FLOW_RECORD_FIELD_KEYS[keyId] ?? `field_${keyId}`;\n }\n const read = decodeValue(data, offset);\n record[key] = read.value;\n offset = read.offset;\n }\n return { value: record, offset };\n}\n\nfunction readCompactFlowRecordList(data: Buffer, offset: number): { readonly value: Record<string, unknown>[]; readonly offset: number } {\n requireAvailable(data, offset, 5);\n if (data.readUInt8(offset) !== COMPACT_FLOW_RECORD_LIST) {\n throw new FerricStoreError(\"expected compact Flow record list\");\n }\n offset += 1;\n const count = data.readUInt32BE(offset);\n offset += 4;\n const records: Record<string, unknown>[] = [];\n for (let index = 0; index < count; index += 1) {\n const read = readCompactFlowRecord(data, offset);\n records.push(read.value);\n offset = read.offset;\n }\n return { value: records, offset };\n}\n\nfunction readCompactBinaryList(data: Buffer, offset: number): { readonly value: Buffer[]; readonly offset: number } {\n requireAvailable(data, offset, 4);\n const count = data.readUInt32BE(offset);\n offset += 4;\n const values: Buffer[] = [];\n for (let index = 0; index < count; index += 1) {\n const read = readBinary(data, offset);\n values.push(read.value);\n offset = read.offset;\n }\n return { value: values, offset };\n}\n\nfunction readCompactBinaryMap(data: Buffer, offset: number): { readonly value: Record<string, Buffer>; readonly offset: number } {\n requireAvailable(data, offset, 4);\n const count = data.readUInt32BE(offset);\n offset += 4;\n const values: Record<string, Buffer> = {};\n for (let index = 0; index < count; index += 1) {\n const key = readBinary(data, offset);\n const value = readBinary(data, key.offset);\n values[key.value.toString(\"utf8\")] = value.value;\n offset = value.offset;\n }\n return { value: values, offset };\n}\n\nfunction readOptionalBinary(data: Buffer, offset: number): { readonly value: Buffer | null; readonly offset: number } {\n requireAvailable(data, offset, 4);\n const size = data.readUInt32BE(offset);\n offset += 4;\n if (size === NULL_U32) {\n return { value: null, offset };\n }\n requireAvailable(data, offset, size);\n return { value: data.subarray(offset, offset + size), offset: offset + size };\n}\n\nfunction readBinary(data: Buffer, offset: number): { readonly value: Buffer; readonly offset: number } {\n requireAvailable(data, offset, 4);\n const size = data.readUInt32BE(offset);\n offset += 4;\n if (size === NULL_U32) {\n throw new FerricStoreError(\"invalid null binary length\");\n }\n requireAvailable(data, offset, size);\n return { value: data.subarray(offset, offset + size), offset: offset + size };\n}\n\nfunction compactBinary(value: unknown): Buffer {\n const buffer = toBuffer(value);\n return Buffer.concat([u32(buffer.byteLength), buffer]);\n}\n\nfunction compactOptionalBinary(value: unknown): Buffer {\n if (value == null) return u32(NULL_U32);\n return compactBinary(value);\n}\n\nfunction encodeBinary(value: Buffer, tag: number): Buffer {\n return Buffer.concat([u8(tag), u32(value.byteLength), value]);\n}\n\nfunction toBuffer(value: unknown): Buffer {\n if (Buffer.isBuffer(value)) return value;\n if (value instanceof Uint8Array) return Buffer.from(value);\n if (typeof value === \"string\") return Buffer.from(value);\n if (typeof value === \"number\" || typeof value === \"bigint\" || typeof value === \"boolean\") {\n return Buffer.from(String(value));\n }\n if (typeof value === \"symbol\") {\n return Buffer.from(value.description ?? value.toString());\n }\n if (value == null) return Buffer.alloc(0);\n throw new FerricStoreError(`unsupported binary command argument type: ${typeof value}`);\n}\n\nfunction asText(value: unknown): string {\n return toBuffer(value).toString(\"utf8\");\n}\n\nfunction commandNameIs(value: unknown, expected: string): boolean {\n if (typeof value === \"string\") {\n return value.toUpperCase() === expected;\n }\n return asText(value).toUpperCase() === expected;\n}\n\nfunction u8(value: number): Buffer {\n return Buffer.from([value]);\n}\n\nfunction u32(value: number): Buffer {\n const buffer = Buffer.allocUnsafe(4);\n buffer.writeUInt32BE(value, 0);\n return buffer;\n}\n\nfunction i64(value: bigint): Buffer {\n const buffer = Buffer.allocUnsafe(8);\n buffer.writeBigInt64BE(value, 0);\n return buffer;\n}\n\nfunction independentMode(value: unknown): number {\n if (value === true) return 2;\n if (value === false) return 1;\n return 0;\n}\n\nfunction optionalI64(value: unknown): bigint {\n return typeof value === \"number\" ? BigInt(value) : MIN_I64;\n}\n\nfunction compactClaimReturnMode(value: unknown): number | undefined {\n const mode = value == null ? \"\" : asText(value).toUpperCase();\n if (mode === \"JOBS_COMPACT\") return 1;\n if (mode === \"JOBS_COMPACT_STATE\" || mode === \"JOBS_COMPACT_WITH_STATE\") return 2;\n if (mode === \"JOBS_COMPACT_ATTRS\" || mode === \"JOBS_COMPACT_ATTRIBUTES\") return 3;\n if (\n mode === \"JOBS_COMPACT_STATE_ATTRS\" ||\n mode === \"JOBS_COMPACT_WITH_STATE_ATTRS\" ||\n mode === \"JOBS_COMPACT_STATE_ATTRIBUTES\" ||\n mode === \"JOBS_COMPACT_WITH_STATE_ATTRIBUTES\"\n ) {\n return 4;\n }\n return undefined;\n}\n\nfunction requireAvailable(data: Buffer, offset: number, size: number): void {\n if (offset < 0 || size < 0 || data.byteLength - offset < size) {\n throw new FerricStoreError(\"native protocol value is truncated\", { raw: data });\n }\n}\n\nfunction laneForOpcode(opcode: number): number {\n return opcode < 0x0100 ? 0 : 1;\n}\n\nfunction errorMessage(status: number | string, value: unknown): string {\n if (typeof value === \"string\") return value;\n if (Buffer.isBuffer(value)) return value.toString(\"utf8\");\n if (typeof value === \"object\" && value != null && \"message\" in value) {\n const message = (value as Record<string, unknown>).message;\n return typeof message === \"string\" ? message : String(message);\n }\n return `ERR native request failed status=${status}: ${String(value)}`;\n}\n","import { Buffer } from \"node:buffer\";\nimport { FerricStoreError } from \"./errors.js\";\nimport type { Command, CommandArgument } from \"./internal.js\";\nimport {\n buildProtocolCommand,\n pipelineCommand,\n unwrapPipelineResponse,\n type ProtocolCommand\n} from \"./protocol.js\";\nimport {\n NativeAdapter,\n type CommandExecutor,\n type ExecutePipelineOptions,\n type NativeAdapterOptions\n} from \"./adapters.js\";\n\nexport type EndpointPolicy = \"seed_hosts\" | \"any\" | \"none\" | { readonly allowHosts: readonly string[] };\n\nexport interface RoutingEndpoint {\n readonly node: string;\n readonly host: string;\n readonly nativePort: number;\n readonly nativeTlsPort?: number;\n}\n\nexport interface RoutingRoute {\n readonly shard: number;\n readonly laneId: number;\n readonly endpointKey: string;\n readonly endpoint: RoutingEndpoint;\n readonly leaderNode: string;\n readonly slot?: number;\n}\n\ninterface ParsedUrl {\n readonly host: string;\n readonly password?: string;\n readonly port: number;\n readonly tls: boolean;\n readonly username?: string;\n}\n\nconst ROUTE_SLOT_COUNT = 1024;\nconst ROUTE_SLOT_MASK = ROUTE_SLOT_COUNT - 1;\n\nexport class RoutingTopology {\n readonly routeEpoch: number;\n readonly shardCount: number;\n readonly slots: readonly (RoutingRoute | undefined)[];\n readonly endpoints: ReadonlyMap<string, RoutingEndpoint>;\n\n private constructor(\n routeEpoch: number,\n shardCount: number,\n slots: readonly (RoutingRoute | undefined)[],\n endpoints: ReadonlyMap<string, RoutingEndpoint>\n ) {\n this.routeEpoch = routeEpoch;\n this.shardCount = shardCount;\n this.slots = slots;\n this.endpoints = endpoints;\n }\n\n static empty(): RoutingTopology {\n return new RoutingTopology(0, 0, Array.from({ length: ROUTE_SLOT_COUNT }), new Map());\n }\n\n static build(payload: unknown): RoutingTopology {\n const ranges = getField(payload, \"ranges\");\n if (!Array.isArray(ranges)) {\n throw new FerricStoreError(\"invalid SHARDS topology payload\", { raw: payload });\n }\n\n const slots: (RoutingRoute | undefined)[] = Array.from({ length: ROUTE_SLOT_COUNT });\n const endpoints = new Map<string, RoutingEndpoint>();\n\n for (const item of ranges) {\n if (textOrUndefined(getField(item, \"hint\")) === \"leader_unknown\") {\n throw new FerricStoreError(\"SHARDS range has no leader\", { raw: item });\n }\n\n const first = numberOrUndefined(getField(item, \"first_slot\"));\n const last = numberOrUndefined(getField(item, \"last_slot\"));\n const shard = numberOrUndefined(getField(item, \"shard\"));\n const laneId = numberOrUndefined(getField(item, \"lane_id\"));\n const endpoint = endpointFromRange(item);\n\n if (\n first == null ||\n last == null ||\n shard == null ||\n laneId == null ||\n first < 0 ||\n last < first ||\n last >= ROUTE_SLOT_COUNT\n ) {\n throw new FerricStoreError(\"invalid SHARDS range\", { raw: item });\n }\n\n const endpointKey = endpointKeyFor(endpoint);\n const route: RoutingRoute = {\n endpoint,\n endpointKey,\n laneId,\n leaderNode: endpoint.node,\n shard\n };\n for (let slot = first; slot <= last; slot += 1) {\n slots[slot] = route;\n }\n endpoints.set(endpointKey, endpoint);\n }\n\n return new RoutingTopology(\n numberOrUndefined(getField(payload, \"route_epoch\")) ?? 0,\n numberOrUndefined(getField(payload, \"shard_count\")) ?? 0,\n slots,\n endpoints\n );\n }\n\n static slotForKey(key: string | Buffer): number {\n const textKey = Buffer.isBuffer(key) ? key.toString(\"utf8\") : key;\n let hashInput: string;\n if (textKey.startsWith(\"f:{\")) {\n hashInput = flowHashTag(textKey.slice(3), textKey);\n } else if (textKey.startsWith(\"X:f:{\")) {\n hashInput = flowHashTag(textKey.slice(5), textKey);\n } else {\n hashInput = hashTagOrKey(textKey);\n }\n return crc32(Buffer.from(hashInput)) & ROUTE_SLOT_MASK;\n }\n\n routeKey(key: string | Buffer): RoutingRoute {\n const slot = RoutingTopology.slotForKey(key);\n const route = this.slots[slot];\n if (route == null) {\n throw new FerricStoreError(`no route for slot ${slot}`);\n }\n return { ...route, slot };\n }\n}\n\nexport class TopologyNativeAdapterPool implements CommandExecutor {\n private readonly adapterOptions: NativeAdapterOptions;\n private readonly adapters = new Map<string, NativeAdapter>();\n private readonly endpointPolicy: EndpointPolicy;\n private readonly endpointValidator?: (endpoint: RoutingEndpoint) => boolean | void;\n private readonly seedEndpointKeys: ReadonlySet<string>;\n private readonly seedUrls: readonly string[];\n private readonly tls: boolean;\n private readonly trustedHosts: ReadonlySet<string>;\n private readonly warmConnections: boolean;\n private topologyValue = RoutingTopology.empty();\n\n private constructor(urls: readonly string[], options: NativeAdapterOptions = {}) {\n if (urls.length === 0) {\n throw new FerricStoreError(\"TopologyNativeAdapterPool requires at least one seed URL\");\n }\n this.seedUrls = [...urls];\n this.endpointPolicy = options.endpointPolicy ?? \"seed_hosts\";\n this.endpointValidator = options.endpointValidator;\n this.warmConnections = options.warmConnections ?? false;\n this.tls = options.tlsOptions != null || urls.some((url) => parseFerricUrl(url).tls);\n this.adapterOptions = nativeOnlyOptions(withSeedAuthDefaults(urls, options));\n this.seedEndpointKeys = new Set(urls.map((url) => endpointKeyFor(endpointFromUrl(url))));\n this.trustedHosts = normalizedHostSet(options.trustedHosts ?? []);\n }\n\n static async fromUrls(urls: readonly string[], options: NativeAdapterOptions = {}): Promise<TopologyNativeAdapterPool> {\n const pool = new TopologyNativeAdapterPool(urls, options);\n await pool.refreshTopology();\n return pool;\n }\n\n get topology(): RoutingTopology {\n return this.topologyValue;\n }\n\n async refreshTopology(): Promise<RoutingTopology> {\n let lastError: unknown;\n for (const url of this.refreshCandidateUrls()) {\n try {\n const adapter = await this.adapterForUrl(url);\n const topology = RoutingTopology.build(await adapter.executeCommand(\"SHARDS\"));\n this.topologyValue = topology;\n if (this.warmConnections) {\n await Promise.allSettled([...topology.endpoints.values()].map(async (endpoint) => await this.adapterForEndpoint(endpoint)));\n }\n return topology;\n } catch (error) {\n lastError = error;\n }\n }\n throw new FerricStoreError(\"no FerricStore topology endpoint reachable\", { raw: lastError });\n }\n\n route(key: string | Buffer): RoutingRoute {\n const route = this.topologyValue.routeKey(key);\n this.validateEndpoint(route.endpoint);\n return route;\n }\n\n async executeCommand(...args: CommandArgument[]): Promise<unknown> {\n const routed = this.routeData(args);\n if (routed == null) {\n return await (await this.controlAdapter()).executeCommand(...args);\n }\n\n const adapter = await this.adapterForEndpoint(routed.route.endpoint);\n try {\n return await adapter.executeProtocolCommand(routed.command, routed.route.laneId);\n } catch (error) {\n if (isRetryableRouteError(error)) {\n await this.refreshTopology().catch(() => undefined);\n }\n throw error;\n }\n }\n\n async executePipeline(commands: readonly Command[], options: ExecutePipelineOptions = {}): Promise<unknown[]> {\n if (commands.length === 0) {\n return [];\n }\n\n const route = this.singleRouteForCommands(commands);\n if (route == null) {\n return await (await this.controlAdapter()).executePipeline(commands, options);\n }\n\n const adapter = await this.adapterForEndpoint(route.endpoint);\n try {\n const response = await adapter.executeProtocolCommand(pipelineCommand(commands), route.laneId);\n return unwrapPipelineResponse(response, options);\n } catch (error) {\n if (isRetryableRouteError(error)) {\n await this.refreshTopology().catch(() => undefined);\n }\n throw error;\n }\n }\n\n async close(): Promise<void> {\n await Promise.allSettled([...this.adapters.values()].map(async (adapter) => await adapter.close()));\n this.adapters.clear();\n }\n\n private routeData(args: readonly CommandArgument[]): { readonly command: ProtocolCommand; readonly route: RoutingRoute } | undefined {\n if (args.length === 0) {\n return undefined;\n }\n let command: ProtocolCommand;\n try {\n command = buildProtocolCommand(args);\n } catch {\n return undefined;\n }\n const key = routingKey(args, command);\n if (key == null) {\n return undefined;\n }\n return { command, route: this.route(key) };\n }\n\n private singleRouteForCommands(commands: readonly Command[]): RoutingRoute | undefined {\n let route: RoutingRoute | undefined;\n for (const command of commands) {\n const routed = this.routeData(command);\n if (routed == null) {\n return undefined;\n }\n const current = routed.route;\n if (route == null) {\n route = current;\n } else if (route.endpointKey !== current.endpointKey || route.laneId !== current.laneId) {\n return undefined;\n }\n }\n return route;\n }\n\n private async controlAdapter(): Promise<NativeAdapter> {\n for (const url of this.refreshCandidateUrls()) {\n try {\n return await this.adapterForUrl(url);\n } catch {\n // Try the next known control endpoint.\n }\n }\n return await this.adapterForUrl(this.seedUrls[0] ?? \"ferric://127.0.0.1:6388\");\n }\n\n private async adapterForUrl(url: string): Promise<NativeAdapter> {\n const endpoint = endpointFromUrl(url);\n const key = endpointKeyFor(endpoint);\n const existing = this.adapters.get(key);\n if (existing != null) {\n return existing;\n }\n const adapter = await NativeAdapter.fromUrl(url, this.adapterOptions);\n this.adapters.set(key, adapter);\n return adapter;\n }\n\n private async adapterForEndpoint(endpoint: RoutingEndpoint): Promise<NativeAdapter> {\n this.validateEndpoint(endpoint);\n const key = endpointKeyFor(endpoint);\n const existing = this.adapters.get(key);\n if (existing != null) {\n return existing;\n }\n const adapter = await NativeAdapter.fromUrl(urlFromEndpoint(endpoint, this.tls), this.adapterOptions);\n this.adapters.set(key, adapter);\n return adapter;\n }\n\n private validateEndpoint(endpoint: RoutingEndpoint): void {\n let allowed: boolean;\n if (this.endpointPolicy === \"any\" || this.endpointPolicy === \"none\") {\n allowed = true;\n } else if (this.endpointPolicy === \"seed_hosts\") {\n allowed = this.seedEndpointKeys.has(endpointKeyFor(endpoint)) || this.trustedHosts.has(endpoint.host.toLowerCase());\n } else if (\"allowHosts\" in this.endpointPolicy) {\n allowed = normalizedHostSet(this.endpointPolicy.allowHosts).has(endpoint.host.toLowerCase());\n } else {\n throw new FerricStoreError(\"invalid endpoint policy\", { raw: this.endpointPolicy });\n }\n if (!allowed) {\n throw new FerricStoreError(\"unsafe learned endpoint\", { raw: endpoint });\n }\n if (this.endpointValidator != null && !this.endpointValidator(endpoint)) {\n throw new FerricStoreError(\"unsafe learned endpoint\", { raw: endpoint });\n }\n }\n\n private refreshCandidateUrls(): string[] {\n const urls = [\n ...this.seedUrls,\n ...[...this.topologyValue.endpoints.values()].map((endpoint) => urlFromEndpoint(endpoint, this.tls))\n ];\n return [...new Set(urls)];\n }\n}\n\nfunction routingKey(args: readonly CommandArgument[], command: ProtocolCommand): string | Buffer | undefined {\n const name = commandName(args);\n if (command.opcode < 0x0100 || name === \"CLUSTER.KEYSLOT\" || name === \"SHARDS\" || name === \"ROUTE\") {\n return undefined;\n }\n\n const keyFromArgs = routingKeyFromArgs(name, args);\n if (keyFromArgs != null) {\n return keyFromArgs;\n }\n\n if (!isPlainObject(command.payload)) {\n return undefined;\n }\n\n for (const field of [\"key\", \"partition_key\", \"id\", \"owner_flow_id\", \"parent_id\", \"root_id\", \"correlation_id\", \"scope\"]) {\n const value = getField(command.payload, field);\n if (typeof value === \"string\" || Buffer.isBuffer(value)) {\n return value;\n }\n }\n\n const keys = getField(command.payload, \"keys\");\n if (Array.isArray(keys)) {\n return singleShardKey(keys);\n }\n\n const pairsValue = getField(command.payload, \"pairs\");\n if (Array.isArray(pairsValue)) {\n return singleShardKey(\n pairsValue\n .filter((pair): pair is readonly unknown[] => Array.isArray(pair) && pair.length > 0)\n .map((pair) => pair[0])\n );\n }\n\n return undefined;\n}\n\nfunction routingKeyFromArgs(name: string | undefined, args: readonly CommandArgument[]): string | Buffer | undefined {\n if (name == null) {\n return undefined;\n }\n\n if (name === \"MGET\" || name === \"DEL\") {\n return singleShardKey(args.slice(1));\n }\n if (name === \"MSET\") {\n const keys: CommandArgument[] = [];\n for (let index = 1; index < args.length; index += 2) {\n keys.push(args[index]);\n }\n return singleShardKey(keys);\n }\n if (name === \"BITOP\") {\n return bitopRoutingKey(args);\n }\n if (name === \"RENAME\" || name === \"RENAMENX\") {\n return singleShardKey(args.slice(1, 3));\n }\n if (name === \"XREAD\" || name === \"XREADGROUP\") {\n return streamReadRoutingKey(args);\n }\n if (name.startsWith(\"FLOW.\")) {\n return flowRoutingKey(name, args);\n }\n if (firstKeyCommands.has(name)) {\n const key = args[1];\n return typeof key === \"string\" || Buffer.isBuffer(key) ? key : undefined;\n }\n\n return undefined;\n}\n\nfunction flowRoutingKey(name: string, args: readonly CommandArgument[]): string | Buffer | undefined {\n const flowArgs = args.slice(1);\n if (flowArgs.length === 0) {\n return undefined;\n }\n\n if (name === \"FLOW.CLAIM_DUE\" || name === \"FLOW.RECLAIM\") {\n return flowPartitionRoutingKey(flowArgs, 1);\n }\n\n if (name === \"FLOW.CREATE_MANY\" || name === \"FLOW.COMPLETE_MANY\" || name === \"FLOW.TRANSITION_MANY\" || name === \"FLOW.RETRY_MANY\" || name === \"FLOW.FAIL_MANY\" || name === \"FLOW.CANCEL_MANY\") {\n const partition = flowArgs[0];\n if (typeof partition === \"string\" && partition.toUpperCase() !== \"AUTO\" && partition.toUpperCase() !== \"MIXED\") {\n return partition;\n }\n if (Buffer.isBuffer(partition)) {\n const text = partition.toString(\"utf8\").toUpperCase();\n if (text !== \"AUTO\" && text !== \"MIXED\") {\n return partition;\n }\n }\n return undefined;\n }\n\n const partition = flowPartitionRoutingKey(flowArgs, 1);\n if (partition != null) {\n return partition;\n }\n\n if (typeScopedFlowCommands.has(name)) {\n return undefined;\n }\n\n const id = flowArgs[0];\n return typeof id === \"string\" || Buffer.isBuffer(id) ? id : undefined;\n}\n\nfunction bitopRoutingKey(args: readonly CommandArgument[]): string | Buffer | undefined {\n if (args.length < 4) {\n return undefined;\n }\n return singleShardKey(args.slice(2));\n}\n\nfunction streamReadRoutingKey(args: readonly CommandArgument[]): string | Buffer | undefined {\n const streamsIndex = args.findIndex((arg) => commandPart(arg) === \"STREAMS\");\n if (streamsIndex < 0) {\n return undefined;\n }\n const streamArgs = args.slice(streamsIndex + 1);\n if (streamArgs.length === 0 || streamArgs.length % 2 !== 0) {\n return undefined;\n }\n return singleShardKey(streamArgs.slice(0, streamArgs.length / 2));\n}\n\nfunction flowPartitionRoutingKey(args: readonly CommandArgument[], start: number): string | Buffer | undefined {\n for (let index = start; index < args.length; index += 1) {\n const token = commandPart(args[index]);\n if (token === \"PARTITION\") {\n const key = args[index + 1];\n return typeof key === \"string\" || Buffer.isBuffer(key) ? key : undefined;\n }\n if (token === \"PARTITIONS\") {\n const count = Number(args[index + 1]);\n if (!Number.isInteger(count) || count < 0) {\n return undefined;\n }\n return singleShardKey(args.slice(index + 2, index + 2 + count));\n }\n }\n return undefined;\n}\n\nfunction singleShardKey(keys: readonly unknown[]): string | Buffer | undefined {\n const usable = keys.filter((key): key is string | Buffer => typeof key === \"string\" || Buffer.isBuffer(key));\n if (usable.length === 0) {\n return undefined;\n }\n const first = usable[0];\n if (first == null) {\n return undefined;\n }\n const firstSlot = RoutingTopology.slotForKey(first);\n return usable.every((key) => RoutingTopology.slotForKey(key) === firstSlot) ? first : undefined;\n}\n\nfunction commandName(args: readonly CommandArgument[]): string | undefined {\n const first = commandPart(args[0]);\n if (first == null) {\n return undefined;\n }\n if (first === \"FLOW\" && args.length > 1) {\n const second = commandPart(args[1]);\n return second == null ? first : `${first}.${second}`;\n }\n if (first === \"CLIENT\" && args.length > 1) {\n const second = commandPart(args[1]);\n return second == null ? first : `${first}.${second}`;\n }\n if (first === \"CLUSTER\" && args.length > 1) {\n const second = commandPart(args[1]);\n return second == null ? first : `${first}.${second}`;\n }\n return first;\n}\n\nfunction commandPart(value: CommandArgument): string | undefined {\n if (typeof value === \"string\") {\n return value.toUpperCase();\n }\n if (Buffer.isBuffer(value)) {\n return value.toString(\"utf8\").toUpperCase();\n }\n return undefined;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value != null && !Array.isArray(value) && !Buffer.isBuffer(value);\n}\n\nfunction getField(source: unknown, ...keys: string[]): unknown {\n if (source instanceof Map) {\n for (const key of keys) {\n if (source.has(key)) return source.get(key);\n const bufferKey = Buffer.from(key);\n for (const [itemKey, value] of source.entries()) {\n if (Buffer.isBuffer(itemKey) && itemKey.equals(bufferKey)) {\n return value;\n }\n }\n }\n return undefined;\n }\n if (isPlainObject(source)) {\n for (const key of keys) {\n if (key in source) return source[key];\n }\n }\n return undefined;\n}\n\nfunction textOrUndefined(value: unknown): string | undefined {\n if (typeof value === \"string\") {\n return value;\n }\n if (Buffer.isBuffer(value)) {\n return value.toString(\"utf8\");\n }\n return undefined;\n}\n\nfunction numberOrUndefined(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isInteger(value) ? value : undefined;\n}\n\nfunction endpointFromRange(item: unknown): RoutingEndpoint {\n const endpointValue = getField(item, \"endpoint\");\n const raw = isPlainObject(endpointValue) || endpointValue instanceof Map ? endpointValue : item;\n const host = textOrUndefined(getField(raw, \"host\", \"native_host\"));\n const nativePort = numberOrUndefined(getField(raw, \"native_port\"));\n if (host == null || nativePort == null) {\n throw new FerricStoreError(\"invalid SHARDS endpoint\", { raw: item });\n }\n const nativeTlsPort = numberOrUndefined(getField(raw, \"native_tls_port\"));\n return {\n host,\n nativePort,\n node: textOrUndefined(getField(raw, \"node\", \"leader_node\", \"owner_node\")) ?? host,\n ...(nativeTlsPort == null ? {} : { nativeTlsPort })\n };\n}\n\nfunction endpointFromUrl(url: string): RoutingEndpoint {\n const parsed = parseFerricUrl(url);\n return {\n host: parsed.host,\n nativePort: parsed.port,\n node: parsed.host,\n ...(parsed.tls ? { nativeTlsPort: parsed.port } : {})\n };\n}\n\nfunction parseFerricUrl(value: string): ParsedUrl {\n const url = new URL(value);\n if (url.protocol !== \"ferric:\" && url.protocol !== \"ferrics:\") {\n throw new FerricStoreError(`unsupported FerricStore URL scheme: ${url.protocol}`);\n }\n return {\n host: url.hostname || \"127.0.0.1\",\n ...(url.password === \"\" ? {} : { password: decodeURIComponent(url.password) }),\n port: Number(url.port || (url.protocol === \"ferrics:\" ? 6389 : 6388)),\n tls: url.protocol === \"ferrics:\",\n ...(url.username === \"\" ? {} : { username: decodeURIComponent(url.username) })\n };\n}\n\nfunction endpointKeyFor(endpoint: RoutingEndpoint): string {\n return `${endpoint.host.toLowerCase()}:${endpoint.nativePort}`;\n}\n\nfunction urlFromEndpoint(endpoint: RoutingEndpoint, useTls: boolean): string {\n const port = useTls && endpoint.nativeTlsPort != null ? endpoint.nativeTlsPort : endpoint.nativePort;\n const host = endpoint.host.includes(\":\") && !endpoint.host.startsWith(\"[\") ? `[${endpoint.host}]` : endpoint.host;\n return `${useTls ? \"ferrics\" : \"ferric\"}://${host}:${port}`;\n}\n\nfunction nativeOnlyOptions(options: NativeAdapterOptions): NativeAdapterOptions {\n const nativeOptions = { ...options };\n delete nativeOptions.endpointPolicy;\n delete nativeOptions.endpointValidator;\n delete nativeOptions.haRouting;\n delete nativeOptions.seeds;\n delete nativeOptions.trustedHosts;\n delete nativeOptions.warmConnections;\n return nativeOptions;\n}\n\nfunction withSeedAuthDefaults(urls: readonly string[], options: NativeAdapterOptions): NativeAdapterOptions {\n const next: NativeAdapterOptions = { ...options };\n for (const url of urls) {\n const parsed = parseFerricUrl(url);\n if (next.username == null && parsed.username != null) {\n next.username = parsed.username;\n }\n if (next.password == null && parsed.password != null) {\n next.password = parsed.password;\n }\n if (next.username != null && next.password != null) {\n break;\n }\n }\n return next;\n}\n\nfunction isRetryableRouteError(error: unknown): boolean {\n if (!(error instanceof Error)) {\n return false;\n }\n const message = error.message.toLowerCase();\n return (\n message.includes(\"connection closed\") ||\n message.includes(\"connection is closed\") ||\n message.includes(\"shard not available\") ||\n message.includes(\"leader\") ||\n message.includes(\"route\")\n );\n}\n\nfunction normalizedHostSet(hosts: readonly (string | undefined)[]): ReadonlySet<string> {\n return new Set(hosts.filter((host): host is string => host != null && host !== \"\").map((host) => host.toLowerCase()));\n}\n\nfunction hashTagOrKey(key: string): string {\n const start = key.indexOf(\"{\");\n if (start < 0) {\n return key;\n }\n const end = key.indexOf(\"}\", start + 1);\n return end > start + 1 ? key.slice(start + 1, end) : key;\n}\n\nfunction flowHashTag(rest: string, fallbackKey: string): string {\n const end = rest.indexOf(\"}\");\n return end > 0 ? rest.slice(0, end) : hashTagOrKey(fallbackKey);\n}\n\nconst crc32Table = new Uint32Array(256);\nfor (let index = 0; index < 256; index += 1) {\n let value = index;\n for (let bit = 0; bit < 8; bit += 1) {\n value = (value & 1) !== 0 ? 0xedb8_8320 ^ (value >>> 1) : value >>> 1;\n }\n crc32Table[index] = value >>> 0;\n}\n\nfunction crc32(buffer: Buffer): number {\n let value = 0xffff_ffff;\n for (const byte of buffer) {\n value = (value >>> 8) ^ (crc32Table[(value ^ byte) & 0xff] ?? 0);\n }\n return (value ^ 0xffff_ffff) >>> 0;\n}\n\nconst firstKeyCommands = new Set([\n \"BITCOUNT\",\n \"BITFIELD\",\n \"BITPOS\",\n \"CAS\",\n \"EXISTS\",\n \"EXPIRE\",\n \"EXPIREAT\",\n \"FETCH_OR_COMPUTE\",\n \"FETCH_OR_COMPUTE_ERROR\",\n \"FETCH_OR_COMPUTE_RESULT\",\n \"FERRICSTORE.KEY_INFO\",\n \"GET\",\n \"GETBIT\",\n \"GETDEL\",\n \"GETEX\",\n \"HDEL\",\n \"HEXISTS\",\n \"HGET\",\n \"HGETALL\",\n \"HINCRBY\",\n \"HKEYS\",\n \"HLEN\",\n \"HMGET\",\n \"HMSET\",\n \"HSET\",\n \"HVALS\",\n \"LOCK\",\n \"LPOP\",\n \"LPUSH\",\n \"LRANGE\",\n \"LREM\",\n \"RATELIMIT.ADD\",\n \"RPOP\",\n \"RPUSH\",\n \"SADD\",\n \"SCARD\",\n \"SISMEMBER\",\n \"SMEMBERS\",\n \"SREM\",\n \"SET\",\n \"SETBIT\",\n \"STRLEN\",\n \"TTL\",\n \"TYPE\",\n \"UNLINK\",\n \"UNLOCK\",\n \"XADD\",\n \"XLEN\",\n \"XRANGE\",\n \"ZADD\",\n \"ZCARD\",\n \"ZRANGE\",\n \"ZREM\",\n \"ZSCORE\"\n]);\n\nconst typeScopedFlowCommands = new Set([\n \"FLOW.APPROVAL.LIST\",\n \"FLOW.ATTRIBUTE_VALUES\",\n \"FLOW.ATTRIBUTES\",\n \"FLOW.BUDGET.LIST\",\n \"FLOW.FAILURES\",\n \"FLOW.GOVERNANCE.OVERVIEW\",\n \"FLOW.INFO\",\n \"FLOW.LIMIT.LIST\",\n \"FLOW.LIST\",\n \"FLOW.POLICY.GET\",\n \"FLOW.POLICY.SET\",\n \"FLOW.RETENTION_CLEANUP\",\n \"FLOW.SCHEDULE.FIRE_DUE\",\n \"FLOW.SCHEDULE.LIST\",\n \"FLOW.SEARCH\",\n \"FLOW.STATS\",\n \"FLOW.STUCK\",\n \"FLOW.TERMINALS\"\n]);\n","export interface Codec<T = unknown> {\n encode(value: T | null | undefined): Buffer;\n decode(value: Buffer | null | undefined): T | null;\n}\n\nexport class RawCodec implements Codec<Buffer | string | Uint8Array | null> {\n encode(value: Buffer | string | Uint8Array | null | undefined): Buffer {\n if (value == null) {\n return Buffer.alloc(0);\n }\n if (Buffer.isBuffer(value)) {\n return value;\n }\n if (value instanceof Uint8Array) {\n return Buffer.from(value);\n }\n if (typeof value === \"string\") {\n return Buffer.from(value);\n }\n throw new TypeError(\"RawCodec accepts Buffer, Uint8Array, string, null, or undefined\");\n }\n\n decode(value: Buffer | null | undefined): Buffer | null {\n return value ?? null;\n }\n}\n\nexport class JsonCodec<T = unknown> implements Codec<T> {\n encode(value: T | null | undefined): Buffer {\n return Buffer.from(JSON.stringify(value ?? null));\n }\n\n decode(value: Buffer | null | undefined): T | null {\n if (value == null) {\n return null;\n }\n return JSON.parse(value.toString(\"utf8\")) as T;\n }\n}\n","import type { Codec } from \"./codecs.js\";\n\nexport type CommandArgument = string | Buffer | number | boolean | Record<string, unknown> | null | undefined;\nexport type Command = readonly CommandArgument[];\nexport type RespMap = Map<unknown, unknown> | Record<PropertyKey, unknown>;\n\nexport const AUTO_PARTITION_PREFIX = \"__flow_auto__:\";\nexport const AUTO_PARTITION_BUCKETS = 256;\n\nexport function nowMs(): number {\n return Date.now();\n}\n\nexport function append(args: CommandArgument[], name: string, value: unknown): void {\n if (value != null) {\n args.push(name, value as CommandArgument);\n }\n}\n\nexport function appendBool(args: CommandArgument[], name: string, value: boolean | null | undefined): void {\n if (value != null) {\n args.push(name, value ? \"true\" : \"false\");\n }\n}\n\nexport function appendEncoded(\n args: CommandArgument[],\n name: string,\n codec: Codec,\n value: unknown\n): void {\n if (value != null) {\n args.push(name, codec.encode(value));\n }\n}\n\nexport function appendNamedValues(\n args: CommandArgument[],\n codec: Codec,\n options: {\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n dropValues?: string[];\n overrideValues?: string[];\n }\n): void {\n for (const [name, value] of Object.entries(options.values ?? {})) {\n args.push(\"VALUE\", name, codec.encode(value));\n }\n for (const [name, ref] of Object.entries(options.valueRefs ?? {})) {\n args.push(\"VALUE_REF\", name, ref);\n }\n for (const name of options.dropValues ?? []) {\n args.push(\"DROP_VALUE\", name);\n }\n for (const name of options.overrideValues ?? []) {\n args.push(\"OVERRIDE_VALUE\", name);\n }\n}\n\nexport function appendValueReturn(\n args: CommandArgument[],\n options: { values?: string[]; valueMaxBytes?: number }\n): void {\n for (const name of options.values ?? []) {\n args.push(\"VALUE\", name);\n }\n append(args, \"VALUE_MAX_BYTES\", options.valueMaxBytes);\n}\n\nexport function okResponse(value: unknown): boolean {\n return value === \"OK\" || (Buffer.isBuffer(value) && value.toString(\"utf8\") === \"OK\") || value === true;\n}\n\nexport function text(value: unknown): string {\n if (Buffer.isBuffer(value)) {\n return value.toString(\"utf8\");\n }\n return String(value);\n}\n\nexport function optionalString(value: unknown): string | undefined {\n if (value == null || value === \"\" || (Buffer.isBuffer(value) && value.byteLength === 0)) {\n return undefined;\n }\n return text(value);\n}\n\nexport function bytes(value: unknown): Buffer {\n if (value == null) {\n return Buffer.alloc(0);\n }\n if (Buffer.isBuffer(value)) {\n return value;\n }\n if (value instanceof Uint8Array) {\n return Buffer.from(value);\n }\n if (typeof value === \"object\") {\n return Buffer.from(JSON.stringify(value) ?? \"\");\n }\n if (typeof value === \"string\") {\n return Buffer.from(value);\n }\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return Buffer.from(String(value));\n }\n if (typeof value === \"symbol\") {\n return Buffer.from(value.description ?? \"\");\n }\n if (typeof value === \"function\") {\n return Buffer.from(value.name);\n }\n return Buffer.alloc(0);\n}\n\nexport function integer(value: unknown, defaultValue = 0): number {\n if (value == null || value === \"\") {\n return defaultValue;\n }\n return Number(value);\n}\n\nexport function field(source: unknown, key: string): unknown {\n if (source instanceof Map) {\n if (source.has(key)) {\n return source.get(key);\n }\n const raw = Buffer.from(key);\n for (const [itemKey, value] of source.entries()) {\n if (Buffer.isBuffer(itemKey) && itemKey.equals(raw)) {\n return value;\n }\n }\n return undefined;\n }\n\n if (typeof source === \"object\" && source != null) {\n const record = source as Record<PropertyKey, unknown>;\n if (key in record) {\n return record[key];\n }\n const rawKey = Buffer.from(key).toString();\n if (rawKey in record) {\n return record[rawKey];\n }\n }\n\n return undefined;\n}\n\nexport function toStringKeyMap(value: unknown): Record<string, unknown> | undefined {\n if (value == null) {\n return undefined;\n }\n\n const result: Record<string, unknown> = {};\n if (value instanceof Map) {\n for (const [key, item] of value.entries()) {\n result[text(key)] = normalizeRefMeta(item);\n }\n return result;\n }\n\n if (typeof value === \"object\") {\n for (const [key, item] of Object.entries(value)) {\n result[text(key)] = normalizeRefMeta(item);\n }\n return result;\n }\n\n return undefined;\n}\n\nexport function normalizeRefMeta(value: unknown): unknown {\n if (Buffer.isBuffer(value)) {\n return value.toString(\"utf8\");\n }\n if (value instanceof Map) {\n const result: Record<string, unknown> = {};\n for (const [key, item] of value.entries()) {\n result[text(key)] = normalizeRefMeta(item);\n }\n return result;\n }\n if (Array.isArray(value)) {\n return value.map((item) => normalizeRefMeta(item));\n }\n if (typeof value === \"object\" && value != null) {\n const result: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) {\n result[text(key)] = normalizeRefMeta(item);\n }\n return result;\n }\n return value;\n}\n\nexport function parseKvResponse(value: unknown): Record<string, unknown> {\n if (value instanceof Map) {\n const result: Record<string, unknown> = {};\n for (const [key, item] of value.entries()) {\n result[text(key)] = item;\n }\n return result;\n }\n if (typeof value === \"object\" && value != null && !Array.isArray(value) && !Buffer.isBuffer(value)) {\n return Object.fromEntries(Object.entries(value).map(([key, item]) => [text(key), item]));\n }\n if (Array.isArray(value)) {\n const result: Record<string, unknown> = {};\n for (let index = 0; index < value.length - 1; index += 2) {\n result[text(value[index])] = value[index + 1];\n }\n return result;\n }\n if (typeof value === \"string\" || Buffer.isBuffer(value)) {\n return parseTextSections(text(value));\n }\n return { value };\n}\n\nexport function autoPartitionKeyForId(id: string): string {\n return `${AUTO_PARTITION_PREFIX}${crc32(Buffer.from(id)) % AUTO_PARTITION_BUCKETS}`;\n}\n\nexport function expandManyResponse(value: unknown, count: number): unknown[] {\n if (Array.isArray(value) && value.length === count) {\n return [...(value as unknown[])];\n }\n return Array.from({ length: count }, () => value);\n}\n\nexport function arrayResponse(value: unknown): unknown[] {\n return Array.isArray(value) ? [...(value as unknown[])] : [];\n}\n\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n if (ms <= 0) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(abortError(signal.reason));\n return;\n }\n\n const timer = setTimeout(resolve, ms);\n signal?.addEventListener(\n \"abort\",\n () => {\n clearTimeout(timer);\n reject(abortError(signal.reason));\n },\n { once: true }\n );\n });\n}\n\nfunction abortError(reason: unknown): Error {\n if (reason instanceof Error) {\n return reason;\n }\n return new Error(typeof reason === \"string\" ? reason : \"operation aborted\", { cause: reason });\n}\n\nfunction parseTextSections(value: string): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n let section: Record<string, unknown> | undefined;\n\n for (const rawLine of value.split(/\\r?\\n/u)) {\n const line = rawLine.trimEnd();\n if (line.length === 0) {\n continue;\n }\n if (line.endsWith(\":\") && !line.startsWith(\" \")) {\n section = {};\n result[line.slice(0, -1)] = section;\n continue;\n }\n\n const target = rawLine.startsWith(\" \") && section != null ? section : result;\n const colon = line.indexOf(\":\");\n if (colon >= 0) {\n target[line.slice(0, colon).trim()] = coerceDiagnosticValue(line.slice(colon + 1).trim());\n }\n }\n\n return result;\n}\n\nfunction coerceDiagnosticValue(value: string): unknown {\n if (value === \"\") {\n return value;\n }\n if (value === \"true\" || value === \"false\") {\n return value === \"true\";\n }\n if (/^-?[0-9]+$/u.test(value)) {\n return Number.parseInt(value, 10);\n }\n return value;\n}\n\nfunction crc32(buffer: Buffer): number {\n let crc = 0xffffffff;\n for (const byte of buffer) {\n crc ^= byte;\n for (let bit = 0; bit < 8; bit += 1) {\n crc = (crc >>> 1) ^ (0xedb88320 & -(crc & 1));\n }\n }\n return (crc ^ 0xffffffff) >>> 0;\n}\n","import type { Codec } from \"./codecs.js\";\nimport { okResponse, type CommandArgument } from \"./internal.js\";\n\nexport interface StoreCommandClient {\n readonly codec: Codec;\n command(...args: CommandArgument[]): Promise<unknown>;\n}\n\nexport interface SetOptions {\n ex?: number;\n px?: number;\n exat?: number;\n pxat?: number;\n nx?: boolean;\n xx?: boolean;\n get?: boolean;\n keepTtl?: boolean;\n}\n\nexport interface GetExOptions {\n ex?: number;\n px?: number;\n exat?: number;\n pxat?: number;\n persist?: boolean;\n}\n\nexport interface ScanOptions {\n match?: string;\n count?: number;\n}\n\nexport interface ZAddMember {\n score: number;\n member: unknown;\n}\n\nexport interface ZAddOptions {\n nx?: boolean;\n xx?: boolean;\n gt?: boolean;\n lt?: boolean;\n ch?: boolean;\n}\n\nexport interface RangeLimit {\n offset: number;\n count: number;\n}\n\nexport interface XReadStream {\n key: string;\n id: string;\n}\n\nexport interface GeoMember {\n longitude: number;\n latitude: number;\n member: unknown;\n}\n\nexport interface GeoAddOptions {\n nx?: boolean;\n xx?: boolean;\n ch?: boolean;\n}\n\nexport class KeyValueStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async get<T = unknown>(key: string): Promise<T | null> {\n return decode<T>(this.client.codec, await this.client.command(\"GET\", key));\n }\n\n async set(key: string, value: unknown, options: SetOptions = {}): Promise<unknown> {\n return await this.client.command(\"SET\", key, encode(this.client.codec, value), ...setOptions(options));\n }\n\n async del(...keys: string[]): Promise<number> {\n return number(await this.client.command(\"DEL\", ...keys));\n }\n\n async exists(...keys: string[]): Promise<number> {\n return number(await this.client.command(\"EXISTS\", ...keys));\n }\n\n async mget<T = unknown>(keys: string[]): Promise<(T | null)[]> {\n return array(await this.client.command(\"MGET\", ...keys)).map((item) => decode<T>(this.client.codec, item));\n }\n\n async mset(entries: Record<string, unknown> | [string, unknown][]): Promise<boolean> {\n return okResponse(await this.client.command(\"MSET\", ...flattenKeyValues(this.client.codec, entries)));\n }\n\n async msetnx(entries: Record<string, unknown> | [string, unknown][]): Promise<boolean> {\n return number(await this.client.command(\"MSETNX\", ...flattenKeyValues(this.client.codec, entries))) === 1;\n }\n\n async incr(key: string): Promise<number> {\n return number(await this.client.command(\"INCR\", key));\n }\n\n async decr(key: string): Promise<number> {\n return number(await this.client.command(\"DECR\", key));\n }\n\n async incrby(key: string, increment: number): Promise<number> {\n return number(await this.client.command(\"INCRBY\", key, increment));\n }\n\n async decrby(key: string, decrement: number): Promise<number> {\n return number(await this.client.command(\"DECRBY\", key, decrement));\n }\n\n async incrbyfloat(key: string, increment: number): Promise<string> {\n return string(await this.client.command(\"INCRBYFLOAT\", key, increment));\n }\n\n async append(key: string, value: unknown): Promise<number> {\n return number(await this.client.command(\"APPEND\", key, encode(this.client.codec, value)));\n }\n\n async strlen(key: string): Promise<number> {\n return number(await this.client.command(\"STRLEN\", key));\n }\n\n async getset<T = unknown>(key: string, value: unknown): Promise<T | null> {\n return decode<T>(this.client.codec, await this.client.command(\"GETSET\", key, encode(this.client.codec, value)));\n }\n\n async getdel<T = unknown>(key: string): Promise<T | null> {\n return decode<T>(this.client.codec, await this.client.command(\"GETDEL\", key));\n }\n\n async getex<T = unknown>(key: string, options: GetExOptions = {}): Promise<T | null> {\n return decode<T>(this.client.codec, await this.client.command(\"GETEX\", key, ...getexOptions(options)));\n }\n\n async setnx(key: string, value: unknown): Promise<boolean> {\n return number(await this.client.command(\"SETNX\", key, encode(this.client.codec, value))) === 1;\n }\n\n async setex(key: string, seconds: number, value: unknown): Promise<boolean> {\n return okResponse(await this.client.command(\"SETEX\", key, seconds, encode(this.client.codec, value)));\n }\n\n async psetex(key: string, milliseconds: number, value: unknown): Promise<boolean> {\n return okResponse(await this.client.command(\"PSETEX\", key, milliseconds, encode(this.client.codec, value)));\n }\n\n async getrange(key: string, start: number, end: number): Promise<Buffer | string | unknown> {\n return await this.client.command(\"GETRANGE\", key, start, end);\n }\n\n async setrange(key: string, offset: number, value: unknown): Promise<number> {\n return number(await this.client.command(\"SETRANGE\", key, offset, encode(this.client.codec, value)));\n }\n\n async expire(key: string, seconds: number): Promise<boolean> {\n return number(await this.client.command(\"EXPIRE\", key, seconds)) === 1;\n }\n\n async pexpire(key: string, milliseconds: number): Promise<boolean> {\n return number(await this.client.command(\"PEXPIRE\", key, milliseconds)) === 1;\n }\n\n async expireat(key: string, unixSeconds: number): Promise<boolean> {\n return number(await this.client.command(\"EXPIREAT\", key, unixSeconds)) === 1;\n }\n\n async pexpireat(key: string, unixMilliseconds: number): Promise<boolean> {\n return number(await this.client.command(\"PEXPIREAT\", key, unixMilliseconds)) === 1;\n }\n\n async ttl(key: string): Promise<number> {\n return number(await this.client.command(\"TTL\", key));\n }\n\n async pttl(key: string): Promise<number> {\n return number(await this.client.command(\"PTTL\", key));\n }\n\n async persist(key: string): Promise<boolean> {\n return number(await this.client.command(\"PERSIST\", key)) === 1;\n }\n\n async expiretime(key: string): Promise<number> {\n return number(await this.client.command(\"EXPIRETIME\", key));\n }\n\n async pexpiretime(key: string): Promise<number> {\n return number(await this.client.command(\"PEXPIRETIME\", key));\n }\n\n async type(key: string): Promise<string> {\n return string(await this.client.command(\"TYPE\", key));\n }\n\n async unlink(...keys: string[]): Promise<number> {\n return number(await this.client.command(\"UNLINK\", ...keys));\n }\n\n async rename(key: string, newKey: string): Promise<boolean> {\n return okResponse(await this.client.command(\"RENAME\", key, newKey));\n }\n\n async renamenx(key: string, newKey: string): Promise<boolean> {\n return number(await this.client.command(\"RENAMENX\", key, newKey)) === 1;\n }\n\n async copy(source: string, destination: string, options: { replace?: boolean } = {}): Promise<boolean> {\n return number(await this.client.command(\"COPY\", source, destination, ...(options.replace === true ? [\"REPLACE\"] : []))) === 1;\n }\n\n async randomkey(): Promise<string | null> {\n const response = await this.client.command(\"RANDOMKEY\");\n return response == null ? null : string(response);\n }\n\n async keys(pattern: string): Promise<unknown[]> {\n return array(await this.client.command(\"KEYS\", pattern));\n }\n\n async scan(cursor: string | number, options: ScanOptions = {}): Promise<unknown> {\n return await this.client.command(\"SCAN\", cursor, ...scanOptions(options));\n }\n\n async dbsize(): Promise<number> {\n return number(await this.client.command(\"DBSIZE\"));\n }\n\n async flushdb(mode?: \"ASYNC\" | \"SYNC\"): Promise<boolean> {\n return okResponse(await this.client.command(\"FLUSHDB\", ...(mode == null ? [] : [mode])));\n }\n\n async flushall(mode?: \"ASYNC\" | \"SYNC\"): Promise<boolean> {\n return okResponse(await this.client.command(\"FLUSHALL\", ...(mode == null ? [] : [mode])));\n }\n\n async objectEncoding(key: string): Promise<string | null> {\n const response = await this.client.command(\"OBJECT\", \"ENCODING\", key);\n return response == null ? null : string(response);\n }\n\n async objectHelp(): Promise<unknown[]> {\n return array(await this.client.command(\"OBJECT\", \"HELP\"));\n }\n\n async objectFreq(key: string): Promise<number> {\n return number(await this.client.command(\"OBJECT\", \"FREQ\", key));\n }\n\n async objectIdleTime(key: string): Promise<number> {\n return number(await this.client.command(\"OBJECT\", \"IDLETIME\", key));\n }\n\n async objectRefcount(key: string): Promise<number> {\n return number(await this.client.command(\"OBJECT\", \"REFCOUNT\", key));\n }\n\n async wait(numReplicas: number, timeoutMs: number): Promise<number> {\n return number(await this.client.command(\"WAIT\", numReplicas, timeoutMs));\n }\n\n async waitAof(numLocal: number, numReplicas: number, timeoutMs: number): Promise<unknown[]> {\n return array(await this.client.command(\"WAITAOF\", numLocal, numReplicas, timeoutMs));\n }\n\n async memoryUsage(key: string): Promise<number> {\n return number(await this.client.command(\"MEMORY\", \"USAGE\", key));\n }\n}\n\nexport class HashStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async hset(key: string, entries: Record<string, unknown> | [string, unknown][]): Promise<number> {\n return number(await this.client.command(\"HSET\", key, ...flattenKeyValues(this.client.codec, entries)));\n }\n\n async hget<T = unknown>(key: string, field: string): Promise<T | null> {\n return decode<T>(this.client.codec, await this.client.command(\"HGET\", key, field));\n }\n\n async hdel(key: string, ...fields: string[]): Promise<number> {\n return number(await this.client.command(\"HDEL\", key, ...fields));\n }\n\n async hmget<T = unknown>(key: string, fields: string[]): Promise<(T | null)[]> {\n return array(await this.client.command(\"HMGET\", key, ...fields)).map((item) => decode<T>(this.client.codec, item));\n }\n\n async hgetall(key: string): Promise<unknown> {\n return await this.client.command(\"HGETALL\", key);\n }\n\n async hexists(key: string, field: string): Promise<boolean> {\n return number(await this.client.command(\"HEXISTS\", key, field)) === 1;\n }\n\n async hkeys(key: string): Promise<unknown[]> {\n return array(await this.client.command(\"HKEYS\", key));\n }\n\n async hvals<T = unknown>(key: string): Promise<(T | null)[]> {\n return array(await this.client.command(\"HVALS\", key)).map((item) => decode<T>(this.client.codec, item));\n }\n\n async hlen(key: string): Promise<number> {\n return number(await this.client.command(\"HLEN\", key));\n }\n\n async hincrby(key: string, field: string, increment: number): Promise<number> {\n return number(await this.client.command(\"HINCRBY\", key, field, increment));\n }\n\n async hincrbyfloat(key: string, field: string, increment: number): Promise<string> {\n return string(await this.client.command(\"HINCRBYFLOAT\", key, field, increment));\n }\n\n async hsetnx(key: string, field: string, value: unknown): Promise<boolean> {\n return number(await this.client.command(\"HSETNX\", key, field, encode(this.client.codec, value))) === 1;\n }\n\n async hstrlen(key: string, field: string): Promise<number> {\n return number(await this.client.command(\"HSTRLEN\", key, field));\n }\n\n async hrandfield(key: string, count?: number, withValues = false): Promise<unknown> {\n const args: CommandArgument[] = [\"HRANDFIELD\", key];\n if (count != null) args.push(count);\n if (withValues) args.push(\"WITHVALUES\");\n return await this.client.command(...args);\n }\n\n async hscan(key: string, cursor: string | number, options: ScanOptions = {}): Promise<unknown> {\n return await this.client.command(\"HSCAN\", key, cursor, ...scanOptions(options));\n }\n\n async hexpire(key: string, seconds: number, fields: string[]): Promise<unknown[]> {\n return array(await this.client.command(\"HEXPIRE\", key, seconds, \"FIELDS\", fields.length, ...fields));\n }\n\n async httl(key: string, fields: string[]): Promise<unknown[]> {\n return array(await this.client.command(\"HTTL\", key, \"FIELDS\", fields.length, ...fields));\n }\n\n async hpersist(key: string, fields: string[]): Promise<unknown[]> {\n return array(await this.client.command(\"HPERSIST\", key, \"FIELDS\", fields.length, ...fields));\n }\n\n async hpexpire(key: string, milliseconds: number, fields: string[]): Promise<unknown[]> {\n return array(await this.client.command(\"HPEXPIRE\", key, milliseconds, \"FIELDS\", fields.length, ...fields));\n }\n\n async hpttl(key: string, fields: string[]): Promise<unknown[]> {\n return array(await this.client.command(\"HPTTL\", key, \"FIELDS\", fields.length, ...fields));\n }\n\n async hexpiretime(key: string, fields: string[]): Promise<unknown[]> {\n return array(await this.client.command(\"HEXPIRETIME\", key, \"FIELDS\", fields.length, ...fields));\n }\n\n async hgetdel<T = unknown>(key: string, fields: string[]): Promise<(T | null)[]> {\n return array(await this.client.command(\"HGETDEL\", key, \"FIELDS\", fields.length, ...fields)).map((item) =>\n decode<T>(this.client.codec, item)\n );\n }\n\n async hgetex<T = unknown>(key: string, fields: string[], options: GetExOptions = {}): Promise<(T | null)[]> {\n return array(await this.client.command(\"HGETEX\", key, ...getexOptions(options), \"FIELDS\", fields.length, ...fields)).map((item) =>\n decode<T>(this.client.codec, item)\n );\n }\n\n async hsetex(key: string, seconds: number, entries: Record<string, unknown> | [string, unknown][]): Promise<number> {\n return number(await this.client.command(\"HSETEX\", key, seconds, ...flattenKeyValues(this.client.codec, entries)));\n }\n}\n\nexport class ListStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async lpush(key: string, ...elements: unknown[]): Promise<number> {\n return number(await this.client.command(\"LPUSH\", key, ...elements.map((item) => encode(this.client.codec, item))));\n }\n\n async rpush(key: string, ...elements: unknown[]): Promise<number> {\n return number(await this.client.command(\"RPUSH\", key, ...elements.map((item) => encode(this.client.codec, item))));\n }\n\n async lpop<T = unknown>(key: string, count?: number): Promise<T | (T | null)[] | null> {\n const response = await this.client.command(\"LPOP\", key, ...(count == null ? [] : [count]));\n return Array.isArray(response) ? response.map((item) => decode<T>(this.client.codec, item)) : decode<T>(this.client.codec, response);\n }\n\n async rpop<T = unknown>(key: string, count?: number): Promise<T | (T | null)[] | null> {\n const response = await this.client.command(\"RPOP\", key, ...(count == null ? [] : [count]));\n return Array.isArray(response) ? response.map((item) => decode<T>(this.client.codec, item)) : decode<T>(this.client.codec, response);\n }\n\n async lrange<T = unknown>(key: string, start: number, stop: number): Promise<(T | null)[]> {\n return array(await this.client.command(\"LRANGE\", key, start, stop)).map((item) => decode<T>(this.client.codec, item));\n }\n\n async llen(key: string): Promise<number> {\n return number(await this.client.command(\"LLEN\", key));\n }\n\n async lindex<T = unknown>(key: string, index: number): Promise<T | null> {\n return decode<T>(this.client.codec, await this.client.command(\"LINDEX\", key, index));\n }\n\n async lset(key: string, index: number, element: unknown): Promise<boolean> {\n return okResponse(await this.client.command(\"LSET\", key, index, encode(this.client.codec, element)));\n }\n\n async lrem(key: string, count: number, element: unknown): Promise<number> {\n return number(await this.client.command(\"LREM\", key, count, encode(this.client.codec, element)));\n }\n\n async ltrim(key: string, start: number, stop: number): Promise<boolean> {\n return okResponse(await this.client.command(\"LTRIM\", key, start, stop));\n }\n\n async lpos(key: string, element: unknown, options: { rank?: number; count?: number; maxlen?: number } = {}): Promise<unknown> {\n const args: CommandArgument[] = [\"LPOS\", key, encode(this.client.codec, element)];\n if (options.rank != null) args.push(\"RANK\", options.rank);\n if (options.count != null) args.push(\"COUNT\", options.count);\n if (options.maxlen != null) args.push(\"MAXLEN\", options.maxlen);\n return await this.client.command(...args);\n }\n\n async linsert(key: string, where: \"BEFORE\" | \"AFTER\", pivot: unknown, element: unknown): Promise<number> {\n return number(await this.client.command(\"LINSERT\", key, where, encode(this.client.codec, pivot), encode(this.client.codec, element)));\n }\n\n async lmove(source: string, destination: string, from: \"LEFT\" | \"RIGHT\", to: \"LEFT\" | \"RIGHT\"): Promise<unknown> {\n return await this.client.command(\"LMOVE\", source, destination, from, to);\n }\n\n async rpoplpush(source: string, destination: string): Promise<unknown> {\n return await this.client.command(\"RPOPLPUSH\", source, destination);\n }\n\n async lpushx(key: string, ...elements: unknown[]): Promise<number> {\n return number(await this.client.command(\"LPUSHX\", key, ...elements.map((item) => encode(this.client.codec, item))));\n }\n\n async rpushx(key: string, ...elements: unknown[]): Promise<number> {\n return number(await this.client.command(\"RPUSHX\", key, ...elements.map((item) => encode(this.client.codec, item))));\n }\n\n async blpop(keys: string[], timeoutSeconds: number): Promise<unknown> {\n return await this.client.command(\"BLPOP\", ...keys, timeoutSeconds);\n }\n\n async brpop(keys: string[], timeoutSeconds: number): Promise<unknown> {\n return await this.client.command(\"BRPOP\", ...keys, timeoutSeconds);\n }\n\n async blmove(source: string, destination: string, from: \"LEFT\" | \"RIGHT\", to: \"LEFT\" | \"RIGHT\", timeoutSeconds: number): Promise<unknown> {\n return await this.client.command(\"BLMOVE\", source, destination, from, to, timeoutSeconds);\n }\n\n async blmpop(timeoutSeconds: number, keys: string[], from: \"LEFT\" | \"RIGHT\", options: { count?: number } = {}): Promise<unknown> {\n return await this.client.command(\"BLMPOP\", timeoutSeconds, keys.length, ...keys, from, ...(options.count == null ? [] : [\"COUNT\", options.count]));\n }\n}\n\nexport class SetStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async sadd(key: string, ...members: unknown[]): Promise<number> {\n return number(await this.client.command(\"SADD\", key, ...members.map((item) => encode(this.client.codec, item))));\n }\n\n async srem(key: string, ...members: unknown[]): Promise<number> {\n return number(await this.client.command(\"SREM\", key, ...members.map((item) => encode(this.client.codec, item))));\n }\n\n async smembers<T = unknown>(key: string): Promise<(T | null)[]> {\n return array(await this.client.command(\"SMEMBERS\", key)).map((item) => decode<T>(this.client.codec, item));\n }\n\n async sismember(key: string, member: unknown): Promise<boolean> {\n return number(await this.client.command(\"SISMEMBER\", key, encode(this.client.codec, member))) === 1;\n }\n\n async smismember(key: string, members: unknown[]): Promise<unknown[]> {\n return array(await this.client.command(\"SMISMEMBER\", key, ...members.map((item) => encode(this.client.codec, item))));\n }\n\n async scard(key: string): Promise<number> {\n return number(await this.client.command(\"SCARD\", key));\n }\n\n async srandmember<T = unknown>(key: string, count?: number): Promise<T | (T | null)[] | null> {\n const response = await this.client.command(\"SRANDMEMBER\", key, ...(count == null ? [] : [count]));\n return Array.isArray(response) ? response.map((item) => decode<T>(this.client.codec, item)) : decode<T>(this.client.codec, response);\n }\n\n async spop<T = unknown>(key: string, count?: number): Promise<T | (T | null)[] | null> {\n const response = await this.client.command(\"SPOP\", key, ...(count == null ? [] : [count]));\n return Array.isArray(response) ? response.map((item) => decode<T>(this.client.codec, item)) : decode<T>(this.client.codec, response);\n }\n\n async sdiff<T = unknown>(keys: string[]): Promise<(T | null)[]> {\n return array(await this.client.command(\"SDIFF\", ...keys)).map((item) => decode<T>(this.client.codec, item));\n }\n\n async sinter<T = unknown>(keys: string[]): Promise<(T | null)[]> {\n return array(await this.client.command(\"SINTER\", ...keys)).map((item) => decode<T>(this.client.codec, item));\n }\n\n async sunion<T = unknown>(keys: string[]): Promise<(T | null)[]> {\n return array(await this.client.command(\"SUNION\", ...keys)).map((item) => decode<T>(this.client.codec, item));\n }\n\n async sdiffstore(destination: string, keys: string[]): Promise<number> {\n return number(await this.client.command(\"SDIFFSTORE\", destination, ...keys));\n }\n\n async sinterstore(destination: string, keys: string[]): Promise<number> {\n return number(await this.client.command(\"SINTERSTORE\", destination, ...keys));\n }\n\n async sunionstore(destination: string, keys: string[]): Promise<number> {\n return number(await this.client.command(\"SUNIONSTORE\", destination, ...keys));\n }\n\n async sintercard(keys: string[], limit?: number): Promise<number> {\n return number(await this.client.command(\"SINTERCARD\", keys.length, ...keys, ...(limit == null ? [] : [\"LIMIT\", limit])));\n }\n\n async smove(source: string, destination: string, member: unknown): Promise<boolean> {\n return number(await this.client.command(\"SMOVE\", source, destination, encode(this.client.codec, member))) === 1;\n }\n\n async sscan(key: string, cursor: string | number, options: ScanOptions = {}): Promise<unknown> {\n return await this.client.command(\"SSCAN\", key, cursor, ...scanOptions(options));\n }\n}\n\nexport class SortedSetStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async zadd(key: string, members: ZAddMember[], options: ZAddOptions = {}): Promise<number> {\n const args: CommandArgument[] = [\"ZADD\", key, ...zaddOptions(options)];\n for (const member of members) {\n args.push(member.score, encode(this.client.codec, member.member));\n }\n return number(await this.client.command(...args));\n }\n\n async zscore(key: string, member: unknown): Promise<string | null> {\n const response = await this.client.command(\"ZSCORE\", key, encode(this.client.codec, member));\n return response == null ? null : string(response);\n }\n\n async zrank(key: string, member: unknown): Promise<number | null> {\n const response = await this.client.command(\"ZRANK\", key, encode(this.client.codec, member));\n return response == null ? null : number(response);\n }\n\n async zrevrank(key: string, member: unknown): Promise<number | null> {\n const response = await this.client.command(\"ZREVRANK\", key, encode(this.client.codec, member));\n return response == null ? null : number(response);\n }\n\n async zrange(key: string, start: number, stop: number, options: { withScores?: boolean } = {}): Promise<unknown[]> {\n return array(await this.client.command(\"ZRANGE\", key, start, stop, ...(options.withScores === true ? [\"WITHSCORES\"] : [])));\n }\n\n async zrevrange(key: string, start: number, stop: number, options: { withScores?: boolean } = {}): Promise<unknown[]> {\n return array(await this.client.command(\"ZREVRANGE\", key, start, stop, ...(options.withScores === true ? [\"WITHSCORES\"] : [])));\n }\n\n async zcard(key: string): Promise<number> {\n return number(await this.client.command(\"ZCARD\", key));\n }\n\n async zrem(key: string, ...members: unknown[]): Promise<number> {\n return number(await this.client.command(\"ZREM\", key, ...members.map((item) => encode(this.client.codec, item))));\n }\n\n async zincrby(key: string, increment: number, member: unknown): Promise<string> {\n return string(await this.client.command(\"ZINCRBY\", key, increment, encode(this.client.codec, member)));\n }\n\n async zcount(key: string, min: string | number, max: string | number): Promise<number> {\n return number(await this.client.command(\"ZCOUNT\", key, min, max));\n }\n\n async zpopmin(key: string, count?: number): Promise<unknown[]> {\n return array(await this.client.command(\"ZPOPMIN\", key, ...(count == null ? [] : [count])));\n }\n\n async zpopmax(key: string, count?: number): Promise<unknown[]> {\n return array(await this.client.command(\"ZPOPMAX\", key, ...(count == null ? [] : [count])));\n }\n\n async zrandmember(key: string, count?: number, withScores = false): Promise<unknown> {\n const args: CommandArgument[] = [\"ZRANDMEMBER\", key];\n if (count != null) args.push(count);\n if (withScores) args.push(\"WITHSCORES\");\n return await this.client.command(...args);\n }\n\n async zmscore(key: string, members: unknown[]): Promise<unknown[]> {\n return array(await this.client.command(\"ZMSCORE\", key, ...members.map((item) => encode(this.client.codec, item))));\n }\n\n async zrangebyscore(key: string, min: string | number, max: string | number, options: { withScores?: boolean; limit?: RangeLimit } = {}): Promise<unknown[]> {\n return array(await this.client.command(\"ZRANGEBYSCORE\", key, min, max, ...rangeScoreOptions(options)));\n }\n\n async zrevrangebyscore(key: string, max: string | number, min: string | number, options: { withScores?: boolean; limit?: RangeLimit } = {}): Promise<unknown[]> {\n return array(await this.client.command(\"ZREVRANGEBYSCORE\", key, max, min, ...rangeScoreOptions(options)));\n }\n\n async zscan(key: string, cursor: string | number, options: ScanOptions = {}): Promise<unknown> {\n return await this.client.command(\"ZSCAN\", key, cursor, ...scanOptions(options));\n }\n}\n\nexport class StreamStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async xadd(key: string, id: string, fields: Record<string, unknown> | [string, unknown][]): Promise<unknown> {\n return await this.client.command(\"XADD\", key, id, ...flattenKeyValues(this.client.codec, fields));\n }\n\n async xlen(key: string): Promise<number> {\n return number(await this.client.command(\"XLEN\", key));\n }\n\n async xrange(key: string, start = \"-\", end = \"+\", count?: number): Promise<unknown[]> {\n return array(await this.client.command(\"XRANGE\", key, start, end, ...(count == null ? [] : [\"COUNT\", count])));\n }\n\n async xrevrange(key: string, end = \"+\", start = \"-\", count?: number): Promise<unknown[]> {\n return array(await this.client.command(\"XREVRANGE\", key, end, start, ...(count == null ? [] : [\"COUNT\", count])));\n }\n\n async xread(streams: XReadStream[], options: { count?: number; blockMs?: number } = {}): Promise<unknown> {\n const args: CommandArgument[] = [\"XREAD\"];\n if (options.count != null) args.push(\"COUNT\", options.count);\n if (options.blockMs != null) args.push(\"BLOCK\", options.blockMs);\n args.push(\"STREAMS\", ...streams.map((stream) => stream.key), ...streams.map((stream) => stream.id));\n return await this.client.command(...args);\n }\n\n async xtrim(key: string, strategy: \"MAXLEN\" | \"MINID\", threshold: string | number, approximate = false): Promise<number> {\n return number(await this.client.command(\"XTRIM\", key, strategy, ...(approximate ? [\"~\"] : []), threshold));\n }\n\n async xdel(key: string, ...ids: string[]): Promise<number> {\n return number(await this.client.command(\"XDEL\", key, ...ids));\n }\n\n async xinfoStream(key: string): Promise<unknown> {\n return await this.client.command(\"XINFO\", \"STREAM\", key);\n }\n\n async xgroupCreate(key: string, group: string, id: string, mkstream = false): Promise<boolean> {\n return okResponse(await this.client.command(\"XGROUP\", \"CREATE\", key, group, id, ...(mkstream ? [\"MKSTREAM\"] : [])));\n }\n\n async xreadgroup(group: string, consumer: string, streams: XReadStream[], options: { count?: number; blockMs?: number; noack?: boolean } = {}): Promise<unknown> {\n const args: CommandArgument[] = [\"XREADGROUP\", \"GROUP\", group, consumer];\n if (options.count != null) args.push(\"COUNT\", options.count);\n if (options.blockMs != null) args.push(\"BLOCK\", options.blockMs);\n if (options.noack === true) args.push(\"NOACK\");\n args.push(\"STREAMS\", ...streams.map((stream) => stream.key), ...streams.map((stream) => stream.id));\n return await this.client.command(...args);\n }\n\n async xack(key: string, group: string, ...ids: string[]): Promise<number> {\n return number(await this.client.command(\"XACK\", key, group, ...ids));\n }\n}\n\nexport class BitmapStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async setbit(key: string, offset: number, value: 0 | 1): Promise<number> {\n return number(await this.client.command(\"SETBIT\", key, offset, value));\n }\n\n async getbit(key: string, offset: number): Promise<number> {\n return number(await this.client.command(\"GETBIT\", key, offset));\n }\n\n async bitcount(key: string, start?: number, end?: number, unit?: \"BYTE\" | \"BIT\"): Promise<number> {\n return number(await this.client.command(\"BITCOUNT\", key, ...(start == null ? [] : end == null ? [start] : [start, end, ...(unit == null ? [] : [unit])])));\n }\n\n async bitpos(key: string, bit: 0 | 1, start?: number, end?: number, unit?: \"BYTE\" | \"BIT\"): Promise<number> {\n return number(await this.client.command(\"BITPOS\", key, bit, ...(start == null ? [] : end == null ? [start] : [start, end, ...(unit == null ? [] : [unit])])));\n }\n\n async bitop(operation: \"AND\" | \"OR\" | \"XOR\" | \"NOT\", destination: string, ...keys: string[]): Promise<number> {\n return number(await this.client.command(\"BITOP\", operation, destination, ...keys));\n }\n}\n\nexport class HyperLogLogStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async pfadd(key: string, ...elements: unknown[]): Promise<number> {\n return number(await this.client.command(\"PFADD\", key, ...elements.map((item) => encode(this.client.codec, item))));\n }\n\n async pfcount(...keys: string[]): Promise<number> {\n return number(await this.client.command(\"PFCOUNT\", ...keys));\n }\n\n async pfmerge(destination: string, ...sources: string[]): Promise<boolean> {\n return okResponse(await this.client.command(\"PFMERGE\", destination, ...sources));\n }\n}\n\nexport class GeoStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async geoadd(key: string, members: GeoMember[], options: GeoAddOptions = {}): Promise<number> {\n const args: CommandArgument[] = [\"GEOADD\", key, ...geoAddOptions(options)];\n for (const item of members) {\n args.push(item.longitude, item.latitude, encode(this.client.codec, item.member));\n }\n return number(await this.client.command(...args));\n }\n\n async geopos(key: string, ...members: unknown[]): Promise<unknown[]> {\n return array(await this.client.command(\"GEOPOS\", key, ...members.map((item) => encode(this.client.codec, item))));\n }\n\n async geodist(key: string, member1: unknown, member2: unknown, unit?: \"m\" | \"km\" | \"mi\" | \"ft\"): Promise<string | null> {\n const response = await this.client.command(\"GEODIST\", key, encode(this.client.codec, member1), encode(this.client.codec, member2), ...(unit == null ? [] : [unit]));\n return response == null ? null : string(response);\n }\n\n async geohash(key: string, ...members: unknown[]): Promise<unknown[]> {\n return array(await this.client.command(\"GEOHASH\", key, ...members.map((item) => encode(this.client.codec, item))));\n }\n\n async geosearch(key: string, args: CommandArgument[]): Promise<unknown[]> {\n return array(await this.client.command(\"GEOSEARCH\", key, ...args));\n }\n\n async geosearchstore(destination: string, source: string, args: CommandArgument[]): Promise<number> {\n return number(await this.client.command(\"GEOSEARCHSTORE\", destination, source, ...args));\n }\n}\n\nfunction encode(codec: Codec, value: unknown): Buffer {\n return codec.encode(value);\n}\n\nfunction decode<T>(codec: Codec, value: unknown): T | null {\n if (value == null) return null;\n if (Buffer.isBuffer(value)) return codec.decode(value) as T | null;\n if (value instanceof Uint8Array) return codec.decode(Buffer.from(value)) as T | null;\n return value as T;\n}\n\nfunction number(value: unknown): number {\n return Number(value);\n}\n\nfunction string(value: unknown): string {\n return Buffer.isBuffer(value) ? value.toString(\"utf8\") : String(value);\n}\n\nfunction array(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction flattenKeyValues(codec: Codec, entries: Record<string, unknown> | [string, unknown][]): CommandArgument[] {\n const pairs = Array.isArray(entries) ? entries : Object.entries(entries);\n return pairs.flatMap(([key, value]) => [key, codec.encode(value)]);\n}\n\nfunction setOptions(options: SetOptions): CommandArgument[] {\n const args: CommandArgument[] = [];\n if (options.ex != null) args.push(\"EX\", options.ex);\n if (options.px != null) args.push(\"PX\", options.px);\n if (options.exat != null) args.push(\"EXAT\", options.exat);\n if (options.pxat != null) args.push(\"PXAT\", options.pxat);\n if (options.nx === true) args.push(\"NX\");\n if (options.xx === true) args.push(\"XX\");\n if (options.get === true) args.push(\"GET\");\n if (options.keepTtl === true) args.push(\"KEEPTTL\");\n return args;\n}\n\nfunction getexOptions(options: GetExOptions): CommandArgument[] {\n if (options.persist === true) return [\"PERSIST\"];\n if (options.ex != null) return [\"EX\", options.ex];\n if (options.px != null) return [\"PX\", options.px];\n if (options.exat != null) return [\"EXAT\", options.exat];\n if (options.pxat != null) return [\"PXAT\", options.pxat];\n return [];\n}\n\nfunction scanOptions(options: ScanOptions): CommandArgument[] {\n const args: CommandArgument[] = [];\n if (options.match != null) args.push(\"MATCH\", options.match);\n if (options.count != null) args.push(\"COUNT\", options.count);\n return args;\n}\n\nfunction zaddOptions(options: ZAddOptions): CommandArgument[] {\n const args: CommandArgument[] = [];\n if (options.nx === true) args.push(\"NX\");\n if (options.xx === true) args.push(\"XX\");\n if (options.gt === true) args.push(\"GT\");\n if (options.lt === true) args.push(\"LT\");\n if (options.ch === true) args.push(\"CH\");\n return args;\n}\n\nfunction geoAddOptions(options: GeoAddOptions): CommandArgument[] {\n const args: CommandArgument[] = [];\n if (options.nx === true) args.push(\"NX\");\n if (options.xx === true) args.push(\"XX\");\n if (options.ch === true) args.push(\"CH\");\n return args;\n}\n\nfunction rangeScoreOptions(options: { withScores?: boolean; limit?: RangeLimit }): CommandArgument[] {\n const args: CommandArgument[] = [];\n if (options.withScores === true) args.push(\"WITHSCORES\");\n if (options.limit != null) args.push(\"LIMIT\", options.limit.offset, options.limit.count);\n return args;\n}\n","import { okResponse, type CommandArgument } from \"./internal.js\";\nimport type { StoreCommandClient } from \"./store.js\";\n\nexport interface TopKReserveOptions {\n width?: number;\n depth?: number;\n decay?: number;\n}\n\nexport interface CountMinMergeOptions {\n weights?: number[];\n}\n\nexport interface TDigestCreateOptions {\n compression?: number;\n}\n\nexport interface TDigestMergeOptions extends TDigestCreateOptions {\n override?: boolean;\n}\n\nexport interface JsonSetOptions {\n nx?: boolean;\n xx?: boolean;\n}\n\nexport class BloomFilterStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async reserve(key: string, errorRate: number, capacity: number): Promise<boolean> {\n return okResponse(await this.client.command(\"BF.RESERVE\", key, errorRate, capacity));\n }\n\n async add(key: string, element: unknown): Promise<boolean> {\n return number(await this.client.command(\"BF.ADD\", key, encode(this.client, element))) === 1;\n }\n\n async madd(key: string, ...elements: unknown[]): Promise<number[]> {\n return array(await this.client.command(\"BF.MADD\", key, ...elements.map((item) => encode(this.client, item)))).map(number);\n }\n\n async exists(key: string, element: unknown): Promise<boolean> {\n return number(await this.client.command(\"BF.EXISTS\", key, encode(this.client, element))) === 1;\n }\n\n async mexists(key: string, ...elements: unknown[]): Promise<number[]> {\n return array(await this.client.command(\"BF.MEXISTS\", key, ...elements.map((item) => encode(this.client, item)))).map(number);\n }\n\n async card(key: string): Promise<number> {\n return number(await this.client.command(\"BF.CARD\", key));\n }\n\n async info(key: string): Promise<unknown[]> {\n return array(await this.client.command(\"BF.INFO\", key));\n }\n}\n\nexport class CuckooFilterStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async reserve(key: string, capacity: number): Promise<boolean> {\n return okResponse(await this.client.command(\"CF.RESERVE\", key, capacity));\n }\n\n async add(key: string, element: unknown): Promise<boolean> {\n return number(await this.client.command(\"CF.ADD\", key, encode(this.client, element))) === 1;\n }\n\n async addnx(key: string, element: unknown): Promise<boolean> {\n return number(await this.client.command(\"CF.ADDNX\", key, encode(this.client, element))) === 1;\n }\n\n async del(key: string, element: unknown): Promise<boolean> {\n return number(await this.client.command(\"CF.DEL\", key, encode(this.client, element))) === 1;\n }\n\n async exists(key: string, element: unknown): Promise<boolean> {\n return number(await this.client.command(\"CF.EXISTS\", key, encode(this.client, element))) === 1;\n }\n\n async mexists(key: string, ...elements: unknown[]): Promise<number[]> {\n return array(await this.client.command(\"CF.MEXISTS\", key, ...elements.map((item) => encode(this.client, item)))).map(number);\n }\n\n async count(key: string, element: unknown): Promise<number> {\n return number(await this.client.command(\"CF.COUNT\", key, encode(this.client, element)));\n }\n\n async info(key: string): Promise<unknown[]> {\n return array(await this.client.command(\"CF.INFO\", key));\n }\n}\n\nexport class CountMinSketchStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async initByDim(key: string, width: number, depth: number): Promise<boolean> {\n return okResponse(await this.client.command(\"CMS.INITBYDIM\", key, width, depth));\n }\n\n async initByProb(key: string, error: number, probability: number): Promise<boolean> {\n return okResponse(await this.client.command(\"CMS.INITBYPROB\", key, error, probability));\n }\n\n async incrBy(key: string, entries: [unknown, number][]): Promise<number[]> {\n return array(await this.client.command(\"CMS.INCRBY\", key, ...flattenEntries(this.client, entries))).map(number);\n }\n\n async query(key: string, ...items: unknown[]): Promise<number[]> {\n return array(await this.client.command(\"CMS.QUERY\", key, ...items.map((item) => encode(this.client, item)))).map(number);\n }\n\n async merge(destination: string, sources: string[], options: CountMinMergeOptions = {}): Promise<boolean> {\n const args: CommandArgument[] = [\"CMS.MERGE\", destination, sources.length, ...sources];\n if (options.weights != null) {\n args.push(\"WEIGHTS\", ...options.weights);\n }\n return okResponse(await this.client.command(...args));\n }\n\n async info(key: string): Promise<unknown[]> {\n return array(await this.client.command(\"CMS.INFO\", key));\n }\n}\n\nexport class TopKStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async reserve(key: string, k: number, options: TopKReserveOptions = {}): Promise<boolean> {\n const args: CommandArgument[] = [\"TOPK.RESERVE\", key, k];\n if (options.width != null) {\n args.push(options.width);\n if (options.depth != null) {\n args.push(options.depth);\n if (options.decay != null) {\n args.push(options.decay);\n }\n }\n }\n return okResponse(await this.client.command(...args));\n }\n\n async add<T = unknown>(key: string, ...elements: unknown[]): Promise<(T | null)[]> {\n return array(await this.client.command(\"TOPK.ADD\", key, ...elements.map((item) => encode(this.client, item)))).map((item) =>\n decode<T>(this.client, item)\n );\n }\n\n async incrBy<T = unknown>(key: string, entries: [unknown, number][]): Promise<(T | null)[]> {\n return array(await this.client.command(\"TOPK.INCRBY\", key, ...flattenEntries(this.client, entries))).map((item) =>\n decode<T>(this.client, item)\n );\n }\n\n async query(key: string, ...elements: unknown[]): Promise<number[]> {\n return array(await this.client.command(\"TOPK.QUERY\", key, ...elements.map((item) => encode(this.client, item)))).map(number);\n }\n\n async list<T = unknown>(key: string, options: { withCount?: boolean } = {}): Promise<(T | number | null)[]> {\n return array(await this.client.command(\"TOPK.LIST\", key, ...(options.withCount === true ? [\"WITHCOUNT\"] : []))).map((item, index) =>\n options.withCount === true && index % 2 === 1 ? number(item) : decode<T>(this.client, item)\n );\n }\n\n async info(key: string): Promise<unknown[]> {\n return array(await this.client.command(\"TOPK.INFO\", key));\n }\n}\n\nexport class TDigestStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async create(key: string, options: TDigestCreateOptions = {}): Promise<boolean> {\n return okResponse(await this.client.command(\"TDIGEST.CREATE\", key, ...compressionOptions(options)));\n }\n\n async add(key: string, ...values: number[]): Promise<boolean> {\n return okResponse(await this.client.command(\"TDIGEST.ADD\", key, ...values));\n }\n\n async reset(key: string): Promise<boolean> {\n return okResponse(await this.client.command(\"TDIGEST.RESET\", key));\n }\n\n async quantile(key: string, ...quantiles: number[]): Promise<string[]> {\n return array(await this.client.command(\"TDIGEST.QUANTILE\", key, ...quantiles)).map(string);\n }\n\n async cdf(key: string, ...values: number[]): Promise<string[]> {\n return array(await this.client.command(\"TDIGEST.CDF\", key, ...values)).map(string);\n }\n\n async rank(key: string, ...values: number[]): Promise<number[]> {\n return array(await this.client.command(\"TDIGEST.RANK\", key, ...values)).map(number);\n }\n\n async revrank(key: string, ...values: number[]): Promise<number[]> {\n return array(await this.client.command(\"TDIGEST.REVRANK\", key, ...values)).map(number);\n }\n\n async byrank(key: string, ...ranks: number[]): Promise<string[]> {\n return array(await this.client.command(\"TDIGEST.BYRANK\", key, ...ranks)).map(string);\n }\n\n async byrevrank(key: string, ...ranks: number[]): Promise<string[]> {\n return array(await this.client.command(\"TDIGEST.BYREVRANK\", key, ...ranks)).map(string);\n }\n\n async trimmedMean(key: string, low: number, high: number): Promise<string> {\n return string(await this.client.command(\"TDIGEST.TRIMMED_MEAN\", key, low, high));\n }\n\n async min(key: string): Promise<string> {\n return string(await this.client.command(\"TDIGEST.MIN\", key));\n }\n\n async max(key: string): Promise<string> {\n return string(await this.client.command(\"TDIGEST.MAX\", key));\n }\n\n async info(key: string): Promise<unknown[]> {\n return array(await this.client.command(\"TDIGEST.INFO\", key));\n }\n\n async merge(destination: string, sources: string[], options: TDigestMergeOptions = {}): Promise<boolean> {\n return okResponse(\n await this.client.command(\n \"TDIGEST.MERGE\",\n destination,\n sources.length,\n ...sources,\n ...compressionOptions(options),\n ...(options.override === true ? [\"OVERRIDE\"] : [])\n )\n );\n }\n}\n\nexport class JsonStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async set(key: string, path: string, value: unknown, options: JsonSetOptions = {}): Promise<boolean> {\n const response = await this.client.command(\n \"JSON.SET\",\n key,\n path,\n JSON.stringify(value),\n ...(options.nx === true ? [\"NX\"] : options.xx === true ? [\"XX\"] : [])\n );\n return okResponse(response);\n }\n\n async get<T = unknown>(key: string, paths: string | string[] = \"$\"): Promise<T | null> {\n const response = await this.client.command(\"JSON.GET\", key, ...toArray(paths));\n return parseJson<T>(response);\n }\n\n async del(key: string, path?: string): Promise<number> {\n return number(await this.client.command(\"JSON.DEL\", key, ...(path == null ? [] : [path])));\n }\n\n async numIncrBy(key: string, path: string, value: number): Promise<string> {\n return string(await this.client.command(\"JSON.NUMINCRBY\", key, path, value));\n }\n\n async type(key: string, path?: string): Promise<string | null> {\n const response = await this.client.command(\"JSON.TYPE\", key, ...(path == null ? [] : [path]));\n return response == null ? null : string(response);\n }\n\n async strlen(key: string, path?: string): Promise<number | null> {\n const response = await this.client.command(\"JSON.STRLEN\", key, ...(path == null ? [] : [path]));\n return response == null ? null : number(response);\n }\n\n async objKeys(key: string, path?: string): Promise<unknown[]> {\n return array(await this.client.command(\"JSON.OBJKEYS\", key, ...(path == null ? [] : [path])));\n }\n\n async objLen(key: string, path?: string): Promise<number> {\n return number(await this.client.command(\"JSON.OBJLEN\", key, ...(path == null ? [] : [path])));\n }\n\n async arrAppend(key: string, path: string, ...values: unknown[]): Promise<number> {\n return number(await this.client.command(\"JSON.ARRAPPEND\", key, path, ...values.map((value) => JSON.stringify(value))));\n }\n\n async arrLen(key: string, path?: string): Promise<number> {\n return number(await this.client.command(\"JSON.ARRLEN\", key, ...(path == null ? [] : [path])));\n }\n\n async toggle(key: string, path: string): Promise<number> {\n return number(await this.client.command(\"JSON.TOGGLE\", key, path));\n }\n\n async clear(key: string, path?: string): Promise<number> {\n return number(await this.client.command(\"JSON.CLEAR\", key, ...(path == null ? [] : [path])));\n }\n\n async mget<T = unknown>(keys: string[], path: string): Promise<(T | null)[]> {\n return array(await this.client.command(\"JSON.MGET\", ...keys, path)).map((item) => parseJson<T>(item));\n }\n}\n\nfunction encode(client: StoreCommandClient, value: unknown): Buffer {\n return client.codec.encode(value);\n}\n\nfunction decode<T>(client: StoreCommandClient, value: unknown): T | null {\n if (value == null) return null;\n if (Buffer.isBuffer(value)) return client.codec.decode(value) as T | null;\n if (value instanceof Uint8Array) return client.codec.decode(Buffer.from(value)) as T | null;\n return value as T;\n}\n\nfunction number(value: unknown): number {\n return Number(value);\n}\n\nfunction string(value: unknown): string {\n return Buffer.isBuffer(value) ? value.toString(\"utf8\") : String(value);\n}\n\nfunction array(value: unknown): unknown[] {\n return Array.isArray(value) ? value : [];\n}\n\nfunction flattenEntries(client: StoreCommandClient, entries: [unknown, number][]): CommandArgument[] {\n return entries.flatMap(([item, value]) => [encode(client, item), value]);\n}\n\nfunction compressionOptions(options: TDigestCreateOptions): CommandArgument[] {\n return options.compression == null ? [] : [\"COMPRESSION\", options.compression];\n}\n\nfunction toArray<T>(value: T | T[]): T[] {\n return Array.isArray(value) ? value : [value];\n}\n\nfunction parseJson<T>(value: unknown): T | null {\n if (value == null) return null;\n const text = string(value);\n return JSON.parse(text) as T;\n}\n","import type { Codec } from \"./codecs.js\";\nimport { bytes, field, integer, normalizeRefMeta, optionalString, text, toStringKeyMap } from \"./internal.js\";\n\nexport type ExceptionPolicy = \"retry\" | \"fail\" | \"raise\";\nexport type BackoffKind = \"fixed\" | \"linear\" | \"exponential\";\nexport type WorkerProfile = \"latency\" | \"throughput\";\n\nexport interface RetryPolicy {\n maxRetries?: number;\n backoff?: BackoffKind | string;\n baseMs?: number;\n maxMs?: number;\n jitterPct?: number;\n exhaustedTo?: string;\n}\n\nexport interface BackpressurePolicy {\n maxRetries?: number;\n baseDelayMs?: number;\n maxDelayMs?: number;\n jitterPct?: number;\n}\n\nexport interface ValueConfig {\n valueMaxBytes?: number;\n localCache?: boolean;\n}\n\nexport interface WorkerConfig {\n profile?: WorkerProfile;\n workers?: number;\n concurrency?: number;\n batchSize?: number;\n leaseMs?: number;\n priority?: number;\n nowMs?: number;\n partitionKey?: string;\n partitionKeys?: string[];\n reclaimExpired?: boolean;\n reclaimRatio?: number;\n claimPayload?: boolean;\n claimValues?: string[];\n valueMaxBytes?: number;\n blockMs?: number;\n idleSleepMs?: number;\n maxIdleSleepMs?: number;\n exceptionPolicy?: ExceptionPolicy;\n completeAsyncDepth?: number;\n completeIndependent?: boolean;\n claimDrainBatches?: number;\n signal?: AbortSignal;\n worker?: string;\n}\n\nexport interface ChildSpec {\n id: string;\n type: string;\n payload?: unknown;\n partitionKey?: string;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n}\n\nexport type StateMetaValue = string | number | boolean | Buffer;\nexport type StateMeta = Record<string, StateMetaValue>;\n\nexport interface CreateItem {\n id: string;\n payload?: unknown;\n partitionKey?: string;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n stateMeta?: StateMeta;\n}\n\n/** @internal */\nexport const CLAIMED_ITEM_WIRE: unique symbol = Symbol(\"ferricstore.claimedItemWire\");\n\n/** @internal */\nexport interface ClaimedItemWire {\n id: Buffer;\n partitionKey?: Buffer | null;\n leaseToken: Buffer;\n fencingToken: number;\n}\n\nexport interface ClaimedItem<TPayload = unknown> {\n id: string;\n leaseToken: Buffer;\n fencingToken: number;\n partitionKey?: string;\n type: string;\n state: string;\n runState?: string;\n payload?: TPayload | null;\n attributes?: Record<string, unknown>;\n /** @internal */\n [CLAIMED_ITEM_WIRE]?: ClaimedItemWire;\n}\n\nexport interface FencedItem {\n id: string;\n fencingToken: number;\n leaseToken?: Buffer;\n partitionKey?: string;\n}\n\nexport interface RateLimitResult {\n status: string;\n count: number;\n remaining: number;\n resetMs: number;\n allowed: boolean;\n}\n\nexport interface KeyInfo {\n type: string;\n valueSize: number;\n ttlMs: number;\n hotCacheStatus: string;\n lastWriteShard: number;\n raw: Record<string, unknown>;\n}\n\nexport interface FetchOrComputeResult<T = unknown> {\n status: \"hit\" | \"compute\" | string;\n value?: T | null;\n computeToken?: Buffer;\n hit: boolean;\n shouldCompute: boolean;\n}\n\nexport interface FlowRecord<TPayload = unknown> {\n id: string;\n type: string;\n state: string;\n partitionKey: string;\n runState?: string;\n payload?: TPayload | null;\n leaseToken: Buffer;\n fencingToken: number;\n version: number;\n parentFlowId?: string;\n rootFlowId?: string;\n correlationId?: string;\n valueRefs?: Record<string, unknown>;\n values?: Record<string, unknown>;\n valueSizes?: Record<string, unknown>;\n valueOmitted?: Record<string, unknown>;\n valueMissing?: Record<string, unknown>;\n attributes?: Record<string, unknown>;\n stateMeta?: Record<string, unknown>;\n indexedStateMeta?: string;\n raw?: unknown;\n}\n\nexport function normalizeExceptionPolicy(value: ExceptionPolicy | undefined): ExceptionPolicy {\n if (value == null) {\n return \"retry\";\n }\n if (value === \"retry\" || value === \"fail\" || value === \"raise\") {\n return value;\n }\n throw new Error(\"exceptionPolicy must be 'retry', 'fail', or 'raise'\");\n}\n\nexport function claimedItemFromResp<TPayload = unknown>(\n value: unknown,\n codec?: Codec\n): ClaimedItem<TPayload> {\n if (Array.isArray(value)) {\n const tuple = value as unknown[];\n const id = bytes(tuple[0]);\n const partition = tuple[1] == null ? null : bytes(tuple[1]);\n const leaseToken = bytes(tuple[2]);\n const fencingToken = integer(tuple[3]);\n const attrs = tuple[5] ?? (isPlainObject(tuple[4]) ? tuple[4] : undefined);\n const item: ClaimedItem<TPayload> = {\n id: text(id),\n partitionKey: optionalString(partition),\n leaseToken,\n fencingToken,\n runState: optionalString(tuple[4]),\n attributes: isPlainObject(attrs) ? attrs : undefined,\n type: \"\",\n state: \"running\"\n };\n Object.defineProperty(item, CLAIMED_ITEM_WIRE, {\n enumerable: false,\n value: { id, partitionKey: partition, leaseToken, fencingToken }\n });\n return item;\n }\n\n const payload = field(value, \"payload\");\n return {\n id: text(field(value, \"id\") ?? \"\"),\n leaseToken: bytes(field(value, \"lease_token\")),\n fencingToken: integer(field(value, \"fencing_token\")),\n partitionKey: optionalString(field(value, \"partition_key\")),\n type: text(field(value, \"type\") ?? \"\"),\n state: optionalString(field(value, \"state\")) ?? \"running\",\n runState: optionalString(field(value, \"run_state\")),\n attributes: plainObjectField(value, \"attributes\"),\n payload: payload == null ? undefined : (decodePayload(codec, payload) as TPayload | null)\n };\n}\n\nexport function flowRecordFromResp<TPayload = unknown>(\n value: unknown,\n codec?: Codec\n): FlowRecord<TPayload> {\n const payload = field(value, \"payload\");\n const values = decodeValues(field(value, \"values\"), codec);\n\n return {\n id: text(field(value, \"id\") ?? \"\"),\n type: text(field(value, \"type\") ?? \"\"),\n state: text(field(value, \"state\") ?? \"\"),\n partitionKey: text(field(value, \"partition_key\") ?? \"\"),\n runState: optionalString(field(value, \"run_state\")),\n payload: payload == null ? undefined : (decodePayload(codec, payload) as TPayload | null),\n leaseToken: bytes(field(value, \"lease_token\")),\n fencingToken: integer(field(value, \"fencing_token\")),\n version: integer(field(value, \"version\")),\n parentFlowId: optionalString(field(value, \"parent_flow_id\")),\n rootFlowId: optionalString(field(value, \"root_flow_id\")),\n correlationId: optionalString(field(value, \"correlation_id\")),\n valueRefs: toStringKeyMap(field(value, \"value_refs\")),\n values,\n valueSizes: toStringKeyMap(field(value, \"value_sizes\")),\n valueOmitted: toStringKeyMap(field(value, \"value_omitted\")),\n valueMissing: toStringKeyMap(field(value, \"value_missing\")),\n attributes: plainObjectField(value, \"attributes\"),\n stateMeta: toStringKeyMap(field(value, \"state_meta\")),\n indexedStateMeta: optionalString(field(value, \"indexed_state_meta\")),\n raw: value\n };\n}\n\nexport function rateLimitResultFromResp(value: unknown): RateLimitResult {\n if (!Array.isArray(value)) {\n throw new TypeError(\"RATELIMIT.ADD returned an unexpected response\");\n }\n const status = text(value[0]);\n return {\n status,\n count: integer(value[1]),\n remaining: integer(value[2]),\n resetMs: integer(value[3]),\n allowed: status === \"allowed\"\n };\n}\n\nexport function keyInfoFromResp(value: unknown): KeyInfo {\n const raw = toStringKeyMap(value) ?? {};\n return {\n type: text(raw.type ?? \"\"),\n valueSize: integer(raw.value_size),\n ttlMs: integer(raw.ttl_ms),\n hotCacheStatus: text(raw.hot_cache_status ?? \"\"),\n lastWriteShard: integer(raw.last_write_shard),\n raw\n };\n}\n\nexport function fetchOrComputeResultFromResp<T = unknown>(\n value: unknown,\n codec: Codec\n): FetchOrComputeResult<T> {\n if (!Array.isArray(value)) {\n throw new TypeError(\"FETCH_OR_COMPUTE returned an unexpected response\");\n }\n const status = text(value[0]);\n if (status === \"hit\") {\n return {\n status,\n value: decodePayload(codec, value[1]) as T | null,\n hit: true,\n shouldCompute: false\n };\n }\n return {\n status,\n computeToken: bytes(value[1]),\n hit: false,\n shouldCompute: true\n };\n}\n\nfunction decodePayload(codec: Codec | undefined, value: unknown): unknown {\n if (value == null) {\n return null;\n }\n if (Buffer.isBuffer(value)) {\n return codec?.decode(value) ?? value;\n }\n if (value instanceof Uint8Array) {\n const buffer = Buffer.from(value);\n return codec?.decode(buffer) ?? buffer;\n }\n return normalizeRefMeta(value);\n}\n\nfunction decodeValues(value: unknown, codec: Codec | undefined): Record<string, unknown> | undefined {\n const map = toStringKeyMap(value);\n if (map == null) {\n return undefined;\n }\n\n const decoded: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(map)) {\n decoded[key] = decodePayload(codec, item);\n }\n return decoded;\n}\n\nfunction plainObjectField(value: unknown, key: string): Record<string, unknown> | undefined {\n const item = field(value, key);\n return isPlainObject(item) ? item : undefined;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value != null && !Buffer.isBuffer(value) && !(value instanceof Uint8Array) && !Array.isArray(value);\n}\n","import type { Codec } from \"./codecs.js\";\nimport { RawCodec } from \"./codecs.js\";\nimport { OverloadedError, mapException } from \"./errors.js\";\nimport {\n append,\n appendBool,\n appendEncoded,\n appendNamedValues,\n appendValueReturn,\n arrayResponse,\n autoPartitionKeyForId,\n expandManyResponse,\n nowMs,\n normalizeRefMeta,\n okResponse,\n parseKvResponse,\n sleep,\n text,\n type Command,\n type CommandArgument\n} from \"./internal.js\";\nimport {\n NativeAdapter,\n ReconnectingExecutor,\n type CommandExecutor,\n type ExecutePipelineOptions,\n type NativeAdapterOptions,\n type ReconnectOptions\n} from \"./adapters.js\";\nimport {\n TopologyNativeAdapterPool,\n type RoutingRoute,\n type RoutingTopology\n} from \"./topology.js\";\nimport {\n BitmapStore,\n GeoStore,\n HashStore,\n HyperLogLogStore,\n KeyValueStore,\n ListStore,\n SetStore,\n SortedSetStore,\n StreamStore\n} from \"./store.js\";\nimport {\n BloomFilterStore,\n CountMinSketchStore,\n CuckooFilterStore,\n JsonStore,\n TDigestStore,\n TopKStore\n} from \"./modules.js\";\nimport {\n CLAIMED_ITEM_WIRE,\n claimedItemFromResp,\n fetchOrComputeResultFromResp,\n flowRecordFromResp,\n keyInfoFromResp,\n rateLimitResultFromResp,\n type BackpressurePolicy,\n type ChildSpec,\n type ClaimedItem,\n type CreateItem,\n type FencedItem,\n type FetchOrComputeResult,\n type FlowRecord,\n type KeyInfo,\n type RateLimitResult,\n type RetryPolicy,\n type StateMeta\n} from \"./types.js\";\n\nexport interface AutoBatchOptions {\n enabled?: boolean;\n maxCommands?: number;\n maxDelayMs?: number;\n mode?: \"safe\" | \"all\";\n}\n\nexport interface FerricStoreClientOptions {\n autoBatch?: boolean | AutoBatchOptions;\n codec?: Codec;\n backpressure?: BackpressurePolicy;\n}\n\nexport interface FerricStoreClientFromUrlOptions extends FerricStoreClientOptions {\n nativeOptions?: NativeAdapterOptions;\n reconnect?: boolean | ReconnectOptions;\n}\n\nexport interface CreateOptions {\n type: string;\n state?: string;\n payload?: unknown;\n partitionKey?: string;\n parentFlowId?: string;\n rootFlowId?: string;\n correlationId?: string;\n runAtMs?: number;\n nowMs?: number;\n priority?: number;\n idempotent?: boolean;\n retentionTtlMs?: number;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n stateMeta?: StateMeta;\n returnRecord?: boolean;\n}\n\nexport interface CreateManyOptions extends Omit<CreateOptions, \"payload\" | \"partitionKey\" | \"returnRecord\"> {\n partitionKey?: string;\n independent?: boolean;\n}\n\nexport interface ClaimDueOptions {\n state?: string;\n states?: string[];\n worker: string;\n partitionKey?: string;\n partitionKeys?: string[];\n leaseMs?: number;\n limit?: number;\n priority?: number;\n nowMs?: number;\n blockMs?: number;\n reclaimExpired?: boolean;\n reclaimRatio?: number;\n jobOnly?: boolean;\n payload?: boolean;\n payloadMaxBytes?: number;\n values?: string[];\n valueMaxBytes?: number;\n includeState?: boolean;\n}\n\nexport interface ReclaimOptions extends Omit<ClaimDueOptions, \"state\" | \"states\" | \"blockMs\" | \"reclaimExpired\" | \"reclaimRatio\" | \"includeState\"> {\n state?: \"running\";\n}\n\nexport type FlowStateMode = \"fifo\" | \"parallel\";\n\nexport interface FlowStatePolicy {\n mode?: FlowStateMode;\n retry?: RetryPolicy;\n}\n\nexport type FlowStatePolicyLike = FlowStatePolicy | RetryPolicy;\n\nexport interface FlowPolicyOptions {\n state?: string;\n mode?: FlowStateMode;\n retry?: RetryPolicy;\n states?: Record<string, FlowStatePolicyLike>;\n retentionTtlMs?: number;\n indexedStateMeta?: string;\n}\n\nexport interface RequestContext {\n subject?: string;\n tenant?: string;\n scopes?: string | readonly string[];\n}\n\nexport interface RequestContextOptions {\n requestContext?: RequestContext;\n}\n\nexport interface InvocationCreateOptions extends RequestContextOptions {\n context?: Record<string, unknown>;\n idempotencyKey?: string;\n}\n\nexport interface MutateOptions {\n partitionKey?: string;\n payload?: unknown;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n dropValues?: string[];\n overrideValues?: string[];\n stateMeta?: StateMeta;\n nowMs?: number;\n returnRecord?: boolean;\n}\n\nexport interface LeaseMutationOptions extends MutateOptions {\n leaseToken: Buffer;\n fencingToken: number;\n}\n\nexport interface TransitionOptions extends LeaseMutationOptions {\n fromState: string;\n toState: string;\n runAtMs?: number;\n priority?: number;\n}\n\nexport interface CompleteOptions extends LeaseMutationOptions {\n result?: unknown;\n ttlMs?: number;\n}\n\nexport interface RetryOptions extends LeaseMutationOptions {\n error?: unknown;\n runAtMs?: number;\n}\n\nexport interface FailOptions extends LeaseMutationOptions {\n error?: unknown;\n ttlMs?: number;\n}\n\nexport interface CancelOptions {\n fencingToken: number;\n leaseToken?: Buffer;\n partitionKey?: string;\n reason?: unknown;\n ttlMs?: number;\n nowMs?: number;\n stateMeta?: StateMeta;\n returnRecord?: boolean;\n}\n\nexport interface ReadOptions {\n partitionKey?: string;\n count?: number;\n fromMs?: number;\n toMs?: number;\n rev?: boolean;\n state?: string;\n terminalOnly?: boolean;\n includeCold?: boolean;\n consistentProjection?: boolean;\n}\n\nexport type SearchStateMeta = StateMeta | Record<string, StateMeta>;\n\nexport interface SearchOptions extends ReadOptions {\n attributes?: Record<string, CommandArgument>;\n stateMeta?: SearchStateMeta;\n}\n\nexport type ManagementPairs = Record<string, CommandArgument>;\n\nexport class FerricStoreClient {\n readonly executor: CommandExecutor;\n readonly codec: Codec;\n readonly backpressure: Required<BackpressurePolicy>;\n readonly bitmap: BitmapStore;\n readonly bloom: BloomFilterStore;\n readonly cms: CountMinSketchStore;\n readonly cuckoo: CuckooFilterStore;\n readonly geo: GeoStore;\n readonly hash: HashStore;\n readonly hyperloglog: HyperLogLogStore;\n readonly json: JsonStore;\n readonly kv: KeyValueStore;\n readonly lists: ListStore;\n readonly sets: SetStore;\n readonly stream: StreamStore;\n readonly tdigest: TDigestStore;\n readonly topk: TopKStore;\n readonly zset: SortedSetStore;\n\n constructor(executor: CommandExecutor, options: FerricStoreClientOptions = {}) {\n const mapped = new ErrorMappingExecutor(executor);\n this.executor = maybeAutoBatchExecutor(mapped, options.autoBatch);\n this.codec = options.codec ?? new RawCodec();\n this.backpressure = {\n baseDelayMs: options.backpressure?.baseDelayMs ?? 25,\n jitterPct: options.backpressure?.jitterPct ?? 20,\n maxDelayMs: options.backpressure?.maxDelayMs ?? 1_000,\n maxRetries: options.backpressure?.maxRetries ?? 8\n };\n this.bitmap = new BitmapStore(this);\n this.bloom = new BloomFilterStore(this);\n this.cms = new CountMinSketchStore(this);\n this.cuckoo = new CuckooFilterStore(this);\n this.geo = new GeoStore(this);\n this.hash = new HashStore(this);\n this.hyperloglog = new HyperLogLogStore(this);\n this.json = new JsonStore(this);\n this.kv = new KeyValueStore(this);\n this.lists = new ListStore(this);\n this.sets = new SetStore(this);\n this.stream = new StreamStore(this);\n this.tdigest = new TDigestStore(this);\n this.topk = new TopKStore(this);\n this.zset = new SortedSetStore(this);\n }\n\n static async fromUrl(url: string, options: FerricStoreClientFromUrlOptions = {}): Promise<FerricStoreClient> {\n const reconnectOptions = options.reconnect ?? options.nativeOptions?.autoReconnect ?? true;\n const nativeOptions = options.nativeOptions ?? {};\n const seeds = nativeOptions.seeds ?? [];\n const createExecutor = async () =>\n nativeOptions.haRouting === true || seeds.length > 0\n ? await TopologyNativeAdapterPool.fromUrls([url, ...seeds], nativeOptions)\n : await NativeAdapter.fromUrl(url, nativeOptions);\n const executor =\n reconnectOptions === false\n ? await createExecutor()\n : new ReconnectingExecutor(createExecutor, reconnectOptions === true ? {} : reconnectOptions);\n return new FerricStoreClient(executor, options);\n }\n\n static async fromUrls(urls: readonly string[], options: FerricStoreClientFromUrlOptions = {}): Promise<FerricStoreClient> {\n if (urls.length === 0) {\n throw new Error(\"FerricStoreClient.fromUrls requires at least one URL\");\n }\n const reconnectOptions = options.reconnect ?? options.nativeOptions?.autoReconnect ?? true;\n const createExecutor = async () => await TopologyNativeAdapterPool.fromUrls(urls, options.nativeOptions);\n const executor =\n reconnectOptions === false\n ? await createExecutor()\n : new ReconnectingExecutor(createExecutor, reconnectOptions === true ? {} : reconnectOptions);\n return new FerricStoreClient(executor, options);\n }\n\n async command(...args: CommandArgument[]): Promise<unknown> {\n return await this.executor.executeCommand(...args);\n }\n\n async pipeline(commands: readonly Command[]): Promise<unknown[]> {\n if (this.executor.executePipeline != null) {\n return await this.executor.executePipeline(commands);\n }\n return await Promise.all(commands.map((command) => this.command(...command)));\n }\n\n async close(): Promise<void> {\n await this.executor.close?.();\n }\n\n async refreshTopology(): Promise<RoutingTopology> {\n if (this.executor.refreshTopology == null) {\n throw new Error(\"topology refresh requires a topology-aware native executor\");\n }\n return await this.executor.refreshTopology();\n }\n\n async route(key: string | Buffer): Promise<RoutingRoute> {\n if (this.executor.route == null) {\n throw new Error(\"route lookup requires a topology-aware native executor\");\n }\n return await this.executor.route(key);\n }\n\n async ping(message?: CommandArgument): Promise<unknown> {\n return await this.command(\"PING\", ...(message == null ? [] : [message]));\n }\n\n async echo(message: CommandArgument): Promise<unknown> {\n return await this.command(\"ECHO\", message);\n }\n\n async serverInfo(section?: string): Promise<string> {\n return text(await this.command(\"INFO\", ...(section == null ? [] : [section])));\n }\n\n async configGet(pattern: string): Promise<unknown> {\n return await this.command(\"CONFIG\", \"GET\", pattern);\n }\n\n async configSet(key: string, value: CommandArgument, options: { local?: boolean } = {}): Promise<boolean> {\n return okResponse(await this.command(\"CONFIG\", \"SET\", ...(options.local === true ? [\"LOCAL\"] : []), key, value));\n }\n\n async configGetLocal(key: string): Promise<unknown> {\n return await this.command(\"CONFIG\", \"GET\", \"LOCAL\", key);\n }\n\n async configResetStat(): Promise<boolean> {\n return okResponse(await this.command(\"CONFIG\", \"RESETSTAT\"));\n }\n\n async configRewrite(): Promise<boolean> {\n return okResponse(await this.command(\"CONFIG\", \"REWRITE\"));\n }\n\n async slowlogGet(count?: number): Promise<unknown[]> {\n return arrayResponse(await this.command(\"SLOWLOG\", \"GET\", ...(count == null ? [] : [count])));\n }\n\n async slowlogLen(): Promise<number> {\n return Number(await this.command(\"SLOWLOG\", \"LEN\"));\n }\n\n async slowlogReset(): Promise<boolean> {\n return okResponse(await this.command(\"SLOWLOG\", \"RESET\"));\n }\n\n async commandMetadata(): Promise<unknown> {\n return await this.command(\"COMMAND\");\n }\n\n async commandCount(): Promise<number> {\n return Number(await this.command(\"COMMAND\", \"COUNT\"));\n }\n\n async commandList(): Promise<unknown[]> {\n return arrayResponse(await this.command(\"COMMAND\", \"LIST\"));\n }\n\n async commandInfo(...names: string[]): Promise<unknown[]> {\n return arrayResponse(await this.command(\"COMMAND\", \"INFO\", ...names));\n }\n\n async commandDocs(...names: string[]): Promise<unknown> {\n return await this.command(\"COMMAND\", \"DOCS\", ...names);\n }\n\n async commandGetKeys(command: Command): Promise<unknown[]> {\n return arrayResponse(await this.command(\"COMMAND\", \"GETKEYS\", ...command));\n }\n\n async clientId(): Promise<number> {\n return Number(await this.command(\"CLIENT\", \"ID\"));\n }\n\n async clientSetName(name: string): Promise<boolean> {\n return okResponse(await this.command(\"CLIENT\", \"SETNAME\", name));\n }\n\n async clientGetName(): Promise<string | null> {\n const response = await this.command(\"CLIENT\", \"GETNAME\");\n return response == null ? null : text(response);\n }\n\n async clientInfo(): Promise<string> {\n return infoText(await this.command(\"CLIENT\", \"INFO\"));\n }\n\n async clientList(options: { type?: string } = {}): Promise<string> {\n return text(await this.command(\"CLIENT\", \"LIST\", ...(options.type == null ? [] : [\"TYPE\", options.type])));\n }\n\n async clientTracking(mode: \"ON\" | \"OFF\", options: {\n redirect?: number;\n prefixes?: string[];\n bcast?: boolean;\n optin?: boolean;\n optout?: boolean;\n noloop?: boolean;\n } = {}): Promise<boolean> {\n const args: CommandArgument[] = [\"CLIENT\", \"TRACKING\", mode];\n append(args, \"REDIRECT\", options.redirect);\n for (const prefix of options.prefixes ?? []) {\n args.push(\"PREFIX\", prefix);\n }\n if (options.bcast === true) args.push(\"BCAST\");\n if (options.optin === true) args.push(\"OPTIN\");\n if (options.optout === true) args.push(\"OPTOUT\");\n if (options.noloop === true) args.push(\"NOLOOP\");\n return okResponse(await this.command(...args));\n }\n\n async clientCaching(mode: \"YES\" | \"NO\"): Promise<boolean> {\n return okResponse(await this.command(\"CLIENT\", \"CACHING\", mode));\n }\n\n async clientTrackingInfo(): Promise<unknown> {\n return await this.command(\"CLIENT\", \"TRACKINGINFO\");\n }\n\n async clientGetRedir(): Promise<number> {\n return Number(await this.command(\"CLIENT\", \"GETREDIR\"));\n }\n\n async save(): Promise<boolean> {\n return okResponse(await this.command(\"SAVE\"));\n }\n\n async bgsave(): Promise<boolean> {\n const response = await this.command(\"BGSAVE\");\n return okResponse(response) || text(response) === \"Background saving started\";\n }\n\n async lastsave(): Promise<number> {\n return Number(await this.command(\"LASTSAVE\"));\n }\n\n async lolwut(version?: number): Promise<string> {\n return text(await this.command(\"LOLWUT\", ...(version == null ? [] : [\"VERSION\", version])));\n }\n\n async moduleList(): Promise<unknown[]> {\n return arrayResponse(await this.command(\"MODULE\", \"LIST\"));\n }\n\n async publish(channel: string, message: CommandArgument): Promise<number> {\n return Number(await this.command(\"PUBLISH\", channel, message));\n }\n\n async pubsubChannels(pattern?: string): Promise<unknown[]> {\n return arrayResponse(await this.command(\"PUBSUB\", \"CHANNELS\", ...(pattern == null ? [] : [pattern])));\n }\n\n async pubsubNumSub(...channels: string[]): Promise<unknown[]> {\n return arrayResponse(await this.command(\"PUBSUB\", \"NUMSUB\", ...channels));\n }\n\n async pubsubNumPat(): Promise<number> {\n return Number(await this.command(\"PUBSUB\", \"NUMPAT\"));\n }\n\n async aclSetUser(username: string, rules: string | readonly string[]): Promise<boolean> {\n return okResponse(await this.command(\"ACL\", \"SETUSER\", username, ...ruleArgs(rules)));\n }\n\n async aclDelUser(...usernames: string[]): Promise<number> {\n return Number(await this.command(\"ACL\", \"DELUSER\", ...usernames));\n }\n\n async aclGetUser(username: string): Promise<unknown> {\n return await this.command(\"ACL\", \"GETUSER\", username);\n }\n\n async aclList(): Promise<unknown[]> {\n return arrayResponse(await this.command(\"ACL\", \"LIST\"));\n }\n\n async aclListUsers(): Promise<unknown[]> {\n return await this.aclList();\n }\n\n async aclWhoami(): Promise<string> {\n return text(await this.command(\"ACL\", \"WHOAMI\"));\n }\n\n async aclSave(): Promise<boolean> {\n return okResponse(await this.command(\"ACL\", \"SAVE\"));\n }\n\n async aclLoad(): Promise<boolean> {\n return okResponse(await this.command(\"ACL\", \"LOAD\"));\n }\n\n async auth(password: string, username?: string): Promise<boolean> {\n return okResponse(await this.command(\"AUTH\", ...(username == null ? [] : [username]), password));\n }\n\n async cas(key: string, expected: unknown, value: unknown, options: { ex?: number } = {}): Promise<boolean> {\n const args: CommandArgument[] = [\"CAS\", key, this.codec.encode(expected), this.codec.encode(value)];\n append(args, \"EX\", options.ex);\n return Boolean(await this.command(...args));\n }\n\n async lock(key: string, owner: string, ttlMs: number): Promise<boolean> {\n return okResponse(await this.command(\"LOCK\", key, owner, ttlMs));\n }\n\n async unlock(key: string, owner: string): Promise<number> {\n return Number(await this.command(\"UNLOCK\", key, owner));\n }\n\n async extendLock(key: string, owner: string, ttlMs: number): Promise<number> {\n return Number(await this.command(\"EXTEND\", key, owner, ttlMs));\n }\n\n async rateLimitAdd(key: string, options: { windowMs: number; max: number; count?: number }): Promise<RateLimitResult> {\n return rateLimitResultFromResp(\n await this.command(\"RATELIMIT.ADD\", key, options.windowMs, options.max, options.count ?? 1)\n );\n }\n\n async keyInfo(key: string): Promise<KeyInfo> {\n return keyInfoFromResp(await this.command(\"FERRICSTORE.KEY_INFO\", key));\n }\n\n async fetchOrCompute<T = unknown>(\n key: string,\n options: { ttlMs: number; hint?: string }\n ): Promise<FetchOrComputeResult<T>> {\n const args: CommandArgument[] = [\"FETCH_OR_COMPUTE\", key, options.ttlMs];\n if (options.hint != null) {\n args.push(options.hint);\n }\n return fetchOrComputeResultFromResp<T>(await this.command(...args), this.codec);\n }\n\n async fetchOrComputeResult(key: string, value: unknown, options: { ttlMs: number }): Promise<boolean> {\n return okResponse(await this.command(\"FETCH_OR_COMPUTE_RESULT\", key, this.codec.encode(value), options.ttlMs));\n }\n\n async fetchOrComputeError(key: string, message: string): Promise<boolean> {\n return okResponse(await this.command(\"FETCH_OR_COMPUTE_ERROR\", key, message));\n }\n\n async clusterHealth(): Promise<Record<string, unknown>> {\n return parseKvResponse(await this.command(\"CLUSTER.HEALTH\"));\n }\n\n async clusterStats(): Promise<Record<string, unknown>> {\n return parseKvResponse(await this.command(\"CLUSTER.STATS\"));\n }\n\n async clusterKeyslot(key: string): Promise<number> {\n return Number(await this.command(\"CLUSTER.KEYSLOT\", key));\n }\n\n async clusterSlots(): Promise<unknown> {\n return await this.command(\"CLUSTER.SLOTS\");\n }\n\n async clusterStatus(): Promise<Record<string, unknown>> {\n return parseKvResponse(await this.command(\"CLUSTER.STATUS\"));\n }\n\n async clusterRole(): Promise<unknown> {\n return await this.command(\"CLUSTER.ROLE\");\n }\n\n async clusterJoin(node: string, options: { replace?: boolean } = {}): Promise<boolean> {\n return okResponse(await this.command(\"CLUSTER.JOIN\", node, ...(options.replace === true ? [\"REPLACE\"] : [])));\n }\n\n async clusterLeave(): Promise<boolean> {\n return okResponse(await this.command(\"CLUSTER.LEAVE\"));\n }\n\n async clusterFailover(shardIndex: number, targetNode: string): Promise<boolean> {\n return okResponse(await this.command(\"CLUSTER.FAILOVER\", shardIndex, targetNode));\n }\n\n async clusterPromote(node: string): Promise<boolean> {\n return okResponse(await this.command(\"CLUSTER.PROMOTE\", node));\n }\n\n async clusterDemote(node: string): Promise<boolean> {\n return okResponse(await this.command(\"CLUSTER.DEMOTE\", node));\n }\n\n async ferricstoreConfig(...args: CommandArgument[]): Promise<unknown> {\n return await this.command(\"FERRICSTORE.CONFIG\", ...args);\n }\n\n async ferricstoreHotness(...args: CommandArgument[]): Promise<Record<string, unknown>> {\n return parseKvResponse(await this.command(\"FERRICSTORE.HOTNESS\", ...args));\n }\n\n async ferricstoreMetrics(...args: CommandArgument[]): Promise<Record<string, unknown>> {\n return parseKvResponse(await this.command(\"FERRICSTORE.METRICS\", ...args));\n }\n\n async ferricstoreBlobgc(...args: CommandArgument[]): Promise<unknown> {\n return await this.command(\"FERRICSTORE.BLOBGC\", ...args);\n }\n\n async ferricstoreDoctor(...args: CommandArgument[]): Promise<unknown> {\n return await this.command(\"FERRICSTORE.DOCTOR\", ...args);\n }\n\n async capabilities(): Promise<Record<string, unknown>> {\n return normalizeAdminResponse(await this.command(\"FERRICSTORE.CAPABILITIES\")) as Record<string, unknown>;\n }\n\n async ensureNamespace(prefix: string, attrs: ManagementPairs = {}): Promise<unknown> {\n return normalizeAdminResponse(\n await this.command(\"FERRICSTORE.NAMESPACE\", \"ENSURE\", prefix, ...managementPairArgs(attrs))\n );\n }\n\n async getNamespace(prefix: string): Promise<unknown> {\n return normalizeAdminResponse(await this.command(\"FERRICSTORE.NAMESPACE\", \"GET\", prefix));\n }\n\n async listNamespaces(): Promise<unknown> {\n return normalizeAdminResponse(await this.command(\"FERRICSTORE.NAMESPACE\", \"LIST\"));\n }\n\n async deleteNamespace(prefix: string): Promise<unknown> {\n return normalizeAdminResponse(await this.command(\"FERRICSTORE.NAMESPACE\", \"DELETE\", prefix));\n }\n\n async setQuota(namespace: string, quotaSpec: ManagementPairs = {}): Promise<unknown> {\n return normalizeAdminResponse(\n await this.command(\"FERRICSTORE.QUOTA\", \"SET\", namespace, ...managementPairArgs(quotaSpec))\n );\n }\n\n async getQuota(namespace: string): Promise<unknown> {\n return normalizeAdminResponse(await this.command(\"FERRICSTORE.QUOTA\", \"GET\", namespace));\n }\n\n async quotaUsage(namespace: string): Promise<unknown> {\n return normalizeAdminResponse(await this.command(\"FERRICSTORE.QUOTA\", \"USAGE\", namespace));\n }\n\n async clusterInfo(): Promise<Record<string, unknown>> {\n return normalizeAdminResponse(await this.command(\"FERRICSTORE.TELEMETRY\", \"CLUSTER_INFO\")) as Record<string, unknown>;\n }\n\n async namespaceUsage(prefix: string): Promise<Record<string, unknown>> {\n return normalizeAdminResponse(\n await this.command(\"FERRICSTORE.TELEMETRY\", \"NAMESPACE_USAGE\", prefix)\n ) as Record<string, unknown>;\n }\n\n async flowQuery(attrs: ManagementPairs = {}): Promise<unknown[]> {\n const response = normalizeAdminResponse(\n await this.command(\"FERRICSTORE.TELEMETRY\", \"FLOW_QUERY\", ...managementPairArgs(attrs))\n );\n return Array.isArray(response) ? [...(response as unknown[])] : [];\n }\n\n async flowHistory(id: string, attrs: ManagementPairs = {}): Promise<unknown[]> {\n const response = normalizeAdminResponse(\n await this.command(\"FERRICSTORE.TELEMETRY\", \"FLOW_HISTORY\", id, ...managementPairArgs(attrs))\n );\n return Array.isArray(response) ? [...(response as unknown[])] : [];\n }\n\n async invocationDefinitionPut(\n definition: Record<string, unknown> | string,\n options: RequestContextOptions = {}\n ): Promise<unknown> {\n return normalizeAdminResponse(\n await this.command(\n ...commandWithRequestContext(\n \"INVOCATION.DEFINITION.PUT\",\n [jsonArg(definition)],\n options.requestContext\n )\n )\n );\n }\n\n async invocationDefinitionGet(name: string, options: RequestContextOptions = {}): Promise<unknown> {\n return normalizeAdminResponse(\n await this.command(\n ...commandWithRequestContext(\"INVOCATION.DEFINITION.GET\", [name], options.requestContext)\n )\n );\n }\n\n async invocationDefinitionList(options: RequestContextOptions = {}): Promise<unknown[]> {\n const response = normalizeAdminResponse(\n await this.command(\n ...commandWithRequestContext(\"INVOCATION.DEFINITION.LIST\", [], options.requestContext)\n )\n );\n return Array.isArray(response) ? [...(response as unknown[])] : [];\n }\n\n async invocationCreate(\n name: string,\n attrs: Record<string, unknown>,\n options: InvocationCreateOptions = {}\n ): Promise<unknown> {\n const envelope: Record<string, unknown> = { attrs };\n if (options.context != null) {\n envelope.context = options.context;\n }\n if (options.idempotencyKey != null) {\n envelope.idempotency_key = options.idempotencyKey;\n }\n return normalizeAdminResponse(\n await this.command(\n ...commandWithRequestContext(\"INVOCATION.CREATE\", [name, jsonArg(envelope)], options.requestContext)\n )\n );\n }\n\n async invocationGet(id: string, options: RequestContextOptions = {}): Promise<unknown> {\n return normalizeAdminResponse(\n await this.command(...commandWithRequestContext(\"INVOCATION.GET\", [id], options.requestContext))\n );\n }\n\n async invocationPartitionList(\n name: string,\n options: RequestContextOptions & { scope?: string } = {}\n ): Promise<unknown[]> {\n const args: CommandArgument[] = [name];\n append(args, \"SCOPE\", options.scope);\n const response = normalizeAdminResponse(\n await this.command(...commandWithRequestContext(\"INVOCATION.PARTITION.LIST\", args, options.requestContext))\n );\n return Array.isArray(response) ? [...(response as unknown[])] : [];\n }\n\n async create(id: string, options: CreateOptions): Promise<FlowRecord | Buffer | unknown> {\n const currentNowMs = options.nowMs ?? nowMs();\n const args: CommandArgument[] = [\n \"FLOW.CREATE\",\n id,\n \"TYPE\",\n options.type,\n \"STATE\",\n options.state ?? \"queued\",\n \"NOW\",\n currentNowMs\n ];\n append(args, \"PARTITION\", options.partitionKey);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"PARENT_FLOW_ID\", options.parentFlowId);\n append(args, \"ROOT_FLOW_ID\", options.rootFlowId);\n append(args, \"CORRELATION_ID\", options.correlationId);\n append(args, \"RUN_AT\", options.runAtMs ?? currentNowMs);\n append(args, \"PRIORITY\", options.priority);\n appendBool(args, \"IDEMPOTENT\", options.idempotent);\n append(args, \"RETENTION_TTL_MS\", options.retentionTtlMs);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n\n const response = await this.executeProducerWrite(args);\n if (options.returnRecord === true) {\n return await this.recordOrGet(response, id, options.partitionKey);\n }\n return response;\n }\n\n async enqueue(id: string, options: Omit<CreateOptions, \"state\"> & { state?: string }): Promise<FlowRecord | Buffer | unknown> {\n return await this.create(id, {\n ...options,\n state: options.state ?? \"queued\"\n });\n }\n\n async enqueueMany(items: CreateItem[], options: CreateManyOptions): Promise<unknown[] | unknown> {\n if (items.length === 0) {\n return [];\n }\n\n if (options.partitionKey != null || items.some((item) => item.partitionKey != null)) {\n return await this.createMany(options.partitionKey, items, {\n ...options,\n independent: options.independent ?? true,\n state: options.state ?? \"queued\"\n });\n }\n\n const grouped = new Map<string, [number, CreateItem][]>();\n items.forEach((item, index) => {\n const bucket = autoPartitionKeyForId(item.id);\n grouped.set(bucket, [...(grouped.get(bucket) ?? []), [index, item]]);\n });\n\n const results = Array<unknown>(items.length);\n for (const [bucket, indexedItems] of grouped.entries()) {\n const groupItems = indexedItems.map(([, item]) => item);\n const response = await this.createMany(bucket, groupItems, {\n ...options,\n independent: options.independent ?? true,\n state: options.state ?? \"queued\"\n });\n const expanded = expandManyResponse(response, indexedItems.length);\n indexedItems.forEach(([index], resultIndex) => {\n results[index] = expanded[resultIndex];\n });\n }\n return results;\n }\n\n async createMany(partitionKey: string | undefined, items: CreateItem[], options: CreateManyOptions): Promise<unknown[] | unknown> {\n if (items.length === 0) {\n return [];\n }\n\n if (partitionKey != null) {\n for (const item of items) {\n if (item.partitionKey != null && item.partitionKey !== partitionKey) {\n throw new Error(\"createMany item partitionKey does not match batch partitionKey\");\n }\n }\n }\n\n const currentNowMs = options.nowMs ?? nowMs();\n const stateMeta = sharedCreateManyStateMeta(items, options.stateMeta);\n const mixed = partitionKey == null && items.some((item) => item.partitionKey != null);\n const auto = partitionKey == null && !mixed;\n const wirePartition = mixed ? \"MIXED\" : auto ? \"AUTO\" : partitionKey;\n const args: CommandArgument[] = [\n \"FLOW.CREATE_MANY\",\n wirePartition,\n \"TYPE\",\n options.type,\n \"STATE\",\n options.state ?? \"queued\",\n \"NOW\",\n currentNowMs\n ];\n append(args, \"RUN_AT\", options.runAtMs ?? currentNowMs);\n append(args, \"PRIORITY\", options.priority);\n appendBool(args, \"IDEMPOTENT\", options.idempotent);\n appendBool(args, \"INDEPENDENT\", options.independent);\n append(args, \"RETENTION_TTL_MS\", options.retentionTtlMs);\n appendStateMeta(args, stateMeta);\n\n const extendedItems = items.some((item) => item.values != null || item.valueRefs != null) || (mixed && items.some((item) => item.partitionKey == null));\n if (extendedItems) {\n args.push(\"ITEMS_EXT\", items.length);\n for (const item of items) {\n const itemValues = { ...(options.values ?? {}), ...(item.values ?? {}) };\n const itemRefs = { ...(options.valueRefs ?? {}), ...(item.valueRefs ?? {}) };\n args.push(item.id, mixed ? item.partitionKey ?? \"-\" : \"-\", this.codec.encode(item.payload));\n appendNamedCounts(args, this.codec, itemValues, itemRefs);\n }\n } else {\n appendNamedValues(args, this.codec, options);\n args.push(\"ITEMS\");\n for (const item of items) {\n if (mixed) {\n if (item.partitionKey == null) {\n throw new Error(\"mixed createMany items require partitionKey\");\n }\n args.push(item.id, item.partitionKey, this.codec.encode(item.payload));\n } else {\n args.push(item.id, this.codec.encode(item.payload));\n }\n }\n }\n\n return this.recordsOrResponse(await this.executeProducerWrite(args));\n }\n\n async valuePut(\n value: unknown,\n options: {\n partitionKey?: string;\n ownerFlowId?: string;\n name?: string;\n override?: boolean;\n ttlMs?: number;\n nowMs?: number;\n } = {}\n ): Promise<unknown> {\n const args: CommandArgument[] = [\"FLOW.VALUE.PUT\", this.codec.encode(value), \"NOW\", options.nowMs ?? nowMs()];\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"OWNER_FLOW_ID\", options.ownerFlowId);\n append(args, \"NAME\", options.name);\n appendBool(args, \"OVERRIDE\", options.override);\n append(args, \"TTL\", options.ttlMs);\n return await this.command(...args);\n }\n\n async valueMGet(refs: string[], options: { maxBytes?: number } = {}): Promise<unknown[]> {\n if (refs.length === 0) {\n return [];\n }\n const args: CommandArgument[] = [\"FLOW.VALUE.MGET\", ...refs];\n append(args, \"MAX_BYTES\", options.maxBytes);\n const response = await this.command(...args);\n if (!Array.isArray(response)) {\n return [];\n }\n return (response as unknown[]).map((item) => (Buffer.isBuffer(item) ? this.codec.decode(item) : item));\n }\n\n async signal(id: string, options: {\n signal: string;\n partitionKey?: string;\n idempotencyKey?: string;\n ifState?: string | string[];\n transitionTo?: string;\n runAtMs?: number;\n nowMs?: number;\n priority?: number;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n dropValues?: string[];\n overrideValues?: string[];\n }): Promise<unknown> {\n const args: CommandArgument[] = [\"FLOW.SIGNAL\", id, \"SIGNAL\", options.signal];\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"IDEMPOTENCY\", options.idempotencyKey);\n if (Array.isArray(options.ifState)) {\n for (const state of options.ifState) {\n append(args, \"IF_STATE\", state);\n }\n } else {\n append(args, \"IF_STATE\", options.ifState);\n }\n append(args, \"TRANSITION_TO\", options.transitionTo);\n append(args, \"RUN_AT\", options.runAtMs);\n append(args, \"NOW\", options.nowMs ?? nowMs());\n append(args, \"PRIORITY\", options.priority);\n appendNamedValues(args, this.codec, options);\n return await this.command(...args);\n }\n\n async flowSignal(id: string, options: Parameters<FerricStoreClient[\"signal\"]>[1]): Promise<unknown> {\n return await this.signal(id, options);\n }\n\n async claimDue(type: string, options: ClaimDueOptions): Promise<(FlowRecord | ClaimedItem)[]> {\n if (options.state != null && options.states != null) {\n throw new Error(\"state and states are mutually exclusive\");\n }\n const args: CommandArgument[] = [\"FLOW.CLAIM_DUE\", type];\n if (options.states != null) {\n if (options.states.length === 0) {\n throw new Error(\"states must be non-empty\");\n }\n for (const state of options.states) {\n append(args, \"STATE\", state);\n }\n } else {\n append(args, \"STATE\", options.state);\n }\n\n args.push(\"WORKER\", options.worker, \"LEASE_MS\", options.leaseMs ?? 30_000, \"LIMIT\", options.limit ?? 1);\n append(args, \"NOW\", options.nowMs);\n this.appendPartitionOptions(args, options);\n append(args, \"PRIORITY\", options.priority);\n if (options.includeState === true && options.jobOnly !== true) {\n throw new Error(\"includeState requires jobOnly=true\");\n }\n if (options.jobOnly === true) {\n append(args, \"RETURN\", options.includeState === true ? \"JOBS_COMPACT_STATE\" : \"JOBS_COMPACT\");\n }\n append(args, \"BLOCK\", options.blockMs);\n appendPayloadRead(args, options.payload, options.payloadMaxBytes);\n appendValueReturn(args, { values: options.values, valueMaxBytes: options.valueMaxBytes });\n appendBool(args, \"RECLAIM_EXPIRED\", options.reclaimExpired);\n append(args, \"RECLAIM_RATIO\", options.reclaimRatio);\n\n const response = await this.command(...args);\n if (!Array.isArray(response)) {\n return [];\n }\n if (options.jobOnly === true) {\n return response.map((item) => claimedItemFromResp(item, this.codec));\n }\n return this.records(response);\n }\n\n async claimJobs(type: string, options: Omit<ClaimDueOptions, \"jobOnly\">): Promise<ClaimedItem[]> {\n return (await this.claimDue(type, {\n ...options,\n includeState: options.includeState ?? false,\n jobOnly: true,\n limit: options.limit ?? 100\n }));\n }\n\n async reclaim(type: string, options: ReclaimOptions): Promise<(FlowRecord | ClaimedItem)[]> {\n if (options.state != null && options.state !== \"running\") {\n throw new Error(\"FLOW.RECLAIM only supports running state\");\n }\n const args: CommandArgument[] = [\n \"FLOW.RECLAIM\",\n type,\n \"WORKER\",\n options.worker,\n \"LEASE_MS\",\n options.leaseMs ?? 30_000,\n \"LIMIT\",\n options.limit ?? 1,\n \"NOW\",\n options.nowMs ?? nowMs()\n ];\n this.appendPartitionOptions(args, options);\n append(args, \"PRIORITY\", options.priority);\n if (options.jobOnly === true) {\n append(args, \"RETURN\", \"JOBS_COMPACT\");\n }\n appendPayloadRead(args, options.payload, options.payloadMaxBytes);\n appendValueReturn(args, { values: options.values, valueMaxBytes: options.valueMaxBytes });\n const response = await this.command(...args);\n if (!Array.isArray(response)) {\n return [];\n }\n if (options.jobOnly === true) {\n return response.map((item) => claimedItemFromResp(item, this.codec));\n }\n return this.records(response);\n }\n\n async extendLease(id: string, options: {\n leaseToken: Buffer;\n fencingToken: number;\n leaseMs: number;\n partitionKey?: string;\n nowMs?: number;\n }): Promise<FlowRecord> {\n const args: CommandArgument[] = [\n \"FLOW.EXTEND_LEASE\",\n id,\n options.leaseToken,\n \"FENCING\",\n options.fencingToken,\n \"LEASE_MS\",\n options.leaseMs,\n \"NOW\",\n options.nowMs ?? nowMs()\n ];\n append(args, \"PARTITION\", options.partitionKey);\n return await this.recordOrGet(await this.command(...args), id, options.partitionKey);\n }\n\n async transition(id: string, options: TransitionOptions): Promise<FlowRecord | Buffer | unknown> {\n const currentNowMs = options.nowMs ?? nowMs();\n const args: CommandArgument[] = [\n \"FLOW.TRANSITION\",\n id,\n options.fromState,\n options.toState,\n \"LEASE_TOKEN\",\n options.leaseToken,\n \"FENCING\",\n options.fencingToken,\n \"NOW\",\n currentNowMs\n ];\n append(args, \"PARTITION\", options.partitionKey);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"RUN_AT\", options.runAtMs ?? currentNowMs);\n append(args, \"PRIORITY\", options.priority);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n const response = await this.command(...args);\n if (options.returnRecord === true) {\n return await this.recordOrGet(response, id, options.partitionKey);\n }\n return response;\n }\n\n async complete(id: string, options: CompleteOptions): Promise<FlowRecord | Buffer | unknown> {\n const args: CommandArgument[] = [\n \"FLOW.COMPLETE\",\n id,\n options.leaseToken,\n \"FENCING\",\n options.fencingToken,\n \"NOW\",\n options.nowMs ?? nowMs()\n ];\n append(args, \"PARTITION\", options.partitionKey);\n appendEncoded(args, \"RESULT\", this.codec, options.result);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"TTL\", options.ttlMs);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n const response = await this.command(...args);\n if (options.returnRecord === true) {\n return await this.recordOrGet(response, id, options.partitionKey);\n }\n return response;\n }\n\n async completeMany(partitionKey: string | undefined, items: ClaimedItem[], options: {\n result?: unknown;\n payload?: unknown;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n dropValues?: string[];\n overrideValues?: string[];\n stateMeta?: StateMeta;\n ttlMs?: number;\n nowMs?: number;\n independent?: boolean;\n returnOkOnSuccess?: boolean;\n } = {}): Promise<unknown[] | unknown> {\n if (items.length === 0) {\n return [];\n }\n const args: CommandArgument[] = [\"FLOW.COMPLETE_MANY\", partitionKey ?? \"MIXED\"];\n appendEncoded(args, \"RESULT\", this.codec, options.result);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"TTL\", options.ttlMs);\n append(args, \"NOW\", options.nowMs ?? nowMs());\n appendBool(args, \"INDEPENDENT\", options.independent);\n if (options.returnOkOnSuccess === true) {\n args.push(\"RETURN\", \"OK_ON_SUCCESS\");\n }\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n appendClaimedItems(args, partitionKey, items, \"FLOW.COMPLETE_MANY\");\n return this.recordsOrResponse(await this.command(...args));\n }\n\n async completeJobs(jobs: ClaimedItem[], options: Parameters<FerricStoreClient[\"completeMany\"]>[2] = {}): Promise<unknown[] | unknown> {\n if (jobs.length === 0) {\n return [];\n }\n const firstPartition = jobs[0]?.partitionKey;\n const partitionKey = firstPartition != null && jobs.every((job) => job.partitionKey === firstPartition) ? firstPartition : undefined;\n return await this.completeMany(partitionKey, jobs, {\n ...options,\n independent: options.independent ?? true,\n returnOkOnSuccess: options.returnOkOnSuccess ?? true\n });\n }\n\n async transitionMany(partitionKey: string | undefined, options: {\n fromState: string;\n toState: string;\n items: FencedItem[];\n payload?: unknown;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n dropValues?: string[];\n overrideValues?: string[];\n stateMeta?: StateMeta;\n runAtMs?: number;\n nowMs?: number;\n priority?: number;\n independent?: boolean;\n }): Promise<unknown[] | unknown> {\n if (options.items.length === 0) {\n return [];\n }\n const args: CommandArgument[] = [\"FLOW.TRANSITION_MANY\", partitionKey ?? \"MIXED\", options.fromState, options.toState];\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"RUN_AT\", options.runAtMs);\n append(args, \"PRIORITY\", options.priority);\n append(args, \"NOW\", options.nowMs ?? nowMs());\n appendBool(args, \"INDEPENDENT\", options.independent);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n appendFencedItems(args, partitionKey, options.items, \"FLOW.TRANSITION_MANY\", true);\n return this.recordsOrResponse(await this.command(...args));\n }\n\n async retry(id: string, options: RetryOptions): Promise<FlowRecord | Buffer | unknown> {\n const args: CommandArgument[] = [\n \"FLOW.RETRY\",\n id,\n options.leaseToken,\n \"FENCING\",\n options.fencingToken,\n \"NOW\",\n options.nowMs ?? nowMs()\n ];\n append(args, \"PARTITION\", options.partitionKey);\n appendEncoded(args, \"ERROR\", this.codec, options.error);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"RUN_AT\", options.runAtMs);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n const response = await this.command(...args);\n if (options.returnRecord === true) {\n return await this.recordOrGet(response, id, options.partitionKey);\n }\n return response;\n }\n\n async retryMany(partitionKey: string | undefined, items: ClaimedItem[], options: {\n error?: unknown;\n payload?: unknown;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n dropValues?: string[];\n overrideValues?: string[];\n stateMeta?: StateMeta;\n runAtMs?: number;\n nowMs?: number;\n independent?: boolean;\n } = {}): Promise<unknown[] | unknown> {\n if (items.length === 0) {\n return [];\n }\n const args: CommandArgument[] = [\"FLOW.RETRY_MANY\", partitionKey ?? \"MIXED\"];\n appendEncoded(args, \"ERROR\", this.codec, options.error);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"RUN_AT\", options.runAtMs);\n append(args, \"NOW\", options.nowMs ?? nowMs());\n appendBool(args, \"INDEPENDENT\", options.independent);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n appendClaimedItems(args, partitionKey, items, \"FLOW.RETRY_MANY\");\n return this.recordsOrResponse(await this.command(...args));\n }\n\n async fail(id: string, options: FailOptions): Promise<FlowRecord | Buffer | unknown> {\n const args: CommandArgument[] = [\n \"FLOW.FAIL\",\n id,\n options.leaseToken,\n \"FENCING\",\n options.fencingToken,\n \"NOW\",\n options.nowMs ?? nowMs()\n ];\n append(args, \"PARTITION\", options.partitionKey);\n appendEncoded(args, \"ERROR\", this.codec, options.error);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"TTL\", options.ttlMs);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n const response = await this.command(...args);\n if (options.returnRecord === true) {\n return await this.recordOrGet(response, id, options.partitionKey);\n }\n return response;\n }\n\n async failMany(partitionKey: string | undefined, items: ClaimedItem[], options: {\n error?: unknown;\n payload?: unknown;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n dropValues?: string[];\n overrideValues?: string[];\n stateMeta?: StateMeta;\n ttlMs?: number;\n nowMs?: number;\n independent?: boolean;\n } = {}): Promise<unknown[] | unknown> {\n if (items.length === 0) {\n return [];\n }\n const args: CommandArgument[] = [\"FLOW.FAIL_MANY\", partitionKey ?? \"MIXED\"];\n appendEncoded(args, \"ERROR\", this.codec, options.error);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"TTL\", options.ttlMs);\n append(args, \"NOW\", options.nowMs ?? nowMs());\n appendBool(args, \"INDEPENDENT\", options.independent);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n appendClaimedItems(args, partitionKey, items, \"FLOW.FAIL_MANY\");\n return this.recordsOrResponse(await this.command(...args));\n }\n\n async cancel(id: string, options: CancelOptions): Promise<FlowRecord | Buffer | unknown> {\n const args: CommandArgument[] = [\"FLOW.CANCEL\", id, \"FENCING\", options.fencingToken, \"NOW\", options.nowMs ?? nowMs()];\n append(args, \"LEASE_TOKEN\", options.leaseToken);\n append(args, \"PARTITION\", options.partitionKey);\n appendEncoded(args, \"REASON\", this.codec, options.reason);\n append(args, \"TTL\", options.ttlMs);\n appendStateMeta(args, options.stateMeta);\n const response = await this.command(...args);\n if (options.returnRecord === true) {\n return await this.recordOrGet(response, id, options.partitionKey);\n }\n return response;\n }\n\n async cancelMany(partitionKey: string | undefined, items: FencedItem[], options: {\n reason?: unknown;\n stateMeta?: StateMeta;\n ttlMs?: number;\n nowMs?: number;\n independent?: boolean;\n } = {}): Promise<unknown[] | unknown> {\n if (items.length === 0) {\n return [];\n }\n const args: CommandArgument[] = [\"FLOW.CANCEL_MANY\", partitionKey ?? \"MIXED\"];\n appendEncoded(args, \"REASON\", this.codec, options.reason);\n append(args, \"TTL\", options.ttlMs);\n append(args, \"NOW\", options.nowMs ?? nowMs());\n appendBool(args, \"INDEPENDENT\", options.independent);\n appendStateMeta(args, options.stateMeta);\n appendFencedItems(args, partitionKey, items, \"FLOW.CANCEL_MANY\", false);\n return this.recordsOrResponse(await this.command(...args));\n }\n\n async rewind(id: string, options: {\n partitionKey?: string;\n toEvent?: string;\n expectState?: string;\n nowMs?: number;\n returnRecord?: boolean;\n } = {}): Promise<FlowRecord | Buffer | unknown> {\n const args: CommandArgument[] = [\"FLOW.REWIND\", id, \"NOW\", options.nowMs ?? nowMs()];\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"TO_EVENT\", options.toEvent);\n append(args, \"EXPECT_STATE\", options.expectState);\n const response = await this.command(...args);\n if (options.returnRecord === true) {\n return await this.recordOrGet(response, id, options.partitionKey);\n }\n return response;\n }\n\n async get<TPayload = unknown>(id: string, options: { partitionKey?: string; full?: boolean } = {}): Promise<FlowRecord<TPayload> | undefined> {\n const args: CommandArgument[] = [\"FLOW.GET\", id];\n append(args, \"PARTITION\", options.partitionKey);\n appendBool(args, \"FULL\", options.full);\n const response = await this.command(...args);\n if (response == null) {\n return undefined;\n }\n return flowRecordFromResp<TPayload>(response, this.codec);\n }\n\n async list(type: string, options: ReadOptions = {}): Promise<FlowRecord[]> {\n return await this.indexQuery(\"FLOW.LIST\", type, options);\n }\n\n async search(type: string, options: SearchOptions = {}): Promise<FlowRecord[]> {\n const args: CommandArgument[] = [\"FLOW.SEARCH\", type];\n appendReadOptions(args, options);\n appendAttributes(args, options.attributes);\n appendSearchStateMeta(args, options.state, options.stateMeta);\n const response = await this.command(...args);\n return Array.isArray(response) ? this.records(response) : [];\n }\n\n async terminals(type: string, options: ReadOptions = {}): Promise<FlowRecord[]> {\n return await this.indexQuery(\"FLOW.TERMINALS\", type, options);\n }\n\n async failures(type: string, options: ReadOptions = {}): Promise<FlowRecord[]> {\n return await this.indexQuery(\"FLOW.FAILURES\", type, options);\n }\n\n async byParent(parentFlowId: string, options: ReadOptions = {}): Promise<FlowRecord[]> {\n return await this.indexQuery(\"FLOW.BY_PARENT\", parentFlowId, options);\n }\n\n async byRoot(rootFlowId: string, options: ReadOptions = {}): Promise<FlowRecord[]> {\n return await this.indexQuery(\"FLOW.BY_ROOT\", rootFlowId, options);\n }\n\n async byCorrelation(correlationId: string, options: ReadOptions = {}): Promise<FlowRecord[]> {\n return await this.indexQuery(\"FLOW.BY_CORRELATION\", correlationId, options);\n }\n\n async info(type: string): Promise<Record<string, unknown>> {\n return parseKvResponse(await this.command(\"FLOW.INFO\", type));\n }\n\n async stuck(type: string, options: {\n partitionKey?: string;\n count?: number;\n olderThanMs?: number;\n nowMs?: number;\n } = {}): Promise<FlowRecord[]> {\n const args: CommandArgument[] = [\"FLOW.STUCK\", type];\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"COUNT\", options.count);\n append(args, \"OLDER_THAN\", options.olderThanMs);\n append(args, \"NOW\", options.nowMs);\n return this.records(arrayResponse(await this.command(...args)));\n }\n\n async history(id: string, options: { partitionKey?: string; count?: number; fromEvent?: string; rev?: boolean } = {}): Promise<unknown[]> {\n const args: CommandArgument[] = [\"FLOW.HISTORY\", id];\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"COUNT\", options.count);\n append(args, \"FROM_EVENT\", options.fromEvent);\n appendBool(args, \"REV\", options.rev);\n return arrayResponse(await this.command(...args));\n }\n\n async spawnChildren(parentId: string, children: ChildSpec[], options: {\n groupId?: string;\n partitionKey?: string;\n leaseToken?: Buffer;\n fencingToken?: number;\n wait?: string;\n waitState?: string;\n success?: string;\n failure?: string;\n fromState?: string;\n nowMs?: number;\n onChildFailed?: string;\n onParentClosed?: string;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n } = {}): Promise<unknown> {\n const args: CommandArgument[] = [\n \"FLOW.SPAWN_CHILDREN\",\n parentId,\n \"GROUP\",\n options.groupId ?? \"default\",\n \"WAIT\",\n options.wait ?? \"all\",\n \"NOW\",\n options.nowMs ?? nowMs()\n ];\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"LEASE_TOKEN\", options.leaseToken);\n append(args, \"FENCING\", options.fencingToken);\n append(args, \"WAIT_STATE\", options.waitState);\n append(args, \"SUCCESS\", options.success);\n append(args, \"FAILURE\", options.failure);\n append(args, \"FROM_STATE\", options.fromState);\n append(args, \"ON_CHILD_FAILED\", options.onChildFailed);\n append(args, \"ON_PARENT_CLOSED\", options.onParentClosed);\n appendNamedValues(args, this.codec, options);\n args.push(\"ITEMS\");\n const mixed = children.some((child) => child.partitionKey != null);\n if (mixed) {\n args.push(\"MIXED\");\n }\n for (const child of children) {\n if (mixed) {\n if (child.partitionKey == null) {\n throw new Error(\"mixed spawnChildren children require partitionKey\");\n }\n args.push(child.id, child.partitionKey, child.type, this.codec.encode(child.payload));\n } else {\n args.push(child.id, child.type, this.codec.encode(child.payload));\n }\n }\n return await this.command(...args);\n }\n\n async installPolicy(type: string, options: FlowPolicyOptions = {}): Promise<unknown> {\n const args: CommandArgument[] = [\"FLOW.POLICY.SET\", type];\n append(args, \"INDEXED_STATE_META\", options.indexedStateMeta);\n append(args, \"STATE\", options.state);\n appendPolicyMode(args, options.state, options.mode);\n if (options.retry != null) {\n appendRetryPolicy(args, options.retry);\n }\n for (const [state, policy] of Object.entries(options.states ?? {})) {\n args.push(\"STATE\", state);\n appendFlowStatePolicy(args, policy);\n }\n append(args, \"RETENTION_TTL_MS\", options.retentionTtlMs);\n return await this.command(...args);\n }\n\n async policyGet(type: string, options: { state?: string } = {}): Promise<Record<string, unknown>> {\n const args: CommandArgument[] = [\"FLOW.POLICY.GET\", type];\n append(args, \"STATE\", options.state);\n return parseKvResponse(await this.command(...args));\n }\n\n async retentionCleanup(): Promise<Record<string, unknown>> {\n return parseKvResponse(await this.command(\"FLOW.RETENTION_CLEANUP\"));\n }\n\n private async executeProducerWrite(args: CommandArgument[]): Promise<unknown> {\n for (let attempt = 0; ; attempt += 1) {\n try {\n return await this.command(...args);\n } catch (error) {\n if (!(error instanceof OverloadedError) || attempt >= this.backpressure.maxRetries) {\n throw error;\n }\n const retryAfterMs = error.retryAfterMs;\n const exponential = Math.min(\n this.backpressure.maxDelayMs,\n this.backpressure.baseDelayMs * 2 ** attempt\n );\n const base = retryAfterMs ?? exponential;\n const jitter = base * (this.backpressure.jitterPct / 100) * Math.random();\n await sleep(base + jitter);\n }\n }\n }\n\n private async recordOrGet(response: unknown, id: string, partitionKey: string | undefined): Promise<FlowRecord> {\n if (isRecordLike(response)) {\n return flowRecordFromResp(response, this.codec);\n }\n const record = await this.get(id, { partitionKey });\n if (record == null) {\n throw new Error(`Flow ${id} was not returned and could not be loaded`);\n }\n return record;\n }\n\n private records(values: unknown[]): FlowRecord[] {\n return values.map((value) => flowRecordFromResp(value, this.codec));\n }\n\n private recordsOrResponse(value: unknown): unknown[] | unknown {\n if (Array.isArray(value) && value.every(isRecordLike)) {\n return this.records(value);\n }\n return value;\n }\n\n private async indexQuery(command: string, key: string, options: ReadOptions): Promise<FlowRecord[]> {\n const args: CommandArgument[] = [command, key];\n appendReadOptions(args, options);\n const response = await this.command(...args);\n return Array.isArray(response) ? this.records(response) : [];\n }\n\n private appendPartitionOptions(\n args: CommandArgument[],\n options: { partitionKey?: string; partitionKeys?: string[] }\n ): void {\n if (options.partitionKey != null && options.partitionKeys != null) {\n throw new Error(\"partitionKey and partitionKeys are mutually exclusive\");\n }\n append(args, \"PARTITION\", options.partitionKey);\n if (options.partitionKeys != null) {\n if (options.partitionKeys.length === 0) {\n throw new Error(\"partitionKeys must be non-empty\");\n }\n args.push(\"PARTITIONS\", options.partitionKeys.length, ...options.partitionKeys);\n }\n }\n}\n\nclass ErrorMappingExecutor implements CommandExecutor {\n constructor(private readonly executor: CommandExecutor) {}\n\n async executeCommand(...args: CommandArgument[]): Promise<unknown> {\n try {\n return await this.executor.executeCommand(...args);\n } catch (error) {\n throwMapped(error);\n }\n }\n\n async executePipeline(commands: readonly Command[], options?: ExecutePipelineOptions): Promise<unknown[]> {\n try {\n if (this.executor.executePipeline != null) {\n return await this.executor.executePipeline(commands, options);\n }\n return await Promise.all(commands.map((command) => this.executor.executeCommand(...command)));\n } catch (error) {\n throwMapped(error);\n }\n }\n\n async refreshTopology(): Promise<RoutingTopology> {\n if (this.executor.refreshTopology == null) {\n throw new Error(\"topology refresh requires a topology-aware native executor\");\n }\n return await this.executor.refreshTopology();\n }\n\n async route(key: string | Buffer): Promise<RoutingRoute> {\n if (this.executor.route == null) {\n throw new Error(\"route lookup requires a topology-aware native executor\");\n }\n return await this.executor.route(key);\n }\n\n async close(): Promise<void> {\n await this.executor.close?.();\n }\n}\n\ninterface NormalizedAutoBatchOptions {\n readonly maxCommands: number;\n readonly maxDelayMs: number;\n readonly mode: \"safe\" | \"all\";\n}\n\ninterface AutoBatchItem {\n readonly command: Command;\n readonly reject: (reason: unknown) => void;\n readonly resolve: (value: unknown) => void;\n}\n\nclass AutoBatchExecutor implements CommandExecutor {\n private readonly pending: AutoBatchItem[] = [];\n private scheduled = false;\n private timer: ReturnType<typeof setTimeout> | undefined;\n\n constructor(\n private readonly executor: CommandExecutor,\n private readonly options: NormalizedAutoBatchOptions\n ) {}\n\n async executeCommand(...args: CommandArgument[]): Promise<unknown> {\n const command = args.slice() as Command;\n\n if (this.executor.executePipeline == null || !autoBatchCommandAllowed(command, this.options.mode)) {\n return await this.executor.executeCommand(...args);\n }\n\n return await new Promise<unknown>((resolve, reject) => {\n this.pending.push({ command, reject, resolve });\n\n if (this.pending.length >= this.options.maxCommands) {\n void this.flushNow();\n } else {\n this.scheduleFlush();\n }\n });\n }\n\n async executePipeline(commands: readonly Command[], options?: ExecutePipelineOptions): Promise<unknown[]> {\n await this.flushNow();\n\n if (this.executor.executePipeline != null) {\n return await this.executor.executePipeline(commands, options);\n }\n\n return await Promise.all(commands.map((command) => this.executor.executeCommand(...command)));\n }\n\n async refreshTopology(): Promise<RoutingTopology> {\n if (this.executor.refreshTopology == null) {\n throw new Error(\"topology refresh requires a topology-aware native executor\");\n }\n return await this.executor.refreshTopology();\n }\n\n async route(key: string | Buffer): Promise<RoutingRoute> {\n if (this.executor.route == null) {\n throw new Error(\"route lookup requires a topology-aware native executor\");\n }\n return await this.executor.route(key);\n }\n\n async close(): Promise<void> {\n this.scheduled = false;\n if (this.timer != null) {\n clearTimeout(this.timer);\n this.timer = undefined;\n }\n this.failPending(new Error(\"FerricStore client closed before auto-batch flush\"));\n await this.executor.close?.();\n }\n\n private scheduleFlush(): void {\n if (this.scheduled) {\n return;\n }\n\n this.scheduled = true;\n\n if (this.options.maxDelayMs <= 0) {\n queueMicrotask(() => {\n this.scheduled = false;\n void this.flushNow();\n });\n return;\n }\n\n this.timer = setTimeout(() => {\n this.scheduled = false;\n this.timer = undefined;\n void this.flushNow();\n }, this.options.maxDelayMs);\n this.timer.unref?.();\n }\n\n private async flushNow(): Promise<void> {\n this.scheduled = false;\n\n if (this.timer != null) {\n clearTimeout(this.timer);\n this.timer = undefined;\n }\n\n if (this.pending.length === 0) {\n return;\n }\n\n const batch = this.pending.splice(0, this.options.maxCommands);\n if (this.pending.length > 0) {\n this.scheduleFlush();\n }\n\n await this.sendBatch(batch);\n }\n\n private async sendBatch(batch: readonly AutoBatchItem[]): Promise<void> {\n try {\n const results = await this.executor.executePipeline?.(\n batch.map((item) => item.command),\n { throwOnItemError: false }\n );\n\n if (results?.length !== batch.length) {\n const error = new Error(\"FerricStore auto-batch response length mismatch\");\n for (const item of batch) item.reject(error);\n return;\n }\n\n for (let index = 0; index < batch.length; index += 1) {\n const item = batch[index];\n const result = results[index];\n if (item == null) continue;\n if (result instanceof Error) {\n item.reject(result);\n } else {\n item.resolve(result);\n }\n }\n } catch (error) {\n for (const item of batch) item.reject(error);\n }\n }\n\n private failPending(error: Error): void {\n const pending = this.pending.splice(0);\n for (const item of pending) item.reject(error);\n }\n}\n\nfunction maybeAutoBatchExecutor(\n executor: CommandExecutor,\n options: boolean | AutoBatchOptions | undefined\n): CommandExecutor {\n const normalized = normalizeAutoBatchOptions(options);\n return normalized == null ? executor : new AutoBatchExecutor(executor, normalized);\n}\n\nfunction normalizeAutoBatchOptions(\n options: boolean | AutoBatchOptions | undefined\n): NormalizedAutoBatchOptions | null {\n if (options == null || options === false) {\n return null;\n }\n\n if (options === true) {\n return { maxCommands: 512, maxDelayMs: 0, mode: \"safe\" };\n }\n\n if (options.enabled === false) {\n return null;\n }\n\n return {\n maxCommands: Math.max(1, Math.trunc(options.maxCommands ?? 512)),\n maxDelayMs: Math.max(0, Math.trunc(options.maxDelayMs ?? 0)),\n mode: options.mode ?? \"safe\"\n };\n}\n\nconst safeAutoBatchCommands = new Set([\n \"DEL\",\n \"EXISTS\",\n \"GET\",\n \"HGET\",\n \"HGETALL\",\n \"HMGET\",\n \"HSET\",\n \"LPOP\",\n \"LPUSH\",\n \"LRANGE\",\n \"MGET\",\n \"MSET\",\n \"RPOP\",\n \"RPUSH\",\n \"SADD\",\n \"SISMEMBER\",\n \"SMEMBERS\",\n \"SREM\",\n \"SET\",\n \"ZADD\",\n \"ZRANGE\",\n \"ZREM\",\n \"ZSCORE\",\n \"FLOW.CANCEL\",\n \"FLOW.CANCEL_MANY\",\n \"FLOW.COMPLETE\",\n \"FLOW.COMPLETE_MANY\",\n \"FLOW.CREATE\",\n \"FLOW.CREATE_MANY\",\n \"FLOW.FAIL\",\n \"FLOW.FAIL_MANY\",\n \"FLOW.GET\",\n \"FLOW.HISTORY\",\n \"FLOW.LIST\",\n \"FLOW.RETRY\",\n \"FLOW.RETRY_MANY\",\n \"FLOW.SIGNAL\",\n \"FLOW.START_AND_CLAIM\",\n \"FLOW.TRANSITION\",\n \"FLOW.TRANSITION_MANY\",\n \"FLOW.VALUE.MGET\",\n \"FLOW.VALUE.PUT\"\n]);\n\nconst neverAutoBatchCommandPrefixes = new Set([\n \"AUTH\",\n \"BACKPRESSURE\",\n \"BLPOP\",\n \"BRPOP\",\n \"CLIENT\",\n \"GOAWAY\",\n \"HELLO\",\n \"PIPELINE\",\n \"QUIT\",\n \"ROUTE\",\n \"ROUTE_BATCH\",\n \"SHARDS\",\n \"STARTUP\",\n \"SUBSCRIBE\",\n \"SUBSCRIBE_EVENTS\",\n \"UNSUBSCRIBE\",\n \"UNSUBSCRIBE_EVENTS\",\n \"WINDOW_UPDATE\",\n \"XREAD\"\n]);\n\nconst neverAutoBatchCommands = new Set([\"FLOW.CLAIM_DUE\", \"FLOW.RECLAIM\"]);\n\nfunction autoBatchCommandAllowed(command: Command, mode: \"safe\" | \"all\"): boolean {\n const name = commandName(command);\n if (name == null || neverAutoBatchCommands.has(name)) {\n return false;\n }\n\n const prefix = name.includes(\".\") ? name.slice(0, name.indexOf(\".\")) : name;\n if (neverAutoBatchCommandPrefixes.has(prefix)) {\n return false;\n }\n\n return mode === \"all\" || safeAutoBatchCommands.has(name);\n}\n\nfunction commandName(command: Command): string | null {\n const first = commandPart(command[0]);\n if (first == null) {\n return null;\n }\n\n if (first === \"FLOW\" && command.length > 1) {\n const second = commandPart(command[1]);\n return second == null ? first : `${first}.${second}`;\n }\n\n return first;\n}\n\nfunction commandPart(value: CommandArgument): string | null {\n if (typeof value === \"string\") {\n return value.toUpperCase();\n }\n\n if (Buffer.isBuffer(value)) {\n return Buffer.from(value).toString(\"utf8\").toUpperCase();\n }\n\n return null;\n}\n\nfunction appendReadOptions(args: CommandArgument[], options: ReadOptions): void {\n append(args, \"COUNT\", options.count);\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"FROM_MS\", options.fromMs);\n append(args, \"TO_MS\", options.toMs);\n appendBool(args, \"REV\", options.rev);\n append(args, \"STATE\", options.state);\n appendBool(args, \"TERMINAL_ONLY\", options.terminalOnly);\n appendBool(args, \"INCLUDE_COLD\", options.includeCold);\n appendBool(args, \"CONSISTENT_PROJECTION\", options.consistentProjection);\n}\n\nfunction appendStateMeta(args: CommandArgument[], stateMeta: StateMeta | undefined): void {\n for (const [name, value] of Object.entries(stateMeta ?? {})) {\n args.push(\"STATE_META\", name, value);\n }\n}\n\nfunction appendAttributes(args: CommandArgument[], attributes: Record<string, CommandArgument> | undefined): void {\n for (const [name, value] of Object.entries(attributes ?? {})) {\n args.push(\"ATTRIBUTE\", name, value);\n }\n}\n\nfunction appendSearchStateMeta(\n args: CommandArgument[],\n state: string | undefined,\n stateMeta: SearchStateMeta | undefined\n): void {\n const entries = Object.entries(stateMeta ?? {});\n if (entries.length === 0) {\n return;\n }\n\n if (entries.every(([, value]) => isPlainObject(value))) {\n for (const [metaState, values] of entries) {\n args.push(\"STATE_META\", metaState, values as Record<string, unknown>);\n }\n return;\n }\n\n if (state == null) {\n throw new Error(\"search stateMeta filters require state or nested state metadata\");\n }\n\n args.push(\"STATE_META\", state, stateMeta);\n}\n\nfunction normalizeAdminResponse(value: unknown): unknown {\n return normalizeRefMeta(value);\n}\n\nfunction jsonArg(value: Record<string, unknown> | string): string {\n return typeof value === \"string\" ? value : JSON.stringify(value);\n}\n\nfunction commandWithRequestContext(\n command: string,\n args: readonly CommandArgument[],\n requestContext: RequestContext | undefined\n): CommandArgument[] {\n const commandArgs: CommandArgument[] = [command, ...args];\n if (requestContext != null) {\n commandArgs.push(\"REQUEST_CONTEXT\", requestContext as Record<string, unknown>);\n }\n return commandArgs;\n}\n\nfunction infoText(value: unknown): string {\n if (typeof value === \"string\" || Buffer.isBuffer(value)) {\n return text(value);\n }\n const normalized = normalizeRefMeta(value);\n if (isPlainObject(normalized)) {\n return Object.entries(normalized)\n .map(([key, item]) => `${key}=${diagnosticValueText(item)}`)\n .join(\" \");\n }\n return diagnosticValueText(normalized);\n}\n\nfunction diagnosticValueText(value: unknown): string {\n if (value == null) {\n return \"\";\n }\n if (Buffer.isBuffer(value)) {\n return value.toString(\"utf8\");\n }\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return String(value);\n }\n return JSON.stringify(value);\n}\n\nfunction managementPairArgs(pairs: ManagementPairs): CommandArgument[] {\n const args: CommandArgument[] = [];\n for (const [key, value] of Object.entries(pairs)) {\n if (value != null) {\n args.push(key.toUpperCase(), value);\n }\n }\n return args;\n}\n\nfunction appendFlowStatePolicy(args: CommandArgument[], policy: FlowStatePolicyLike): void {\n if (isFlowStatePolicy(policy)) {\n appendPolicyMode(args, \"state\", policy.mode);\n if (policy.retry != null) {\n appendRetryPolicy(args, policy.retry);\n }\n return;\n }\n appendRetryPolicy(args, policy);\n}\n\nfunction isFlowStatePolicy(policy: FlowStatePolicyLike): policy is FlowStatePolicy {\n return typeof policy === \"object\" && policy != null && (\"mode\" in policy || \"retry\" in policy);\n}\n\nfunction ruleArgs(rules: string | readonly string[]): string[] {\n return typeof rules === \"string\" ? [rules] : [...rules];\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value != null && !Array.isArray(value) && !Buffer.isBuffer(value);\n}\n\nfunction sharedCreateManyStateMeta(items: readonly CreateItem[], stateMeta: StateMeta | undefined): StateMeta | undefined {\n const itemMetas = items.map((item) => item.stateMeta).filter((meta): meta is StateMeta => meta != null);\n if (itemMetas.length === 0) {\n return stateMeta;\n }\n\n const first = itemMetas[0];\n if (first == null) {\n return stateMeta;\n }\n if (itemMetas.some((meta) => !stateMetaEquals(meta, first))) {\n throw new Error(\"createMany supports shared stateMeta only; use stateMeta or separate create calls for per-item stateMeta\");\n }\n if (stateMeta != null && !stateMetaEquals(stateMeta, first)) {\n throw new Error(\"createMany item stateMeta must match shared stateMeta when both are provided\");\n }\n return first;\n}\n\nfunction stateMetaEquals(left: StateMeta, right: StateMeta): boolean {\n const leftEntries = Object.entries(left);\n if (leftEntries.length !== Object.keys(right).length) {\n return false;\n }\n return leftEntries.every(([key, value]) => stateMetaValueEquals(value, right[key]));\n}\n\nfunction stateMetaValueEquals(left: StateMeta[keyof StateMeta], right: StateMeta[keyof StateMeta] | undefined): boolean {\n if (Buffer.isBuffer(left) || Buffer.isBuffer(right)) {\n return Buffer.isBuffer(left) && Buffer.isBuffer(right) && left.equals(right);\n }\n return Object.is(left, right);\n}\n\nfunction appendNamedCounts(\n args: CommandArgument[],\n codec: Codec,\n values: Record<string, unknown>,\n valueRefs: Record<string, string>\n): void {\n args.push(Object.keys(values).length);\n for (const [name, value] of Object.entries(values)) {\n args.push(name, codec.encode(value));\n }\n args.push(Object.keys(valueRefs).length);\n for (const [name, ref] of Object.entries(valueRefs)) {\n args.push(name, ref);\n }\n}\n\nfunction appendClaimedItems(\n args: CommandArgument[],\n partitionKey: string | undefined,\n items: ClaimedItem[],\n command: string\n): void {\n if (partitionKey != null) {\n for (const item of items) {\n if (item.partitionKey != null && item.partitionKey !== partitionKey) {\n throw new Error(`${command} item partitionKey does not match batch partitionKey`);\n }\n }\n }\n args.push(\"ITEMS\");\n for (const item of items) {\n const wire = item[CLAIMED_ITEM_WIRE];\n if (partitionKey == null) {\n args.push(wire?.id ?? item.id, wire?.partitionKey ?? item.partitionKey ?? \"-\", wire?.leaseToken ?? item.leaseToken, wire?.fencingToken ?? item.fencingToken);\n } else {\n args.push(wire?.id ?? item.id, wire?.leaseToken ?? item.leaseToken, wire?.fencingToken ?? item.fencingToken);\n }\n }\n}\n\nfunction appendFencedItems(\n args: CommandArgument[],\n partitionKey: string | undefined,\n items: FencedItem[],\n command: string,\n includeLease: boolean\n): void {\n if (partitionKey != null) {\n for (const item of items) {\n if (item.partitionKey != null && item.partitionKey !== partitionKey) {\n throw new Error(`${command} item partitionKey does not match batch partitionKey`);\n }\n }\n }\n args.push(\"ITEMS\");\n for (const item of items) {\n if (partitionKey == null) {\n args.push(item.id, item.partitionKey ?? \"-\", item.fencingToken);\n } else {\n args.push(item.id, item.fencingToken);\n }\n if (includeLease) {\n args.push(item.leaseToken ?? Buffer.alloc(0));\n }\n }\n}\n\nfunction appendRetryPolicy(args: CommandArgument[], policy: RetryPolicy): void {\n append(args, \"MAX_RETRIES\", policy.maxRetries);\n append(args, \"BACKOFF\", policy.backoff);\n append(args, \"BASE_MS\", policy.baseMs);\n append(args, \"MAX_MS\", policy.maxMs);\n append(args, \"JITTER_PCT\", policy.jitterPct);\n append(args, \"EXHAUSTED_TO\", policy.exhaustedTo);\n}\n\nfunction appendPolicyMode(args: CommandArgument[], state: string | undefined, mode: FlowStateMode | undefined): void {\n if (mode == null) {\n return;\n }\n if (state == null) {\n throw new Error(\"policy mode requires state\");\n }\n switch (mode) {\n case \"fifo\":\n args.push(\"MODE\", \"FIFO\");\n return;\n case \"parallel\":\n args.push(\"MODE\", \"PARALLEL\");\n return;\n default:\n throw new Error(\"policy mode must be 'fifo' or 'parallel'\");\n }\n}\n\nfunction appendPayloadRead(args: CommandArgument[], payload: boolean | undefined, maxBytes: number | undefined): void {\n if (payload === false) {\n args.push(\"NOPAYLOAD\");\n return;\n }\n if (payload === true || maxBytes != null) {\n args.push(\"PAYLOAD\");\n }\n if (maxBytes != null) {\n args.push(\"MAXBYTES\", maxBytes);\n }\n}\n\nfunction isRecordLike(value: unknown): boolean {\n return typeof value === \"object\" && value != null && !Buffer.isBuffer(value);\n}\n\nfunction throwMapped(error: unknown): never {\n const mapped = mapException(error);\n throw mapped instanceof Error ? mapped : error;\n}\n","import type { StateMeta } from \"./types.js\";\n\nexport type Outcome = TransitionOutcome | CompleteOutcome | RetryOutcome | FailOutcome;\n\nexport interface NamedValueMutation {\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n dropValues?: string[];\n overrideValues?: string[];\n stateMeta?: StateMeta;\n}\n\nexport interface TransitionOutcome extends NamedValueMutation {\n readonly kind: \"transition\";\n readonly toState: string;\n readonly payload?: unknown;\n readonly priority?: number;\n readonly runAtMs?: number;\n}\n\nexport interface CompleteOutcome extends NamedValueMutation {\n readonly kind: \"complete\";\n readonly payload?: unknown;\n readonly result?: unknown;\n readonly ttlMs?: number;\n}\n\nexport interface RetryOutcome extends NamedValueMutation {\n readonly kind: \"retry\";\n readonly error?: unknown;\n readonly payload?: unknown;\n readonly runAtMs?: number;\n}\n\nexport interface FailOutcome extends NamedValueMutation {\n readonly kind: \"fail\";\n readonly error?: unknown;\n readonly payload?: unknown;\n readonly ttlMs?: number;\n}\n\nexport function transition(\n toState: string,\n options: Omit<TransitionOutcome, \"kind\" | \"toState\"> = {}\n): TransitionOutcome {\n return { kind: \"transition\", toState, ...options };\n}\n\nexport function complete(options: Omit<CompleteOutcome, \"kind\"> = {}): CompleteOutcome {\n return { kind: \"complete\", ...options };\n}\n\nexport function retry(options: Omit<RetryOutcome, \"kind\"> = {}): RetryOutcome {\n return { kind: \"retry\", ...options };\n}\n\nexport function fail(options: Omit<FailOutcome, \"kind\"> = {}): FailOutcome {\n return { kind: \"fail\", ...options };\n}\n\nexport function isOutcome(value: unknown): value is Outcome {\n if (typeof value !== \"object\" || value == null || !(\"kind\" in value)) {\n return false;\n }\n return [\"transition\", \"complete\", \"retry\", \"fail\"].includes(String(value.kind));\n}\n","import { randomUUID } from \"node:crypto\";\nimport type { FerricStoreClient } from \"./client.js\";\nimport { complete, fail, isOutcome, retry, type CompleteOutcome, type FailOutcome, type Outcome, type RetryOutcome } from \"./outcomes.js\";\nimport {\n normalizeExceptionPolicy,\n type ClaimedItem,\n type CreateItem,\n type ExceptionPolicy,\n type FlowRecord,\n type StateMeta,\n type WorkerConfig\n} from \"./types.js\";\nimport { sleep } from \"./internal.js\";\n\nexport type QueueJob = FlowRecord | ClaimedItem;\nexport type QueueHandler = (job: QueueJob) => Promise<unknown> | unknown;\nexport type QueueBatchHandler = (jobs: QueueJob[]) => Promise<unknown> | unknown;\n\nexport interface QueueOptions {\n type: string;\n state?: string;\n worker?: string;\n}\n\nexport interface QueueWorkerResult {\n claimed: number;\n completed: number;\n retried: number;\n failed: number;\n}\n\ninterface PendingCompletion {\n done: boolean;\n error?: unknown;\n promise: Promise<number>;\n value: number;\n}\n\nexport class QueueClient {\n readonly flow: FerricStoreClient;\n\n constructor(flow: FerricStoreClient) {\n this.flow = flow;\n }\n\n queue(options: QueueOptions | string): Queue {\n return new Queue(this.flow, typeof options === \"string\" ? { type: options } : options);\n }\n}\n\nexport class Queue {\n readonly client: FerricStoreClient;\n readonly type: string;\n readonly state: string;\n readonly defaultWorker: string;\n\n constructor(client: FerricStoreClient, options: QueueOptions) {\n this.client = client;\n this.type = options.type;\n this.state = options.state ?? \"queued\";\n this.defaultWorker = options.worker ?? `${this.type}-${randomUUID()}`;\n }\n\n async enqueue(id: string, options: {\n payload?: unknown;\n partitionKey?: string;\n runAtMs?: number;\n nowMs?: number;\n priority?: number;\n idempotent?: boolean;\n retentionTtlMs?: number;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n stateMeta?: StateMeta;\n returnRecord?: boolean;\n } = {}): Promise<FlowRecord | Buffer | unknown> {\n return await this.client.enqueue(id, {\n ...options,\n state: this.state,\n type: this.type\n });\n }\n\n async enqueueMany(items: CreateItem[], options: {\n partitionKey?: string;\n runAtMs?: number;\n nowMs?: number;\n priority?: number;\n idempotent?: boolean;\n independent?: boolean;\n retentionTtlMs?: number;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n stateMeta?: StateMeta;\n } = {}): Promise<unknown[] | unknown> {\n return await this.client.enqueueMany(items, {\n ...options,\n state: this.state,\n type: this.type\n });\n }\n\n worker(options: WorkerConfig = {}): QueueWorker {\n return new QueueWorker(this, options);\n }\n}\n\nexport class QueueWorker {\n readonly queue: Queue;\n readonly options: WorkerConfig;\n private readonly pendingCompletions: PendingCompletion[] = [];\n\n constructor(queue: Queue, options: WorkerConfig) {\n this.queue = queue;\n this.options = normalizeWorkerConfig(options);\n }\n\n async runOnce(handler: QueueHandler): Promise<QueueWorkerResult> {\n const completed = await this.drainPendingCompletions(false);\n const jobs = await this.claimJobs();\n const result: QueueWorkerResult = { claimed: jobs.length, completed, failed: 0, retried: 0 };\n if (jobs.length === 0) {\n return result;\n }\n const completions: ClaimedItem[] = [];\n const concurrency = Math.max(1, this.options.concurrency ?? 1);\n let cursor = 0;\n\n const runNext = async (): Promise<void> => {\n while (cursor < jobs.length) {\n const job = jobs[cursor];\n cursor += 1;\n if (job == null) continue;\n await this.applyJob(job, handler, result, completions);\n }\n };\n\n await Promise.all(Array.from({ length: Math.min(concurrency, jobs.length) }, () => runNext()));\n await this.flushCompletions(completions, result);\n return result;\n }\n\n async runBatchOnce(handler: QueueBatchHandler): Promise<QueueWorkerResult> {\n return await this.runBatchOnceWithClaim(handler);\n }\n\n async runBatchOnceForPartitionKeys(\n handler: QueueBatchHandler,\n partitionKeys: readonly string[],\n options: { readonly claimCredit?: number } = {}\n ): Promise<QueueWorkerResult> {\n if (partitionKeys.length === 0) {\n return { claimed: 0, completed: await this.drainPendingCompletions(false), failed: 0, retried: 0 };\n }\n return await this.runBatchOnceWithClaim(handler, {\n limit: options.claimCredit == null ? undefined : Math.min(this.options.batchSize ?? 10, Math.max(1, options.claimCredit)),\n partitionKey: partitionKeys.length === 1 ? partitionKeys[0] : undefined,\n partitionKeys: partitionKeys.length === 1 ? undefined : [...partitionKeys]\n });\n }\n\n async flush(): Promise<number> {\n return await this.drainPendingCompletions(true);\n }\n\n private async runBatchOnceWithClaim(\n handler: QueueBatchHandler,\n claimOptions: {\n readonly limit?: number;\n readonly partitionKey?: string;\n readonly partitionKeys?: string[];\n } = {}\n ): Promise<QueueWorkerResult> {\n const completed = await this.drainPendingCompletions(false);\n const jobs = await this.claimJobs(claimOptions);\n const result: QueueWorkerResult = { claimed: jobs.length, completed, failed: 0, retried: 0 };\n if (jobs.length === 0) {\n return result;\n }\n\n let batchComplete = false;\n let outcome: CompleteOutcome | RetryOutcome | FailOutcome | undefined;\n try {\n const value = await handler(jobs);\n if (value === undefined) {\n batchComplete = true;\n } else {\n const nextOutcome: Outcome = isOutcome(value) ? value : complete({ result: value });\n if (nextOutcome.kind === \"transition\") {\n throw new Error(\"Queue batch handlers cannot return transition(); use Workflow for state transitions\");\n }\n if (isBatchableComplete(nextOutcome)) {\n batchComplete = true;\n } else {\n outcome = nextOutcome;\n }\n }\n } catch (error) {\n for (const job of jobs) {\n await this.applyException(job, error);\n }\n if (normalizeExceptionPolicy(this.options.exceptionPolicy) === \"fail\") {\n result.failed += jobs.length;\n } else {\n result.retried += jobs.length;\n }\n return result;\n }\n\n if (batchComplete) {\n await this.flushCompletions(jobs, result);\n return result;\n }\n if (outcome == null) {\n throw new Error(\"Queue batch handler did not produce a valid outcome\");\n }\n\n for (const job of jobs) {\n await this.applyOutcome(job, outcome);\n }\n if (outcome.kind === \"retry\") {\n result.retried += jobs.length;\n } else if (outcome.kind === \"fail\") {\n result.failed += jobs.length;\n } else {\n result.completed += jobs.length;\n }\n return result;\n }\n\n async run(handler: QueueHandler): Promise<void> {\n const idleSleepMs = this.options.idleSleepMs ?? 250;\n let currentIdleSleepMs = idleSleepMs;\n const maxIdleSleepMs = this.options.maxIdleSleepMs ?? 5_000;\n\n try {\n while (this.options.signal?.aborted !== true) {\n const result = await this.runOnce(handler);\n if (result.claimed === 0) {\n await sleep(currentIdleSleepMs, this.options.signal);\n currentIdleSleepMs = Math.min(maxIdleSleepMs, currentIdleSleepMs * 2);\n } else {\n currentIdleSleepMs = idleSleepMs;\n }\n }\n } finally {\n await this.flush();\n }\n }\n\n private async claimJobs(\n options: {\n readonly limit?: number;\n readonly partitionKey?: string;\n readonly partitionKeys?: string[];\n } = {}\n ): Promise<QueueJob[]> {\n const compact = this.options.claimPayload === false;\n return await this.queue.client.claimDue(this.queue.type, {\n blockMs: this.options.blockMs,\n includeState: false,\n jobOnly: compact,\n leaseMs: this.options.leaseMs ?? 30_000,\n limit: options.limit ?? this.options.batchSize ?? 10,\n nowMs: this.options.nowMs,\n partitionKey: options.partitionKey ?? this.options.partitionKey,\n partitionKeys: options.partitionKeys ?? this.options.partitionKeys,\n payload: compact ? false : true,\n priority: this.options.priority,\n reclaimExpired: this.options.reclaimExpired,\n reclaimRatio: this.options.reclaimRatio,\n state: this.queue.state,\n valueMaxBytes: this.options.valueMaxBytes,\n values: this.options.claimValues,\n worker: this.options.worker ?? this.queue.defaultWorker\n });\n }\n\n private async applyJob(\n job: QueueJob,\n handler: QueueHandler,\n result: QueueWorkerResult,\n completions: ClaimedItem[]\n ): Promise<void> {\n let batchComplete = false;\n let outcome: CompleteOutcome | RetryOutcome | FailOutcome | undefined;\n try {\n const value = await handler(job);\n if (value === undefined) {\n batchComplete = true;\n } else {\n const nextOutcome: Outcome = isOutcome(value) ? value : complete({ result: value });\n if (nextOutcome.kind === \"transition\") {\n throw new Error(\"Queue handlers cannot return transition(); use Workflow for state transitions\");\n }\n if (isBatchableComplete(nextOutcome)) {\n batchComplete = true;\n } else {\n outcome = nextOutcome;\n }\n }\n } catch (error) {\n await this.applyException(job, error);\n if (normalizeExceptionPolicy(this.options.exceptionPolicy) === \"fail\") {\n result.failed += 1;\n } else {\n result.retried += 1;\n }\n return;\n }\n\n if (batchComplete) {\n completions.push(job);\n return;\n }\n if (outcome == null) {\n throw new Error(\"Queue handler did not produce a valid outcome\");\n }\n\n await this.applyOutcome(job, outcome);\n if (outcome.kind === \"retry\") {\n result.retried += 1;\n } else if (outcome.kind === \"fail\") {\n result.failed += 1;\n } else {\n result.completed += 1;\n }\n }\n\n private async flushCompletions(jobs: ClaimedItem[], result: QueueWorkerResult): Promise<void> {\n if (jobs.length === 0) {\n return;\n }\n const depth = Math.max(0, this.options.completeAsyncDepth ?? 0);\n const batchSize = Math.max(1, this.options.batchSize ?? jobs.length);\n if (depth > 0) {\n for (let index = 0; index < jobs.length; index += batchSize) {\n while (this.pendingCompletions.length >= depth) {\n result.completed += await this.drainPendingCompletions(true);\n }\n this.enqueueCompletion(jobs.slice(index, index + batchSize));\n }\n return;\n }\n\n if (jobs.length <= batchSize) {\n await this.queue.client.completeJobs(jobs, {\n independent: this.options.completeIndependent ?? true,\n returnOkOnSuccess: true\n });\n result.completed += jobs.length;\n return;\n }\n\n const syncDepth = 1;\n const pending = new Set<Promise<void>>();\n for (let index = 0; index < jobs.length; index += batchSize) {\n const batch = jobs.slice(index, index + batchSize);\n const promise = this.queue.client.completeJobs(batch, {\n independent: this.options.completeIndependent ?? true,\n returnOkOnSuccess: true\n }).then(() => {\n result.completed += batch.length;\n });\n pending.add(promise.finally(() => pending.delete(promise)));\n if (pending.size >= syncDepth) {\n await Promise.race(pending);\n }\n }\n await Promise.all(pending);\n }\n\n private enqueueCompletion(jobs: ClaimedItem[]): void {\n const pending: PendingCompletion = {\n done: false,\n promise: Promise.resolve(0),\n value: 0\n };\n pending.promise = this.queue.client.completeJobs(jobs, {\n independent: this.options.completeIndependent ?? true,\n returnOkOnSuccess: true\n }).then(\n () => {\n pending.done = true;\n pending.value = jobs.length;\n return jobs.length;\n },\n (error: unknown) => {\n pending.done = true;\n pending.error = error;\n return 0;\n }\n );\n this.pendingCompletions.push(pending);\n }\n\n private async drainPendingCompletions(block: boolean): Promise<number> {\n let completed = 0;\n while (true) {\n let drained = false;\n for (let index = 0; index < this.pendingCompletions.length; ) {\n const pending = this.pendingCompletions[index];\n if (pending == null) {\n break;\n }\n if (!pending.done) {\n index += 1;\n continue;\n }\n this.pendingCompletions.splice(index, 1);\n drained = true;\n if (pending.error != null) {\n if (pending.error instanceof Error) {\n throw pending.error;\n }\n if (typeof pending.error === \"string\") {\n throw new Error(pending.error);\n }\n throw new Error(\"Queue completion failed\", { cause: pending.error });\n }\n completed += pending.value;\n }\n if (!block || this.pendingCompletions.length === 0) {\n return completed;\n }\n if (!drained) {\n await Promise.race(this.pendingCompletions.map((pending) => pending.promise));\n }\n }\n }\n\n private async applyOutcome(job: QueueJob, outcome: CompleteOutcome | RetryOutcome | FailOutcome): Promise<void> {\n if (outcome.kind === \"retry\") {\n await this.queue.client.retry(job.id, {\n error: outcome.error,\n fencingToken: job.fencingToken,\n leaseToken: job.leaseToken,\n partitionKey: job.partitionKey,\n payload: outcome.payload,\n runAtMs: outcome.runAtMs,\n stateMeta: outcome.stateMeta,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n return;\n }\n if (outcome.kind === \"fail\") {\n await this.queue.client.fail(job.id, {\n error: outcome.error,\n fencingToken: job.fencingToken,\n leaseToken: job.leaseToken,\n partitionKey: job.partitionKey,\n payload: outcome.payload,\n stateMeta: outcome.stateMeta,\n ttlMs: outcome.ttlMs,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n return;\n }\n await this.queue.client.complete(job.id, {\n fencingToken: job.fencingToken,\n leaseToken: job.leaseToken,\n partitionKey: job.partitionKey,\n payload: outcome.payload,\n result: outcome.result,\n stateMeta: outcome.stateMeta,\n ttlMs: outcome.ttlMs,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n }\n\n private async applyException(job: QueueJob, error: unknown): Promise<void> {\n const policy: ExceptionPolicy = normalizeExceptionPolicy(this.options.exceptionPolicy);\n if (policy === \"raise\") {\n throw error;\n }\n const payload = error instanceof Error ? { message: error.message, name: error.name, stack: error.stack } : error;\n if (policy === \"fail\") {\n await this.applyOutcome(job, fail({ error: payload }));\n return;\n }\n await this.applyOutcome(job, retry({ error: payload }));\n }\n}\n\nfunction isBatchableComplete(outcome: CompleteOutcome | RetryOutcome | FailOutcome): outcome is CompleteOutcome {\n return (\n outcome.kind === \"complete\" &&\n outcome.payload === undefined &&\n outcome.result === undefined &&\n outcome.ttlMs === undefined &&\n outcome.values === undefined &&\n outcome.valueRefs === undefined &&\n outcome.dropValues === undefined &&\n outcome.overrideValues === undefined &&\n outcome.stateMeta === undefined\n );\n}\n\nfunction normalizeWorkerConfig(options: WorkerConfig): WorkerConfig {\n if (options.profile !== \"throughput\") {\n return options;\n }\n return {\n batchSize: 500,\n claimPayload: false,\n completeAsyncDepth: 8,\n completeIndependent: true,\n ...options\n };\n}\n","import { randomUUID } from \"node:crypto\";\nimport type {\n FerricStoreClient,\n FlowPolicyOptions,\n FlowStateMode,\n FlowStatePolicyLike\n} from \"./client.js\";\nimport type { CompleteOutcome, FailOutcome, Outcome, RetryOutcome, TransitionOutcome } from \"./outcomes.js\";\nimport { complete, fail, isOutcome, retry } from \"./outcomes.js\";\nimport {\n normalizeExceptionPolicy,\n type ChildSpec,\n type ClaimedItem,\n type ExceptionPolicy,\n type FlowRecord,\n type RetryPolicy,\n type StateMeta,\n type ValueConfig,\n type WorkerConfig\n} from \"./types.js\";\nimport { sleep } from \"./internal.js\";\n\nexport type WorkflowHandler = (ctx: WorkflowContext) => Promise<Outcome | void | unknown> | Outcome | void | unknown;\n\nexport interface StateOptions {\n mode?: FlowStateMode;\n leaseMs?: number;\n claimPayload?: boolean;\n claimRecord?: boolean;\n claimValues?: string[];\n valueMaxBytes?: number;\n exceptionPolicy?: ExceptionPolicy;\n retryPolicy?: RetryPolicy;\n returnRecord?: boolean;\n}\n\nexport interface WorkflowOptions {\n type: string;\n initialState?: string;\n valueConfig?: ValueConfig;\n worker?: string;\n}\n\nexport interface WorkflowWorkerResult {\n claimed: number;\n applied: number;\n claimCalls: number;\n emptyClaims: number;\n}\n\nexport interface StateRegistration {\n claimValues?: string[];\n claimPayload: boolean;\n claimRecord: boolean;\n exceptionPolicy: ExceptionPolicy;\n handler: WorkflowHandler;\n leaseMs: number;\n mode?: FlowStateMode;\n name: string;\n returnRecord: boolean;\n retryPolicy?: RetryPolicy;\n valueMaxBytes?: number;\n}\n\nexport class WorkflowClient {\n readonly flow: FerricStoreClient;\n\n constructor(flow: FerricStoreClient) {\n this.flow = flow;\n }\n\n workflow(options: WorkflowOptions): Workflow {\n return new Workflow(this.flow, options);\n }\n}\n\nexport class Workflow {\n readonly client: FerricStoreClient;\n readonly type: string;\n readonly initialState: string;\n readonly valueConfig: ValueConfig & { localCache: boolean };\n readonly defaultWorker: string;\n private readonly states = new Map<string, StateRegistration>();\n\n constructor(client: FerricStoreClient, options: WorkflowOptions) {\n this.client = client;\n this.type = options.type;\n this.initialState = options.initialState ?? \"queued\";\n this.valueConfig = {\n localCache: options.valueConfig?.localCache ?? false,\n valueMaxBytes: options.valueConfig?.valueMaxBytes\n };\n this.defaultWorker = options.worker ?? `${this.type}-${randomUUID()}`;\n }\n\n state(name: string, handler: WorkflowHandler, options: StateOptions = {}): this {\n this.states.set(name, {\n claimPayload: options.claimPayload ?? true,\n claimRecord: options.claimRecord ?? true,\n exceptionPolicy: normalizeExceptionPolicy(options.exceptionPolicy),\n handler,\n leaseMs: options.leaseMs ?? 30_000,\n ...(options.mode == null ? {} : { mode: normalizeStateMode(options.mode) }),\n name,\n returnRecord: options.returnRecord ?? false,\n valueMaxBytes: options.valueMaxBytes ?? this.valueConfig.valueMaxBytes,\n ...(options.claimValues == null ? {} : { claimValues: options.claimValues }),\n ...(options.retryPolicy == null ? {} : { retryPolicy: options.retryPolicy })\n });\n return this;\n }\n\n async start(id: string, options: {\n payload?: unknown;\n state?: string;\n partitionKey?: string;\n parentFlowId?: string;\n rootFlowId?: string;\n correlationId?: string;\n runAtMs?: number;\n nowMs?: number;\n priority?: number;\n idempotent?: boolean;\n retentionTtlMs?: number;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n stateMeta?: StateMeta;\n returnRecord?: boolean;\n } = {}): Promise<FlowRecord | Buffer | unknown> {\n return await this.client.create(id, {\n ...options,\n state: options.state ?? this.initialState,\n type: this.type\n });\n }\n\n async startMany(items: {\n id: string;\n payload?: unknown;\n partitionKey?: string;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n stateMeta?: StateMeta;\n }[], options: {\n state?: string;\n partitionKey?: string;\n runAtMs?: number;\n nowMs?: number;\n priority?: number;\n idempotent?: boolean;\n independent?: boolean;\n retentionTtlMs?: number;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n stateMeta?: StateMeta;\n } = {}): Promise<unknown[] | unknown> {\n return await this.client.createMany(options.partitionKey, items, {\n ...options,\n state: options.state ?? this.initialState,\n type: this.type\n });\n }\n\n async signal(id: string, options: Parameters<FerricStoreClient[\"signal\"]>[1]): Promise<unknown> {\n return await this.client.signal(id, options);\n }\n\n async get(id: string, options: Parameters<FerricStoreClient[\"get\"]>[1] = {}): Promise<FlowRecord | undefined> {\n return await this.client.get(id, options);\n }\n\n async history(id: string, options: Parameters<FerricStoreClient[\"history\"]>[1] = {}): Promise<unknown[]> {\n return await this.client.history(id, options);\n }\n\n worker(options: WorkerConfig & { states?: string[] } = {}): WorkflowWorker {\n return new WorkflowWorker(this, options);\n }\n\n async installPolicy(options: Omit<FlowPolicyOptions, \"mode\" | \"state\" | \"states\"> = {}): Promise<unknown> {\n const states: Record<string, FlowStatePolicyLike> = {};\n for (const registration of this.states.values()) {\n if (registration.mode != null || registration.retryPolicy != null) {\n states[registration.name] = {\n ...(registration.mode == null ? {} : { mode: registration.mode }),\n ...(registration.retryPolicy == null ? {} : { retry: registration.retryPolicy })\n };\n }\n }\n return await this.client.installPolicy(this.type, {\n ...options,\n states\n });\n }\n\n stateNames(): string[] {\n return [...this.states.keys()];\n }\n\n stateRegistration(name: string): StateRegistration | undefined {\n return this.states.get(name);\n }\n}\n\nexport class WorkflowContext {\n readonly workflow: Workflow;\n readonly job: FlowRecord | ClaimedItem;\n readonly stateName: string;\n readonly flow: WorkflowFlowCommands;\n private readonly valueCache = new Map<string, unknown>();\n\n constructor(workflow: Workflow, job: FlowRecord | ClaimedItem, stateName: string) {\n this.workflow = workflow;\n this.job = job;\n this.stateName = stateName;\n this.flow = new WorkflowFlowCommands(this);\n }\n\n get client(): FerricStoreClient {\n return this.workflow.client;\n }\n\n get id(): string {\n return this.job.id;\n }\n\n get type(): string {\n return this.job.type || this.workflow.type;\n }\n\n get state(): string {\n return this.job.state;\n }\n\n get logicalState(): string {\n return this.stateName;\n }\n\n get partitionKey(): string | undefined {\n return this.job.partitionKey;\n }\n\n get payload(): unknown {\n return this.job.payload;\n }\n\n get values(): Record<string, unknown> {\n return \"values\" in this.job && this.job.values != null ? this.job.values : {};\n }\n\n get stateMeta(): Record<string, unknown> {\n return \"stateMeta\" in this.job && this.job.stateMeta != null ? this.job.stateMeta : {};\n }\n\n get indexedStateMeta(): string | undefined {\n return \"indexedStateMeta\" in this.job ? this.job.indexedStateMeta : undefined;\n }\n\n get valueRefs(): Record<string, unknown> {\n return \"valueRefs\" in this.job && this.job.valueRefs != null ? this.job.valueRefs : {};\n }\n\n get leaseToken(): Buffer {\n return this.job.leaseToken;\n }\n\n get fencingToken(): number {\n return this.job.fencingToken;\n }\n\n get version(): number {\n return \"version\" in this.job ? this.job.version : 0;\n }\n\n get parentFlowId(): string | undefined {\n return \"parentFlowId\" in this.job ? this.job.parentFlowId : undefined;\n }\n\n get rootFlowId(): string | undefined {\n return \"rootFlowId\" in this.job ? this.job.rootFlowId : undefined;\n }\n\n get correlationId(): string | undefined {\n return \"correlationId\" in this.job ? this.job.correlationId : undefined;\n }\n\n async value(name: string, defaultValue?: unknown, options: { localCache?: boolean } = {}): Promise<unknown> {\n const useLocalCache = options.localCache ?? this.workflow.valueConfig.localCache;\n if (useLocalCache && this.valueCache.has(name)) {\n return this.valueCache.get(name);\n }\n\n if (name in this.values) {\n const value = this.values[name];\n if (useLocalCache) {\n this.valueCache.set(name, value);\n }\n return value;\n }\n\n const ref = valueRefToString(this.valueRefs[name]);\n if (ref == null) {\n return defaultValue;\n }\n\n const values = await this.client.valueMGet([ref], { maxBytes: this.valueMaxBytes() });\n const value = values[0] ?? defaultValue;\n if (useLocalCache) {\n this.valueCache.set(name, value);\n }\n return value;\n }\n\n async valueMany(names: string[], options: { localCache?: boolean } = {}): Promise<Record<string, unknown>> {\n const result: Record<string, unknown> = {};\n await Promise.all(\n names.map(async (name) => {\n result[name] = await this.value(name, undefined, options);\n })\n );\n return result;\n }\n\n private valueMaxBytes(): number | undefined {\n return this.workflow.stateRegistration(this.stateName)?.valueMaxBytes;\n }\n}\n\nexport class WorkflowFlowCommands {\n constructor(private readonly ctx: WorkflowContext) {}\n\n async get(id = this.ctx.id, options: { partitionKey?: string; full?: boolean } = {}): Promise<FlowRecord | undefined> {\n return await this.ctx.client.get(id, {\n ...options,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey\n });\n }\n\n async history(id = this.ctx.id, options: Parameters<FerricStoreClient[\"history\"]>[1] = {}): Promise<unknown[]> {\n return await this.ctx.client.history(id, {\n ...options,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey\n });\n }\n\n async create(id: string, options: Omit<Parameters<FerricStoreClient[\"create\"]>[1], \"type\"> & { type?: string } = {}): Promise<FlowRecord | Buffer | unknown> {\n return await this.ctx.client.create(id, {\n ...options,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey,\n state: options.state ?? this.ctx.workflow.initialState,\n type: options.type ?? this.ctx.workflow.type\n });\n }\n\n async transition(toState: string, options: Partial<Omit<Parameters<FerricStoreClient[\"transition\"]>[1], \"toState\" | \"fromState\" | \"leaseToken\" | \"fencingToken\">> & { fromState?: string } = {}): Promise<FlowRecord | Buffer | unknown> {\n return await this.ctx.client.transition(this.ctx.id, {\n ...options,\n fencingToken: this.ctx.fencingToken,\n fromState: options.fromState ?? this.ctx.state,\n leaseToken: this.ctx.leaseToken,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey,\n toState\n });\n }\n\n async complete(options: Partial<Omit<Parameters<FerricStoreClient[\"complete\"]>[1], \"leaseToken\" | \"fencingToken\">> = {}): Promise<FlowRecord | Buffer | unknown> {\n return await this.ctx.client.complete(this.ctx.id, {\n ...options,\n fencingToken: this.ctx.fencingToken,\n leaseToken: this.ctx.leaseToken,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey\n });\n }\n\n async retry(options: Partial<Omit<Parameters<FerricStoreClient[\"retry\"]>[1], \"leaseToken\" | \"fencingToken\">> = {}): Promise<FlowRecord | Buffer | unknown> {\n return await this.ctx.client.retry(this.ctx.id, {\n ...options,\n fencingToken: this.ctx.fencingToken,\n leaseToken: this.ctx.leaseToken,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey\n });\n }\n\n async fail(options: Partial<Omit<Parameters<FerricStoreClient[\"fail\"]>[1], \"leaseToken\" | \"fencingToken\">> = {}): Promise<FlowRecord | Buffer | unknown> {\n return await this.ctx.client.fail(this.ctx.id, {\n ...options,\n fencingToken: this.ctx.fencingToken,\n leaseToken: this.ctx.leaseToken,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey\n });\n }\n\n async signal(signal: string, options: Omit<Parameters<FerricStoreClient[\"signal\"]>[1], \"signal\"> = {}): Promise<unknown> {\n return await this.ctx.client.signal(this.ctx.id, {\n ...options,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey,\n signal\n });\n }\n\n async putValue(name: string, value: unknown, options: Parameters<FerricStoreClient[\"valuePut\"]>[1] = {}): Promise<unknown> {\n return await this.ctx.client.valuePut(value, {\n ...options,\n name,\n ownerFlowId: options.ownerFlowId ?? this.ctx.id,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey\n });\n }\n\n async value(name: string, defaultValue?: unknown, options: { localCache?: boolean } = {}): Promise<unknown> {\n return await this.ctx.value(name, defaultValue, options);\n }\n\n async values(names: string[], options: { localCache?: boolean } = {}): Promise<Record<string, unknown>> {\n return await this.ctx.valueMany(names, options);\n }\n\n async spawnChildren(children: ChildSpec[], options: Parameters<FerricStoreClient[\"spawnChildren\"]>[2] = {}): Promise<unknown> {\n return await this.ctx.client.spawnChildren(this.ctx.id, children, {\n ...options,\n fencingToken: options.fencingToken ?? this.ctx.fencingToken,\n leaseToken: options.leaseToken ?? this.ctx.leaseToken,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey\n });\n }\n}\n\nexport class WorkflowWorker {\n readonly workflow: Workflow;\n readonly options: WorkerConfig & { states?: string[] };\n\n constructor(workflow: Workflow, options: WorkerConfig & { states?: string[] }) {\n this.workflow = workflow;\n this.options = options;\n }\n\n async runOnce(): Promise<WorkflowWorkerResult> {\n const states = this.options.states ?? this.workflow.stateNames();\n let claimed = 0;\n let applied = 0;\n let claimCalls = 0;\n let emptyClaims = 0;\n\n for (const stateName of states) {\n const registration = this.workflow.stateRegistration(stateName);\n if (registration == null) {\n throw new Error(`No handler registered for workflow state '${stateName}'`);\n }\n\n claimCalls += 1;\n const jobs = await this.workflow.client.claimDue(this.workflow.type, {\n blockMs: this.options.blockMs,\n includeState: !registration.claimRecord,\n jobOnly: !registration.claimRecord,\n leaseMs: this.options.leaseMs ?? registration.leaseMs,\n limit: this.options.batchSize ?? 10,\n nowMs: this.options.nowMs,\n partitionKey: this.options.partitionKey,\n partitionKeys: this.options.partitionKeys,\n payload: registration.claimPayload,\n priority: this.options.priority,\n reclaimExpired: this.options.reclaimExpired,\n reclaimRatio: this.options.reclaimRatio,\n state: stateName,\n valueMaxBytes: registration.valueMaxBytes,\n values: this.options.claimValues ?? registration.claimValues,\n worker: this.options.worker ?? this.workflow.defaultWorker\n });\n\n if (jobs.length === 0) {\n emptyClaims += 1;\n continue;\n }\n\n claimed += jobs.length;\n for (const job of jobs) {\n await this.applyJob(job, registration);\n applied += 1;\n }\n }\n\n return { applied, claimCalls, claimed, emptyClaims };\n }\n\n async run(): Promise<void> {\n const idleSleepMs = this.options.idleSleepMs ?? 250;\n let currentIdleSleepMs = idleSleepMs;\n const maxIdleSleepMs = this.options.maxIdleSleepMs ?? 5_000;\n\n while (this.options.signal?.aborted !== true) {\n const result = await this.runOnce();\n if (result.claimed === 0) {\n await sleep(currentIdleSleepMs, this.options.signal);\n currentIdleSleepMs = Math.min(maxIdleSleepMs, currentIdleSleepMs * 2);\n } else {\n currentIdleSleepMs = idleSleepMs;\n }\n }\n }\n\n private async applyJob(job: FlowRecord | ClaimedItem, registration: StateRegistration): Promise<void> {\n const ctx = new WorkflowContext(this.workflow, job, registration.name);\n let outcome: Outcome;\n try {\n const value = await registration.handler(ctx);\n outcome = isOutcome(value) ? value : complete({ result: value });\n } catch (error) {\n await this.applyHandlerError(ctx, registration, error);\n return;\n }\n await applyOutcome(this.workflow.client, ctx, outcome, registration.returnRecord);\n }\n\n private async applyHandlerError(ctx: WorkflowContext, registration: StateRegistration, error: unknown): Promise<void> {\n const policy = this.options.exceptionPolicy ?? registration.exceptionPolicy;\n if (policy === \"raise\") {\n throw error;\n }\n if (policy === \"fail\") {\n await applyOutcome(this.workflow.client, ctx, fail({ error: errorToPayload(error) }), registration.returnRecord);\n return;\n }\n await applyOutcome(this.workflow.client, ctx, retry({ error: errorToPayload(error) }), registration.returnRecord);\n }\n}\n\nasync function applyOutcome(\n client: FerricStoreClient,\n ctx: WorkflowContext,\n outcome: Outcome,\n returnRecord: boolean\n): Promise<void> {\n switch (outcome.kind) {\n case \"transition\":\n await applyTransition(client, ctx, outcome, returnRecord);\n return;\n case \"complete\":\n await applyComplete(client, ctx, outcome, returnRecord);\n return;\n case \"retry\":\n await applyRetry(client, ctx, outcome, returnRecord);\n return;\n case \"fail\":\n await applyFail(client, ctx, outcome, returnRecord);\n return;\n }\n}\n\nasync function applyTransition(\n client: FerricStoreClient,\n ctx: WorkflowContext,\n outcome: TransitionOutcome,\n returnRecord: boolean\n): Promise<void> {\n validateTransitionPolicy(ctx, outcome);\n await client.transition(ctx.id, {\n dropValues: outcome.dropValues,\n fencingToken: ctx.fencingToken,\n fromState: ctx.state,\n leaseToken: ctx.leaseToken,\n overrideValues: outcome.overrideValues,\n partitionKey: ctx.partitionKey,\n payload: outcome.payload,\n priority: outcome.priority,\n returnRecord,\n runAtMs: outcome.runAtMs,\n stateMeta: outcome.stateMeta,\n toState: outcome.toState,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n}\n\nfunction validateTransitionPolicy(ctx: WorkflowContext, outcome: TransitionOutcome): void {\n const target = ctx.workflow.stateRegistration(outcome.toState);\n if (target?.mode === \"fifo\" && outcome.priority != null) {\n throw new Error(\"priority is not supported for fifo state\");\n }\n}\n\nasync function applyComplete(\n client: FerricStoreClient,\n ctx: WorkflowContext,\n outcome: CompleteOutcome,\n returnRecord: boolean\n): Promise<void> {\n await client.complete(ctx.id, {\n dropValues: outcome.dropValues,\n fencingToken: ctx.fencingToken,\n leaseToken: ctx.leaseToken,\n overrideValues: outcome.overrideValues,\n partitionKey: ctx.partitionKey,\n payload: outcome.payload,\n result: outcome.result,\n returnRecord,\n stateMeta: outcome.stateMeta,\n ttlMs: outcome.ttlMs,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n}\n\nasync function applyRetry(\n client: FerricStoreClient,\n ctx: WorkflowContext,\n outcome: RetryOutcome,\n returnRecord: boolean\n): Promise<void> {\n await client.retry(ctx.id, {\n dropValues: outcome.dropValues,\n error: outcome.error,\n fencingToken: ctx.fencingToken,\n leaseToken: ctx.leaseToken,\n overrideValues: outcome.overrideValues,\n partitionKey: ctx.partitionKey,\n payload: outcome.payload,\n returnRecord,\n runAtMs: outcome.runAtMs,\n stateMeta: outcome.stateMeta,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n}\n\nasync function applyFail(\n client: FerricStoreClient,\n ctx: WorkflowContext,\n outcome: FailOutcome,\n returnRecord: boolean\n): Promise<void> {\n await client.fail(ctx.id, {\n dropValues: outcome.dropValues,\n error: outcome.error,\n fencingToken: ctx.fencingToken,\n leaseToken: ctx.leaseToken,\n overrideValues: outcome.overrideValues,\n partitionKey: ctx.partitionKey,\n payload: outcome.payload,\n returnRecord,\n stateMeta: outcome.stateMeta,\n ttlMs: outcome.ttlMs,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n}\n\nfunction errorToPayload(error: unknown): unknown {\n if (error instanceof Error) {\n return {\n message: error.message,\n name: error.name,\n stack: error.stack\n };\n }\n return error;\n}\n\nfunction normalizeStateMode(mode: FlowStateMode): FlowStateMode {\n if (mode === \"fifo\" || mode === \"parallel\") {\n return mode;\n }\n throw new Error(\"state mode must be 'fifo' or 'parallel'\");\n}\n\nfunction valueRefToString(value: unknown): string | undefined {\n if (typeof value === \"string\") {\n return value;\n }\n if (Buffer.isBuffer(value)) {\n return value.toString(\"utf8\");\n }\n if (typeof value === \"object\" && value != null && \"ref\" in value) {\n const ref = (value as { ref?: unknown }).ref;\n return typeof ref === \"string\" ? ref : Buffer.isBuffer(ref) ? ref.toString(\"utf8\") : undefined;\n }\n return undefined;\n}\n"],"mappings":"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","names":["import_node_buffer","field","text","attrs","read","bytes","tls","net","import_node_buffer","parseFerricUrl","isPlainObject","field","partition","text","crc32","field","pairs","number","encode","array","decode","string","text","isPlainObject","commandName","commandPart","isPlainObject","pairs","import_node_crypto","value"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/variadic-dispatch.ts","../src/native-adapter.ts","../src/errors.ts","../src/adapter-connection-errors.ts","../src/codecs.ts","../src/flow-value-snapshot.ts","../src/internal-timers.ts","../src/response-array-normalization.ts","../src/crc32.ts","../src/auto-partition.ts","../src/flow-argument-helpers.ts","../src/internal-array-responses.ts","../src/internal.ts","../src/native-connection.ts","../src/native-flow-control.ts","../src/native-heartbeat.ts","../src/protocol.ts","../src/command-grammar.ts","../src/command-metadata-flow.ts","../src/command-metadata.ts","../src/protocol-array-validation.ts","../src/protocol-core.ts","../src/protocol-constants.ts","../src/native-protocol-manifest.json","../src/protocol-text.ts","../src/request-context.ts","../src/protocol-flow-options.ts","../src/protocol-flow-option-value.ts","../src/protocol-flow-admin.ts","../src/protocol-flow-compact.ts","../src/protocol-flow-compact-common.ts","../src/protocol-flow-items.ts","../src/protocol-flow-compact-transition.ts","../src/protocol-flow-compact-single.ts","../src/protocol-flow-routing.ts","../src/protocol-flow.ts","../src/protocol-flow-signal.ts","../src/protocol-connection-policy.ts","../src/protocol-compact-request.ts","../src/protocol-kv.ts","../src/protocol-value.ts","../src/key-slot-validation.ts","../src/topology-utilities.ts","../src/protocol-response.ts","../src/protocol-compact-response.ts","../src/native-negotiation.ts","../src/protocol-compact-collections.ts","../src/native-adapter-config.ts","../src/native-adapter-bootstrap.ts","../src/client-native-options.ts","../src/string-array-snapshot.ts","../src/command-snapshot.ts","../src/pipeline-execution.ts","../src/native-pipeline-execution.ts","../src/native-pending-timeout.ts","../src/native-chunk-assembler.ts","../src/native-response-handler.ts","../src/native-receive-buffer.ts","../src/native-request-scheduler.ts","../src/native-write-queue.ts","../src/native-connection-capabilities.ts","../src/adapters.ts","../src/reconnecting-executor.ts","../src/topology.ts","../src/topology-routing.ts","../src/readonly-map-view.ts","../src/routing-topology.ts","../src/topology-options.ts","../src/topology-endpoint-trust.ts","../src/topology-refresh-candidates.ts","../src/topology-installation.ts","../src/topology-pipeline.ts","../src/topology-adapter-registry.ts","../src/topology-route-snapshot.ts","../src/topology-route-planner.ts","../src/topology-scatter.ts","../src/response-map-preservation.ts","../src/native-kv-responses.ts","../src/types.ts","../src/client-helpers.ts","../src/client-response-helpers.ts","../src/client-errors.ts","../src/client-grouping.ts","../src/client-values.ts","../src/auto-batch.ts","../src/auto-batch-ordering.ts","../src/client-claim-hydration.ts","../src/client-flow-support.ts","../src/client-core.ts","../src/client-core-helpers.ts","../src/client-base.ts","../src/client-executor.ts","../src/client-config.ts","../src/client-administration.ts","../src/store-utilities.ts","../src/modules.ts","../src/store-decoders.ts","../src/store-key-value.ts","../src/store-geo.ts","../src/store-list.ts","../src/store-extra-collections.ts","../src/store-set.ts","../src/store.ts","../src/client-management.ts","../src/producer-backpressure.ts","../src/flow-many-snapshot.ts","../src/client-mutations.ts","../src/client-claims.ts","../src/client-producer.ts","../src/client.ts","../src/outcomes.ts","../src/worker-config.ts","../src/worker-internal.ts","../src/queue.ts","../src/queue-completion-batcher.ts","../src/queue-completion-error.ts","../src/queue-worker-utilities.ts","../src/queue-completion-flush.ts","../src/queue-worker-outcomes.ts","../src/queue-pending-completions.ts","../src/queue-worker-run-loop.ts","../src/queue-worker.ts","../src/flow-client-options.ts","../src/workflow.ts","../src/workflow-utilities.ts","../src/workflow-context.ts","../src/workflow-outcome-application.ts","../src/workflow-registration.ts","../src/version.ts"],"sourcesContent":["export {\n NativeAdapter,\n type CommandExecutor,\n type ExecutePipelineOptions,\n type NativeAdapterOptions,\n type NativeClientOptions,\n type NativeProtocolEvent,\n type ReconnectOptions,\n type TopologyNativeAdapterOptions\n} from \"./adapters.js\";\nexport {\n ReconnectingExecutor,\n isReconnectableClosedConnectionError\n} from \"./reconnecting-executor.js\";\nexport {\n RoutingTopology,\n TopologyNativeAdapterPool,\n type EndpointPolicy,\n type RoutingEndpoint,\n type RoutingRoute\n} from \"./topology.js\";\nexport {\n ClaimHydrationError,\n FerricStoreClient,\n FlowBatchError,\n type AdminListOptions,\n type ApprovalListOptions,\n type ApprovalRequestOptions,\n type AttributeQueryOptions,\n type AutoBatchOptions,\n type BudgetCommitOptions,\n type BudgetReserveOptions,\n type CancelOptions,\n type CircuitOpenOptions,\n type ClaimHydrationItem,\n type ClaimDueOptions,\n type CompleteJobsAndClaimJobsResult,\n type CompleteManyOptions,\n type CompleteOptions,\n type CreateManyOptions,\n type CreateOptions,\n type EffectCompensateOptions,\n type EffectConfirmOptions,\n type EffectFailOptions,\n type EffectReserveOptions,\n type EffectStatusOptions,\n type ExtendLeaseOptions,\n type FailOptions,\n type FerricStoreClientFromUrlOptions,\n type FerricStoreClientOptions,\n type FlowAdminRecord,\n type FlowBatchCompletedItem,\n type FlowStatsOptions,\n type FlowPolicyOptions,\n type FlowStateMode,\n type FlowStatePolicy,\n type FlowStatePolicyLike,\n type HistoryOptions,\n type GovernanceLedgerOptions,\n type InvocationCreateOptions,\n type LimitAmountOptions,\n type LimitLeaseOptions,\n type LimitListOptions,\n type LimitReleaseOptions,\n type LeaseMutationOptions,\n type ManagementPairs,\n type MutateOptions,\n type ReadOptions,\n type ReclaimOptions,\n type RequestContext,\n type RequestContextOptions,\n type RetryOptions,\n type RunStepsItem,\n type RunStepsManyOptions,\n type ScheduleFireDueOptions,\n type ScheduleListOptions,\n type ScheduleOptions,\n type SearchOptions,\n type SearchStateMeta,\n type StartAndClaimOptions,\n type StepContinueOptions,\n type TransitionOptions\n} from \"./client.js\";\nexport { JsonCodec, RawCodec, type Codec } from \"./codecs.js\";\nexport {\n ConnectionClosedError,\n FerricStoreError,\n FlowAlreadyExistsError,\n FlowNotFoundError,\n FlowWrongStateError,\n InvalidCommandError,\n LockHeldError,\n LockNotOwnedError,\n OverloadedError,\n RequestTimeoutError,\n RerouteError,\n StaleLeaseError,\n classifyServerError,\n mapException\n} from \"./errors.js\";\nexport type { RequestDisposition } from \"./errors.js\";\n/** @deprecated Use RequestDisposition; retained for source compatibility. */\nexport type ConnectionRequestDisposition = import(\"./errors.js\").RequestDisposition;\nexport {\n complete,\n fail,\n isOutcome,\n retry,\n transition,\n type CompleteOutcome,\n type FailOutcome,\n type NamedValueMutation,\n type Outcome,\n type RetryOutcome,\n type TransitionOutcome\n} from \"./outcomes.js\";\nexport type { Command, CommandArgument } from \"./internal.js\";\nexport { LeaseRenewalError } from \"./worker-internal.js\";\nexport { COMMAND_OPCODES } from \"./protocol.js\";\nexport type { ProtocolCommand } from \"./protocol.js\";\nexport {\n BloomFilterStore,\n CountMinSketchStore,\n CuckooFilterStore,\n TDigestStore,\n TopKStore,\n type CountMinMergeOptions,\n type TDigestCreateOptions,\n type TDigestMergeOptions,\n type TopKReserveOptions\n} from \"./modules.js\";\nexport {\n Queue,\n QueueClient,\n QueueCompletionError,\n QueueWorker,\n type QueueBatchHandler,\n type QueueHandler,\n type QueueJob,\n type QueueOptions,\n type QueueWorkerResult\n} from \"./queue.js\";\nexport {\n BitmapStore,\n GeoStore,\n HashStore,\n HyperLogLogStore,\n KeyValueStore,\n ListStore,\n SetStore,\n SortedSetStore,\n StreamStore,\n type CollectionScanOptions,\n type ExpiryCondition,\n type GeoAddOptions,\n type GeoMember,\n type GetExOptions,\n type HashScanResult,\n type IntegerReply,\n type RangeLimit,\n type ScanOptions,\n type SetScanResult,\n type SetOptions,\n type SortedSetScanResult,\n type StoreCommandClient,\n type XReadStream,\n type ZAddMember,\n type ZAddOptions\n} from \"./store.js\";\nexport {\n Workflow,\n WorkflowClient,\n WorkflowContext,\n WorkflowFlowCommands,\n WorkflowWorker,\n type StateOptions,\n type StateRegistration,\n type WorkflowHandler,\n type WorkflowOptions,\n type WorkflowWorkerResult\n} from \"./workflow.js\";\nexport type {\n BackoffKind,\n BackpressurePolicy,\n ChildSpec,\n ClaimedItem,\n CreateItem,\n ExceptionPolicy,\n FencingToken,\n FencedItem,\n FetchOrComputeComputeResult,\n FetchOrComputeFencedResult,\n FetchOrComputeHitResult,\n FetchOrComputeResult,\n FlowRecord,\n FlowMaxActiveFailure,\n KeyInfo,\n MaxActiveMs,\n RateLimitResult,\n RetryPolicy,\n StateMeta,\n StateMetaValue,\n ValueConfig,\n WorkerConfig,\n WorkerProfile,\n WorkerRefillStrategy\n} from \"./types.js\";\nexport {\n FERRICSTORE_MINIMUM_SERVER_VERSION,\n FERRICSTORE_NATIVE_PROTOCOL_VERSION,\n FERRICSTORE_SDK_VERSION\n} from \"./version.js\";\n","/**\n * V8 does not expose a portable maximum call-argument count. Keep legacy\n * variadic adapters below a conservative ceiling and require array dispatch\n * for larger commands instead of leaking an engine RangeError.\n */\nconst MAX_SAFE_VARIADIC_ARGUMENTS = 32_768;\n\nexport function assertSafeVariadicDispatch(\n argumentCount: number,\n arrayCapability: \"commandArgs\" | \"executeCommandArgs\"\n): void {\n if (argumentCount <= MAX_SAFE_VARIADIC_ARGUMENTS) return;\n throw new TypeError(\n `commands with more than ${MAX_SAFE_VARIADIC_ARGUMENTS.toLocaleString(\"en-US\")} arguments require ${arrayCapability}`\n );\n}\n","import net from \"node:net\";\nimport tls from \"node:tls\";\nimport { Buffer } from \"node:buffer\";\nimport { FerricStoreError, OverloadedError, RequestTimeoutError, classifyServerError } from \"./errors.js\";\nimport { possiblySentConnectionClosedError, unsentConnectionClosedError } from \"./adapter-connection-errors.js\";\nimport {\n booleanResponse,\n field,\n setLongTimeout,\n type Command,\n type CommandArgument\n} from \"./internal.js\";\nimport {\n flowControlLimits,\n normalizeHeartbeatInterval,\n normalizeNonNegativeInteger,\n normalizePositiveLimit\n} from \"./native-connection.js\";\nimport { NativeFlowControl } from \"./native-flow-control.js\";\nimport { NativeHeartbeat } from \"./native-heartbeat.js\";\nimport {\n DEFAULT_MAX_FRAME_BYTES,\n OPCODES,\n buildProtocolCommand,\n encodeRequest,\n type ProtocolCommand\n} from \"./protocol.js\";\nimport type { ExecutePipelineOptions } from \"./pipeline-execution.js\";\nimport type { CommandExecutor, NativeAdapterOptions, NativeProtocolEvent } from \"./adapter-types.js\";\nimport {\n DEFAULT_MAX_CHUNK_BYTES,\n DEFAULT_MAX_CHUNK_FRAMES,\n DEFAULT_MAX_PENDING_CONTROL_REQUESTS,\n DEFAULT_MAX_QUEUED_REQUESTS,\n DEFAULT_MAX_QUEUED_WRITE_BYTES,\n DEFAULT_MAX_RESPONSE_BYTES\n} from \"./native-adapter-config.js\";\nimport { bootstrapNativeAdapter } from \"./native-adapter-bootstrap.js\";\nimport { executeNativeFusedPipeline, executeNativePipeline } from \"./native-pipeline-execution.js\";\nimport type { PendingRequest } from \"./native-pending-request.js\";\nimport { nativeResponseTimeoutMs, timeoutNativePendingRequest } from \"./native-pending-timeout.js\";\nimport { NativeChunkAssembler } from \"./native-chunk-assembler.js\";\nimport { NativeResponseHandler } from \"./native-response-handler.js\";\nimport { NativeRequestScheduler } from \"./native-request-scheduler.js\";\nimport { NativeWriteQueue } from \"./native-write-queue.js\";\nimport { NativeConnectionCapabilities } from \"./native-connection-capabilities.js\";\nexport class NativeAdapter implements CommandExecutor {\n private readonly socket: net.Socket | tls.TLSSocket;\n private readonly pending = new Map<bigint, PendingRequest>();\n private readonly flowControl: NativeFlowControl;\n private readonly closedWaiters = new Set<() => void>();\n private readonly chunkAssembler: NativeChunkAssembler;\n private closed = false;\n private readonly capabilities: NativeConnectionCapabilities;\n private protocolLanes: number;\n private maxPipelineCommands = Number.MAX_SAFE_INTEGER;\n private pendingControlRequests = 0;\n private readonly maxPendingControlRequests: number;\n private readonly heartbeat: NativeHeartbeat;\n private readonly heartbeatIntervalMs: number | undefined;\n private readonly responseHandler: NativeResponseHandler;\n private readonly requestScheduler = new NativeRequestScheduler();\n private readonly timeoutMs: number;\n private draining = false;\n private readonly writeQueue: NativeWriteQueue;\n\n private constructor(\n socket: net.Socket | tls.TLSSocket,\n timeoutMs: number,\n protocolLanes: number,\n maxChunkBytes: number,\n maxChunkFrames: number,\n maxFrameBytes: number,\n maxResponseBytes: number,\n maxPendingControlRequests: number,\n maxQueuedRequests: number,\n heartbeatIntervalMs?: number,\n onEvent?: (event: NativeProtocolEvent) => unknown,\n maxQueuedWriteBytes = DEFAULT_MAX_QUEUED_WRITE_BYTES\n ) {\n this.socket = socket;\n const normalizedMaxChunkBytes = normalizePositiveLimit(maxChunkBytes, DEFAULT_MAX_CHUNK_BYTES);\n const normalizedMaxChunkFrames = normalizePositiveLimit(maxChunkFrames, DEFAULT_MAX_CHUNK_FRAMES);\n const normalizedMaxFrameBytes = normalizePositiveLimit(maxFrameBytes, DEFAULT_MAX_FRAME_BYTES);\n this.capabilities = new NativeConnectionCapabilities(normalizedMaxFrameBytes);\n const normalizedMaxResponseBytes = normalizePositiveLimit(maxResponseBytes, DEFAULT_MAX_RESPONSE_BYTES);\n this.chunkAssembler = new NativeChunkAssembler(\n normalizedMaxChunkBytes,\n normalizedMaxChunkFrames,\n normalizedMaxResponseBytes\n );\n this.maxPendingControlRequests = normalizePositiveLimit(\n maxPendingControlRequests,\n DEFAULT_MAX_PENDING_CONTROL_REQUESTS\n );\n this.flowControl = new NativeFlowControl(\n normalizeNonNegativeInteger(maxQueuedRequests, DEFAULT_MAX_QUEUED_REQUESTS)\n );\n this.writeQueue = new NativeWriteQueue(\n socket,\n normalizeNonNegativeInteger(maxQueuedWriteBytes, DEFAULT_MAX_QUEUED_WRITE_BYTES),\n () => this.closed,\n (requestId) => this.pending.has(requestId),\n (requestId, error) => this.takePending(requestId)?.reject(error)\n );\n this.timeoutMs = normalizePositiveLimit(timeoutMs, 30_000);\n this.protocolLanes = normalizePositiveLimit(protocolLanes, 8);\n this.heartbeatIntervalMs = normalizeHeartbeatInterval(heartbeatIntervalMs);\n this.heartbeat = new NativeHeartbeat(\n this.heartbeatIntervalMs,\n async () => { await this.request(buildProtocolCommand([\"PING\"], this.capabilities.requestFrameBytes), true); },\n (error) => {\n this.failAll(new FerricStoreError(\"FerricStore protocol heartbeat failed\", { cause: error }), true);\n this.socket.destroy();\n }\n );\n this.responseHandler = new NativeResponseHandler({\n applyFlowControlLimits: (value) => this.applyFlowControlLimits(value),\n beginDraining: () => this.beginDraining(),\n chunkAssembler: this.chunkAssembler,\n compactResponseOpcodes: () => this.capabilities.compactResponseOpcodes,\n destroy: (error) => this.socket.destroy(error),\n failAll: (reason, connectionClosed, message) => this.failAll(reason, connectionClosed, message),\n heartbeat: this.heartbeat,\n maxChunkBytes: normalizedMaxChunkBytes,\n maxChunkFrames: normalizedMaxChunkFrames,\n maxFrameBytes: normalizedMaxFrameBytes,\n maxResponseBytes: normalizedMaxResponseBytes,\n onEvent,\n pause: () => this.socket.pause(),\n pending: this.pending,\n resume: () => this.socket.resume(),\n takePending: (requestId) => this.takePending(requestId)\n });\n this.socket.on(\"data\", (chunk: Buffer) => this.responseHandler.onData(chunk));\n this.socket.on(\"error\", (error) => this.failAll(error, true));\n this.socket.on(\"close\", () => this.failAll(new FerricStoreError(\"FerricStore connection closed\"), true));\n this.socket.on(\"drain\", () => this.writeQueue.flush());\n }\n\n static async fromUrl(url: string, options: NativeAdapterOptions = {}): Promise<NativeAdapter> {\n return await bootstrapNativeAdapter(url, options, (args) => {\n const adapter = new NativeAdapter(...args);\n return {\n adapter,\n auth: async (username, password) => {\n await adapter.request({ laneId: 0, opcode: OPCODES.auth, payload: { password, username } });\n adapter.capabilities.activateAuthenticated();\n },\n close: async () => { await adapter.close(); },\n startHeartbeat: () => adapter.heartbeat.start(),\n startup: async (clientName, events) => await adapter.startup(clientName, events)\n };\n });\n }\n\n /** @internal Closed and GOAWAY-draining adapters must not receive new work. */\n get isUnavailable(): boolean {\n return this.closed || this.draining;\n }\n\n async executeCommand(...args: CommandArgument[]): Promise<unknown> {\n return await this.executeCommandArgs(args);\n }\n\n async executeCommandArgs(args: readonly CommandArgument[]): Promise<unknown> {\n const command = buildProtocolCommand(args, this.capabilities.requestFrameBytes);\n return await this.request(command);\n }\n\n /** @internal Execute raw command arguments on a topology-selected lane. */\n async executeCommandOnLane(\n args: readonly CommandArgument[],\n laneId: number\n ): Promise<unknown> {\n return await this.executeProtocolCommand(\n buildProtocolCommand(args, this.capabilities.requestFrameBytes),\n laneId\n );\n }\n\n async executeProtocolCommand(command: ProtocolCommand, laneId?: number): Promise<unknown> {\n return await this.request(laneId == null ? command : { ...command, laneId });\n }\n\n async executePipeline(commands: readonly Command[], options: ExecutePipelineOptions = {}): Promise<unknown[]> {\n return await this.executePipelineOnLane(commands, undefined, options);\n }\n\n /** @internal Attempt one physical pipeline request without splitting or fallback. */\n async executeFusedPipeline(\n commands: readonly Command[],\n options: ExecutePipelineOptions = {}\n ): Promise<unknown[] | undefined> {\n return await this.executeFusedPipelineOnLane(commands, undefined, options);\n }\n\n /** @internal Attempt one physical pipeline request on a topology-selected lane. */\n async executeFusedPipelineOnLane(\n commands: readonly Command[],\n laneId: number | undefined,\n options: ExecutePipelineOptions = {}\n ): Promise<unknown[] | undefined> {\n return await executeNativeFusedPipeline(\n this, commands, laneId, options, this.maxPipelineCommands, this.capabilities.requestFrameBytes\n );\n }\n\n /** @internal Execute an ordered pipeline on a topology-selected lane. */\n async executePipelineOnLane(\n commands: readonly Command[],\n laneId: number | undefined,\n options: ExecutePipelineOptions = {}\n ): Promise<unknown[]> {\n return await executeNativePipeline(\n this, commands, laneId, options, this.maxPipelineCommands, this.capabilities.requestFrameBytes\n );\n }\n\n async close(): Promise<void> {\n if (this.closed) return;\n this.failAll(new FerricStoreError(\"FerricStore connection closed\"), true);\n this.socket.destroy();\n }\n\n private async startup(clientName?: string, events?: readonly string[]): Promise<boolean> {\n const response = await this.request({\n laneId: 0,\n opcode: OPCODES.startup,\n payload: {\n client_name: clientName ?? \"ferricstore-typescript\",\n compact_flow_responses: true,\n compression: \"none\",\n driver_name: clientName ?? \"ferricstore-typescript\",\n ...(events == null || events.length === 0 ? {} : { events: [...events] })\n }\n });\n this.applyStartupLimits(response);\n const authRequired = field(response, \"auth_required\");\n const required = authRequired == null ? false : booleanResponse(authRequired);\n if (authRequired != null && !required) this.capabilities.activateAuthenticated();\n return required;\n }\n\n private request(command: ProtocolCommand, allowWhileDraining = false): Promise<unknown> {\n if (this.closed || (this.draining && !allowWhileDraining)) {\n return Promise.reject(unsentConnectionClosedError());\n }\n const assigned = this.requestScheduler.assignLane(command, this.protocolLanes);\n const laneId = assigned.laneId ?? 0;\n const responseTimeoutMs = nativeResponseTimeoutMs(assigned, this.timeoutMs);\n // FerricStore enforces advertised credits on data opcodes. Control opcodes\n // bypass the server counters, which also lets WINDOW_UPDATE reopen zero.\n if (command.opcode < OPCODES.commandExec && command.opcode !== OPCODES.pipeline) {\n return this.sendAcquiredRequest(assigned, laneId, responseTimeoutMs, false);\n }\n if (this.flowControl.tryAcquire(laneId)) {\n return this.sendAcquiredRequest(assigned, laneId, responseTimeoutMs);\n }\n return this.waitForCreditAndSend(assigned, laneId, Date.now(), responseTimeoutMs);\n }\n\n private async waitForCreditAndSend(\n command: ProtocolCommand,\n laneId: number,\n startedAtMs: number,\n responseTimeoutMs: number | undefined\n ): Promise<unknown> {\n await this.flowControl.wait(laneId, Math.min(this.timeoutMs, responseTimeoutMs ?? this.timeoutMs));\n if (this.closed || this.draining) {\n this.flowControl.release(laneId);\n throw unsentConnectionClosedError();\n }\n const remainingMs = responseTimeoutMs == null\n ? undefined\n : responseTimeoutMs - (Date.now() - startedAtMs);\n if (remainingMs != null && remainingMs <= 0) {\n this.flowControl.release(laneId);\n throw new RequestTimeoutError(responseTimeoutMs ?? this.timeoutMs, \"unsent\");\n }\n return await this.sendAcquiredRequest(command, laneId, remainingMs);\n }\n\n private sendAcquiredRequest(\n command: ProtocolCommand,\n laneId: number,\n timeoutMs: number | undefined,\n hasFlowControlCredit = true\n ): Promise<unknown> {\n if (!hasFlowControlCredit && this.pendingControlRequests >= this.maxPendingControlRequests) {\n return Promise.reject(new OverloadedError(\n \"FerricStore client control request limit is full\",\n { reason: \"client_control_requests_full\" }\n ));\n }\n let requestId: bigint;\n let frame: Buffer;\n try {\n requestId = this.requestScheduler.nextRequestId();\n frame = encodeRequest(command, requestId, this.capabilities.requestFrameBytes);\n } catch (error) {\n if (hasFlowControlCredit) this.flowControl.release(laneId);\n return Promise.reject(error instanceof Error ? error : new FerricStoreError(String(error), { raw: error }));\n }\n\n return new Promise<unknown>((resolve, reject) => {\n const timer = timeoutMs == null ? undefined : setLongTimeout(() => {\n this.timeoutPending(requestId, timeoutMs);\n }, timeoutMs);\n timer?.unref();\n\n if (!hasFlowControlCredit) this.pendingControlRequests += 1;\n this.pending.set(requestId, {\n ...(command.compactClaimMode == null ? {} : { compactClaimMode: command.compactClaimMode }),\n hasFlowControlCredit,\n indefinite: timeoutMs == null,\n laneId,\n opcode: command.opcode,\n ...(command.pipelineClaimModes == null ? {} : { pipelineClaimModes: command.pipelineClaimModes }),\n reject: (reason: unknown) => {\n timer?.cancel();\n reject(reason instanceof Error ? reason : classifyServerError(String(reason), reason));\n },\n resolve: (value: unknown) => {\n timer?.cancel();\n resolve(value);\n }\n });\n\n this.writeQueue.write(requestId, frame);\n });\n }\n\n private timeoutPending(requestId: bigint, timeoutMs: number): void {\n timeoutNativePendingRequest({\n discardRequest: (id) => this.chunkAssembler.discardRequest(id),\n getPending: (id) => this.pending.get(id),\n isWriteQueued: (id) => this.writeQueue.has(id),\n retireConnection: (error) => {\n this.failAll(error, true, error.message);\n this.socket.destroy(error);\n },\n takePending: (id) => this.takePending(id)\n }, requestId, timeoutMs);\n }\n\n private finishDrainIfIdle(): void {\n if (!this.draining || this.pending.size > 0 || this.closed) {\n return;\n }\n this.closed = true;\n this.responseHandler.stop();\n this.heartbeat.stop();\n this.flowControl.close(unsentConnectionClosedError());\n this.socket.destroy();\n this.resolveClosedWaiters();\n }\n\n private failAll(reason: unknown, connectionClosed = false, dispatchedMessage?: string): void {\n if (this.closed) return;\n this.closed = true;\n this.responseHandler.stop();\n this.resolveClosedWaiters();\n this.heartbeat.stop();\n const cause = reason instanceof Error ? reason : classifyServerError(String(reason), reason);\n const unsentError = unsentConnectionClosedError(cause);\n const dispatchedError = connectionClosed\n ? possiblySentConnectionClosedError(cause, dispatchedMessage)\n : cause;\n this.flowControl.close(unsentError);\n for (const [requestId, pending] of this.pending) {\n pending.lateResponseTimer?.cancel();\n if (pending.hasFlowControlCredit) this.flowControl.release(pending.laneId);\n pending.reject(this.writeQueue.has(requestId) ? unsentError : dispatchedError);\n }\n this.pending.clear();\n this.pendingControlRequests = 0;\n this.writeQueue.clear();\n this.chunkAssembler.clear();\n }\n\n /** @internal Gracefully stop new requests and close after correlated requests settle. */\n async retire(): Promise<void> {\n if (!this.closed) {\n this.beginDraining();\n }\n if (this.closed) {\n return;\n }\n await new Promise<void>((resolve) => this.closedWaiters.add(resolve));\n }\n\n private beginDraining(): void {\n this.draining = true;\n const unsentError = unsentConnectionClosedError();\n const possiblySentError = possiblySentConnectionClosedError();\n this.flowControl.cancelQueued(unsentError);\n this.writeQueue.rejectQueued(unsentError);\n // Reject only infinite server blocks; finite requests retain graceful drain semantics.\n for (const [requestId, pending] of [...this.pending]) {\n if (pending.indefinite) {\n const error = this.writeQueue.has(requestId) ? unsentError : possiblySentError;\n this.takePending(requestId)?.reject(error);\n }\n }\n this.finishDrainIfIdle();\n }\n\n private resolveClosedWaiters(): void {\n for (const resolve of this.closedWaiters) resolve();\n this.closedWaiters.clear();\n }\n\n private takePending(requestId: bigint): PendingRequest | undefined {\n const pending = this.pending.get(requestId);\n if (pending == null) return undefined;\n pending.lateResponseTimer?.cancel();\n this.pending.delete(requestId);\n this.writeQueue.cancel(requestId);\n this.chunkAssembler.discardRequest(requestId);\n if (pending.hasFlowControlCredit) this.flowControl.release(pending.laneId);\n else this.pendingControlRequests = Math.max(0, this.pendingControlRequests - 1);\n this.finishDrainIfIdle();\n return pending;\n }\n\n private applyFlowControlLimits(value: unknown): void {\n const limits = flowControlLimits(value);\n if (limits.connection == null && limits.lane == null) return;\n this.flowControl.updateLimits(limits.connection, limits.lane);\n }\n\n private applyStartupLimits(value: unknown): void {\n this.applyFlowControlLimits(value);\n const capabilities = this.capabilities.apply(value);\n if (capabilities.maxResponseBytes != null) {\n this.responseHandler.updateMaxResponseBytes(capabilities.maxResponseBytes);\n }\n if (capabilities.laneQueue != null) {\n this.flowControl.updateLaneQueueLimit(capabilities.laneQueue);\n }\n if (capabilities.lanes != null) {\n this.protocolLanes = Math.min(this.protocolLanes, capabilities.lanes);\n }\n if (capabilities.pipelineCommands != null) {\n this.maxPipelineCommands = capabilities.pipelineCommands;\n }\n }\n}\n","export class FerricStoreError extends Error {\n readonly code: string = \"ferricstore_error\";\n readonly raw: unknown;\n readonly retryable: boolean | undefined;\n readonly safeToRetry: boolean | undefined;\n readonly retryAfterMs: number | undefined;\n\n constructor(message: string, options: {\n raw?: unknown;\n cause?: unknown;\n retryable?: boolean;\n safeToRetry?: boolean;\n retryAfterMs?: number;\n } = {}) {\n super(message, { cause: options.cause });\n this.name = new.target.name;\n this.raw = options.raw;\n this.retryable = options.retryable ?? structuredBooleanField(options.raw, \"retryable\");\n this.safeToRetry = options.safeToRetry ?? structuredBooleanField(options.raw, \"safe_to_retry\");\n this.retryAfterMs = options.retryAfterMs ?? structuredIntegerField(options.raw, \"retry_after_ms\");\n }\n}\n\nexport type RequestDisposition = \"unsent\" | \"possibly_sent\";\n/** @deprecated Use RequestDisposition; retained for source compatibility. */\nexport type ConnectionRequestDisposition = RequestDisposition;\n\n/** Connection closure annotated with whether the current request may have reached the server. */\nexport class ConnectionClosedError extends FerricStoreError {\n override readonly code = \"connection_closed\";\n readonly requestDisposition: RequestDisposition;\n\n constructor(\n requestDisposition: RequestDisposition,\n options: { raw?: unknown; cause?: unknown; message?: string } = {}\n ) {\n super(\n options.message ?? (requestDisposition === \"unsent\"\n ? \"FerricStore connection is closed\"\n : \"FerricStore connection closed\"),\n options\n );\n this.requestDisposition = requestDisposition;\n }\n}\n\n/** Request timeout annotated with whether the request may have reached the server. */\nexport class RequestTimeoutError extends FerricStoreError {\n override readonly code = \"request_timeout\";\n readonly requestDisposition: RequestDisposition;\n readonly timeoutMs: number;\n\n constructor(\n timeoutMs: number,\n requestDisposition: RequestDisposition,\n options: { raw?: unknown; cause?: unknown } = {}\n ) {\n super(`FerricStore request timed out after ${timeoutMs}ms`, options);\n this.requestDisposition = requestDisposition;\n this.timeoutMs = timeoutMs;\n }\n}\n\nexport class FlowNotFoundError extends FerricStoreError {\n override readonly code = \"flow_not_found\";\n}\n\nexport class FlowWrongStateError extends FerricStoreError {\n override readonly code = \"flow_wrong_state\";\n}\n\nexport class StaleLeaseError extends FerricStoreError {\n override readonly code = \"stale_lease\";\n}\n\nexport class FlowAlreadyExistsError extends FerricStoreError {\n override readonly code = \"flow_already_exists\";\n}\n\nexport class LockHeldError extends FerricStoreError {\n override readonly code = \"lock_held\";\n}\n\nexport class LockNotOwnedError extends FerricStoreError {\n override readonly code = \"lock_not_owned\";\n}\n\nexport class InvalidCommandError extends FerricStoreError {\n override readonly code = \"invalid_command\";\n}\n\nexport class OverloadedError extends FerricStoreError {\n override readonly code = \"overloaded\";\n readonly reason: string | undefined;\n\n constructor(\n message: string,\n options: {\n raw?: unknown;\n cause?: unknown;\n retryAfterMs?: number;\n reason?: string;\n retryable?: boolean;\n safeToRetry?: boolean;\n } = {}\n ) {\n const local = options.raw == null;\n super(message, {\n ...options,\n retryable: options.retryable ?? (local ? true : undefined),\n safeToRetry: options.safeToRetry ?? (local ? true : undefined)\n });\n this.reason = options.reason;\n }\n}\n\n/** The contacted endpoint cannot serve this route and topology should be refreshed. */\nexport class RerouteError extends FerricStoreError {\n override readonly code = \"reroute\";\n}\n\nconst OVERLOAD_CODES = new Set([\n \"backpressure\",\n \"busy\",\n \"flow_control_window_exhausted\",\n \"lane_queue_full\",\n \"overloaded\"\n]);\n\nexport function classifyServerError(\n message: string,\n raw?: unknown,\n cause?: unknown,\n status?: number | string\n): FerricStoreError {\n const lower = message.toLowerCase();\n const structuredCode = structuredStringField(raw, \"code\");\n const code = structuredCode?.toLowerCase();\n const retry = {\n retryable: structuredBooleanField(raw, \"retryable\"),\n safeToRetry: structuredBooleanField(raw, \"safe_to_retry\"),\n retryAfterMs: structuredIntegerField(raw, \"retry_after_ms\") ?? intField(lower, \"retry_after_ms\")\n };\n\n if (isRerouteStatus(status) || code === \"reroute\") {\n return new RerouteError(message, { cause, raw, ...definedRetryMetadata(retry) });\n }\n if (isBusyStatus(status) || isOverloadCode(structuredCode) || overloadMessage(lower)) {\n return new OverloadedError(message, {\n cause,\n raw,\n ...definedRetryMetadata(retry),\n reason: structuredStringField(raw, \"reason\") ?? structuredCode ?? stringField(lower, \"reason\"),\n retryAfterMs: retry.retryAfterMs\n });\n }\n if (code === \"flow_already_exists\" || (lower.includes(\"flow\") && lower.includes(\"already exists\"))) {\n return new FlowAlreadyExistsError(message, { cause, raw });\n }\n if (lower.includes(\"flow wrong state\") || code === \"flow_wrong_state\") {\n return new FlowWrongStateError(message, { cause, raw });\n }\n if (\n code === \"stale_lease\"\n || code === \"stale_flow_lease\"\n || lower.includes(\"stale flow lease\")\n || lower.includes(\"stale lease\")\n || lower.includes(\"stale token\")\n ) {\n return new StaleLeaseError(message, { cause, raw });\n }\n if (\n code === \"flow_not_found\"\n || (lower.includes(\"flow\") && (lower.includes(\"not found\") || lower.includes(\"does not exist\")))\n ) {\n return new FlowNotFoundError(message, { cause, raw });\n }\n if (code === \"lock_held\" || lower.includes(\"lock is held\") || lower.includes(\"held by another owner\")) {\n return new LockHeldError(message, { cause, raw });\n }\n if (code === \"lock_not_owned\" || lower.includes(\"not the lock owner\") || lower.includes(\"caller is not the lock owner\")) {\n return new LockNotOwnedError(message, { cause, raw });\n }\n if (code === \"invalid_command\" || lower.includes(\"wrong number of arguments\") || lower.includes(\"syntax error\")) {\n return new InvalidCommandError(message, { cause, raw });\n }\n\n return new FerricStoreError(message, { cause, raw, ...definedRetryMetadata(retry) });\n}\n\nexport function mapException(error: unknown): unknown {\n if (error instanceof FerricStoreError) {\n return error;\n }\n\n if (!(error instanceof Error)) {\n return error;\n }\n\n const message = error.message;\n const serverLike =\n error.name === \"ResponseError\" ||\n message.startsWith(\"ERR \") ||\n message.startsWith(\"WRONGTYPE \") ||\n message.startsWith(\"DISTLOCK \");\n\n if (!serverLike) {\n return error;\n }\n\n return classifyServerError(message, error, error);\n}\n\nfunction intField(message: string, name: string): number | undefined {\n const match = new RegExp(`\\\\b${name}=([0-9]+)\\\\b`).exec(message);\n return match?.[1] == null ? undefined : nonNegativeSafeIntegerText(match[1]);\n}\n\nfunction isBusyStatus(status: number | string | undefined): boolean {\n return status === 4 || (typeof status === \"string\" && (status === \"4\" || status.toLowerCase() === \"busy\"));\n}\n\nfunction isRerouteStatus(status: number | string | undefined): boolean {\n return status === 5 || (typeof status === \"string\" && (status === \"5\" || status.toLowerCase() === \"reroute\"));\n}\n\nfunction isOverloadCode(code: string | undefined): boolean {\n return code != null && OVERLOAD_CODES.has(code.toLowerCase());\n}\n\nfunction overloadMessage(message: string): boolean {\n return /\\boverloaded\\b/u.test(message) || /(?:^|\\s)busy(?:\\s|:|$)/u.test(message);\n}\n\nfunction structuredIntegerField(raw: unknown, name: string): number | undefined {\n const value = structuredField(raw, name);\n if (typeof value === \"number\") {\n return Number.isSafeInteger(value) && value >= 0 ? value : undefined;\n }\n if (typeof value === \"bigint\") {\n return value >= 0n && value <= BigInt(Number.MAX_SAFE_INTEGER) ? Number(value) : undefined;\n }\n const text = binaryText(value);\n return text == null ? undefined : nonNegativeSafeIntegerText(text);\n}\n\nfunction structuredBooleanField(raw: unknown, name: string): boolean | undefined {\n const value = structuredField(raw, name);\n if (typeof value === \"boolean\") return value;\n const text = binaryText(value)?.toLowerCase();\n if (text === \"true\" || text === \"1\") return true;\n if (text === \"false\" || text === \"0\") return false;\n return undefined;\n}\n\nfunction definedRetryMetadata(metadata: {\n readonly retryable?: boolean;\n readonly safeToRetry?: boolean;\n readonly retryAfterMs?: number;\n}): { retryable?: boolean; safeToRetry?: boolean; retryAfterMs?: number } {\n return {\n ...(metadata.retryable == null ? {} : { retryable: metadata.retryable }),\n ...(metadata.safeToRetry == null ? {} : { safeToRetry: metadata.safeToRetry }),\n ...(metadata.retryAfterMs == null ? {} : { retryAfterMs: metadata.retryAfterMs })\n };\n}\n\nfunction nonNegativeSafeIntegerText(value: string): number | undefined {\n if (!/^[0-9]+$/u.test(value)) return undefined;\n const parsed = Number.parseInt(value, 10);\n return Number.isSafeInteger(parsed) && parsed >= 0 ? parsed : undefined;\n}\n\nfunction structuredStringField(raw: unknown, name: string): string | undefined {\n return binaryText(structuredField(raw, name));\n}\n\nfunction structuredField(raw: unknown, name: string): unknown {\n if (raw instanceof Map) {\n if (raw.has(name)) return raw.get(name);\n for (const [key, value] of raw.entries()) {\n if (binaryText(key) === name) return value;\n }\n return undefined;\n }\n if (typeof raw === \"object\" && raw != null && Object.hasOwn(raw, name)) {\n return (raw as Record<string, unknown>)[name];\n }\n return undefined;\n}\n\nfunction binaryText(value: unknown): string | undefined {\n if (typeof value === \"string\") return value;\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) return Buffer.from(value).toString(\"utf8\");\n return undefined;\n}\n\nfunction stringField(message: string, name: string): string | undefined {\n const match = new RegExp(`\\\\b${name}=([a-z0-9_:-]+)\\\\b`).exec(message);\n return match?.[1];\n}\n","import { ConnectionClosedError } from \"./errors.js\";\n\nexport function unsentConnectionClosedError(cause?: unknown): ConnectionClosedError {\n return new ConnectionClosedError(\"unsent\", cause == null ? {} : { cause, raw: cause });\n}\n\nexport function possiblySentConnectionClosedError(cause?: unknown, message?: string): ConnectionClosedError {\n return new ConnectionClosedError(\"possibly_sent\", cause == null\n ? { message }\n : { cause, message, raw: cause });\n}\n","export interface Codec<T = unknown> {\n encode(value: T | null | undefined): Buffer;\n decode(value: Buffer | null | undefined): T | null;\n}\n\nexport class RawCodec implements Codec<Buffer | string | Uint8Array | null> {\n encode(value: Buffer | string | Uint8Array | null | undefined): Buffer {\n if (value == null) {\n return Buffer.alloc(0);\n }\n if (Buffer.isBuffer(value)) {\n return value;\n }\n if (value instanceof Uint8Array) {\n return Buffer.from(value);\n }\n if (typeof value === \"string\") {\n return Buffer.from(value);\n }\n throw new TypeError(\"RawCodec accepts Buffer, Uint8Array, string, null, or undefined\");\n }\n\n decode(value: Buffer | null | undefined): Buffer | null {\n return value ?? null;\n }\n}\n\nexport class JsonCodec<T = unknown> implements Codec<T> {\n encode(value: T | null | undefined): Buffer {\n return Buffer.from(JSON.stringify(value ?? null));\n }\n\n decode(value: Buffer | null | undefined): T | null {\n if (value == null) {\n return null;\n }\n return JSON.parse(value.toString(\"utf8\")) as T;\n }\n}\n","import { JsonCodec, RawCodec, type Codec } from \"./codecs.js\";\n\ntype FlowValueSnapshotState =\n | { readonly bytes: Buffer; readonly ok: true }\n | { readonly error: unknown; readonly ok: false };\n\nconst flowValueSnapshots = new WeakMap<object, FlowValueSnapshotState>();\n\n/** Encode a value at batch admission while deferring any codec error to its chunk. */\nexport function snapshotFlowValue(codec: Codec, value: unknown): unknown {\n if (typeof value === \"object\" && value != null && flowValueSnapshots.has(value)) {\n return value;\n }\n const snapshot = Object.freeze({});\n try {\n const encoded = codec.encode(value);\n flowValueSnapshots.set(snapshot, {\n bytes: codecOwnsEncodedBytes(codec, value) ? encoded : Buffer.from(encoded),\n ok: true\n });\n } catch (error) {\n flowValueSnapshots.set(snapshot, { error, ok: false });\n }\n return snapshot;\n}\n\n/** Reuse admission bytes for chunked operations; encode ordinary calls normally. */\nexport function encodeFlowValue(codec: Codec, value: unknown): Buffer {\n const snapshot = typeof value === \"object\" && value != null\n ? flowValueSnapshots.get(value)\n : undefined;\n if (snapshot == null) return codec.encode(value);\n if (!snapshot.ok) throw snapshot.error;\n return snapshot.bytes;\n}\n\nfunction codecOwnsEncodedBytes(codec: Codec, value: unknown): boolean {\n if (codec.constructor === JsonCodec) return true;\n return codec.constructor === RawCodec && !Buffer.isBuffer(value);\n}\n","export const MAX_TIMER_DELAY_MS = 2_147_483_647;\n\nexport interface LongTimer {\n cancel(): void;\n unref(): void;\n}\n\nexport function setLongTimeout(callback: () => void, delayMs: number): LongTimer {\n let canceled = false;\n let shouldUnref = false;\n let timer: NodeJS.Timeout | undefined;\n let remainingMs = Number.isFinite(delayMs) ? Math.max(0, Math.trunc(delayMs)) : 0;\n\n const schedule = (): void => {\n const chunkMs = Math.min(remainingMs, MAX_TIMER_DELAY_MS);\n timer = setTimeout(() => {\n if (canceled) return;\n remainingMs -= chunkMs;\n if (remainingMs <= 0) callback();\n else schedule();\n }, chunkMs);\n if (shouldUnref) timer.unref?.();\n };\n schedule();\n\n return {\n cancel(): void {\n canceled = true;\n if (timer != null) clearTimeout(timer);\n },\n unref(): void {\n shouldUnref = true;\n timer?.unref?.();\n }\n };\n}\n\nexport function setLongInterval(callback: () => void, intervalMs: number): LongTimer {\n let canceled = false;\n let shouldUnref = false;\n let timer: LongTimer | undefined;\n const delayMs = Number.isFinite(intervalMs) ? Math.max(1, Math.trunc(intervalMs)) : 1;\n\n const schedule = (): void => {\n timer = setLongTimeout(() => {\n if (canceled) return;\n try {\n callback();\n } finally {\n if (!canceled) schedule();\n }\n }, delayMs);\n if (shouldUnref) timer.unref();\n };\n schedule();\n\n return {\n cancel(): void {\n canceled = true;\n timer?.cancel();\n },\n unref(): void {\n shouldUnref = true;\n timer?.unref();\n }\n };\n}\n","/** Normalize a response array without silently preserving missing positions. */\nexport function mapDenseResponseArray(\n value: unknown[],\n transform: (item: unknown) => unknown\n): unknown[] {\n const result = new Array<unknown>(value.length);\n for (let index = 0; index < value.length; index += 1) {\n if (!Object.hasOwn(value, index)) {\n throw new TypeError(`response array item ${index} is missing`);\n }\n result[index] = transform(value[index]);\n }\n return result;\n}\n","import { Buffer } from \"node:buffer\";\n\nconst table = new Uint32Array(256);\nfor (let index = 0; index < table.length; index += 1) {\n let value = index;\n for (let bit = 0; bit < 8; bit += 1) {\n value = (value & 1) !== 0 ? 0xedb8_8320 ^ (value >>> 1) : value >>> 1;\n }\n table[index] = value >>> 0;\n}\n\nexport function crc32(buffer: Buffer): number {\n let value = 0xffff_ffff;\n for (const byte of buffer) {\n value = (value >>> 8) ^ (table[(value ^ byte) & 0xff] ?? 0);\n }\n return (value ^ 0xffff_ffff) >>> 0;\n}\n\n/** CRC32 a UTF-8 string range without allocating an intermediate byte array. */\nexport function crc32Utf8(text: string, start = 0, end = text.length): number {\n let value = 0xffff_ffff;\n for (let index = start; index < end; index += 1) {\n const first = text.charCodeAt(index);\n let point = first;\n if (first >= 0xd800 && first <= 0xdbff) {\n const second = index + 1 < end ? text.charCodeAt(index + 1) : 0;\n if (second >= 0xdc00 && second <= 0xdfff) {\n point = 0x1_0000 + ((first - 0xd800) << 10) + second - 0xdc00;\n index += 1;\n } else {\n point = 0xfffd;\n }\n } else if (first >= 0xdc00 && first <= 0xdfff) {\n point = 0xfffd;\n }\n\n if (point < 0x80) {\n value = updateCrc32(value, point);\n } else if (point < 0x800) {\n value = updateCrc32(value, 0xc0 | (point >>> 6));\n value = updateCrc32(value, 0x80 | (point & 0x3f));\n } else if (point < 0x1_0000) {\n value = updateCrc32(value, 0xe0 | (point >>> 12));\n value = updateCrc32(value, 0x80 | ((point >>> 6) & 0x3f));\n value = updateCrc32(value, 0x80 | (point & 0x3f));\n } else {\n value = updateCrc32(value, 0xf0 | (point >>> 18));\n value = updateCrc32(value, 0x80 | ((point >>> 12) & 0x3f));\n value = updateCrc32(value, 0x80 | ((point >>> 6) & 0x3f));\n value = updateCrc32(value, 0x80 | (point & 0x3f));\n }\n }\n return (value ^ 0xffff_ffff) >>> 0;\n}\n\nfunction updateCrc32(value: number, byte: number): number {\n return (value >>> 8) ^ (table[(value ^ byte) & 0xff] ?? 0);\n}\n","import { crc32Utf8 } from \"./crc32.js\";\n\nexport const AUTO_PARTITION_PREFIX = \"__flow_auto__:\";\nexport const AUTO_PARTITION_BUCKETS = 256;\n\nexport function autoPartitionKeyForId(id: string): string {\n return `${AUTO_PARTITION_PREFIX}${crc32Utf8(id) % AUTO_PARTITION_BUCKETS}`;\n}\n","import type { Codec } from \"./codecs.js\";\nimport { encodeFlowValue } from \"./flow-value-snapshot.js\";\nimport type { CommandArgument } from \"./internal.js\";\n\nexport function appendNamedValues(\n args: CommandArgument[],\n codec: Codec,\n options: {\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n dropValues?: readonly string[];\n overrideValues?: readonly string[];\n }\n): void {\n for (const [name, value] of Object.entries(options.values ?? {})) {\n args.push(\"VALUE\", name, encodeFlowValue(codec, value));\n }\n for (const [name, ref] of Object.entries(options.valueRefs ?? {})) {\n if (typeof ref !== \"string\") throw new TypeError(\"valueRefs must contain string references\");\n args.push(\"VALUE_REF\", name, ref);\n }\n appendStringArguments(args, \"DROP_VALUE\", options.dropValues, \"dropValues\");\n appendStringArguments(args, \"OVERRIDE_VALUE\", options.overrideValues, \"overrideValues\");\n}\n\nexport function appendValueReturn(\n args: CommandArgument[],\n options: { values?: readonly string[]; valueMaxBytes?: number }\n): void {\n appendStringArguments(args, \"VALUE\", options.values, \"Flow value names\");\n if (options.valueMaxBytes != null) args.push(\"VALUE_MAX_BYTES\", options.valueMaxBytes);\n}\n\nexport function appendAttributeMutations(\n args: CommandArgument[],\n options: {\n attributesMerge?: Record<string, CommandArgument>;\n attributesDelete?: readonly string[];\n }\n): void {\n for (const [name, value] of Object.entries(options.attributesMerge ?? {})) {\n args.push(\"ATTRIBUTE_MERGE\", name, value);\n }\n appendStringArguments(args, \"ATTRIBUTE_DELETE\", options.attributesDelete, \"attributesDelete\");\n}\n\nfunction appendStringArguments(\n args: CommandArgument[],\n token: string,\n values: readonly string[] | undefined,\n label: string\n): void {\n if (values == null) return;\n for (let index = 0; index < values.length; index += 1) {\n const value = values[index];\n if (!Object.hasOwn(values, index) || typeof value !== \"string\") {\n const requirement = label === \"Flow value names\" ? \"dense strings\" : \"a dense array of strings\";\n throw new TypeError(`${label} must be ${requirement}`);\n }\n args.push(token, value);\n }\n}\n","/** Expand scalar or positional batch responses without accepting missing slots. */\nexport function expandManyResponse(value: unknown, count: number): unknown[] {\n if (Array.isArray(value)) {\n if (value.length !== count) {\n throw new TypeError(`batch response length ${value.length} did not match expected ${count}`);\n }\n const result = new Array<unknown>(count);\n for (let index = 0; index < count; index += 1) {\n if (!Object.hasOwn(value, index)) {\n throw new TypeError(`batch response item ${index} is missing`);\n }\n result[index] = value[index];\n }\n return result;\n }\n return Array.from({ length: count }, () => value);\n}\n\nexport function arrayResponse(value: unknown): unknown[] {\n if (!Array.isArray(value)) {\n throw new TypeError(\"server returned an invalid array response\");\n }\n for (let index = 0; index < value.length; index += 1) {\n if (!Object.hasOwn(value, index)) {\n throw new TypeError(`server response item ${index} is missing`);\n }\n }\n return value.slice();\n}\n","import type { Codec } from \"./codecs.js\";\nimport { encodeFlowValue } from \"./flow-value-snapshot.js\";\nimport { setLongTimeout } from \"./internal-timers.js\";\nimport { mapDenseResponseArray } from \"./response-array-normalization.js\";\nexport * from \"./auto-partition.js\";\nexport * from \"./flow-argument-helpers.js\";\nexport * from \"./internal-array-responses.js\";\nexport * from \"./internal-timers.js\";\n\nexport type CommandArgument =\n | string\n | Buffer\n | number\n | bigint\n | boolean\n | readonly CommandArgument[]\n | Record<string, unknown>\n | null\n | undefined;\nexport type Command = readonly CommandArgument[];\nexport type RespMap = Map<unknown, unknown> | Record<PropertyKey, unknown>;\n\nexport function nowMs(): number {\n return Date.now();\n}\n\n/** Decode a typed textual reply without coercing arbitrary server values. */\nexport function textResponse(value: unknown, context = \"server\"): string {\n if (typeof value === \"string\") return value;\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) {\n return Buffer.from(value).toString(\"utf8\");\n }\n throw new TypeError(`${context} returned an invalid text response`);\n}\n\nexport function append(args: CommandArgument[], name: string, value: unknown): void {\n if (value != null) {\n args.push(name, value as CommandArgument);\n }\n}\n\nexport function appendBool(args: CommandArgument[], name: string, value: boolean | null | undefined): void {\n if (value != null) {\n args.push(name, value ? \"true\" : \"false\");\n }\n}\n\nexport function appendEncoded(\n args: CommandArgument[],\n name: string,\n codec: Codec,\n value: unknown\n): void {\n if (value != null) {\n args.push(name, encodeFlowValue(codec, value));\n }\n}\n\nexport function okResponse(value: unknown): boolean {\n if (value === true) return true;\n const source = Buffer.isBuffer(value) || value instanceof Uint8Array\n ? Buffer.from(value).toString(\"utf8\")\n : value;\n if (source === \"OK\") return true;\n throw new TypeError(\"server returned an invalid OK response\");\n}\n\nexport function binaryBooleanResponse(value: unknown): boolean {\n const parsed = integer(value, Number.NaN);\n if (parsed === 1) return true;\n if (parsed === 0) return false;\n throw new TypeError(\"server returned an invalid binary boolean response\");\n}\n\nexport function booleanResponse(value: unknown): boolean {\n if (value === true || value === 1 || value === 1n) return true;\n if (value == null || value === false || value === 0 || value === 0n) return false;\n const source = Buffer.isBuffer(value) || value instanceof Uint8Array\n ? Buffer.from(value).toString(\"utf8\")\n : value;\n if (typeof source === \"string\") {\n if (source === \"1\" || source.toLowerCase() === \"true\") return true;\n if (source === \"0\" || source.toLowerCase() === \"false\") return false;\n }\n throw new TypeError(\"server returned an invalid boolean response\");\n}\n\nexport function text(value: unknown): string {\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) {\n return Buffer.from(value).toString(\"utf8\");\n }\n return String(value);\n}\n\nexport function optionalString(value: unknown): string | undefined {\n if (\n value == null ||\n value === \"\" ||\n ((Buffer.isBuffer(value) || value instanceof Uint8Array) && value.byteLength === 0)\n ) {\n return undefined;\n }\n return text(value);\n}\n\nexport function bytes(value: unknown): Buffer {\n if (value == null) {\n return Buffer.alloc(0);\n }\n if (Buffer.isBuffer(value)) {\n return value;\n }\n if (value instanceof Uint8Array) {\n return Buffer.from(value);\n }\n if (typeof value === \"object\") {\n return Buffer.from(JSON.stringify(value) ?? \"\");\n }\n if (typeof value === \"string\") {\n return Buffer.from(value);\n }\n if (typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return Buffer.from(String(value));\n }\n if (typeof value === \"symbol\") {\n return Buffer.from(value.description ?? \"\");\n }\n if (typeof value === \"function\") {\n return Buffer.from(value.name);\n }\n return Buffer.alloc(0);\n}\n\nexport function integer(value: unknown, defaultValue?: number): number {\n if (value == null || value === \"\") {\n if (defaultValue != null) return defaultValue;\n throw new TypeError(\"integer response is not an integer\");\n }\n if (typeof value === \"bigint\") {\n if (value > BigInt(Number.MAX_SAFE_INTEGER) || value < BigInt(Number.MIN_SAFE_INTEGER)) {\n throw new RangeError(\"integer exceeds the JavaScript safe range\");\n }\n return Number(value);\n }\n const source = Buffer.isBuffer(value) || value instanceof Uint8Array\n ? Buffer.from(value).toString(\"utf8\")\n : value;\n if (typeof source !== \"number\" && typeof source !== \"string\") {\n throw new TypeError(\"integer response is not an integer\");\n }\n if (typeof source === \"string\" && !/^[+-]?\\d+$/u.test(source)) {\n throw new TypeError(\"integer response is not an integer\");\n }\n const number = Number(source);\n if (!Number.isFinite(number) || !Number.isInteger(number)) {\n throw new TypeError(\"integer response is not an integer\");\n }\n if (!Number.isSafeInteger(number)) {\n throw new RangeError(\"integer exceeds the JavaScript safe range\");\n }\n return number;\n}\n\n/** Preserve an integer reply exactly, using bigint only outside Number's safe range. */\nexport function integerReply(value: unknown): number | bigint {\n let result: bigint;\n if (typeof value === \"bigint\") {\n result = value;\n } else if (typeof value === \"number\") {\n if (!Number.isFinite(value) || !Number.isInteger(value)) {\n throw new TypeError(\"integer response is not an integer\");\n }\n if (!Number.isSafeInteger(value)) {\n throw new RangeError(\"integer response exceeds the JavaScript safe range\");\n }\n return value;\n } else {\n const source = Buffer.isBuffer(value) || value instanceof Uint8Array\n ? Buffer.from(value).toString(\"utf8\")\n : String(value);\n if (!/^[+-]?\\d+$/u.test(source)) {\n throw new TypeError(\"integer response is not an integer\");\n }\n result = BigInt(source);\n }\n return result <= BigInt(Number.MAX_SAFE_INTEGER) && result >= BigInt(Number.MIN_SAFE_INTEGER)\n ? Number(result)\n : result;\n}\n\nexport function field(source: unknown, key: string): unknown {\n if (source instanceof Map) {\n if (source.has(key)) {\n return source.get(key);\n }\n const raw = Buffer.from(key);\n for (const [itemKey, value] of source.entries()) {\n const binaryKey = Buffer.isBuffer(itemKey) ? itemKey\n : itemKey instanceof Uint8Array ? Buffer.from(itemKey) : undefined;\n if (binaryKey?.equals(raw) === true) {\n return value;\n }\n }\n return undefined;\n }\n\n if (typeof source === \"object\" && source != null) {\n const record = source as Record<PropertyKey, unknown>;\n if (Object.hasOwn(record, key)) {\n return record[key];\n }\n const rawKey = Buffer.from(key).toString();\n if (Object.hasOwn(record, rawKey)) {\n return record[rawKey];\n }\n }\n\n return undefined;\n}\n\nexport function toStringKeyMap(value: unknown): Record<string, unknown> | undefined {\n if (value == null) {\n return undefined;\n }\n\n const result: Record<string, unknown> = {};\n if (value instanceof Map) {\n for (const [key, item] of value.entries()) {\n setOwnValue(result, text(key), normalizeRefMeta(item));\n }\n return result;\n }\n\n if (\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n !Buffer.isBuffer(value) &&\n !(value instanceof Uint8Array)\n ) {\n for (const [key, item] of Object.entries(value)) {\n setOwnValue(result, text(key), normalizeRefMeta(item));\n }\n return result;\n }\n\n return undefined;\n}\n\nexport function normalizeRefMeta(value: unknown): unknown {\n if (Buffer.isBuffer(value)) {\n return value.toString(\"utf8\");\n }\n if (value instanceof Uint8Array) {\n return Buffer.from(value).toString(\"utf8\");\n }\n if (value instanceof Map) {\n const result: Record<string, unknown> = {};\n for (const [key, item] of value.entries()) {\n setOwnValue(result, text(key), normalizeRefMeta(item));\n }\n return result;\n }\n if (Array.isArray(value)) {\n return mapDenseResponseArray(value, normalizeRefMeta);\n }\n if (typeof value === \"object\" && value != null) {\n const result: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) {\n setOwnValue(result, text(key), normalizeRefMeta(item));\n }\n return result;\n }\n return value;\n}\n\nexport function parseKvResponse(value: unknown): Record<string, unknown> {\n if (value instanceof Map) {\n const result: Record<string, unknown> = {};\n for (const [key, item] of value.entries()) {\n setOwnValue(result, responseKey(key), item);\n }\n return result;\n }\n if (isPlainResponseObject(value)) {\n return Object.fromEntries(Object.entries(value).map(([key, item]) => [text(key), item]));\n }\n if (Array.isArray(value)) {\n if (value.length % 2 !== 0) {\n throw new TypeError(\"server returned an invalid key-value response\");\n }\n const result: Record<string, unknown> = {};\n for (let index = 0; index < value.length; index += 2) {\n if (!Object.hasOwn(value, index) || !Object.hasOwn(value, index + 1)) {\n const missing = Object.hasOwn(value, index) ? index + 1 : index;\n throw new TypeError(`key-value response item ${missing} is missing`);\n }\n setOwnValue(result, responseKey(value[index]), value[index + 1]);\n }\n return result;\n }\n if (typeof value === \"string\" || Buffer.isBuffer(value) || value instanceof Uint8Array) {\n const source = text(value);\n const result = parseTextSections(source);\n if (source.trim() !== \"\" && Object.keys(result).length === 0) {\n throw new TypeError(\"server returned an invalid key-value response\");\n }\n return result;\n }\n throw new TypeError(\"server returned an invalid key-value response\");\n}\n\nfunction responseKey(value: unknown): string {\n if (typeof value === \"string\" || Buffer.isBuffer(value) || value instanceof Uint8Array) {\n return text(value);\n }\n throw new TypeError(\"server returned an invalid key-value response\");\n}\n\nfunction isPlainResponseObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value == null) return false;\n const prototype = Object.getPrototypeOf(value) as object | null;\n return prototype === Object.prototype || prototype === null;\n}\n\nexport function normalizeFerricUrlHost(host: string): string {\n const normalized = host || \"127.0.0.1\";\n return normalized.startsWith(\"[\") && normalized.endsWith(\"]\")\n ? normalized.slice(1, -1)\n : normalized;\n}\n\nexport function setOwnValue<T>(target: Record<string, T>, key: string, value: T): void {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n}\n\nexport function sleep(ms: number, signal?: AbortSignal): Promise<void> {\n if (ms <= 0) {\n return Promise.resolve();\n }\n return new Promise((resolve, reject) => {\n if (signal?.aborted) {\n reject(abortError(signal.reason));\n return;\n }\n\n const onAbort = (): void => {\n timer.cancel();\n reject(abortError(signal?.reason));\n };\n const timer = setLongTimeout(() => {\n signal?.removeEventListener(\"abort\", onAbort);\n resolve();\n }, ms);\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n });\n}\n\nfunction abortError(reason: unknown): Error {\n if (reason instanceof Error) {\n return reason;\n }\n return new Error(typeof reason === \"string\" ? reason : \"operation aborted\", { cause: reason });\n}\n\nfunction parseTextSections(value: string): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n let section: Record<string, unknown> | undefined;\n\n for (const rawLine of value.split(/\\r?\\n/u)) {\n const line = rawLine.trimEnd();\n if (line.length === 0) {\n continue;\n }\n if (line.endsWith(\":\") && !line.startsWith(\" \")) {\n section = {};\n setOwnValue(result, line.slice(0, -1), section);\n continue;\n }\n\n const target = rawLine.startsWith(\" \") && section != null ? section : result;\n const colon = line.indexOf(\":\");\n if (colon >= 0) {\n setOwnValue(target, line.slice(0, colon).trim(), coerceDiagnosticValue(line.slice(colon + 1).trim()));\n }\n }\n\n return result;\n}\n\nfunction coerceDiagnosticValue(value: string): unknown {\n if (value === \"\") {\n return value;\n }\n if (value === \"true\" || value === \"false\") {\n return value === \"true\";\n }\n if (/^-?[0-9]+$/u.test(value)) {\n return integerReply(value);\n }\n return value;\n}\n","import net from \"node:net\";\nimport tls from \"node:tls\";\nimport { Buffer } from \"node:buffer\";\nimport type { NativeAdapterOptions } from \"./adapter-types.js\";\nimport { FerricStoreError, classifyServerError } from \"./errors.js\";\nimport {\n field,\n normalizeFerricUrlHost,\n setLongTimeout\n} from \"./internal.js\";\n\nexport interface ParsedUrl {\n readonly host: string;\n readonly password?: string;\n readonly port: number;\n readonly tls: boolean;\n readonly username?: string;\n}\n\nexport function parseFerricUrl(value: string): ParsedUrl {\n const url = new URL(value);\n if (url.protocol !== \"ferric:\" && url.protocol !== \"ferrics:\") {\n throw new FerricStoreError(`unsupported FerricStore URL scheme: ${url.protocol}`);\n }\n return {\n host: normalizeFerricUrlHost(url.hostname),\n ...(url.password === \"\" ? {} : { password: decodeURIComponent(url.password) }),\n port: Number(url.port || (url.protocol === \"ferrics:\" ? 6389 : 6388)),\n tls: url.protocol === \"ferrics:\",\n ...(url.username === \"\" ? {} : { username: decodeURIComponent(url.username) })\n };\n}\n\nexport async function connect(\n parsed: ParsedUrl,\n options: NativeAdapterOptions\n): Promise<net.Socket | tls.TLSSocket> {\n const timeoutMs = normalizePositiveLimit(\n options.connectTimeoutMs ?? options.timeoutMs ?? 30_000,\n 30_000\n );\n if (options.signal?.aborted) throw nativeBootstrapAbortError(options.signal.reason);\n return await new Promise((resolve, reject) => {\n const tlsOptions = options.tlsOptions ?? {};\n const servername = tlsOptions.servername ?? (net.isIP(parsed.host) === 0 ? parsed.host : undefined);\n const socket = parsed.tls\n ? tls.connect({\n ...tlsOptions,\n host: parsed.host,\n port: parsed.port,\n ...(servername == null ? {} : { servername })\n })\n : net.createConnection({ host: parsed.host, port: parsed.port });\n const connectEvent = parsed.tls ? \"secureConnect\" : \"connect\";\n const cleanup = (): void => {\n timer.cancel();\n socket.off(connectEvent, onConnect);\n socket.off(\"error\", onError);\n options.signal?.removeEventListener(\"abort\", onAbort);\n };\n const onConnect = (): void => {\n cleanup();\n resolve(socket);\n };\n const onError = (error: unknown): void => {\n cleanup();\n reject(error instanceof Error ? error : classifyServerError(String(error), error));\n };\n const onAbort = (): void => {\n cleanup();\n socket.destroy();\n reject(nativeBootstrapAbortError(options.signal?.reason));\n };\n const timer = setLongTimeout(() => {\n cleanup();\n socket.destroy();\n reject(new FerricStoreError(`FerricStore connection timed out after ${timeoutMs}ms`));\n }, timeoutMs);\n timer.unref();\n\n socket.setNoDelay(true);\n socket.setKeepAlive(\n options.keepAlive ?? true,\n normalizeKeepAliveInitialDelay(options.keepAliveInitialDelayMs)\n );\n socket.once(connectEvent, onConnect);\n socket.once(\"error\", onError);\n options.signal?.addEventListener(\"abort\", onAbort, { once: true });\n if (options.signal?.aborted) onAbort();\n });\n}\n\nexport function nativeBootstrapAbortError(reason: unknown): FerricStoreError {\n return new FerricStoreError(\"FerricStore connection bootstrap aborted\", {\n ...(reason instanceof Error ? { cause: reason } : { raw: reason })\n });\n}\n\nexport function normalizeHeartbeatInterval(value: number | undefined): number | undefined {\n if (value != null && value <= 0) return undefined;\n return normalizePositiveLimit(value ?? 60_000, 60_000);\n}\n\nexport function normalizeKeepAliveInitialDelay(value: number | undefined): number {\n return normalizeNonNegativeInteger(value ?? 30_000, 30_000);\n}\n\nexport function flowControlLimits(value: unknown): {\n readonly connection?: number;\n readonly lane?: number;\n} {\n let connection: number | undefined;\n let lane: number | undefined;\n let level: unknown[] = [value];\n for (let depth = 0; depth < 3 && level.length > 0; depth += 1) {\n const next: unknown[] = [];\n for (const candidate of level) {\n connection ??= nonNegativeSafeInteger(field(candidate, \"max_inflight_per_connection\"));\n lane ??= nonNegativeSafeInteger(field(candidate, \"max_inflight_per_lane\"));\n if (connection != null && lane != null) return { connection, lane };\n for (const key of [\"flow_control\", \"limits\", \"payload\"] as const) {\n const nested = field(candidate, key);\n if (nested != null) next.push(nested);\n }\n }\n level = next;\n }\n return { connection, lane };\n}\n\nexport function startupLimits(value: unknown): {\n readonly frameBytes?: number;\n readonly laneQueue?: number;\n readonly lanes?: number;\n readonly pipelineCommands?: number;\n} {\n let frameBytes: number | undefined;\n let laneQueue: number | undefined;\n let lanes: number | undefined;\n let pipelineCommands: number | undefined;\n let level: unknown[] = [value];\n for (let depth = 0; depth < 3 && level.length > 0; depth += 1) {\n const next: unknown[] = [];\n for (const candidate of level) {\n frameBytes ??= positiveSafeInteger(field(candidate, \"max_frame_bytes\"));\n laneQueue ??= nonNegativeSafeInteger(field(candidate, \"max_lane_queue\"));\n lanes ??= positiveSafeInteger(field(candidate, \"max_lanes_per_connection\"));\n pipelineCommands ??= nonNegativeSafeInteger(field(candidate, \"max_pipeline_commands\"));\n if (frameBytes != null && laneQueue != null && lanes != null && pipelineCommands != null) {\n return { frameBytes, laneQueue, lanes, pipelineCommands };\n }\n for (const key of [\"limits\", \"multiplexing\", \"payload\"] as const) {\n const nested = field(candidate, key);\n if (nested != null) next.push(nested);\n }\n }\n level = next;\n }\n return { frameBytes, laneQueue, lanes, pipelineCommands };\n}\n\nfunction nonNegativeSafeInteger(value: unknown): number | undefined {\n if (typeof value === \"bigint\") {\n return value >= 0n && value <= BigInt(Number.MAX_SAFE_INTEGER) ? Number(value) : undefined;\n }\n const source = Buffer.isBuffer(value) || value instanceof Uint8Array\n ? Buffer.from(value).toString(\"utf8\")\n : value;\n if (typeof source !== \"number\" && (typeof source !== \"string\" || !/^\\d+$/u.test(source))) {\n return undefined;\n }\n const parsed = Number(source);\n return Number.isSafeInteger(parsed) && parsed >= 0 ? parsed : undefined;\n}\n\nfunction positiveSafeInteger(value: unknown): number | undefined {\n const parsed = nonNegativeSafeInteger(value);\n return parsed != null && parsed > 0 ? parsed : undefined;\n}\n\nexport function normalizePositiveLimit(value: number, fallback: number): number {\n return Number.isFinite(value) ? Math.max(1, Math.trunc(value)) : fallback;\n}\n\nexport function normalizeNonNegativeInteger(value: number, fallback: number): number {\n return Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : fallback;\n}\n","import { OverloadedError, RequestTimeoutError } from \"./errors.js\";\nimport { setLongTimeout, type LongTimer } from \"./internal.js\";\n\nconst DEFAULT_MAX_INFLIGHT_PER_CONNECTION = 4_096;\nconst DEFAULT_MAX_INFLIGHT_PER_LANE = 1_024;\nconst WAITER_COMPACTION_THRESHOLD = 1_024;\n\ninterface FlowControlWaiter {\n reject: (reason: unknown) => void;\n resolve: () => void;\n settled: boolean;\n timer: LongTimer;\n}\n\ninterface FlowControlLaneQueue {\n head: number;\n waiting: number;\n readonly waiters: FlowControlWaiter[];\n}\n\n/** Server-advertised native request credits with an allocation-free fast path. */\nexport class NativeFlowControl {\n private activeTotal = 0;\n private readonly activeByLane = new Map<number, number>();\n private closedError?: Error;\n private connectionLimit = DEFAULT_MAX_INFLIGHT_PER_CONNECTION;\n private laneQueueLimit = Number.MAX_SAFE_INTEGER;\n private laneLimit = DEFAULT_MAX_INFLIGHT_PER_LANE;\n private laneWindowLimit = DEFAULT_MAX_INFLIGHT_PER_LANE;\n private readonly queuesByLane = new Map<number, FlowControlLaneQueue>();\n private readonly readyLanes = new Set<number>();\n private queuedTotal = 0;\n\n constructor(private readonly maxQueuedRequests: number) {}\n\n tryAcquire(laneId: number): boolean {\n if (\n this.closedError != null ||\n this.activeTotal >= this.connectionLimit ||\n (this.activeByLane.get(laneId) ?? 0) >= this.laneLimit\n ) return false;\n this.activate(laneId);\n return true;\n }\n\n wait(laneId: number, timeoutMs: number): Promise<void> {\n if (this.closedError != null) return Promise.reject(this.closedError);\n if (this.laneQueueLimit === 0) {\n return Promise.reject(new OverloadedError(\"FerricStore server lane queue is disabled\", {\n reason: \"client_lane_queue_full\"\n }));\n }\n if (this.queuedTotal >= this.maxQueuedRequests) {\n return Promise.reject(new OverloadedError(\"FerricStore client request queue is full\", {\n reason: \"client_queue_full\"\n }));\n }\n\n return new Promise<void>((resolve, reject) => {\n const timer = setLongTimeout(() => {\n if (waiter.settled) return;\n waiter.settled = true;\n this.queuedTotal -= 1;\n const queue = this.queuesByLane.get(laneId);\n if (queue != null) {\n queue.waiting -= 1;\n if (queue.waiting === 0) {\n this.queuesByLane.delete(laneId);\n this.readyLanes.delete(laneId);\n } else {\n this.compactWaiters(queue);\n }\n }\n reject(new RequestTimeoutError(timeoutMs, \"unsent\"));\n }, timeoutMs);\n timer.unref();\n const waiter: FlowControlWaiter = { reject, resolve, settled: false, timer };\n const queue = this.queuesByLane.get(laneId);\n if (queue == null) {\n this.queuesByLane.set(laneId, { head: 0, waiting: 1, waiters: [waiter] });\n this.readyLanes.add(laneId);\n } else {\n queue.waiting += 1;\n queue.waiters.push(waiter);\n }\n this.queuedTotal += 1;\n });\n }\n\n release(laneId: number): void {\n const active = this.activeByLane.get(laneId) ?? 0;\n if (active <= 0) return;\n this.activeTotal -= 1;\n if (active === 1) this.activeByLane.delete(laneId);\n else this.activeByLane.set(laneId, active - 1);\n if (this.closedError == null) this.pump();\n }\n\n updateLimits(connectionLimit?: number, laneLimit?: number): void {\n if (connectionLimit != null) this.connectionLimit = connectionLimit;\n if (laneLimit != null) this.laneWindowLimit = laneLimit;\n this.laneLimit = Math.min(this.laneWindowLimit, this.laneQueueLimit);\n this.pump();\n }\n\n updateLaneQueueLimit(laneQueueLimit: number): void {\n this.laneQueueLimit = laneQueueLimit;\n this.laneLimit = Math.min(this.laneWindowLimit, this.laneQueueLimit);\n this.pump();\n }\n\n cancelQueued(error: Error): void {\n for (const queue of this.queuesByLane.values()) {\n for (let index = queue.head; index < queue.waiters.length; index += 1) {\n const waiter = queue.waiters[index];\n if (waiter == null || waiter.settled) continue;\n waiter.settled = true;\n waiter.timer.cancel();\n waiter.reject(error);\n }\n }\n this.queuesByLane.clear();\n this.readyLanes.clear();\n this.queuedTotal = 0;\n }\n\n close(error: Error): void {\n if (this.closedError != null) return;\n this.closedError = error;\n this.cancelQueued(error);\n }\n\n private activate(laneId: number): void {\n this.activeTotal += 1;\n this.activeByLane.set(laneId, (this.activeByLane.get(laneId) ?? 0) + 1);\n }\n\n private pump(): void {\n while (this.closedError == null && this.activeTotal < this.connectionLimit && this.readyLanes.size > 0) {\n const laneId = this.nextGrantableLane();\n if (laneId == null) return;\n const queue = this.queuesByLane.get(laneId);\n if (queue == null) continue;\n const waiter = this.takeWaiter(queue);\n if (waiter == null) {\n this.queuesByLane.delete(laneId);\n continue;\n }\n queue.waiting -= 1;\n this.queuedTotal -= 1;\n waiter.settled = true;\n if (queue.waiting > 0) {\n this.compactWaiters(queue);\n this.readyLanes.add(laneId);\n } else {\n this.queuesByLane.delete(laneId);\n }\n waiter.timer.cancel();\n this.activate(laneId);\n waiter.resolve();\n }\n }\n\n private nextGrantableLane(): number | undefined {\n const attempts = this.readyLanes.size;\n for (let attempt = 0; attempt < attempts; attempt += 1) {\n const laneId = this.readyLanes.values().next().value;\n if (laneId == null) return undefined;\n this.readyLanes.delete(laneId);\n const queue = this.queuesByLane.get(laneId);\n if (queue == null || queue.waiting === 0) continue;\n if ((this.activeByLane.get(laneId) ?? 0) < this.laneLimit) return laneId;\n this.readyLanes.add(laneId);\n }\n return undefined;\n }\n\n private takeWaiter(queue: FlowControlLaneQueue): FlowControlWaiter | undefined {\n while (queue.head < queue.waiters.length) {\n const waiter = queue.waiters[queue.head++];\n if (waiter != null && !waiter.settled) return waiter;\n }\n return undefined;\n }\n\n private compactWaiters(queue: FlowControlLaneQueue): void {\n const remainingSlots = queue.waiters.length - queue.head;\n const tombstones = Math.max(0, remainingSlots - queue.waiting);\n const compactConsumed = queue.head >= WAITER_COMPACTION_THRESHOLD\n && queue.head * 2 >= queue.waiters.length;\n const compactTombstones = tombstones >= WAITER_COMPACTION_THRESHOLD\n && tombstones * 2 >= remainingSlots;\n if (!compactConsumed && !compactTombstones) return;\n\n let writeIndex = 0;\n for (let index = queue.head; index < queue.waiters.length; index += 1) {\n const waiter = queue.waiters[index];\n if (waiter != null && !waiter.settled) {\n queue.waiters[writeIndex] = waiter;\n writeIndex += 1;\n }\n }\n queue.waiters.length = writeIndex;\n queue.head = 0;\n }\n}\n","import { setLongInterval, type LongTimer } from \"./internal.js\";\n\nexport class NativeHeartbeat {\n private generation = 0;\n private inFlightGeneration?: number;\n private lastInboundActivityMs = Date.now();\n private timer?: LongTimer;\n\n constructor(\n private readonly intervalMs: number | undefined,\n private readonly send: () => Promise<void>,\n private readonly fail: (error: unknown) => void\n ) {}\n\n recordInbound(): void {\n this.lastInboundActivityMs = Date.now();\n }\n\n start(): void {\n if (this.intervalMs == null || this.timer != null) return;\n const generation = ++this.generation;\n this.timer = setLongInterval(() => { void this.tick(generation); }, this.intervalMs);\n this.timer.unref();\n }\n\n stop(): void {\n this.generation += 1;\n this.timer?.cancel();\n this.timer = undefined;\n }\n\n private async tick(generation: number): Promise<void> {\n if (\n generation !== this.generation\n || this.inFlightGeneration === generation\n || this.intervalMs == null\n || Date.now() - this.lastInboundActivityMs < this.intervalMs\n ) return;\n this.inFlightGeneration = generation;\n try {\n await this.send();\n } catch (error) {\n if (generation === this.generation) this.fail(error);\n } finally {\n if (this.inFlightGeneration === generation) this.inFlightGeneration = undefined;\n }\n }\n}\n","import { Buffer } from \"node:buffer\";\nimport { FerricStoreError } from \"./errors.js\";\nimport type { Command, CommandArgument } from \"./internal.js\";\n\nimport * as flow from \"./protocol-flow.js\";\nimport { flowSignalPayload } from \"./protocol-flow-signal.js\";\nimport {\n assertNormalizedCommandDoesNotRequirePinnedConnection,\n commandMutatesConnectionState\n} from \"./protocol-connection-policy.js\";\nexport * from \"./protocol-connection-policy.js\";\nexport * from \"./protocol-core.js\";\nexport * from \"./protocol-constants.js\";\nimport {\n asText,\n binaryValueByteLength,\n commandExec,\n isConnectionBlockingCommand,\n normalizeEncodeLimit,\n requestFrameTooLarge,\n writeCustomPayload\n} from \"./protocol-core.js\";\nimport {\n compactKeyPipelinePayload,\n compactMsetPayload,\n compactPipelinePayload\n} from \"./protocol-compact-request.js\";\nimport * as wire from \"./protocol-constants.js\";\nimport {\n collectionProtocolCommand,\n isBinaryCommandArgument,\n stringSetPayload,\n typedKeyValuePairs\n} from \"./protocol-kv.js\";\nimport {\n normalizeDecodeLimit,\n planValueWithLimit,\n writeValuePlan\n} from \"./protocol-value.js\";\nimport { assertKeyValueCommandSharesSlot } from \"./key-slot-validation.js\";\nexport { decodeValue, encodeValue } from \"./protocol-value.js\";\nexport { decodeResponse, unwrapPipelineResponse } from \"./protocol-response.js\";\n\nexport function encodeRequest(\n command: wire.ProtocolCommand,\n requestId: bigint,\n maxBodyBytes = Number.MAX_SAFE_INTEGER\n): Buffer {\n const bodyLimit = normalizeEncodeLimit(maxBodyBytes);\n const customPayload = ((command.flags ?? 0) & wire.FLAG_CUSTOM_PAYLOAD) !== 0;\n const plan = customPayload ? undefined : planValueWithLimit(command.payload, bodyLimit);\n const bodyLength = customPayload\n ? binaryValueByteLength(command.payload)\n : plan?.byteLength ?? 0;\n if (bodyLength > bodyLimit) throw requestFrameTooLarge(bodyLimit);\n const flags = command.flags ?? 0;\n const frame = Buffer.allocUnsafe(wire.HEADER_SIZE + bodyLength);\n frame.write(wire.MAGIC, 0, \"ascii\");\n frame.writeUInt8(wire.REQUEST_VERSION, 4);\n frame.writeUInt8(flags, 5);\n frame.writeUInt32BE(command.laneId ?? laneForOpcode(command.opcode), 6);\n frame.writeUInt16BE(command.opcode, 10);\n frame.writeBigUInt64BE(requestId, 12);\n frame.writeUInt32BE(bodyLength, 20);\n if (customPayload) {\n writeCustomPayload(frame, wire.HEADER_SIZE, command.payload, bodyLength);\n } else if (plan != null) {\n writeValuePlan(frame, wire.HEADER_SIZE, plan);\n }\n return frame;\n}\n\nexport function tryDecodeFrame(\n buffer: Buffer,\n maxBodyBytes = wire.DEFAULT_MAX_FRAME_BYTES\n): { readonly frame: wire.ResponseFrame; readonly rest: Buffer } | null {\n if (buffer.byteLength < wire.HEADER_SIZE) {\n return null;\n }\n if (buffer.toString(\"ascii\", 0, 4) !== wire.MAGIC) {\n throw new FerricStoreError(\"invalid FerricStore protocol magic\", { raw: buffer.subarray(0, 4) });\n }\n const version = buffer.readUInt8(4);\n if (version !== wire.RESPONSE_VERSION) {\n throw new FerricStoreError(`invalid FerricStore protocol response version ${version}`);\n }\n const bodyLength = buffer.readUInt32BE(20);\n const bodyLimit = normalizeDecodeLimit(maxBodyBytes, wire.DEFAULT_MAX_FRAME_BYTES);\n if (bodyLength > bodyLimit) {\n throw new FerricStoreError(`native protocol frame exceeded ${bodyLimit} bytes`);\n }\n const frameLength = wire.HEADER_SIZE + bodyLength;\n if (buffer.byteLength < frameLength) {\n return null;\n }\n const frame: wire.ResponseFrame = {\n body: buffer.subarray(wire.HEADER_SIZE, frameLength),\n bodyLength,\n flags: buffer.readUInt8(5),\n laneId: buffer.readUInt32BE(6),\n opcode: buffer.readUInt16BE(10),\n requestId: buffer.readBigUInt64BE(12)\n };\n return { frame, rest: buffer.subarray(frameLength) };\n}\n\nexport function buildProtocolCommand(\n args: readonly CommandArgument[],\n maxBodyBytes = Number.MAX_SAFE_INTEGER,\n allowCustomPayload = true\n): wire.ProtocolCommand {\n if (args.length === 0) {\n throw new FerricStoreError(\"command requires at least one argument\");\n }\n const command = asText(args[0]).toUpperCase();\n assertNormalizedCommandDoesNotRequirePinnedConnection(args, command);\n if (command === \"MSET\" || command === \"MSETNX\") {\n assertKeyValueCommandSharesSlot(args, command);\n }\n const commandArgs = args.slice(1);\n\n if (command === \"COMMAND_EXEC\" && commandArgs.length >= 1) {\n return commandExec(commandArgs);\n }\n if (command === \"HELLO\" || command === \"STARTUP\" || command === \"WINDOW_UPDATE\") {\n const payload = flow.optionMap(commandArgs);\n return payload == null\n ? commandExec(args)\n : { laneId: 0, opcode: wire.COMMAND_OPCODES[command], payload };\n }\n if (command === \"AUTH\" && (commandArgs.length === 1 || commandArgs.length === 2)) {\n const payload =\n commandArgs.length === 1\n ? { password: commandArgs[0], username: \"default\" }\n : { password: commandArgs[1], username: commandArgs[0] };\n return { laneId: 0, opcode: wire.OPCODES.auth, payload };\n }\n if (command === \"PING\" && commandArgs.length <= 1) {\n return { laneId: 0, opcode: wire.OPCODES.ping, payload: commandArgs.length === 0 ? {} : { message: commandArgs[0] } };\n }\n if (command === \"OPTIONS\" && commandArgs.length === 0) {\n return { laneId: 0, opcode: wire.OPCODES.options, payload: {} };\n }\n if (command === \"BACKPRESSURE\" && commandArgs.length === 0) {\n return { laneId: 0, opcode: wire.OPCODES.backpressure, payload: {} };\n }\n if (command === \"QUIT\" && commandArgs.length === 0) {\n return { laneId: 0, opcode: wire.OPCODES.quit, payload: {} };\n }\n if (command === \"ROUTE\" && commandArgs.length === 1) {\n return { laneId: 0, opcode: wire.OPCODES.route, payload: { key: commandArgs[0] } };\n }\n if (command === \"ROUTE_BATCH\") {\n return { laneId: 0, opcode: wire.OPCODES.routeBatch, payload: { keys: commandArgs } };\n }\n if (command === \"SHARDS\" && commandArgs.length === 0) {\n return { laneId: 0, opcode: wire.OPCODES.shards, payload: {} };\n }\n if (command === \"CLIENT\" && asText(commandArgs[0]).toUpperCase() === \"SETNAME\" && commandArgs.length === 2) {\n return { laneId: 0, opcode: wire.OPCODES.clientSetName, payload: { name: commandArgs[1] } };\n }\n if (command === \"CLIENT.SETNAME\" && commandArgs.length === 1) {\n return { laneId: 0, opcode: wire.OPCODES.clientSetName, payload: { name: commandArgs[0] } };\n }\n if (\n (command === \"CLIENT\" && asText(commandArgs[0]).toUpperCase() === \"INFO\" && commandArgs.length === 1) ||\n (command === \"CLIENT.INFO\" && commandArgs.length === 0)\n ) {\n return { laneId: 0, opcode: wire.OPCODES.clientInfo, payload: {} };\n }\n if (command === \"GET\" && commandArgs.length === 1) {\n return isBinaryCommandArgument(commandArgs[0])\n ? { opcode: wire.OPCODES.get, payload: { key: commandArgs[0] } }\n : commandExec(args);\n }\n if (command === \"SET\" && commandArgs.length >= 2) {\n const payload = stringSetPayload(commandArgs);\n return payload == null ? commandExec(args) : { opcode: wire.OPCODES.set, payload };\n }\n if (command === \"MGET\" && commandArgs.length > 0) {\n const compact = allowCustomPayload\n ? compactKeyPipelinePayload(wire.OPCODES.mget, commandArgs, 2, maxBodyBytes)\n : undefined;\n if (compact != null) return compact;\n return commandArgs.every(isBinaryCommandArgument)\n ? { opcode: wire.OPCODES.mget, payload: { keys: commandArgs } }\n : commandExec(args);\n }\n if (command === \"MSET\" && commandArgs.length >= 2 && commandArgs.length % 2 === 0) {\n const compact = allowCustomPayload ? compactMsetPayload(commandArgs, maxBodyBytes) : undefined;\n if (compact != null) return compact;\n const pairs = typedKeyValuePairs(commandArgs);\n return pairs == null ? commandExec(args) : { opcode: wire.OPCODES.mset, payload: { pairs } };\n }\n if (command === \"DEL\" && commandArgs.length > 0) {\n return commandArgs.every(isBinaryCommandArgument)\n ? { opcode: wire.OPCODES.del, payload: { keys: commandArgs } }\n : commandExec(args);\n }\n const collectionCommand = collectionProtocolCommand(command, commandArgs);\n if (collectionCommand != null) return collectionCommand;\n if (command === \"FLOW.HISTORY\") {\n return flow.flowHistoryPayload(commandArgs) ?? commandExec(args);\n }\n if (command === \"FLOW.LIST\") {\n return (allowCustomPayload\n ? flow.compactFlowListPayload(commandArgs, maxBodyBytes)\n : undefined) ?? commandExec(args);\n }\n const flowAdmin = flow.FLOW_ADMIN_COMMANDS[command];\n if (flowAdmin != null) {\n return flow.flowAdminPayload(flowAdmin.opcode, commandArgs, flowAdmin.leadingFields) ?? commandExec(args);\n }\n if (command === \"FLOW.CREATE\") {\n return flow.flowCreatePayload(commandArgs) ?? commandExec(args);\n }\n if (command === \"FLOW.GET\") {\n return flow.flowGetPayload(commandArgs) ?? commandExec(args);\n }\n if (command === \"FLOW.VALUE.PUT\") {\n return flow.flowValuePutPayload(commandArgs) ?? commandExec(args);\n }\n if (command === \"FLOW.VALUE.MGET\") {\n return flow.flowValueMGetPayload(commandArgs, maxBodyBytes, allowCustomPayload) ?? commandExec(args);\n }\n if (command === \"FLOW.CREATE_MANY\") {\n return flow.flowCreateManyPayload(commandArgs, maxBodyBytes, allowCustomPayload) ?? commandExec(args);\n }\n if (command === \"FLOW.CLAIM_DUE\") {\n return flow.flowClaimDuePayload(commandArgs, maxBodyBytes, allowCustomPayload) ?? commandExec(args);\n }\n if (command === \"FLOW.RECLAIM\") {\n return flow.flowReclaimPayload(commandArgs) ?? commandExec(args);\n }\n if (command === \"FLOW.COMPLETE\") {\n return flow.flowCompletePayload(commandArgs) ?? commandExec(args);\n }\n if (command === \"FLOW.TRANSITION\") {\n return flow.flowTransitionPayload(commandArgs) ?? commandExec(args);\n }\n if (command === \"FLOW.RETRY\") {\n return flow.flowLeaseMutationPayload(wire.OPCODES.flowRetry, commandArgs, new Set([\n \"FENCING\", \"NOW\", \"PARTITION\", \"ERROR\", \"PAYLOAD\", \"RUN_AT\", \"STATE_META\",\n \"VALUE\", \"VALUE_REF\", \"DROP_VALUE\", \"OVERRIDE_VALUE\", \"ATTRIBUTE_MERGE\", \"ATTRIBUTE_DELETE\"\n ])) ?? commandExec(args);\n }\n if (command === \"FLOW.FAIL\") {\n return flow.flowLeaseMutationPayload(wire.OPCODES.flowFail, commandArgs, new Set([\n \"FENCING\", \"NOW\", \"PARTITION\", \"ERROR\", \"PAYLOAD\", \"TTL\", \"STATE_META\",\n \"VALUE\", \"VALUE_REF\", \"DROP_VALUE\", \"OVERRIDE_VALUE\", \"ATTRIBUTE_MERGE\", \"ATTRIBUTE_DELETE\"\n ])) ?? commandExec(args);\n }\n if (command === \"FLOW.SIGNAL\") {\n return flowSignalPayload(commandArgs) ?? commandExec(args);\n }\n if (command === \"FLOW.CANCEL\") {\n return flow.flowCommandExecWithRouting(command, commandArgs, 1, new Set([\n \"FENCING\", \"NOW\", \"LEASE_TOKEN\", \"PARTITION\", \"REASON\", \"TTL\", \"STATE_META\",\n \"VALUE\", \"VALUE_REF\", \"DROP_VALUE\", \"OVERRIDE_VALUE\", \"ATTRIBUTE_MERGE\", \"ATTRIBUTE_DELETE\"\n ]));\n }\n if (command === \"FLOW.EXTEND_LEASE\") {\n return flow.flowCommandExecWithRouting(command, commandArgs, 2, new Set([\n \"FENCING\", \"LEASE_MS\", \"NOW\", \"PARTITION\", \"RETURN\"\n ]));\n }\n if (command === \"FLOW.REWIND\") {\n return flow.flowCommandExecWithRouting(command, commandArgs, 1, new Set([\n \"NOW\", \"PARTITION\", \"TO_EVENT\", \"EXPECT_STATE\"\n ]));\n }\n if (command === \"FLOW.COMPLETE_MANY\") {\n return flow.flowClaimedManyPayload(\n command,\n wire.OPCODES.flowCompleteMany,\n commandArgs,\n maxBodyBytes,\n allowCustomPayload\n ) ?? commandExec(args);\n }\n if (command === \"FLOW.RETRY_MANY\") {\n return flow.flowClaimedManyPayload(\n command,\n wire.OPCODES.flowRetryMany,\n commandArgs,\n maxBodyBytes,\n allowCustomPayload\n ) ?? commandExec(args);\n }\n if (command === \"FLOW.FAIL_MANY\") {\n return flow.flowClaimedManyPayload(\n command,\n wire.OPCODES.flowFailMany,\n commandArgs,\n maxBodyBytes,\n allowCustomPayload\n ) ?? commandExec(args);\n }\n if (command === \"FLOW.CANCEL_MANY\") {\n return (allowCustomPayload\n ? flow.compactFlowCancelManyPayload(commandArgs, maxBodyBytes)\n : undefined) ?? commandExec(args);\n }\n if (command === \"FLOW.TRANSITION_MANY\") {\n return flow.flowTransitionManyPayload(commandArgs, maxBodyBytes, allowCustomPayload) ?? commandExec(args);\n }\n if (command === \"FLOW.SPAWN_CHILDREN\") {\n return flow.flowSpawnChildrenPayload(commandArgs) ?? commandExec(args);\n }\n if (command === \"FLOW.START_AND_CLAIM\") {\n return flow.flowAdminPayload(wire.OPCODES.flowStartAndClaim, commandArgs, [\"id\"]) ?? commandExec(args);\n }\n if (command === \"FLOW.STEP_CONTINUE\") {\n return flow.flowAdminPayload(\n wire.OPCODES.flowStepContinue,\n commandArgs,\n [\"id\", \"lease_token\", \"from_state\", \"to_state\"]\n ) ?? commandExec(args);\n }\n if (command === \"FLOW.RUN_STEPS_MANY\") {\n return flow.flowAdminPayload(wire.OPCODES.flowRunStepsMany, commandArgs) ?? commandExec(args);\n }\n if (command === \"FLOW.SEARCH\") {\n if (flow.hasFlowCommandOnlyOption(command, commandArgs)) {\n const fallback = commandExec(args);\n try {\n const parsed = flow.flowSearchPayload(commandArgs);\n return parsed == null\n ? fallback\n : flow.withFlowPartitionRouting(fallback, parsed.payload);\n } catch {\n return fallback;\n }\n }\n return flow.flowSearchPayload(commandArgs) ?? commandExec(args);\n }\n\n return commandExec(args);\n}\n\n export function pipelineCommand(\n commands: readonly Command[],\n maxBodyBytes = Number.MAX_SAFE_INTEGER\n): wire.ProtocolCommand {\n const command = tryPipelineCommand(commands, maxBodyBytes);\n if (command == null) {\n throw new FerricStoreError(\"native pipeline could not be encoded\");\n }\n return command;\n}\n\nexport function tryPipelineCommand(\n commands: readonly Command[],\n maxBodyBytes = Number.MAX_SAFE_INTEGER\n): wire.ProtocolCommand | undefined {\n const compact = compactPipelinePayload(commands, maxBodyBytes);\n if (compact != null) {\n return { flags: wire.FLAG_CUSTOM_PAYLOAD, opcode: wire.OPCODES.pipeline, payload: compact };\n }\n\n const protocols = new Array<wire.ProtocolCommand>(commands.length);\n for (let index = 0; index < commands.length; index += 1) {\n const command = commands[index];\n if (!Object.hasOwn(commands, index) || !Array.isArray(command)) {\n throw new TypeError(\"pipeline commands must be a dense array of command arrays\");\n }\n protocols[index] = buildProtocolCommand(command, maxBodyBytes, false);\n }\n let hasControlCommand = false;\n let hasConnectionSensitiveCommand = false;\n let pipelineBlockMs: number | undefined;\n const pipelineProtocols = protocols.map((protocol, index) => {\n if (protocol.opcode < wire.OPCODES.commandExec) {\n hasControlCommand = true;\n }\n const original = commands[index];\n const pipelineProtocol = (protocol.flags ?? 0) === 0 || original == null\n ? protocol\n : commandExec(original);\n if (original != null && (\n commandMutatesConnectionState(original) || isConnectionBlockingCommand(original)\n )) {\n hasConnectionSensitiveCommand = true;\n }\n const commandBlockMs = pipelineProtocol.serverBlockMs;\n if (commandBlockMs === 0) {\n pipelineBlockMs = 0;\n } else if (commandBlockMs != null && pipelineBlockMs !== 0) {\n pipelineBlockMs = Math.min(\n Number.MAX_SAFE_INTEGER,\n (pipelineBlockMs ?? 0) + commandBlockMs\n );\n }\n return pipelineProtocol;\n });\n if (hasControlCommand || hasConnectionSensitiveCommand) {\n return undefined;\n }\n\n const pipelineClaimModes = pipelineProtocols.map((protocol) => protocol.compactClaimMode);\n const hasPipelineClaimMode = pipelineClaimModes.some((mode) => mode != null);\n\n return {\n opcode: wire.OPCODES.pipeline,\n payload: {\n atomicity: \"none\",\n commands: pipelineProtocols.map((protocol, index) => {\n return {\n body: protocol.payload,\n lane_id: protocol.laneId ?? laneForOpcode(protocol.opcode),\n opcode: protocol.opcode,\n request_id: index + 1\n };\n }),\n return: \"compact\"\n },\n ...(hasPipelineClaimMode ? { pipelineClaimModes } : {}),\n ...(pipelineBlockMs == null ? {} : { serverBlockMs: pipelineBlockMs })\n };\n}\n\nfunction laneForOpcode(opcode: number): number {\n return opcode < 0x0100 ? 0 : 1;\n}\n","import { Buffer } from \"node:buffer\";\nimport {\n allArgumentMultiKeyCommands,\n firstKeyCommands,\n secondKeyCommands,\n trailingArgumentMultiKeyCommands,\n twoKeyCommands\n} from \"./command-metadata.js\";\nimport type { CommandArgument } from \"./internal.js\";\n\nexport interface CommandView {\n readonly argumentStart: number;\n readonly name?: string;\n}\n\nexport interface FlowValueMGetArguments {\n readonly hasMaxBytes: boolean;\n readonly maxBytes?: CommandArgument;\n readonly refs: readonly CommandArgument[];\n readonly suffix: readonly CommandArgument[];\n}\n\nexport type RoutingKeyArguments =\n | { readonly handled: false }\n | { readonly handled: true; readonly keys: readonly CommandArgument[] };\n\nconst compoundCommandPrefixes = new Set([\"CLIENT\", \"CLUSTER\", \"FLOW\"]);\nconst flowValueMGetMaxBytesTokens = new Set([\"MAX_BYTES\", \"MAXBYTES\"]);\nconst secondKeySubcommands = new Map<string, ReadonlySet<string>>([\n [\"MEMORY\", new Set([\"USAGE\"])],\n [\"OBJECT\", new Set([\"ENCODING\", \"FREQ\", \"IDLETIME\", \"REFCOUNT\"])],\n [\"XGROUP\", new Set([\"CREATE\", \"SETID\", \"DESTROY\", \"CREATECONSUMER\", \"DELCONSUMER\"])],\n [\"XINFO\", new Set([\"STREAM\", \"GROUPS\", \"CONSUMERS\"])]\n]);\n\n/** Normalize a command or option token without coercing arbitrary values. */\nexport function commandToken(value: unknown): string | undefined {\n if (typeof value === \"string\") return value.toUpperCase();\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) {\n return Buffer.from(value).toString(\"utf8\").toUpperCase();\n }\n return undefined;\n}\n\n/** Parse the command name once and expose where its real arguments begin. */\nexport function commandView(command: readonly CommandArgument[]): CommandView {\n const first = commandToken(command[0]);\n if (first == null) return { argumentStart: 1 };\n if (compoundCommandPrefixes.has(first) && command.length > 1) {\n const second = commandToken(command[1]);\n if (second != null) return { argumentStart: 2, name: `${first}.${second}` };\n }\n return { argumentStart: 1, name: first };\n}\n\n/** Parse only a trailing value-MGET size option; token-looking refs remain refs. */\nexport function splitFlowValueMGetArguments(\n args: readonly CommandArgument[],\n argumentStart: number\n): FlowValueMGetArguments {\n const optionIndex = args.length - 2;\n const hasMaxBytes = optionIndex >= argumentStart\n && flowValueMGetMaxBytesTokens.has(commandToken(args[optionIndex]) ?? \"\")\n && isNonNegativeSafeIntegerArgument(args[optionIndex + 1]);\n return hasMaxBytes\n ? {\n hasMaxBytes: true,\n maxBytes: args[args.length - 1],\n refs: args.slice(argumentStart, optionIndex),\n suffix: args.slice(optionIndex)\n }\n : {\n hasMaxBytes: false,\n refs: args.slice(argumentStart),\n suffix: []\n };\n}\n\n/** Extract command key arguments according to the core's specialized grammar. */\nexport function routingKeyArguments(\n name: string | undefined,\n args: readonly CommandArgument[]\n): RoutingKeyArguments {\n if (name == null) return { handled: false };\n if (name === \"MGET\" || name === \"DEL\" || name === \"EXISTS\" || name === \"UNLINK\") {\n return { handled: true, keys: args.slice(1) };\n }\n if (name === \"MSET\" || name === \"MSETNX\") {\n if (args.length < 3 || (args.length - 1) % 2 !== 0) return { handled: true, keys: [] };\n const keys: CommandArgument[] = [];\n for (let index = 1; index < args.length; index += 2) keys.push(args[index]);\n return { handled: true, keys };\n }\n if (name === \"BITOP\") return { handled: true, keys: bitopKeys(args) };\n if (twoKeyCommands.has(name)) {\n return { handled: true, keys: args.length >= 3 ? args.slice(1, 3) : [] };\n }\n if (name === \"XREAD\" || name === \"XREADGROUP\") {\n return { handled: true, keys: streamReadKeys(args) };\n }\n if (firstKeyCommands.has(name)) return { handled: true, keys: args.slice(1, 2) };\n if (secondKeyCommands.has(name)) {\n const allowed = secondKeySubcommands.get(name);\n return {\n handled: true,\n keys: allowed?.has(commandToken(args[1]) ?? \"\") === true ? args.slice(2, 3) : []\n };\n }\n if (trailingArgumentMultiKeyCommands.has(name)) {\n return { handled: true, keys: args.length >= 3 ? args.slice(1, -1) : [] };\n }\n if (allArgumentMultiKeyCommands.has(name)) return { handled: true, keys: args.slice(1) };\n if (name === \"BLMPOP\") return { handled: true, keys: countedKeys(args, 2, 3) };\n if (name === \"SINTERCARD\") return { handled: true, keys: countedKeys(args, 1, 2) };\n if (name === \"CMS.MERGE\" || name === \"TDIGEST.MERGE\") {\n return { handled: true, keys: countedKeys(args, 2, 3, true) };\n }\n return { handled: false };\n}\n\n/** Specialized forms deliberately excluded from the first-key parity catalog. */\nexport const specializedRoutingCommandNames = new Set([\n \"BITOP\",\n \"BLMPOP\",\n \"MSET\",\n \"MSETNX\",\n \"SINTERCARD\",\n \"CMS.MERGE\",\n \"TDIGEST.MERGE\",\n \"XREAD\",\n \"XREADGROUP\",\n ...twoKeyCommands,\n ...secondKeyCommands,\n ...trailingArgumentMultiKeyCommands,\n ...allArgumentMultiKeyCommands,\n \"DEL\",\n \"EXISTS\",\n \"MGET\",\n \"UNLINK\"\n]);\n\nfunction bitopKeys(args: readonly CommandArgument[]): readonly CommandArgument[] {\n return args.length < 4 ? [] : args.slice(2);\n}\n\nfunction countedKeys(\n args: readonly CommandArgument[],\n countIndex: number,\n keysIndex: number,\n includeDestination = false\n): readonly CommandArgument[] {\n const count = commandArgumentInteger(args[countIndex]);\n if (count == null || count <= 0 || keysIndex + count > args.length) return [];\n return includeDestination\n ? [args[1], ...args.slice(keysIndex, keysIndex + count)]\n : args.slice(keysIndex, keysIndex + count);\n}\n\nfunction commandArgumentInteger(value: CommandArgument): number | undefined {\n return safeIntegerArgument(value);\n}\n\nfunction isNonNegativeSafeIntegerArgument(value: CommandArgument): boolean {\n const parsed = safeIntegerArgument(value);\n return parsed != null && parsed >= 0;\n}\n\nfunction safeIntegerArgument(value: CommandArgument): number | undefined {\n if (typeof value === \"number\") return Number.isSafeInteger(value) ? value : undefined;\n if (typeof value === \"bigint\") {\n return value >= BigInt(Number.MIN_SAFE_INTEGER) && value <= BigInt(Number.MAX_SAFE_INTEGER)\n ? Number(value)\n : undefined;\n }\n const source = typeof value === \"string\"\n ? value\n : Buffer.isBuffer(value) || value instanceof Uint8Array\n ? Buffer.from(value).toString(\"utf8\")\n : undefined;\n if (source == null || !/^[+-]?\\d+$/u.test(source)) return undefined;\n const parsed = BigInt(source);\n return parsed >= BigInt(Number.MIN_SAFE_INTEGER) && parsed <= BigInt(Number.MAX_SAFE_INTEGER)\n ? Number(parsed)\n : undefined;\n}\n\nfunction streamReadKeys(args: readonly CommandArgument[]): readonly CommandArgument[] {\n const command = commandToken(args[0]);\n let index: number;\n if (command === \"XREADGROUP\") {\n if (commandToken(args[1]) !== \"GROUP\" || args.length < 5) return [];\n index = 4;\n } else if (command === \"XREAD\") {\n index = 1;\n } else {\n return [];\n }\n\n while (index < args.length) {\n const token = commandToken(args[index]);\n if (token === \"STREAMS\") break;\n if (token === \"COUNT\" || token === \"BLOCK\") {\n if (index + 1 >= args.length) return [];\n index += 2;\n } else if (command === \"XREADGROUP\" && token === \"NOACK\") {\n index += 1;\n } else {\n return [];\n }\n }\n if (index >= args.length) return [];\n const streamArgs = args.slice(index + 1);\n return streamArgs.length === 0 || streamArgs.length % 2 !== 0\n ? []\n : streamArgs.slice(0, streamArgs.length / 2);\n}\n","export const flowStateIdCommands = new Set([\n \"FLOW.CANCEL\",\n \"FLOW.COMPLETE\",\n \"FLOW.CREATE\",\n \"FLOW.EFFECT.COMPENSATE\",\n \"FLOW.EFFECT.CONFIRM\",\n \"FLOW.EFFECT.FAIL\",\n \"FLOW.EFFECT.GET\",\n \"FLOW.EFFECT.RESERVE\",\n \"FLOW.EXTEND_LEASE\",\n \"FLOW.FAIL\",\n \"FLOW.GET\",\n \"FLOW.GOVERNANCE.LEDGER\",\n \"FLOW.HISTORY\",\n \"FLOW.RETRY\",\n \"FLOW.REWIND\",\n \"FLOW.SIGNAL\",\n \"FLOW.SPAWN_CHILDREN\",\n \"FLOW.START_AND_CLAIM\",\n \"FLOW.STEP_CONTINUE\",\n \"FLOW.TRANSITION\"\n]);\n","/** Central command classifications shared by routing, batching, and connection policy. */\nexport { flowStateIdCommands } from \"./command-metadata-flow.js\";\n\nexport const safeAutoBatchCommands = new Set([\n \"DEL\",\n \"EXISTS\",\n \"GET\",\n \"HGET\",\n \"HGETALL\",\n \"HMGET\",\n \"HSET\",\n \"LPOP\",\n \"LPUSH\",\n \"LRANGE\",\n \"MGET\",\n \"MSET\",\n \"RPOP\",\n \"RPUSH\",\n \"SADD\",\n \"SISMEMBER\",\n \"SMEMBERS\",\n \"SREM\",\n \"SET\",\n \"ZADD\",\n \"ZRANGE\",\n \"ZREM\",\n \"ZSCORE\",\n \"FLOW.CANCEL\",\n \"FLOW.CANCEL_MANY\",\n \"FLOW.COMPLETE\",\n \"FLOW.COMPLETE_MANY\",\n \"FLOW.CREATE\",\n \"FLOW.CREATE_MANY\",\n \"FLOW.EXTEND_LEASE\",\n \"FLOW.FAIL\",\n \"FLOW.FAIL_MANY\",\n \"FLOW.GET\",\n \"FLOW.HISTORY\",\n \"FLOW.RETRY\",\n \"FLOW.RETRY_MANY\",\n \"FLOW.SIGNAL\",\n \"FLOW.START_AND_CLAIM\",\n \"FLOW.STEP_CONTINUE\",\n \"FLOW.TRANSITION\",\n \"FLOW.TRANSITION_MANY\",\n \"FLOW.RUN_STEPS_MANY\",\n \"FLOW.VALUE.MGET\",\n \"FLOW.VALUE.PUT\"\n]);\n\nexport const neverAutoBatchCommandPrefixes = new Set([\n \"AUTH\",\n \"BACKPRESSURE\",\n \"BLMOVE\",\n \"BLMPOP\",\n \"BLPOP\",\n \"BRPOP\",\n \"BRPOPLPUSH\",\n \"BZPOPMAX\",\n \"BZPOPMIN\",\n \"CLIENT\",\n \"DISCARD\",\n \"EVENT\",\n \"EXEC\",\n \"GOAWAY\",\n \"HELLO\",\n \"MONITOR\",\n \"MULTI\",\n \"OPTIONS\",\n \"PING\",\n \"PIPELINE\",\n \"PSUBSCRIBE\",\n \"PUNSUBSCRIBE\",\n \"QUIT\",\n \"READONLY\",\n \"READWRITE\",\n \"RESET\",\n \"ROUTE\",\n \"ROUTE_BATCH\",\n \"SELECT\",\n \"SHARDS\",\n \"STARTUP\",\n \"SUBSCRIBE\",\n \"SUBSCRIBE_EVENTS\",\n \"UNSUBSCRIBE\",\n \"UNSUBSCRIBE_EVENTS\",\n \"UNWATCH\",\n \"WAIT\",\n \"WAITAOF\",\n \"WATCH\",\n \"WINDOW_UPDATE\",\n \"XREAD\",\n \"XREADGROUP\"\n]);\n\nexport const neverAutoBatchCommands = new Set([\n \"FLOW.CLAIM_DUE\",\n \"FLOW.RECLAIM\",\n \"FLOW.SCHEDULE.FIRE_DUE\"\n]);\n\nexport const flowIdReadAutoBatchCommands = new Set([\n \"FLOW.GET\",\n \"FLOW.HISTORY\"\n]);\n\nexport const flowIdWriteAutoBatchCommands = new Set([\n \"FLOW.CANCEL\",\n \"FLOW.COMPLETE\",\n \"FLOW.CREATE\",\n \"FLOW.EXTEND_LEASE\",\n \"FLOW.FAIL\",\n \"FLOW.RETRY\",\n \"FLOW.SIGNAL\",\n \"FLOW.START_AND_CLAIM\",\n \"FLOW.STEP_CONTINUE\",\n \"FLOW.TRANSITION\"\n]);\n\nexport const flowManyWriteAutoBatchCommands = new Set([\n \"FLOW.CANCEL_MANY\",\n \"FLOW.COMPLETE_MANY\",\n \"FLOW.CREATE_MANY\",\n \"FLOW.FAIL_MANY\",\n \"FLOW.RETRY_MANY\",\n \"FLOW.RUN_STEPS_MANY\",\n \"FLOW.TRANSITION_MANY\"\n]);\n\nexport const readOnlyAutoBatchCommands = new Set([\n \"EXISTS\",\n \"GET\",\n \"HGET\",\n \"HGETALL\",\n \"HMGET\",\n \"LRANGE\",\n \"MGET\",\n \"SISMEMBER\",\n \"SMEMBERS\",\n \"ZRANGE\",\n \"ZSCORE\"\n]);\n\nexport const connectionPinnedCommands = new Set([\n \"DISCARD\",\n \"EXEC\",\n \"MONITOR\",\n \"MULTI\",\n \"PSUBSCRIBE\",\n \"PUNSUBSCRIBE\",\n \"SSUBSCRIBE\",\n \"SUBSCRIBE\",\n \"SUNSUBSCRIBE\",\n \"UNSUBSCRIBE\",\n \"UNWATCH\",\n \"WATCH\"\n]);\n\nexport const connectionStateMutationCommands = new Set([\n \"AUTH\",\n \"CLIENT.SETNAME\",\n \"HELLO\",\n \"QUIT\",\n \"RESET\",\n \"SANDBOX\",\n \"STARTUP\",\n \"SUBSCRIBE_EVENTS\",\n \"UNSUBSCRIBE_EVENTS\",\n \"WINDOW_UPDATE\"\n]);\n\nexport const connectionBlockingCommands = new Set([\n \"BLMOVE\",\n \"BLMPOP\",\n \"BLPOP\",\n \"BRPOP\",\n \"BRPOPLPUSH\",\n \"XREAD\",\n \"XREADGROUP\"\n]);\n\nexport const decomposableCommandNames = new Set([\"DEL\", \"EXISTS\", \"FLOW.VALUE.MGET\", \"MGET\", \"UNLINK\"]);\n\nexport const firstKeyCommands = new Set([\n \"APPEND\",\n \"BF.ADD\",\n \"BF.CARD\",\n \"BF.EXISTS\",\n \"BF.INFO\",\n \"BF.MADD\",\n \"BF.MEXISTS\",\n \"BF.RESERVE\",\n \"BITCOUNT\",\n \"BITPOS\",\n \"CAS\",\n \"CF.ADD\",\n \"CF.ADDNX\",\n \"CF.COUNT\",\n \"CF.DEL\",\n \"CF.EXISTS\",\n \"CF.INFO\",\n \"CF.MEXISTS\",\n \"CF.RESERVE\",\n \"CMS.INCRBY\",\n \"CMS.INFO\",\n \"CMS.INITBYDIM\",\n \"CMS.INITBYPROB\",\n \"CMS.QUERY\",\n \"DECR\",\n \"DECRBY\",\n \"EXPIRE\",\n \"EXPIREAT\",\n \"EXPIRETIME\",\n \"EXTEND\",\n \"FETCH_OR_COMPUTE\",\n \"FETCH_OR_COMPUTE_ERROR\",\n \"FETCH_OR_COMPUTE_RESULT\",\n \"FERRICSTORE.KEY_INFO\",\n \"GEOADD\",\n \"GEODIST\",\n \"GEOHASH\",\n \"GEOPOS\",\n \"GEOSEARCH\",\n \"GET\",\n \"GETBIT\",\n \"GETDEL\",\n \"GETEX\",\n \"GETRANGE\",\n \"GETSET\",\n \"HDEL\",\n \"HEXISTS\",\n \"HEXPIRE\",\n \"HEXPIRETIME\",\n \"HGET\",\n \"HGETALL\",\n \"HGETDEL\",\n \"HGETEX\",\n \"HINCRBY\",\n \"HINCRBYFLOAT\",\n \"HKEYS\",\n \"HLEN\",\n \"HMGET\",\n \"HPERSIST\",\n \"HPEXPIRE\",\n \"HPTTL\",\n \"HRANDFIELD\",\n \"HSCAN\",\n \"HSET\",\n \"HSETEX\",\n \"HSETNX\",\n \"HSTRLEN\",\n \"HTTL\",\n \"HVALS\",\n \"INCR\",\n \"INCRBY\",\n \"INCRBYFLOAT\",\n \"KEY_INFO\",\n \"LINDEX\",\n \"LINSERT\",\n \"LLEN\",\n \"LOCK\",\n \"LPOP\",\n \"LPOS\",\n \"LPUSH\",\n \"LPUSHX\",\n \"LRANGE\",\n \"LREM\",\n \"LSET\",\n \"LTRIM\",\n \"PERSIST\",\n \"PEXPIRE\",\n \"PEXPIREAT\",\n \"PEXPIRETIME\",\n \"PFADD\",\n \"PSETEX\",\n \"PTTL\",\n \"RATELIMIT.ADD\",\n \"RPOP\",\n \"RPUSH\",\n \"RPUSHX\",\n \"SADD\",\n \"SCARD\",\n \"SISMEMBER\",\n \"SMEMBERS\",\n \"SMISMEMBER\",\n \"SREM\",\n \"SPOP\",\n \"SRANDMEMBER\",\n \"SSCAN\",\n \"SET\",\n \"SETBIT\",\n \"SETEX\",\n \"SETNX\",\n \"SETRANGE\",\n \"STRLEN\",\n \"TDIGEST.ADD\",\n \"TDIGEST.BYRANK\",\n \"TDIGEST.BYREVRANK\",\n \"TDIGEST.CDF\",\n \"TDIGEST.CREATE\",\n \"TDIGEST.INFO\",\n \"TDIGEST.MAX\",\n \"TDIGEST.MIN\",\n \"TDIGEST.QUANTILE\",\n \"TDIGEST.RANK\",\n \"TDIGEST.RESET\",\n \"TDIGEST.REVRANK\",\n \"TDIGEST.TRIMMED_MEAN\",\n \"TOPK.ADD\",\n \"TOPK.COUNT\",\n \"TOPK.INCRBY\",\n \"TOPK.INFO\",\n \"TOPK.LIST\",\n \"TOPK.QUERY\",\n \"TOPK.RESERVE\",\n \"TTL\",\n \"TYPE\",\n \"UNLOCK\",\n \"XACK\",\n \"XADD\",\n \"XDEL\",\n \"XLEN\",\n \"XRANGE\",\n \"XREVRANGE\",\n \"XTRIM\",\n \"ZADD\",\n \"ZCARD\",\n \"ZCOUNT\",\n \"ZINCRBY\",\n \"ZMSCORE\",\n \"ZPOPMAX\",\n \"ZPOPMIN\",\n \"ZRANGE\",\n \"ZRANGEBYSCORE\",\n \"ZRANDMEMBER\",\n \"ZRANK\",\n \"ZREM\",\n \"ZREVRANGE\",\n \"ZREVRANGEBYSCORE\",\n \"ZREVRANK\",\n \"ZSCAN\",\n \"ZSCORE\"\n]);\n\nexport const secondKeyCommands = new Set([\n \"MEMORY\",\n \"OBJECT\",\n \"XGROUP\",\n \"XINFO\"\n]);\n\nexport const twoKeyCommands = new Set([\n \"BLMOVE\",\n \"COPY\",\n \"GEOSEARCHSTORE\",\n \"LMOVE\",\n \"RENAME\",\n \"RENAMENX\",\n \"RPOPLPUSH\",\n \"SMOVE\"\n]);\n\nexport const trailingArgumentMultiKeyCommands = new Set([\n \"BLPOP\",\n \"BRPOP\"\n]);\n\nexport const allArgumentMultiKeyCommands = new Set([\n \"PFCOUNT\",\n \"PFMERGE\",\n \"SDIFF\",\n \"SDIFFSTORE\",\n \"SINTER\",\n \"SINTERSTORE\",\n \"SUNION\",\n \"SUNIONSTORE\"\n]);\n\nexport const typeScopedFlowCommands = new Set([\n \"FLOW.APPROVAL.LIST\",\n \"FLOW.ATTRIBUTE_VALUES\",\n \"FLOW.ATTRIBUTES\",\n \"FLOW.BUDGET.LIST\",\n \"FLOW.FAILURES\",\n \"FLOW.GOVERNANCE.OVERVIEW\",\n \"FLOW.INFO\",\n \"FLOW.LIMIT.LIST\",\n \"FLOW.LIST\",\n \"FLOW.POLICY.GET\",\n \"FLOW.POLICY.SET\",\n \"FLOW.RETENTION_CLEANUP\",\n \"FLOW.SCHEDULE.FIRE_DUE\",\n \"FLOW.SCHEDULE.LIST\",\n \"FLOW.SEARCH\",\n \"FLOW.STATS\",\n \"FLOW.STUCK\",\n \"FLOW.TERMINALS\"\n]);\n\nexport const flowScheduleCommands = new Set([\n \"FLOW.SCHEDULE.CREATE\",\n \"FLOW.SCHEDULE.DELETE\",\n \"FLOW.SCHEDULE.FIRE\",\n \"FLOW.SCHEDULE.FIRE_DUE\",\n \"FLOW.SCHEDULE.GET\",\n \"FLOW.SCHEDULE.LIST\",\n \"FLOW.SCHEDULE.PAUSE\",\n \"FLOW.SCHEDULE.RESUME\"\n]);\n\nexport const flowApprovalIdCommands = new Set([\n \"FLOW.APPROVAL.APPROVE\",\n \"FLOW.APPROVAL.GET\",\n \"FLOW.APPROVAL.REJECT\",\n \"FLOW.APPROVAL.REQUEST\"\n]);\n\nexport const flowGovernanceScopeCommands = new Set([\n \"FLOW.BUDGET.COMMIT\",\n \"FLOW.BUDGET.GET\",\n \"FLOW.BUDGET.RELEASE\",\n \"FLOW.BUDGET.RESERVE\",\n \"FLOW.CIRCUIT.CLOSE\",\n \"FLOW.CIRCUIT.GET\",\n \"FLOW.CIRCUIT.OPEN\",\n \"FLOW.LIMIT.GET\",\n \"FLOW.LIMIT.LEASE\",\n \"FLOW.LIMIT.RELEASE\",\n \"FLOW.LIMIT.SPEND\"\n]);\n","import type { CommandArgument } from \"./internal.js\";\n\n/** Copy a positional option range while rejecting holes and inherited slots. */\nexport function denseCommandArgumentSlice(\n args: readonly CommandArgument[],\n start: number,\n count: number,\n option: string\n): CommandArgument[] {\n const values = new Array<CommandArgument>(count);\n for (let offset = 0; offset < count; offset += 1) {\n const index = start + offset;\n if (!Object.hasOwn(args, index)) throw new TypeError(`${option} values must be dense`);\n values[offset] = args[index];\n }\n return values;\n}\n\n/** Copy the remainder of a positional option while rejecting holes and inherited slots. */\nexport function denseCommandArgumentTail(\n args: readonly CommandArgument[],\n start: number,\n option: string\n): CommandArgument[] {\n return denseCommandArgumentSlice(args, start, args.length - start, option);\n}\n\n/** Check a positional field without allowing a sparse or inherited value. */\nexport function hasOwnCommandArgument(\n args: readonly CommandArgument[],\n index: number,\n end: number,\n section: string\n): boolean {\n if (index >= end) return false;\n if (!Object.hasOwn(args, index)) throw new TypeError(`${section} must be dense`);\n return true;\n}\n","import { Buffer } from \"node:buffer\";\nimport { FerricStoreError } from \"./errors.js\";\nimport type { CommandArgument } from \"./internal.js\";\nimport { connectionBlockingCommands } from \"./command-metadata.js\";\nimport * as wire from \"./protocol-constants.js\";\nimport { asText, commandName, commandTokenIs, toBuffer } from \"./protocol-text.js\";\nimport { isRequestContextCommand, normalizeRequestContext } from \"./request-context.js\";\nexport { asText, commandName, commandNameIs, commandTokenIs, optionalText, toBuffer } from \"./protocol-text.js\";\n\n/** Encode an arbitrary command through the server's generic command path. */\nexport function commandExec(args: readonly CommandArgument[]): wire.ProtocolCommand {\n if (args.length === 0) {\n throw new FerricStoreError(\"command requires at least one argument\");\n }\n const command = asText(args[0]).toUpperCase();\n const commandArgs = args.slice(1);\n const payload: Record<string, unknown> = {\n args: commandArgs,\n command\n };\n if (\n isRequestContextCommand(command)\n && commandArgs.length >= 2\n && commandTokenIs(commandArgs[commandArgs.length - 2], \"REQUEST_CONTEXT\")\n ) {\n payload.args = commandArgs.slice(0, -2);\n payload.request_context = normalizeRequestContext(commandArgs[commandArgs.length - 1]);\n }\n return {\n opcode: wire.OPCODES.commandExec,\n payload,\n ...serverBlockMetadata(args)\n };\n}\n\nfunction serverBlockMetadata(args: readonly CommandArgument[]): { readonly serverBlockMs?: number } {\n const command = asText(args[0]).toUpperCase();\n let serverBlockMs: number | undefined;\n\n if ((command === \"BLPOP\" || command === \"BRPOP\") && args.length >= 3) {\n serverBlockMs = blockDurationMs(args[args.length - 1], 1_000);\n } else if (command === \"BRPOPLPUSH\" && args.length === 4) {\n serverBlockMs = blockDurationMs(args[3], 1_000);\n } else if (command === \"BLMOVE\" && args.length >= 6) {\n serverBlockMs = blockDurationMs(args[args.length - 1], 1_000);\n } else if (command === \"BLMPOP\" && args.length >= 2) {\n serverBlockMs = blockDurationMs(args[1], 1_000);\n } else if (command === \"XREAD\" || command === \"XREADGROUP\") {\n serverBlockMs = optionBlockDurationMs(args, [\"BLOCK\"], \"STREAMS\");\n } else if (command === \"WAIT\" && args.length === 3) {\n serverBlockMs = blockDurationMs(args[2], 1);\n } else if (command === \"WAITAOF\" && args.length === 4) {\n serverBlockMs = blockDurationMs(args[3], 1);\n } else if (command === \"FLOW.CLAIM_DUE\" || command === \"FLOW.SCHEDULE.FIRE_DUE\") {\n serverBlockMs = optionBlockDurationMs(args, [\"BLOCK\", \"BLOCK_MS\"]);\n } else if (command === \"FETCH_OR_COMPUTE\" && args.length >= 3) {\n // A remote-owner wait cannot outlive the compute lease.\n serverBlockMs = blockDurationMs(args[2], 1);\n }\n\n return serverBlockMs == null ? {} : { serverBlockMs };\n}\n\n/** @internal Return whether a command may keep its response pending on the server. */\nexport function commandHasServerBlock(args: readonly CommandArgument[]): boolean {\n const normalized = commandName(args[0]) === \"COMMAND_EXEC\" ? args.slice(1) : args;\n return normalized.length > 0 && serverBlockMetadata(normalized).serverBlockMs != null;\n}\n\n/** @internal Commands requiring the connection-level blocking dispatcher. */\nexport function isConnectionBlockingCommand(args: readonly CommandArgument[]): boolean {\n const normalized = commandName(args[0]) === \"COMMAND_EXEC\" ? args.slice(1) : args;\n const command = commandName(normalized[0]);\n return command != null\n && connectionBlockingCommands.has(command)\n && commandHasServerBlock(normalized);\n}\n\nfunction optionBlockDurationMs(\n args: readonly CommandArgument[],\n optionNames: readonly string[],\n stopOption?: string\n): number | undefined {\n let serverBlockMs: number | undefined;\n for (let index = 1; index + 1 < args.length; index += 1) {\n if (stopOption != null && commandTokenIs(args[index], stopOption)) break;\n if (optionNames.some((name) => commandTokenIs(args[index], name))) {\n const candidate = blockDurationMs(args[index + 1], 1);\n if (candidate != null) serverBlockMs = candidate;\n index += 1;\n }\n }\n return serverBlockMs;\n}\n\nexport function blockDurationMs(value: CommandArgument, multiplier: number): number | undefined {\n let duration: number;\n try {\n duration = numberArg(value);\n } catch {\n return undefined;\n }\n if (duration < 0) return undefined;\n return Math.min(Number.MAX_SAFE_INTEGER, duration * multiplier);\n}\n\n/** @internal Normalize a request-body limit once for every encoder. */\nexport function normalizeEncodeLimit(value: number): number {\n return Number.isFinite(value)\n ? Math.max(0, Math.min(Number.MAX_SAFE_INTEGER, Math.trunc(value)))\n : Number.MAX_SAFE_INTEGER;\n}\n\n/** @internal Build the shared oversized-request error. */\nexport function requestFrameTooLarge(maxBytes: number): wire.RequestFrameTooLargeError {\n return new wire.RequestFrameTooLargeError(\n `native protocol request exceeds server-advertised ${maxBytes}-byte frame limit`\n );\n}\n\n/** @internal Return the wire byte length of a scalar custom payload. */\nexport function binaryValueByteLength(value: unknown): number {\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) return value.byteLength;\n if (typeof value === \"string\") return Buffer.byteLength(value);\n if (typeof value === \"number\" || typeof value === \"bigint\" || typeof value === \"boolean\") {\n return Buffer.byteLength(String(value));\n }\n if (typeof value === \"symbol\") return Buffer.byteLength(value.description ?? value.toString());\n if (value == null) return 0;\n return toBuffer(value).byteLength;\n}\n\n/** @internal Write a scalar directly into its final frame allocation. */\nexport function writeCustomPayload(\n output: Buffer,\n offset: number,\n value: unknown,\n knownByteLength?: number\n): void {\n if (Buffer.isBuffer(value)) {\n value.copy(output, offset);\n return;\n }\n if (value instanceof Uint8Array) {\n output.set(value, offset);\n return;\n }\n if (value == null) return;\n let text: string;\n if (typeof value === \"string\") {\n text = value;\n } else if (typeof value === \"number\" || typeof value === \"bigint\" || typeof value === \"boolean\") {\n text = String(value);\n } else if (typeof value === \"symbol\") {\n text = value.description ?? value.toString();\n } else {\n throw new FerricStoreError(`unsupported binary command argument type: ${typeof value}`);\n }\n output.write(text, offset, knownByteLength ?? Buffer.byteLength(text), \"utf8\");\n}\n\nexport function compactBinaryEncodedLength(value: unknown): number {\n return 4 + compactBinaryByteLength(value);\n}\n\nexport function compactBinaryByteLength(value: unknown): number {\n const byteLength = binaryValueByteLength(value);\n if (byteLength >= wire.NULL_U32) {\n throw new FerricStoreError(\"compact binary command argument exceeds the 32-bit length limit\");\n }\n return byteLength;\n}\n\nexport function isCompactBinaryArgument(value: unknown): boolean {\n return typeof value === \"string\" || Buffer.isBuffer(value) || value instanceof Uint8Array;\n}\n\nexport function isCompactBinaryScalar(value: unknown): boolean {\n return value == null ||\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n typeof value === \"boolean\" ||\n typeof value === \"symbol\" ||\n Buffer.isBuffer(value) ||\n value instanceof Uint8Array;\n}\n\nexport function compactOptionalBinaryEncodedLength(value: unknown): number {\n return value == null ? 4 : compactBinaryEncodedLength(value);\n}\n\nexport function assertCompactPayloadFits(byteLength: number, maxBodyBytes: number): void {\n const bodyLimit = normalizeEncodeLimit(maxBodyBytes);\n if (byteLength > bodyLimit) throw requestFrameTooLarge(bodyLimit);\n}\n\n/** @internal Check a compact lower bound without allocating its planning tables. */\nexport function compactPayloadFits(byteLength: number, maxBodyBytes: number): boolean {\n return byteLength <= normalizeEncodeLimit(maxBodyBytes);\n}\n\nexport function writeBinary(out: Buffer, offset: number, value: Buffer): number {\n out.writeUInt32BE(value.byteLength, offset);\n offset += 4;\n value.copy(out, offset);\n return offset + value.byteLength;\n}\n\nexport function writeBinaryValue(\n out: Buffer,\n offset: number,\n value: unknown,\n byteLength: number\n): number {\n out.writeUInt32BE(byteLength, offset);\n offset += 4;\n writeCustomPayload(out, offset, value, byteLength);\n return offset + byteLength;\n}\n\nexport function writeOptionalBinary(out: Buffer, offset: number, value: Buffer | null): number {\n if (value == null) {\n out.writeUInt32BE(wire.NULL_U32, offset);\n return offset + 4;\n }\n return writeBinary(out, offset, value);\n}\n\nexport function writeOptionalBinaryValue(\n out: Buffer,\n offset: number,\n value: unknown,\n byteLength: number\n): number {\n if (value == null) {\n out.writeUInt32BE(wire.NULL_U32, offset);\n return offset + 4;\n }\n return writeBinaryValue(out, offset, value, byteLength);\n}\n\nexport function numberArg(value: CommandArgument): number {\n if (\n typeof value === \"bigint\" &&\n (value > wire.MAX_SAFE_INTEGER_BIGINT || value < wire.MIN_SAFE_INTEGER_BIGINT)\n ) {\n throw new FerricStoreError(\"numeric command argument exceeds the JavaScript safe range\");\n }\n const number = typeof value === \"number\"\n ? value\n : typeof value === \"bigint\"\n ? Number(value)\n : Number(asText(value));\n if (!Number.isFinite(number)) {\n throw new FerricStoreError(\"numeric command argument must be finite\");\n }\n if (Number.isInteger(number) && !Number.isSafeInteger(number)) {\n throw new FerricStoreError(\"numeric command argument exceeds the JavaScript safe range\");\n }\n return number;\n}\n\n/** Parse an exact signed-64-bit command integer without narrowing unsafe values. */\nexport function integerArg(value: CommandArgument): number | bigint {\n if (typeof value === \"number\") {\n if (!Number.isInteger(value)) {\n throw new FerricStoreError(\"integer command argument must be an integer\");\n }\n if (!Number.isSafeInteger(value)) {\n throw new FerricStoreError(\"unsafe integer command argument; use bigint for exact encoding\");\n }\n return value;\n }\n const source = typeof value === \"bigint\" ? value.toString() : asText(value);\n if (!/^[+-]?\\d+$/u.test(source)) {\n throw new FerricStoreError(\"integer command argument must be an integer\");\n }\n const integer = BigInt(source);\n if (integer < wire.MIN_I64 || integer > wire.MAX_I64) {\n throw new FerricStoreError(\"integer command argument exceeds the signed 64-bit range\");\n }\n return integer >= wire.MIN_SAFE_INTEGER_BIGINT && integer <= wire.MAX_SAFE_INTEGER_BIGINT\n ? Number(integer)\n : integer;\n}\n\n/** Parse an exact command integer that is safe for JavaScript indexing and counts. */\nexport function safeIntegerNumberArg(value: CommandArgument): number {\n const integer = integerArg(value);\n if (typeof integer === \"bigint\") {\n throw new FerricStoreError(\"integer command argument exceeds the JavaScript safe range\");\n }\n return integer;\n}\n\nexport function i64Arg(value: CommandArgument): bigint {\n return BigInt(integerArg(value));\n}\n\nexport function boolArg(value: CommandArgument): boolean {\n if (typeof value === \"boolean\") return value;\n const text = asText(value).toUpperCase();\n return text === \"1\" || text === \"TRUE\" || text === \"YES\" || text === \"ON\";\n}\n\nexport function isBoolToken(value: CommandArgument): boolean {\n if (typeof value === \"boolean\") return true;\n const text = asText(value).toUpperCase();\n return text === \"1\" || text === \"0\" || text === \"TRUE\" || text === \"FALSE\" ||\n text === \"YES\" || text === \"NO\" || text === \"ON\" || text === \"OFF\";\n}\n\nexport function independentMode(value: unknown): number {\n if (value === true) return 2;\n if (value === false) return 1;\n return 0;\n}\n\nexport function optionalI64(value: unknown): bigint {\n return typeof value === \"number\" ? BigInt(value) : wire.MIN_I64;\n}\n\nexport function compactClaimReturnMode(value: unknown): 1 | 2 | 3 | 4 | undefined {\n const mode = value == null ? \"\" : asText(value).toUpperCase();\n if (mode === \"JOBS_COMPACT\") return 1;\n if (mode === \"JOBS_COMPACT_STATE\" || mode === \"JOBS_COMPACT_WITH_STATE\") return 2;\n if (mode === \"JOBS_COMPACT_ATTRS\" || mode === \"JOBS_COMPACT_ATTRIBUTES\") return 3;\n if (\n mode === \"JOBS_COMPACT_STATE_ATTRS\" ||\n mode === \"JOBS_COMPACT_WITH_STATE_ATTRS\" ||\n mode === \"JOBS_COMPACT_STATE_ATTRIBUTES\" ||\n mode === \"JOBS_COMPACT_WITH_STATE_ATTRIBUTES\"\n ) return 4;\n return undefined;\n}\n\nexport function compactClaimResponseMode(value: unknown): wire.CompactClaimMode | undefined {\n switch (compactClaimReturnMode(value)) {\n case 1: return \"base\";\n case 2: return \"state\";\n case 3: return \"attrs\";\n case 4: return \"stateAttrs\";\n case undefined: return undefined;\n }\n}\n\nexport function setOwnValue<T>(target: Record<string, T>, key: string, value: T): void {\n Object.defineProperty(target, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n}\n","import { Buffer } from \"node:buffer\";\nimport { FerricStoreError } from \"./errors.js\";\nimport type { CompactResponseOpcodes } from \"./native-negotiation.js\";\nimport nativeProtocol from \"./native-protocol-manifest.json\" with { type: \"json\" };\n\nexport const MAGIC = nativeProtocol.magic;\nexport const REQUEST_VERSION = nativeProtocol.requestVersion;\nexport const RESPONSE_VERSION = nativeProtocol.responseVersion;\nexport const HEADER_SIZE = nativeProtocol.headerSize;\nexport const DEFAULT_MAX_FRAME_BYTES = 16 * 1024 * 1024;\n\nexport const FLAG_CUSTOM_PAYLOAD = nativeProtocol.flagCustomPayload;\nexport const FLAG_COMPRESSED = nativeProtocol.flagCompressed;\nexport const FLAG_MORE_CHUNKS = nativeProtocol.flagMoreChunks;\n\nexport const STATUS_OK = nativeProtocol.statusOk;\nexport const DEFAULT_MAX_VALUE_ITEMS = nativeProtocol.defaultMaxValueItems;\nexport const DEFAULT_MAX_VALUE_DEPTH = nativeProtocol.defaultMaxValueDepth;\nexport const MAX_FRAMES_PER_DECODE = nativeProtocol.maxFramesPerDecode;\n\nexport interface DecodeValueOptions {\n readonly maxDepth?: number;\n readonly maxItems?: number;\n}\n\nexport interface DecodeValueLimits {\n readonly maxDepth: number;\n readonly maxItems: number;\n}\n\nexport interface DecodeValueBudget {\n remainingItems: number;\n}\n\nexport interface EncodeValueBudget extends DecodeValueBudget {\n readonly maxBytes: number;\n remainingBytes: number;\n}\n\nexport type EncodeValuePlan =\n | { readonly byteLength: 1; readonly tag: 0 | 1 | 2 }\n | { readonly byteLength: 9; readonly tag: 3; readonly value: bigint }\n | { readonly byteLength: 9; readonly tag: 7; readonly value: number }\n | {\n readonly byteLength: number;\n readonly tag: 4;\n readonly value: string | Buffer | Uint8Array;\n readonly valueByteLength: number;\n }\n | { readonly byteLength: number; readonly items: readonly EncodeValuePlan[]; readonly tag: 5 }\n | { readonly byteLength: number; readonly entries: readonly EncodeMapEntryPlan[]; readonly tag: 6 };\n\nexport interface EncodeMapEntryPlan {\n readonly key: string;\n readonly keyByteLength: number;\n readonly value: EncodeValuePlan;\n}\n\nexport class RequestFrameTooLargeError extends FerricStoreError {}\n\nexport const COMMAND_OPCODES = {\n \"HELLO\": 0x0001,\n \"AUTH\": 0x0002,\n \"PING\": 0x0003,\n \"CLIENT.SETNAME\": 0x0004,\n \"CLIENT.INFO\": 0x0005,\n \"ROUTE\": 0x0006,\n \"SHARDS\": 0x0007,\n \"BACKPRESSURE\": 0x0008,\n \"QUIT\": 0x0009,\n \"GOAWAY\": 0x000a,\n \"OPTIONS\": 0x000b,\n \"STARTUP\": 0x000c,\n \"WINDOW_UPDATE\": 0x000d,\n \"PIPELINE\": 0x000e,\n \"ROUTE_BATCH\": 0x000f,\n \"EVENT\": 0x0010,\n \"SUBSCRIBE_EVENTS\": 0x0011,\n \"UNSUBSCRIBE_EVENTS\": 0x0012,\n \"COMMAND_EXEC\": 0x0100,\n \"GET\": 0x0101,\n \"SET\": 0x0102,\n \"DEL\": 0x0103,\n \"MGET\": 0x0104,\n \"MSET\": 0x0105,\n \"CAS\": 0x0106,\n \"LOCK\": 0x0107,\n \"UNLOCK\": 0x0108,\n \"EXTEND\": 0x0109,\n \"RATELIMIT.ADD\": 0x010a,\n \"FETCH_OR_COMPUTE\": 0x010b,\n \"FETCH_OR_COMPUTE_RESULT\": 0x010c,\n \"FETCH_OR_COMPUTE_ERROR\": 0x010d,\n \"HSET\": 0x0110,\n \"HGET\": 0x0111,\n \"HMGET\": 0x0112,\n \"HGETALL\": 0x0113,\n \"LPUSH\": 0x0120,\n \"RPUSH\": 0x0121,\n \"LPOP\": 0x0122,\n \"RPOP\": 0x0123,\n \"LRANGE\": 0x0124,\n \"SADD\": 0x0130,\n \"SREM\": 0x0131,\n \"SMEMBERS\": 0x0132,\n \"SISMEMBER\": 0x0133,\n \"ZADD\": 0x0140,\n \"ZREM\": 0x0141,\n \"ZRANGE\": 0x0142,\n \"ZSCORE\": 0x0143,\n \"FLOW.CREATE\": 0x0201,\n \"FLOW.GET\": 0x0202,\n \"FLOW.CLAIM_DUE\": 0x0203,\n \"FLOW.COMPLETE\": 0x0204,\n \"FLOW.TRANSITION\": 0x0205,\n \"FLOW.RETRY\": 0x0206,\n \"FLOW.FAIL\": 0x0207,\n \"FLOW.CANCEL\": 0x0208,\n \"FLOW.EXTEND_LEASE\": 0x0209,\n \"FLOW.HISTORY\": 0x020a,\n \"FLOW.VALUE.PUT\": 0x020b,\n \"FLOW.VALUE.MGET\": 0x020c,\n \"FLOW.SIGNAL\": 0x020d,\n \"FLOW.LIST\": 0x020e,\n \"FLOW.CREATE_MANY\": 0x020f,\n \"FLOW.COMPLETE_MANY\": 0x0210,\n \"FLOW.TRANSITION_MANY\": 0x0211,\n \"FLOW.RETRY_MANY\": 0x0212,\n \"FLOW.FAIL_MANY\": 0x0213,\n \"FLOW.CANCEL_MANY\": 0x0214,\n \"FLOW.RECLAIM\": 0x0215,\n \"FLOW.REWIND\": 0x0216,\n \"FLOW.TERMINALS\": 0x0217,\n \"FLOW.FAILURES\": 0x0218,\n \"FLOW.BY_PARENT\": 0x0219,\n \"FLOW.BY_ROOT\": 0x021a,\n \"FLOW.BY_CORRELATION\": 0x021b,\n \"FLOW.INFO\": 0x021c,\n \"FLOW.STUCK\": 0x021d,\n \"FLOW.POLICY.SET\": 0x021e,\n \"FLOW.POLICY.GET\": 0x021f,\n \"FLOW.SPAWN_CHILDREN\": 0x0220,\n \"FLOW.RETENTION_CLEANUP\": 0x0221,\n \"FLOW.STEP_CONTINUE\": 0x0222,\n \"FLOW.START_AND_CLAIM\": 0x0223,\n \"FLOW.RUN_STEPS_MANY\": 0x0224,\n \"FLOW.SCHEDULE.CREATE\": 0x0225,\n \"FLOW.SCHEDULE.GET\": 0x0226,\n \"FLOW.SCHEDULE.DELETE\": 0x0227,\n \"FLOW.SCHEDULE.FIRE_DUE\": 0x0228,\n \"FLOW.SCHEDULE.LIST\": 0x0229,\n \"FLOW.SCHEDULE.FIRE\": 0x022a,\n \"FLOW.SCHEDULE.PAUSE\": 0x022b,\n \"FLOW.SCHEDULE.RESUME\": 0x022c,\n \"FLOW.STATS\": 0x022d,\n \"FLOW.ATTRIBUTES\": 0x022e,\n \"FLOW.ATTRIBUTE_VALUES\": 0x022f,\n \"FLOW.SEARCH\": 0x0230,\n \"FLOW.EFFECT.RESERVE\": 0x0240,\n \"FLOW.EFFECT.CONFIRM\": 0x0241,\n \"FLOW.EFFECT.FAIL\": 0x0242,\n \"FLOW.EFFECT.COMPENSATE\": 0x0243,\n \"FLOW.EFFECT.GET\": 0x0244,\n \"FLOW.GOVERNANCE.LEDGER\": 0x0245,\n \"FLOW.APPROVAL.REQUEST\": 0x0246,\n \"FLOW.APPROVAL.APPROVE\": 0x0247,\n \"FLOW.APPROVAL.REJECT\": 0x0248,\n \"FLOW.APPROVAL.GET\": 0x0249,\n \"FLOW.CIRCUIT.OPEN\": 0x024a,\n \"FLOW.CIRCUIT.CLOSE\": 0x024b,\n \"FLOW.CIRCUIT.GET\": 0x024c,\n \"FLOW.BUDGET.RESERVE\": 0x024d,\n \"FLOW.BUDGET.GET\": 0x024e,\n \"FLOW.LIMIT.LEASE\": 0x024f,\n \"FLOW.LIMIT.SPEND\": 0x0250,\n \"FLOW.LIMIT.RELEASE\": 0x0251,\n \"FLOW.LIMIT.GET\": 0x0252,\n \"FLOW.APPROVAL.LIST\": 0x0253,\n \"FLOW.GOVERNANCE.OVERVIEW\": 0x0254,\n \"FLOW.BUDGET.LIST\": 0x0255,\n \"FLOW.LIMIT.LIST\": 0x0256,\n \"FLOW.BUDGET.COMMIT\": 0x0257,\n \"FLOW.BUDGET.RELEASE\": 0x0258,\n \"CLUSTER.HEALTH\": 0x0301,\n \"CLUSTER.STATS\": 0x0302,\n \"CLUSTER.KEYSLOT\": 0x0303,\n \"CLUSTER.SLOTS\": 0x0304,\n \"CLUSTER.STATUS\": 0x0305,\n \"CLUSTER.JOIN\": 0x0306,\n \"CLUSTER.LEAVE\": 0x0307,\n \"CLUSTER.FAILOVER\": 0x0308,\n \"CLUSTER.PROMOTE\": 0x0309,\n \"CLUSTER.DEMOTE\": 0x030a,\n \"CLUSTER.ROLE\": 0x030b,\n \"FERRICSTORE.KEY_INFO\": 0x030c,\n \"FERRICSTORE.CONFIG\": 0x030d,\n \"FERRICSTORE.HOTNESS\": 0x030e,\n \"FERRICSTORE.METRICS\": 0x030f,\n \"FERRICSTORE.BLOBGC\": 0x0310\n} as const;\n\nexport const OPCODES = {\n startup: COMMAND_OPCODES.STARTUP,\n auth: COMMAND_OPCODES.AUTH,\n ping: COMMAND_OPCODES.PING,\n clientSetName: COMMAND_OPCODES[\"CLIENT.SETNAME\"],\n clientInfo: COMMAND_OPCODES[\"CLIENT.INFO\"],\n route: COMMAND_OPCODES.ROUTE,\n routeBatch: COMMAND_OPCODES.ROUTE_BATCH,\n shards: COMMAND_OPCODES.SHARDS,\n backpressure: COMMAND_OPCODES.BACKPRESSURE,\n goaway: COMMAND_OPCODES.GOAWAY,\n event: COMMAND_OPCODES.EVENT,\n windowUpdate: COMMAND_OPCODES.WINDOW_UPDATE,\n subscribeEvents: COMMAND_OPCODES.SUBSCRIBE_EVENTS,\n unsubscribeEvents: COMMAND_OPCODES.UNSUBSCRIBE_EVENTS,\n options: COMMAND_OPCODES.OPTIONS,\n quit: COMMAND_OPCODES.QUIT,\n commandExec: COMMAND_OPCODES.COMMAND_EXEC,\n get: COMMAND_OPCODES.GET,\n set: COMMAND_OPCODES.SET,\n del: COMMAND_OPCODES.DEL,\n mget: COMMAND_OPCODES.MGET,\n mset: COMMAND_OPCODES.MSET,\n pipeline: COMMAND_OPCODES.PIPELINE,\n flowCreate: COMMAND_OPCODES[\"FLOW.CREATE\"],\n flowGet: COMMAND_OPCODES[\"FLOW.GET\"],\n flowClaimDue: COMMAND_OPCODES[\"FLOW.CLAIM_DUE\"],\n flowComplete: COMMAND_OPCODES[\"FLOW.COMPLETE\"],\n flowTransition: COMMAND_OPCODES[\"FLOW.TRANSITION\"],\n flowRetry: COMMAND_OPCODES[\"FLOW.RETRY\"],\n flowFail: COMMAND_OPCODES[\"FLOW.FAIL\"],\n flowValuePut: COMMAND_OPCODES[\"FLOW.VALUE.PUT\"],\n flowValueMGet: COMMAND_OPCODES[\"FLOW.VALUE.MGET\"],\n flowSignal: COMMAND_OPCODES[\"FLOW.SIGNAL\"],\n flowCreateMany: COMMAND_OPCODES[\"FLOW.CREATE_MANY\"],\n flowCompleteMany: COMMAND_OPCODES[\"FLOW.COMPLETE_MANY\"],\n flowTransitionMany: COMMAND_OPCODES[\"FLOW.TRANSITION_MANY\"],\n flowRetryMany: COMMAND_OPCODES[\"FLOW.RETRY_MANY\"],\n flowFailMany: COMMAND_OPCODES[\"FLOW.FAIL_MANY\"],\n flowReclaim: COMMAND_OPCODES[\"FLOW.RECLAIM\"],\n flowSpawnChildren: COMMAND_OPCODES[\"FLOW.SPAWN_CHILDREN\"],\n flowStepContinue: COMMAND_OPCODES[\"FLOW.STEP_CONTINUE\"],\n flowStartAndClaim: COMMAND_OPCODES[\"FLOW.START_AND_CLAIM\"],\n flowRunStepsMany: COMMAND_OPCODES[\"FLOW.RUN_STEPS_MANY\"],\n flowSearch: COMMAND_OPCODES[\"FLOW.SEARCH\"]\n} as const;\n\nexport const COMPACT_FLOW_CLAIM_JOBS = 0x80;\nexport const COMPACT_OK_LIST = 0x81;\nexport const COMPACT_KV_GET = 0x82;\nexport const COMPACT_KV_MGET = 0x83;\nexport const COMPACT_FLOW_RECORD = 0x84;\nexport const COMPACT_FLOW_RECORD_LIST = 0x85;\nexport const COMPACT_BINARY_LIST_LIST = 0x86;\nexport const COMPACT_BINARY_MAP_LIST = 0x87;\nexport const COMPACT_INTEGER_LIST = 0x88;\nexport const COMPACT_KV_MGET_FIXED = 0x89;\nexport const COMPACT_FLOW_CREATE_MANY_REQUEST = 0x90;\nexport const COMPACT_FLOW_CLAIM_DUE_REQUEST = 0x91;\nexport const COMPACT_FLOW_COMPLETE_MANY_REQUEST = 0x92;\nexport const COMPACT_FLOW_COMPLETE_MANY_OK_REQUEST = 0x93;\nexport const COMPACT_PIPELINE_REQUEST = 0x94;\nexport const COMPACT_PIPELINE_RESPONSE = 0x95;\nexport const COMPACT_FLOW_CREATE_MANY_PARTITION_REQUEST = 0x96;\nexport const COMPACT_FLOW_RETRY_MANY_REQUEST = 0x97;\nexport const COMPACT_FLOW_RETRY_MANY_OK_REQUEST = 0x98;\nexport const COMPACT_FLOW_CANCEL_MANY_REQUEST = 0x99;\nexport const COMPACT_FLOW_CANCEL_MANY_OK_REQUEST = 0x9a;\nexport const COMPACT_FLOW_TRANSITION_MANY_REQUEST = 0x9b;\nexport const COMPACT_FLOW_TRANSITION_MANY_OK_REQUEST = 0x9c;\nexport const COMPACT_FLOW_VALUE_MGET_REQUEST = 0x9d;\nexport const COMPACT_FLOW_CREATE_MANY_MIXED_REQUEST = 0x9e;\nexport const COMPACT_FLOW_LIST_REQUEST = 0x9f;\nexport const COMPACT_PIPELINE_DECODED = Symbol(\"ferricstore.compactPipelineDecoded\");\nexport const NULL_U32 = 0xffff_ffff;\nexport const MIN_I64 = -9_223_372_036_854_775_808n;\nexport const MAX_I64 = 9_223_372_036_854_775_807n;\nexport const MAX_SAFE_INTEGER_BIGINT = BigInt(Number.MAX_SAFE_INTEGER);\nexport const MIN_SAFE_INTEGER_BIGINT = BigInt(Number.MIN_SAFE_INTEGER);\n\nexport const FLOW_RECORD_FIELD_KEYS = [\n \"\",\n \"id\",\n \"type\",\n \"state\",\n \"version\",\n \"priority\",\n \"partition_key\",\n \"payload_ref\",\n \"result_ref\",\n \"error_ref\",\n \"payload\",\n \"result\",\n \"error\",\n \"created_at_ms\",\n \"updated_at_ms\",\n \"next_run_at_ms\",\n \"lease_deadline_ms\",\n \"lease_owner\",\n \"lease_token\",\n \"fencing_token\",\n \"attempts\",\n \"history_max_events\",\n \"history_hot_max_events\",\n \"child_groups\",\n \"parent_flow_id\",\n \"parent_partition_key\",\n \"root_flow_id\",\n \"correlation_id\",\n \"terminal_retention_until_ms\",\n \"ttl_ms\",\n \"retention_ttl_ms\",\n \"run_state\",\n \"value_refs\",\n \"values\",\n \"payload_omitted\",\n \"payload_size\",\n \"result_omitted\",\n \"result_size\",\n \"error_omitted\",\n \"error_size\",\n \"max_attempts\",\n \"attributes\"\n] as const;\n\nexport interface ProtocolCommand {\n readonly opcode: number;\n readonly payload: unknown;\n readonly flags?: number;\n readonly laneId?: number;\n /** @internal Correlated compact claim shape used to decode a direct response without guessing. */\n readonly compactClaimMode?: CompactClaimMode;\n /** @internal Correlated compact claim shapes for native pipeline response items. */\n readonly pipelineClaimModes?: readonly (CompactClaimMode | undefined)[];\n /** @internal Parsed routing metadata retained when a command uses COMMAND_EXEC. */\n readonly routing?: ProtocolRoutingHints;\n /** @internal Server-side blocking duration used to derive a safe response timeout. */\n readonly serverBlockMs?: number;\n}\n\nexport type CompactClaimMode = \"base\" | \"attrs\" | \"state\" | \"stateAttrs\";\n\nexport interface ResponseDecodeHints {\n readonly compactClaimMode?: CompactClaimMode;\n readonly compactResponseOpcodes?: CompactResponseOpcodes;\n readonly pipelineClaimModes?: readonly (CompactClaimMode | undefined)[];\n}\n\nexport interface ProtocolRoutingHints {\n readonly flowPartitionKey?: unknown;\n readonly flowPartitionKeys?: readonly unknown[];\n}\n\nexport interface ResponseFrame {\n readonly flags: number;\n readonly laneId: number;\n readonly opcode: number;\n readonly requestId: bigint;\n readonly bodyLength: number;\n readonly body: Buffer;\n}\n","{\n \"magic\": \"FSNP\",\n \"requestVersion\": 1,\n \"responseVersion\": 129,\n \"headerSize\": 24,\n \"flagCustomPayload\": 2,\n \"flagCompressed\": 8,\n \"flagMoreChunks\": 32,\n \"statusOk\": 0,\n \"defaultMaxValueItems\": 100000,\n \"defaultMaxValueDepth\": 64,\n \"maxFramesPerDecode\": 128\n}\n","import { Buffer } from \"node:buffer\";\nimport { commandToken } from \"./command-grammar.js\";\nimport { FerricStoreError } from \"./errors.js\";\n\nexport function toBuffer(value: unknown): Buffer {\n if (Buffer.isBuffer(value)) return value;\n if (value instanceof Uint8Array) return Buffer.from(value);\n if (typeof value === \"string\") return Buffer.from(value);\n if (typeof value === \"number\" || typeof value === \"bigint\" || typeof value === \"boolean\") {\n return Buffer.from(String(value));\n }\n if (typeof value === \"symbol\") return Buffer.from(value.description ?? value.toString());\n if (value == null) return Buffer.alloc(0);\n throw new FerricStoreError(`unsupported binary command argument type: ${typeof value}`);\n}\n\nexport function asText(value: unknown): string {\n return toBuffer(value).toString(\"utf8\");\n}\n\nexport function optionalText(value: unknown): string | undefined {\n if (value == null || value === \"\") return undefined;\n if (\n typeof value === \"string\" ||\n typeof value === \"number\" ||\n typeof value === \"bigint\" ||\n typeof value === \"boolean\" ||\n Buffer.isBuffer(value) ||\n value instanceof Uint8Array\n ) {\n return asText(value);\n }\n return undefined;\n}\n\nexport function commandTokenIs(value: unknown, expected: string): boolean {\n if (typeof value === \"string\") return value.toUpperCase() === expected;\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) {\n return asText(value).toUpperCase() === expected;\n }\n return false;\n}\n\nexport function commandName(value: unknown): string | undefined {\n return commandToken(value);\n}\n\nexport function commandNameIs(value: unknown, expected: string): boolean {\n if (typeof value === \"string\") return value === expected || value.toUpperCase() === expected;\n return asText(value).toUpperCase() === expected;\n}\n","import { Buffer } from \"node:buffer\";\nimport { InvalidCommandError } from \"./errors.js\";\nimport type { CommandArgument } from \"./internal.js\";\n\nconst requestContextCommands = new Set([\n \"INVOCATION.CREATE\",\n \"INVOCATION.DEFINITION.GET\",\n \"INVOCATION.DEFINITION.LIST\",\n \"INVOCATION.DEFINITION.PUT\",\n \"INVOCATION.GET\",\n \"INVOCATION.PARTITION.LIST\"\n]);\nconst requestContextFields = new Set([\"scopes\", \"subject\", \"tenant\"]);\nconst normalizedRequestContexts = new WeakSet<object>();\n\nexport function isRequestContextCommand(command: string): boolean {\n return requestContextCommands.has(command);\n}\n\n/** Capture and validate authorization data before command dispatch can await. */\nexport function normalizeRequestContext(context: unknown): Record<string, unknown> {\n if (typeof context === \"object\" && context != null && normalizedRequestContexts.has(context)) {\n return context as Record<string, unknown>;\n }\n if (!isPlainObject(context)) {\n throw new InvalidCommandError(\"request context must be a plain object\");\n }\n const prototype = Reflect.getPrototypeOf(context);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new InvalidCommandError(\"request context must be a plain object\");\n }\n for (const key of Object.keys(context)) {\n if (!requestContextFields.has(key)) {\n throw new InvalidCommandError(`request context contains unsupported field ${key}`);\n }\n }\n\n const snapshot: Record<string, unknown> = {};\n const subject = requestContextText(context, \"subject\");\n const tenant = requestContextText(context, \"tenant\");\n if (subject != null) snapshot.subject = subject;\n if (tenant != null) snapshot.tenant = tenant;\n if (Object.hasOwn(context, \"scopes\") && context.scopes !== undefined) {\n snapshot.scopes = normalizeRequestContextScopes(context.scopes);\n }\n Object.freeze(snapshot);\n normalizedRequestContexts.add(snapshot);\n return snapshot;\n}\n\n/** Snapshot raw invocation command context in reconnecting/topology queues too. */\nexport function snapshotCommandRequestContext(args: CommandArgument[]): void {\n const command = requestContextCommandToken(args[0]);\n if (\n command == null\n || args.length < 3\n || commandToken(args[args.length - 2]) !== \"REQUEST_CONTEXT\"\n ) return;\n args[args.length - 1] = normalizeRequestContext(args[args.length - 1]);\n}\n\nfunction requestContextCommandToken(value: CommandArgument | undefined): string | undefined {\n if (typeof value === \"string\") {\n const first = value.charCodeAt(0);\n if (first !== 73 && first !== 105) return undefined;\n if (isRequestContextCommand(value)) return value;\n const upper = value.toUpperCase();\n return isRequestContextCommand(upper) ? upper : undefined;\n }\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) {\n if (value[0] !== 73 && value[0] !== 105) return undefined;\n const command = Buffer.from(value).toString(\"utf8\").toUpperCase();\n return isRequestContextCommand(command) ? command : undefined;\n }\n return undefined;\n}\n\nfunction normalizeRequestContextScopes(scopes: unknown): readonly string[] {\n if (typeof scopes === \"string\") {\n return Object.freeze([...new Set(scopes.split(/\\s+/u).filter((scope) => scope.length > 0))]);\n }\n if (!Array.isArray(scopes)) {\n throw new InvalidCommandError(\"request context scopes must be a string or an array of strings\");\n }\n const unique = new Set<string>();\n for (let index = 0; index < scopes.length; index += 1) {\n const scope: unknown = scopes[index];\n if (!Object.hasOwn(scopes, index) || typeof scope !== \"string\" || scope.length === 0) {\n throw new InvalidCommandError(\"request context scopes must be a dense array of own non-empty strings\");\n }\n unique.add(scope);\n }\n return Object.freeze([...unique]);\n}\n\nfunction requestContextText(\n context: Record<string, unknown>,\n fieldName: \"subject\" | \"tenant\"\n): string | undefined {\n if (!Object.hasOwn(context, fieldName) || context[fieldName] === undefined) return undefined;\n const value = context[fieldName];\n if (typeof value !== \"string\" || value.length === 0) {\n throw new InvalidCommandError(`request context ${fieldName} must be a non-empty string`);\n }\n return value;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\"\n && value != null\n && !Array.isArray(value)\n && !Buffer.isBuffer(value)\n && !(value instanceof Uint8Array);\n}\n\nfunction commandToken(value: CommandArgument | undefined): string {\n if (typeof value === \"string\") return value.toUpperCase();\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) {\n return Buffer.from(value).toString(\"utf8\").toUpperCase();\n }\n return \"\";\n}\n","import { Buffer } from \"node:buffer\";\nimport { FerricStoreError } from \"./errors.js\";\nimport type { CommandArgument } from \"./internal.js\";\nimport { denseCommandArgumentSlice, hasOwnCommandArgument } from \"./protocol-array-validation.js\";\nimport * as core from \"./protocol-core.js\";\nimport { setFlowOptionValue } from \"./protocol-flow-option-value.js\";\n\nexport const OPTION_FIELDS: Record<string, string> = {\n CONSISTENT_PROJECTION: \"consistent_projection\",\n COUNT: \"count\",\n FROM_MS: \"from_ms\",\n INCLUDE_COLD: \"include_cold\",\n PARTITION: \"partition_key\",\n REV: \"rev\",\n STATE: \"state\",\n TERMINAL_ONLY: \"terminal_only\",\n TO_MS: \"to_ms\"\n};\n\nexport const BOOL_OPTION_FIELDS = new Set([\"consistent_projection\", \"include_cold\", \"rev\", \"terminal_only\"]);\n\nexport function optionMap(args: readonly CommandArgument[]): Record<string, unknown> | undefined {\n const payload: Record<string, unknown> = {};\n for (let index = 0; index < args.length; ) {\n hasOwnCommandArgument(args, index, args.length, \"Flow options\");\n const token = core.asText(args[index]).toUpperCase();\n if (token === \"ATTRIBUTE\") {\n if (\n !hasOwnCommandArgument(args, index + 1, args.length, \"Flow options\") ||\n !hasOwnCommandArgument(args, index + 2, args.length, \"Flow options\")\n ) {\n throw new FerricStoreError(\"ATTRIBUTE requires name and value\");\n }\n const name = core.asText(args[index + 1]);\n const attributes = ensureObjectField(payload, \"attributes\");\n core.setOwnValue(attributes, name, args[index + 2]);\n index += 3;\n continue;\n }\n if (token === \"STATE_META\") {\n if (\n !hasOwnCommandArgument(args, index + 1, args.length, \"Flow options\") ||\n !hasOwnCommandArgument(args, index + 2, args.length, \"Flow options\")\n ) {\n throw new FerricStoreError(\"STATE_META requires name and value\");\n }\n const name = core.asText(args[index + 1]);\n const stateMeta = ensureObjectField(payload, \"state_meta\");\n core.setOwnValue(stateMeta, name, args[index + 2]);\n index += 3;\n continue;\n }\n\n const field = OPTION_FIELDS[token] ?? token.toLowerCase();\n if (!hasOwnCommandArgument(args, index + 1, args.length, \"Flow options\")) {\n throw new FerricStoreError(`${token} requires a value`);\n }\n const value = args[index + 1];\n if (BOOL_OPTION_FIELDS.has(field) && !core.isBoolToken(value)) {\n return undefined;\n }\n core.setOwnValue(payload, field, BOOL_OPTION_FIELDS.has(field) ? core.boolArg(value) : value);\n index += 2;\n }\n return payload;\n}\n\nexport function ensureObjectField(payload: Record<string, unknown>, field: string): Record<string, unknown> {\n const value = payload[field];\n if (isPlainObject(value)) {\n return value;\n }\n const next: Record<string, unknown> = {};\n core.setOwnValue(payload, field, next);\n return next;\n}\n\nexport function normalizeFlowSearchStateMeta(payload: Record<string, unknown>): void {\n const stateMeta = payload.state_meta;\n if (!isPlainObject(stateMeta) || Object.keys(stateMeta).length === 0) {\n return;\n }\n if (Object.values(stateMeta).every(isPlainObject)) {\n return;\n }\n\n const state = payload.state;\n if (state == null) {\n throw new FerricStoreError(\"FLOW.SEARCH STATE_META filters require STATE or nested state metadata\");\n }\n payload.state_meta = { [core.asText(state)]: stateMeta };\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value != null && !Array.isArray(value) && !Buffer.isBuffer(value) && !(value instanceof Uint8Array);\n}\n\nexport function parseFlowOptions(\n args: readonly CommandArgument[],\n start: number,\n end: number,\n config: {\n readonly allowed: ReadonlySet<string>;\n readonly payloadValue?: boolean;\n readonly readValues?: boolean;\n readonly required?: ReadonlySet<string>;\n }\n): Record<string, unknown> | undefined {\n const payload: Record<string, unknown> = {};\n const seen = new Set<string>();\n for (let index = start; index < end; ) {\n hasOwnCommandArgument(args, index, end, \"Flow options\");\n const token = core.asText(args[index]).toUpperCase();\n if (!config.allowed.has(token)) return undefined;\n seen.add(token);\n switch (token) {\n case \"TYPE\":\n if (!putScalar(payload, \"type\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"STATE\":\n if (!hasOwnCommandArgument(args, index + 1, end, \"Flow options\")) return undefined;\n if (Array.isArray(payload.states)) {\n const states = payload.states as unknown[];\n core.setOwnValue(payload, \"states\", [...states, args[index + 1]]);\n } else if (Object.hasOwn(payload, \"state\")) {\n core.setOwnValue(payload, \"states\", [payload.state, args[index + 1]]);\n delete payload.state;\n } else {\n core.setOwnValue(payload, \"state\", args[index + 1]);\n }\n index += 2;\n break;\n case \"STATES\": {\n if (!hasOwnCommandArgument(args, index + 1, end, \"Flow options\")) return undefined;\n const count = core.safeIntegerNumberArg(args[index + 1]);\n if (\n !Number.isInteger(count) ||\n count < 0 ||\n index + 2 + count > end\n ) return undefined;\n const states = denseCommandArgumentSlice(args, index + 2, count, \"STATES\");\n if (Array.isArray(payload.states)) {\n const existingStates = payload.states as unknown[];\n core.setOwnValue(payload, \"states\", [...existingStates, ...states]);\n } else if (Object.hasOwn(payload, \"state\")) {\n core.setOwnValue(payload, \"states\", [payload.state, ...states]);\n delete payload.state;\n } else {\n core.setOwnValue(payload, \"states\", states);\n }\n index += 2 + count;\n break;\n }\n case \"PARTITION\":\n if (!putScalar(payload, \"partition_key\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"PARTITIONS\": {\n if (!hasOwnCommandArgument(args, index + 1, end, \"Flow options\")) return undefined;\n const count = core.safeIntegerNumberArg(args[index + 1]);\n if (!Number.isInteger(count) || count < 0 || index + 2 + count > end) return undefined;\n payload.partition_keys = denseCommandArgumentSlice(args, index + 2, count, \"PARTITIONS\");\n index += 2 + count;\n break;\n }\n case \"PARENT_FLOW_ID\":\n if (!putScalar(payload, \"parent_flow_id\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"ROOT_FLOW_ID\":\n if (!putScalar(payload, \"root_flow_id\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"CORRELATION_ID\":\n if (!putScalar(payload, \"correlation_id\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"OWNER_FLOW_ID\":\n if (!putScalar(payload, \"owner_flow_id\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"NAME\":\n if (!putScalar(payload, \"name\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"GROUP\":\n if (!putScalar(payload, \"group_id\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"WAIT\":\n case \"WAIT_STATE\":\n case \"SUCCESS\":\n case \"FAILURE\":\n case \"FROM_STATE\":\n case \"ON_CHILD_FAILED\":\n case \"ON_PARENT_CLOSED\":\n case \"SIGNAL\":\n case \"IDEMPOTENCY\":\n case \"IF_STATE\":\n case \"TRANSITION_TO\":\n case \"TO_EVENT\":\n case \"EXPECT_STATE\": {\n const field = token === \"IDEMPOTENCY\" ? \"idempotency_key\" : token.toLowerCase();\n if (!hasOwnCommandArgument(args, index + 1, end, \"Flow options\")) return undefined;\n setFlowOptionValue(payload, field, args[index + 1], token === \"IF_STATE\");\n index += 2;\n break;\n }\n case \"LEASE_TOKEN\":\n case \"RESULT\":\n case \"ERROR\":\n case \"REASON\": {\n const field = token === \"LEASE_TOKEN\"\n ? \"lease_token\"\n : token.toLowerCase();\n if (!putScalar(payload, field, args, index + 1, end)) return undefined;\n index += 2;\n break;\n }\n case \"VALUE\": {\n if (config.readValues === true) {\n if (!hasOwnCommandArgument(args, index + 1, end, \"Flow options\")) return undefined;\n ensureArrayField(payload, \"values\").push(args[index + 1]);\n index += 2;\n break;\n }\n if (\n !hasOwnCommandArgument(args, index + 1, end, \"Flow options\") ||\n !hasOwnCommandArgument(args, index + 2, end, \"Flow options\")\n ) return undefined;\n const values = ensureObjectField(payload, \"values\");\n core.setOwnValue(values, core.asText(args[index + 1]), args[index + 2]);\n index += 3;\n break;\n }\n case \"ATTRIBUTE\":\n case \"ATTRIBUTE_MERGE\":\n case \"VALUE_REF\":\n case \"STATE_META\": {\n if (\n !hasOwnCommandArgument(args, index + 1, end, \"Flow options\") ||\n !hasOwnCommandArgument(args, index + 2, end, \"Flow options\")\n ) return undefined;\n const field = token === \"ATTRIBUTE\"\n ? \"attributes\"\n : token === \"ATTRIBUTE_MERGE\"\n ? \"attributes_merge\"\n : token === \"VALUE_REF\"\n ? \"value_refs\"\n : \"state_meta\";\n const values = ensureObjectField(payload, field);\n core.setOwnValue(values, core.asText(args[index + 1]), args[index + 2]);\n index += 3;\n break;\n }\n case \"DROP_VALUE\":\n case \"OVERRIDE_VALUE\":\n case \"ATTRIBUTE_DELETE\": {\n if (!hasOwnCommandArgument(args, index + 1, end, \"Flow options\")) return undefined;\n const field = token === \"DROP_VALUE\"\n ? \"drop_values\"\n : token === \"OVERRIDE_VALUE\"\n ? \"override_values\"\n : \"attributes_delete\";\n const values = ensureArrayField(payload, field);\n values.push(args[index + 1]);\n index += 2;\n break;\n }\n case \"WORKER\":\n if (!putScalar(payload, \"worker\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"LEASE_MS\":\n if (!putNumber(payload, \"lease_ms\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"LIMIT\":\n if (!putNumber(payload, \"limit\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"PRIORITY\":\n if (!putNumber(payload, \"priority\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"NOW\":\n if (!putNumber(payload, \"now_ms\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"RUN_AT\":\n if (!putNumber(payload, \"run_at_ms\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"RETENTION_TTL_MS\":\n if (!putNumber(payload, \"retention_ttl_ms\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"MAX_ACTIVE_MS\":\n if (!putPositiveOrInfinity(payload, \"max_active_ms\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"TTL\":\n if (!putNumber(payload, \"ttl_ms\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"FENCING\":\n if (!putInteger(payload, \"fencing_token\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"BLOCK\":\n case \"BLOCK_MS\":\n if (!putNumber(payload, \"block_ms\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"RECLAIM_RATIO\":\n if (!putNumber(payload, \"reclaim_ratio\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"MAXBYTES\":\n if (!putNumber(payload, \"payload_max_bytes\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"VALUE_MAX_BYTES\":\n if (!putNumber(payload, \"value_max_bytes\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"RETURN\":\n if (!putScalar(payload, \"return\", args, index + 1, end)) return undefined;\n index += 2;\n break;\n case \"IDEMPOTENT\":\n index = putOptionalBool(payload, \"idempotent\", args, index, end);\n if (index < 0) return undefined;\n break;\n case \"INDEPENDENT\":\n index = putOptionalBool(payload, \"independent\", args, index, end);\n if (index < 0) return undefined;\n break;\n case \"RECLAIM_EXPIRED\":\n index = putOptionalBool(payload, \"reclaim_expired\", args, index, end);\n if (index < 0) return undefined;\n break;\n case \"INCLUDE_STATE\":\n index = putOptionalBool(payload, \"include_state\", args, index, end);\n if (index < 0) return undefined;\n break;\n case \"FULL\":\n index = putOptionalBool(payload, \"full\", args, index, end);\n if (index < 0) return undefined;\n break;\n case \"OVERRIDE\":\n index = putOptionalBool(payload, \"override\", args, index, end);\n if (index < 0) return undefined;\n break;\n case \"PAYLOAD\":\n if (config.payloadValue === true) {\n if (!putScalar(payload, \"payload\", args, index + 1, end)) return undefined;\n index += 2;\n } else {\n payload.payload = true;\n index += 1;\n }\n break;\n case \"NOPAYLOAD\":\n payload.payload = false;\n index += 1;\n break;\n default:\n return undefined;\n }\n }\n for (const required of config.required ?? []) {\n if (!seen.has(required)) return undefined;\n }\n return payload;\n}\n\nexport function putScalar(payload: Record<string, unknown>, key: string, args: readonly CommandArgument[], index: number, end: number): boolean {\n if (!hasOwnCommandArgument(args, index, end, \"Flow options\")) return false;\n core.setOwnValue(payload, key, args[index]);\n return true;\n}\n\nexport function ensureArrayField(payload: Record<string, unknown>, field: string): unknown[] {\n const value = payload[field];\n if (Array.isArray(value)) {\n return value;\n }\n const next: unknown[] = [];\n core.setOwnValue(payload, field, next);\n return next;\n}\n\nexport function putNumber(payload: Record<string, unknown>, key: string, args: readonly CommandArgument[], index: number, end: number): boolean {\n if (!hasOwnCommandArgument(args, index, end, \"Flow options\")) return false;\n const value = core.integerArg(args[index]);\n if (typeof value === \"bigint\") {\n throw new FerricStoreError(\"numeric command argument exceeds the JavaScript safe range\");\n }\n core.setOwnValue(payload, key, value);\n return true;\n}\n\nexport function putInteger(\n payload: Record<string, unknown>,\n key: string,\n args: readonly CommandArgument[],\n index: number,\n end: number\n): boolean {\n if (!hasOwnCommandArgument(args, index, end, \"Flow options\")) return false;\n core.setOwnValue(payload, key, core.integerArg(args[index]));\n return true;\n}\n\nexport function putPositiveOrInfinity(\n payload: Record<string, unknown>,\n key: string,\n args: readonly CommandArgument[],\n index: number,\n end: number\n): boolean {\n if (!hasOwnCommandArgument(args, index, end, \"Flow options\")) return false;\n if (core.asText(args[index]).toUpperCase() === \"INFINITY\") {\n core.setOwnValue(payload, key, \"infinity\");\n return true;\n }\n core.setOwnValue(payload, key, core.integerArg(args[index]));\n return true;\n}\n\nexport function putOptionalBool(\n payload: Record<string, unknown>,\n key: string,\n args: readonly CommandArgument[],\n index: number,\n end: number\n): number {\n if (index + 1 < end) hasOwnCommandArgument(args, index + 1, end, \"Flow options\");\n if (index + 1 < end && core.isBoolToken(args[index + 1])) {\n core.setOwnValue(payload, key, core.boolArg(args[index + 1]));\n return index + 2;\n }\n core.setOwnValue(payload, key, true);\n return index + 1;\n}\n","import type { CommandArgument } from \"./internal.js\";\nimport { setOwnValue } from \"./protocol-core.js\";\n\nexport function setFlowOptionValue(\n payload: Record<string, unknown>,\n field: string,\n value: CommandArgument,\n repeat: boolean\n): void {\n if (!repeat || !Object.hasOwn(payload, field)) {\n setOwnValue(payload, field, value);\n return;\n }\n const previous = payload[field];\n setOwnValue(\n payload,\n field,\n Array.isArray(previous) ? [...(previous as unknown[]), value] : [previous, value]\n );\n}\n","import type { CommandArgument } from \"./internal.js\";\nimport { hasOwnCommandArgument } from \"./protocol-array-validation.js\";\nimport * as core from \"./protocol-core.js\";\nimport * as wire from \"./protocol-constants.js\";\nimport { ensureArrayField, ensureObjectField } from \"./protocol-flow-options.js\";\n\nexport interface FlowAdminCommandShape {\n readonly opcode: number;\n readonly leadingFields: readonly string[];\n}\n\nexport const FLOW_ADMIN_COMMANDS: Readonly<Record<string, FlowAdminCommandShape>> = {\n \"FLOW.STATS\": { opcode: wire.COMMAND_OPCODES[\"FLOW.STATS\"], leadingFields: [\"type\"] },\n \"FLOW.ATTRIBUTES\": { opcode: wire.COMMAND_OPCODES[\"FLOW.ATTRIBUTES\"], leadingFields: [\"type\"] },\n \"FLOW.ATTRIBUTE_VALUES\": {\n opcode: wire.COMMAND_OPCODES[\"FLOW.ATTRIBUTE_VALUES\"],\n leadingFields: [\"type\", \"attribute\"]\n },\n \"FLOW.SCHEDULE.CREATE\": { opcode: wire.COMMAND_OPCODES[\"FLOW.SCHEDULE.CREATE\"], leadingFields: [\"id\"] },\n \"FLOW.SCHEDULE.GET\": { opcode: wire.COMMAND_OPCODES[\"FLOW.SCHEDULE.GET\"], leadingFields: [\"id\"] },\n \"FLOW.SCHEDULE.DELETE\": { opcode: wire.COMMAND_OPCODES[\"FLOW.SCHEDULE.DELETE\"], leadingFields: [\"id\"] },\n \"FLOW.SCHEDULE.FIRE_DUE\": { opcode: wire.COMMAND_OPCODES[\"FLOW.SCHEDULE.FIRE_DUE\"], leadingFields: [] },\n \"FLOW.SCHEDULE.LIST\": { opcode: wire.COMMAND_OPCODES[\"FLOW.SCHEDULE.LIST\"], leadingFields: [] },\n \"FLOW.SCHEDULE.FIRE\": { opcode: wire.COMMAND_OPCODES[\"FLOW.SCHEDULE.FIRE\"], leadingFields: [\"id\"] },\n \"FLOW.SCHEDULE.PAUSE\": { opcode: wire.COMMAND_OPCODES[\"FLOW.SCHEDULE.PAUSE\"], leadingFields: [\"id\"] },\n \"FLOW.SCHEDULE.RESUME\": { opcode: wire.COMMAND_OPCODES[\"FLOW.SCHEDULE.RESUME\"], leadingFields: [\"id\"] },\n \"FLOW.EFFECT.RESERVE\": { opcode: wire.COMMAND_OPCODES[\"FLOW.EFFECT.RESERVE\"], leadingFields: [\"id\"] },\n \"FLOW.EFFECT.CONFIRM\": { opcode: wire.COMMAND_OPCODES[\"FLOW.EFFECT.CONFIRM\"], leadingFields: [\"id\"] },\n \"FLOW.EFFECT.FAIL\": { opcode: wire.COMMAND_OPCODES[\"FLOW.EFFECT.FAIL\"], leadingFields: [\"id\"] },\n \"FLOW.EFFECT.COMPENSATE\": { opcode: wire.COMMAND_OPCODES[\"FLOW.EFFECT.COMPENSATE\"], leadingFields: [\"id\"] },\n \"FLOW.EFFECT.GET\": { opcode: wire.COMMAND_OPCODES[\"FLOW.EFFECT.GET\"], leadingFields: [\"id\"] },\n \"FLOW.GOVERNANCE.LEDGER\": { opcode: wire.COMMAND_OPCODES[\"FLOW.GOVERNANCE.LEDGER\"], leadingFields: [\"id\"] },\n \"FLOW.APPROVAL.REQUEST\": { opcode: wire.COMMAND_OPCODES[\"FLOW.APPROVAL.REQUEST\"], leadingFields: [\"id\"] },\n \"FLOW.APPROVAL.APPROVE\": { opcode: wire.COMMAND_OPCODES[\"FLOW.APPROVAL.APPROVE\"], leadingFields: [\"id\"] },\n \"FLOW.APPROVAL.REJECT\": { opcode: wire.COMMAND_OPCODES[\"FLOW.APPROVAL.REJECT\"], leadingFields: [\"id\"] },\n \"FLOW.APPROVAL.GET\": { opcode: wire.COMMAND_OPCODES[\"FLOW.APPROVAL.GET\"], leadingFields: [\"id\"] },\n \"FLOW.APPROVAL.LIST\": { opcode: wire.COMMAND_OPCODES[\"FLOW.APPROVAL.LIST\"], leadingFields: [] },\n \"FLOW.GOVERNANCE.OVERVIEW\": { opcode: wire.COMMAND_OPCODES[\"FLOW.GOVERNANCE.OVERVIEW\"], leadingFields: [] },\n \"FLOW.CIRCUIT.OPEN\": { opcode: wire.COMMAND_OPCODES[\"FLOW.CIRCUIT.OPEN\"], leadingFields: [\"scope\"] },\n \"FLOW.CIRCUIT.CLOSE\": { opcode: wire.COMMAND_OPCODES[\"FLOW.CIRCUIT.CLOSE\"], leadingFields: [\"scope\"] },\n \"FLOW.CIRCUIT.GET\": { opcode: wire.COMMAND_OPCODES[\"FLOW.CIRCUIT.GET\"], leadingFields: [\"scope\"] },\n \"FLOW.BUDGET.RESERVE\": { opcode: wire.COMMAND_OPCODES[\"FLOW.BUDGET.RESERVE\"], leadingFields: [\"scope\"] },\n \"FLOW.BUDGET.GET\": { opcode: wire.COMMAND_OPCODES[\"FLOW.BUDGET.GET\"], leadingFields: [\"scope\"] },\n \"FLOW.BUDGET.LIST\": { opcode: wire.COMMAND_OPCODES[\"FLOW.BUDGET.LIST\"], leadingFields: [] },\n \"FLOW.BUDGET.COMMIT\": { opcode: wire.COMMAND_OPCODES[\"FLOW.BUDGET.COMMIT\"], leadingFields: [\"scope\"] },\n \"FLOW.BUDGET.RELEASE\": { opcode: wire.COMMAND_OPCODES[\"FLOW.BUDGET.RELEASE\"], leadingFields: [\"scope\"] },\n \"FLOW.LIMIT.LEASE\": { opcode: wire.COMMAND_OPCODES[\"FLOW.LIMIT.LEASE\"], leadingFields: [\"scope\"] },\n \"FLOW.LIMIT.SPEND\": { opcode: wire.COMMAND_OPCODES[\"FLOW.LIMIT.SPEND\"], leadingFields: [\"scope\"] },\n \"FLOW.LIMIT.RELEASE\": { opcode: wire.COMMAND_OPCODES[\"FLOW.LIMIT.RELEASE\"], leadingFields: [\"scope\"] },\n \"FLOW.LIMIT.GET\": { opcode: wire.COMMAND_OPCODES[\"FLOW.LIMIT.GET\"], leadingFields: [\"scope\"] },\n \"FLOW.LIMIT.LIST\": { opcode: wire.COMMAND_OPCODES[\"FLOW.LIMIT.LIST\"], leadingFields: [] }\n};\n\nconst FLOW_ADMIN_BOOLEAN_FIELDS = new Set([\n \"consistent_projection\",\n \"include_cold\",\n \"overwrite\",\n \"rev\",\n \"terminal_only\",\n \"values\"\n]);\n\nconst FLOW_ADMIN_FIELDS: Readonly<Record<string, string>> = {\n ACTUAL_AMOUNT: \"actual_amount\", AMOUNT: \"amount\", APPROVER: \"approver\", ASSIGNEES: \"assignees\",\n AT_MS: \"at_ms\", BLOCK: \"block_ms\", BLOCK_MS: \"block_ms\", CONSISTENT_PROJECTION: \"consistent_projection\",\n CORRELATION_ID: \"correlation_id\", COUNT: \"count\", CRON: \"cron\", DEADLINE_MS: \"deadline_ms\",\n DELAY_MS: \"delay_ms\", EFFECT_KEY: \"effect_key\", EFFECT_TYPE: \"effect_type\", END_AT_MS: \"end_at_ms\",\n ERROR: \"error\", EVENT: \"event\", EVERY_MS: \"every_ms\", EXPIRES_AT_MS: \"expires_at_ms\",\n EXTERNAL_ID: \"external_id\", FAILURE_THRESHOLD: \"failure_threshold\", FENCING: \"fencing_token\",\n FENCING_TOKEN: \"fencing_token\", FLOW_ID: \"flow_id\", FROM_EVENT: \"from_event\", FROM_MS: \"from_ms\",\n FROM_VERSION: \"from_version\", GOVERNANCE_SCOPE: \"governance_scope\", IDEMPOTENCY_KEY: \"idempotency_key\",\n INCLUDE_COLD: \"include_cold\", INITIAL_STATE: \"initial_state\", ITEMS: \"items\", KIND: \"kind\",\n LATENCY_MS: \"latency_ms\", LEASE_MS: \"lease_ms\", LEASE_TOKEN: \"lease_token\", LIMIT: \"limit\",\n MAX_ACTIVE_MS: \"max_active_ms\", MAX_FIRES: \"max_fires\", MAXBYTES: \"payload_max_bytes\", NOW: \"now_ms\", OPEN_MS: \"open_ms\",\n OPERATION_DIGEST: \"operation_digest\", OVERLAP_POLICY: \"overlap_policy\", OVERLAP_RETRY_MS: \"overlap_retry_ms\",\n OVERWRITE: \"overwrite\", PARENT_FLOW_ID: \"parent_flow_id\", PARTITION: \"partition_key\",\n PAYLOAD: \"payload\", PAYLOAD_MAX_BYTES: \"payload_max_bytes\", POLICY_HASH: \"policy_hash\",\n POLICY_VERSION: \"policy_version\", PRIORITY: \"priority\", REASON: \"reason\", REQUESTED_BY: \"requested_by\",\n RESERVATION_ID: \"reservation_id\", RESULT: \"result\", RETENTION_TTL_MS: \"retention_ttl_ms\", REV: \"rev\",\n RETURN: \"return\", ROOT_FLOW_ID: \"root_flow_id\", SCOPE: \"scope\", SHARD_ID: \"shard_id\",\n START_AT_MS: \"start_at_ms\", STATE: \"state\", STATUS: \"status\", STATES: \"states\", STEPS: \"steps\",\n TARGET: \"target\", TARGET_TYPE: \"target_type\", TERMINAL_ONLY: \"terminal_only\", TIMEOUT_MS: \"timeout_ms\",\n TIMEZONE: \"timezone\", TO_EVENT: \"to_event\", TO_MS: \"to_ms\", TO_VERSION: \"to_version\", TTL_MS: \"ttl_ms\",\n TYPE: \"type\", USAGE: \"usage\", VALUES: \"values\", WINDOW_MS: \"window_ms\", WORKER: \"worker\"\n};\n\nexport function flowHistoryPayload(args: readonly CommandArgument[]): wire.ProtocolCommand | undefined {\n if (args.length === 0 || args.length % 2 === 0) return undefined;\n hasOwnCommandArgument(args, 0, args.length, \"Flow history arguments\");\n const payload: Record<string, unknown> = { id: args[0] };\n for (let index = 1; index < args.length; index += 2) {\n hasOwnCommandArgument(args, index, args.length, \"Flow history arguments\");\n hasOwnCommandArgument(args, index + 1, args.length, \"Flow history arguments\");\n const value = args[index + 1];\n const token = core.optionalText(args[index])?.toUpperCase();\n if (token == null || value == null) return undefined;\n switch (token) {\n case \"COUNT\": payload.count = value; break;\n case \"PARTITION\": payload.partition_key = value; break;\n case \"FROM_EVENT\": payload.from_event = value; break;\n case \"TO_EVENT\": payload.to_event = value; break;\n case \"FROM_MS\": payload.from_ms = value; break;\n case \"TO_MS\": payload.to_ms = value; break;\n case \"FROM_VERSION\": payload.from_version = value; break;\n case \"TO_VERSION\": payload.to_version = value; break;\n case \"EVENT\": payload.event = value; break;\n case \"WORKER\": payload.worker = value; break;\n case \"PAYLOAD_MAX_BYTES\":\n case \"MAXBYTES\": payload.payload_max_bytes = value; break;\n case \"REV\":\n case \"INCLUDE_COLD\":\n case \"CONSISTENT_PROJECTION\":\n case \"VALUES\": {\n if (!core.isBoolToken(value)) return undefined;\n const field = token === \"REV\" ? \"rev\" : token === \"INCLUDE_COLD\" ? \"include_cold\"\n : token === \"CONSISTENT_PROJECTION\" ? \"consistent_projection\" : \"values\";\n payload[field] = core.boolArg(value);\n break;\n }\n default: return undefined;\n }\n }\n return { opcode: wire.COMMAND_OPCODES[\"FLOW.HISTORY\"], payload };\n}\n\nexport function flowAdminPayload(\n opcode: number,\n args: readonly CommandArgument[],\n leadingFields: readonly string[] = []\n): wire.ProtocolCommand | undefined {\n if (args.length < leadingFields.length) return undefined;\n const payload: Record<string, unknown> = {};\n for (const [index, field] of leadingFields.entries()) {\n hasOwnCommandArgument(args, index, args.length, \"Flow admin arguments\");\n core.setOwnValue(payload, field, args[index]);\n }\n\n for (let index = leadingFields.length; index < args.length; ) {\n hasOwnCommandArgument(args, index, args.length, \"Flow admin arguments\");\n const token = core.optionalText(args[index])?.toUpperCase();\n if (token == null) return undefined;\n if ([\"ATTRIBUTE\", \"ATTRIBUTE_MERGE\", \"STATE_META\", \"VALUE\", \"VALUE_REF\"].includes(token)) {\n if (\n !hasOwnCommandArgument(args, index + 1, args.length, \"Flow admin arguments\") ||\n !hasOwnCommandArgument(args, index + 2, args.length, \"Flow admin arguments\")\n ) return undefined;\n const field = token === \"ATTRIBUTE\" ? \"attributes\" : token === \"ATTRIBUTE_MERGE\" ? \"attributes_merge\"\n : token === \"STATE_META\" ? \"state_meta\" : token === \"VALUE\" ? \"values\" : \"value_refs\";\n core.setOwnValue(ensureObjectField(payload, field), core.asText(args[index + 1]), args[index + 2]);\n index += 3;\n continue;\n }\n if (token === \"ATTRIBUTE_DELETE\" || token === \"DROP_VALUE\" || token === \"OVERRIDE_VALUE\") {\n if (!hasOwnCommandArgument(args, index + 1, args.length, \"Flow admin arguments\")) return undefined;\n const field = token === \"ATTRIBUTE_DELETE\" ? \"attributes_delete\"\n : token === \"DROP_VALUE\" ? \"drop_values\" : \"override_values\";\n ensureArrayField(payload, field).push(args[index + 1]);\n index += 2;\n continue;\n }\n if (token === \"RESERVATION_IDS\") {\n if (!hasOwnCommandArgument(args, index + 1, args.length, \"Flow admin arguments\")) return undefined;\n const count = core.safeIntegerNumberArg(args[index + 1]);\n if (count <= 0 || index + 2 + count > args.length) return undefined;\n const reservationIds = new Array<CommandArgument>(count);\n for (let itemIndex = 0; itemIndex < count; itemIndex += 1) {\n hasOwnCommandArgument(args, index + 2 + itemIndex, args.length, \"Flow admin arguments\");\n const reservationId = args[index + 2 + itemIndex];\n if (reservationId == null) return undefined;\n reservationIds[itemIndex] = reservationId;\n }\n core.setOwnValue(payload, \"reservation_ids\", reservationIds);\n index += 2 + count;\n continue;\n }\n const field = FLOW_ADMIN_FIELDS[token];\n if (field == null || !hasOwnCommandArgument(args, index + 1, args.length, \"Flow admin arguments\")) {\n return undefined;\n }\n const rawValue = args[index + 1];\n if (FLOW_ADMIN_BOOLEAN_FIELDS.has(field) && !core.isBoolToken(rawValue)) return undefined;\n core.setOwnValue(payload, field, FLOW_ADMIN_BOOLEAN_FIELDS.has(field) ? core.boolArg(rawValue) : rawValue);\n index += 2;\n }\n const serverBlockMs = opcode === wire.COMMAND_OPCODES[\"FLOW.SCHEDULE.FIRE_DUE\"] && payload.block_ms != null\n ? core.blockDurationMs(payload.block_ms as CommandArgument, 1)\n : undefined;\n return serverBlockMs == null ? { opcode, payload } : { opcode, payload, serverBlockMs };\n}\n","import { Buffer } from \"node:buffer\";\nimport type { CommandArgument } from \"./internal.js\";\nimport { denseCommandArgumentTail } from \"./protocol-array-validation.js\";\nimport * as core from \"./protocol-core.js\";\nimport * as wire from \"./protocol-constants.js\";\nimport { compactManyRequestTag } from \"./protocol-flow-compact-common.js\";\nimport { findItemToken } from \"./protocol-flow-items.js\";\nimport { parseFlowOptions } from \"./protocol-flow-options.js\";\nexport { compactManyRequestTag } from \"./protocol-flow-compact-common.js\";\nexport { compactFlowTransitionManyPayload } from \"./protocol-flow-compact-transition.js\";\n\nexport function compactFlowCreateManyPayload(\n partition: string,\n rawItems: readonly CommandArgument[],\n mixed: boolean,\n auto: boolean,\n options: Record<string, unknown>,\n maxBodyBytes: number\n): wire.ProtocolCommand | undefined {\n const nowMs = options.now_ms;\n const runAtMs = options.run_at_ms ?? nowMs;\n if (\n \"priority\" in options ||\n \"idempotent\" in options ||\n \"max_active_ms\" in options ||\n \"retention_ttl_ms\" in options ||\n \"attributes\" in options ||\n \"state_meta\" in options ||\n \"values\" in options ||\n \"value_refs\" in options ||\n !core.isCompactBinaryScalar(options.type) ||\n !core.isCompactBinaryScalar(options.state) ||\n typeof options.type === \"undefined\" ||\n typeof options.state === \"undefined\" ||\n !isSafeIntegerNumber(nowMs) ||\n !isSafeIntegerNumber(runAtMs)\n ) return undefined;\n\n const width = mixed ? 3 : 2;\n const count = rawItems.length / width;\n if (count > 0xffff_ffff) return undefined;\n let total = 1\n + core.compactBinaryEncodedLength(options.type)\n + core.compactBinaryEncodedLength(options.state)\n + 8 + 8 + 1 + 1 + 4;\n if (!auto && !mixed) total += core.compactOptionalBinaryEncodedLength(partition);\n for (let index = 0; index < rawItems.length; index += width) {\n if (\n !core.isCompactBinaryScalar(rawItems[index]) ||\n (mixed && !core.isCompactBinaryScalar(rawItems[index + 1])) ||\n !core.isCompactBinaryScalar(rawItems[index + width - 1])\n ) return undefined;\n total += core.compactBinaryEncodedLength(rawItems[index]);\n if (mixed) total += core.compactBinaryEncodedLength(rawItems[index + 1]);\n total += core.compactBinaryEncodedLength(rawItems[index + width - 1]);\n }\n core.assertCompactPayloadFits(total, maxBodyBytes);\n\n const tag = mixed\n ? wire.COMPACT_FLOW_CREATE_MANY_MIXED_REQUEST\n : auto\n ? wire.COMPACT_FLOW_CREATE_MANY_REQUEST\n : wire.COMPACT_FLOW_CREATE_MANY_PARTITION_REQUEST;\n const out = Buffer.allocUnsafe(total);\n let offset = 0;\n out.writeUInt8(tag, offset++);\n offset = core.writeBinary(out, offset, core.toBuffer(options.type));\n offset = core.writeBinary(out, offset, core.toBuffer(options.state));\n if (!auto && !mixed) offset = core.writeOptionalBinary(out, offset, core.toBuffer(partition));\n out.writeBigInt64BE(BigInt(nowMs), offset);\n offset += 8;\n out.writeBigInt64BE(BigInt(runAtMs), offset);\n offset += 8;\n out.writeUInt8(core.independentMode(options.independent), offset++);\n out.writeUInt8(1, offset++);\n out.writeUInt32BE(count, offset);\n offset += 4;\n for (let index = 0; index < rawItems.length; index += width) {\n offset = core.writeBinary(out, offset, core.toBuffer(rawItems[index]));\n if (mixed) offset = core.writeBinary(out, offset, core.toBuffer(rawItems[index + 1]));\n offset = core.writeBinary(out, offset, core.toBuffer(rawItems[index + width - 1]));\n }\n return { flags: wire.FLAG_CUSTOM_PAYLOAD, opcode: wire.OPCODES.flowCreateMany, payload: out };\n}\n\nexport function compactFlowClaimDuePayload(\n type: CommandArgument,\n options: Record<string, unknown>,\n maxBodyBytes: number\n): wire.ProtocolCommand | undefined {\n const leaseMs = options.lease_ms;\n const limit = options.limit;\n const blockMs = options.block_ms;\n const reclaimRatio = options.reclaim_ratio ?? 25;\n const priority = options.priority;\n if (\n \"states\" in options || \"now_ms\" in options || \"payload_max_bytes\" in options ||\n \"value_max_bytes\" in options || \"values\" in options || \"include_state\" in options ||\n options.payload === true || typeof options.worker === \"undefined\" ||\n !isSafeIntegerNumber(leaseMs) || !isSafeIntegerNumber(limit) ||\n !isOptionalSafeIntegerNumber(blockMs) || !isSafeIntegerNumber(reclaimRatio) ||\n !isOptionalSafeIntegerNumber(priority)\n ) return undefined;\n\n const returnMode = core.compactClaimReturnMode(options.return);\n if (returnMode == null) return undefined;\n const partitionKeys = Array.isArray(options.partition_keys) ? options.partition_keys : undefined;\n if (partitionKeys != null && partitionKeys.length > 0xffff_ffff) return undefined;\n let total = 1\n + core.compactBinaryEncodedLength(type)\n + core.compactOptionalBinaryEncodedLength(options.state)\n + core.compactBinaryEncodedLength(options.worker)\n + 8 + 8 + 8 + 1 + 8 + 8 + 1;\n if (partitionKeys != null) {\n total += 5;\n for (let index = 0; index < partitionKeys.length; index += 1) {\n if (!Object.hasOwn(partitionKeys, index)) throw new TypeError(\"PARTITIONS values must be dense\");\n total += core.compactBinaryEncodedLength(partitionKeys[index]);\n }\n } else if (options.partition_key != null) {\n total += 1 + core.compactBinaryEncodedLength(options.partition_key);\n } else {\n total += 1;\n }\n core.assertCompactPayloadFits(total, maxBodyBytes);\n\n const out = Buffer.allocUnsafe(total);\n let offset = 0;\n out.writeUInt8(wire.COMPACT_FLOW_CLAIM_DUE_REQUEST, offset++);\n offset = core.writeBinary(out, offset, core.toBuffer(type));\n offset = core.writeOptionalBinary(out, offset, options.state == null ? null : core.toBuffer(options.state));\n offset = core.writeBinary(out, offset, core.toBuffer(options.worker));\n out.writeBigInt64BE(BigInt(leaseMs), offset);\n offset += 8;\n out.writeBigInt64BE(BigInt(limit), offset);\n offset += 8;\n out.writeBigInt64BE(core.optionalI64(blockMs), offset);\n offset += 8;\n out.writeUInt8(options.reclaim_expired === false ? 0 : 1, offset++);\n out.writeBigInt64BE(BigInt(reclaimRatio), offset);\n offset += 8;\n out.writeBigInt64BE(core.optionalI64(priority), offset);\n offset += 8;\n out.writeUInt8(returnMode, offset++);\n if (partitionKeys != null) {\n out.writeUInt8(2, offset++);\n out.writeUInt32BE(partitionKeys.length, offset);\n offset += 4;\n for (const key of partitionKeys) offset = core.writeBinary(out, offset, core.toBuffer(key));\n } else if (options.partition_key != null) {\n out.writeUInt8(1, offset++);\n core.writeBinary(out, offset, core.toBuffer(options.partition_key));\n } else {\n out.writeUInt8(0, offset);\n }\n return { flags: wire.FLAG_CUSTOM_PAYLOAD, opcode: wire.OPCODES.flowClaimDue, payload: out };\n}\n\nexport function compactFlowCompleteManyPayload(\n opcode: number,\n partition: string,\n rawItems: readonly CommandArgument[],\n mixed: boolean,\n auto: boolean,\n options: Record<string, unknown>,\n maxBodyBytes: number\n): wire.ProtocolCommand | undefined {\n const nowMs = options.now_ms;\n if (\n \"error\" in options || \"result\" in options || \"payload\" in options || \"ttl_ms\" in options ||\n \"state_meta\" in options || \"values\" in options || \"value_refs\" in options ||\n \"drop_values\" in options || \"override_values\" in options || \"attributes_merge\" in options ||\n \"attributes_delete\" in options || !isSafeIntegerNumber(nowMs)\n ) return undefined;\n\n const returnMode = options.return == null ? \"\" : core.asText(options.return).toUpperCase();\n if (returnMode !== \"\" && returnMode !== \"OK_ON_SUCCESS\") return undefined;\n const width = mixed ? 4 : 3;\n const count = rawItems.length / width;\n if (count > 0xffff_ffff) return undefined;\n const minimum = 18 + count * 20;\n if (!core.compactPayloadFits(minimum, maxBodyBytes)) {\n for (let rawIndex = 0; rawIndex < rawItems.length; rawIndex += width) {\n if (\n !core.isCompactBinaryScalar(rawItems[rawIndex]) ||\n (mixed && !core.isCompactBinaryScalar(rawItems[rawIndex + 1])) ||\n !core.isCompactBinaryScalar(rawItems[rawIndex + width - 2])\n ) return undefined;\n core.i64Arg(rawItems[rawIndex + width - 1]);\n }\n core.assertCompactPayloadFits(minimum, maxBodyBytes);\n }\n const fencingValues = new Array<bigint>(count);\n let total = 1\n + core.compactOptionalBinaryEncodedLength(!auto && !mixed ? partition : null)\n + 8 + 1 + 4;\n for (let rawIndex = 0, itemIndex = 0; rawIndex < rawItems.length; rawIndex += width, itemIndex += 1) {\n fencingValues[itemIndex] = core.i64Arg(rawItems[rawIndex + width - 1]);\n total += core.compactBinaryEncodedLength(rawItems[rawIndex])\n + core.compactOptionalBinaryEncodedLength(mixed ? rawItems[rawIndex + 1] : null)\n + core.compactBinaryEncodedLength(rawItems[rawIndex + width - 2]) + 8;\n }\n core.assertCompactPayloadFits(total, maxBodyBytes);\n\n const out = Buffer.allocUnsafe(total);\n let offset = 0;\n out.writeUInt8(\n returnMode === \"OK_ON_SUCCESS\"\n ? wire.COMPACT_FLOW_COMPLETE_MANY_OK_REQUEST\n : wire.COMPACT_FLOW_COMPLETE_MANY_REQUEST,\n offset++\n );\n offset = core.writeOptionalBinary(out, offset, !auto && !mixed ? core.toBuffer(partition) : null);\n out.writeBigInt64BE(BigInt(nowMs), offset);\n offset += 8;\n out.writeUInt8(core.independentMode(options.independent), offset++);\n out.writeUInt32BE(count, offset);\n offset += 4;\n for (let rawIndex = 0, itemIndex = 0; rawIndex < rawItems.length; rawIndex += width, itemIndex += 1) {\n offset = core.writeBinary(out, offset, core.toBuffer(rawItems[rawIndex]));\n offset = core.writeOptionalBinary(out, offset, mixed ? core.toBuffer(rawItems[rawIndex + 1]) : null);\n offset = core.writeBinary(out, offset, core.toBuffer(rawItems[rawIndex + width - 2]));\n const fencing = fencingValues[itemIndex];\n if (fencing == null) return undefined;\n out.writeBigInt64BE(fencing, offset);\n offset += 8;\n }\n return { flags: wire.FLAG_CUSTOM_PAYLOAD, opcode, payload: out };\n}\n\nexport function compactFlowRetryManyPayload(\n partition: string,\n rawItems: readonly CommandArgument[],\n mixed: boolean,\n auto: boolean,\n options: Record<string, unknown>,\n maxBodyBytes: number\n): wire.ProtocolCommand | undefined {\n const nowMs = options.now_ms;\n const runAtMs = options.run_at_ms;\n if (\n \"error\" in options || \"payload\" in options || \"state_meta\" in options || \"values\" in options ||\n \"value_refs\" in options || \"drop_values\" in options || \"override_values\" in options ||\n \"attributes_merge\" in options || \"attributes_delete\" in options ||\n !isSafeIntegerNumber(nowMs) || !isSafeIntegerNumber(runAtMs)\n ) return undefined;\n\n const returnMode = options.return == null ? \"\" : core.asText(options.return).toUpperCase();\n if (returnMode !== \"\" && returnMode !== \"OK_ON_SUCCESS\") return undefined;\n const width = mixed ? 4 : 3;\n const count = rawItems.length / width;\n if (count > 0xffff_ffff) return undefined;\n const minimum = 26 + count * 20;\n if (!core.compactPayloadFits(minimum, maxBodyBytes)) {\n for (let rawIndex = 0; rawIndex < rawItems.length; rawIndex += width) {\n if (\n !core.isCompactBinaryScalar(rawItems[rawIndex]) ||\n (mixed && !core.isCompactBinaryScalar(rawItems[rawIndex + 1])) ||\n !core.isCompactBinaryScalar(rawItems[rawIndex + width - 2])\n ) return undefined;\n core.i64Arg(rawItems[rawIndex + width - 1]);\n }\n core.assertCompactPayloadFits(minimum, maxBodyBytes);\n }\n const fencingValues = new Array<bigint>(count);\n let total = 1\n + core.compactOptionalBinaryEncodedLength(!auto && !mixed ? partition : null)\n + 8 + 8 + 1 + 4;\n for (let rawIndex = 0, itemIndex = 0; rawIndex < rawItems.length; rawIndex += width, itemIndex += 1) {\n fencingValues[itemIndex] = core.i64Arg(rawItems[rawIndex + width - 1]);\n total += core.compactBinaryEncodedLength(rawItems[rawIndex])\n + core.compactOptionalBinaryEncodedLength(mixed ? rawItems[rawIndex + 1] : null)\n + core.compactBinaryEncodedLength(rawItems[rawIndex + width - 2]) + 8;\n }\n core.assertCompactPayloadFits(total, maxBodyBytes);\n\n const out = Buffer.allocUnsafe(total);\n let offset = 0;\n out.writeUInt8(\n returnMode === \"OK_ON_SUCCESS\"\n ? wire.COMPACT_FLOW_RETRY_MANY_OK_REQUEST\n : wire.COMPACT_FLOW_RETRY_MANY_REQUEST,\n offset++\n );\n offset = core.writeOptionalBinary(out, offset, !auto && !mixed ? core.toBuffer(partition) : null);\n out.writeBigInt64BE(BigInt(nowMs), offset);\n offset += 8;\n out.writeBigInt64BE(BigInt(runAtMs), offset);\n offset += 8;\n out.writeUInt8(core.independentMode(options.independent), offset++);\n out.writeUInt32BE(count, offset);\n offset += 4;\n for (let rawIndex = 0, itemIndex = 0; rawIndex < rawItems.length; rawIndex += width, itemIndex += 1) {\n offset = core.writeBinary(out, offset, core.toBuffer(rawItems[rawIndex]));\n offset = core.writeOptionalBinary(out, offset, mixed ? core.toBuffer(rawItems[rawIndex + 1]) : null);\n offset = core.writeBinary(out, offset, core.toBuffer(rawItems[rawIndex + width - 2]));\n const fencing = fencingValues[itemIndex];\n if (fencing == null) return undefined;\n out.writeBigInt64BE(fencing, offset);\n offset += 8;\n }\n return { flags: wire.FLAG_CUSTOM_PAYLOAD, opcode: wire.OPCODES.flowRetryMany, payload: out };\n}\n\n export function compactFlowCancelManyPayload(\n args: readonly CommandArgument[],\n maxBodyBytes: number\n): wire.ProtocolCommand | undefined {\n if (args.length < 3 || !core.isCompactBinaryArgument(args[0])) return undefined;\n const partition = core.asText(args[0]);\n const itemsIndex = findItemToken(args, 1);\n if (itemsIndex < 0 || !core.commandTokenIs(args[itemsIndex], \"ITEMS\")) return undefined;\n const options = parseFlowOptions(args, 1, itemsIndex, {\n allowed: new Set([\n \"REASON\", \"TTL\", \"NOW\", \"INDEPENDENT\", \"STATE_META\", \"VALUE\", \"VALUE_REF\",\n \"DROP_VALUE\", \"OVERRIDE_VALUE\", \"ATTRIBUTE_MERGE\", \"ATTRIBUTE_DELETE\", \"RETURN\"\n ])\n });\n if (\n options == null ||\n \"reason\" in options ||\n \"ttl_ms\" in options ||\n \"state_meta\" in options ||\n \"values\" in options ||\n \"value_refs\" in options ||\n \"drop_values\" in options ||\n \"override_values\" in options ||\n \"attributes_merge\" in options ||\n \"attributes_delete\" in options ||\n typeof options.now_ms !== \"number\" ||\n !Number.isSafeInteger(options.now_ms) ||\n options.now_ms < 0\n ) {\n return undefined;\n }\n const tag = compactManyRequestTag(\n options.return,\n wire.COMPACT_FLOW_CANCEL_MANY_REQUEST,\n wire.COMPACT_FLOW_CANCEL_MANY_OK_REQUEST\n );\n if (tag == null) return undefined;\n\n const mixed = partition.toUpperCase() === \"MIXED\";\n const rawItems = denseCommandArgumentTail(args, itemsIndex + 1, \"ITEMS\");\n const width = mixed ? 3 : 2;\n if (rawItems.length === 0 || rawItems.length % width !== 0) return undefined;\n const count = rawItems.length / width;\n if (count > 0xffff_ffff) return undefined;\n\n const minimum = 18 + count * 16;\n if (!core.compactPayloadFits(minimum, maxBodyBytes)) {\n for (let rawIndex = 0; rawIndex < rawItems.length; rawIndex += width) {\n if (\n !core.isCompactBinaryArgument(rawItems[rawIndex]) ||\n (mixed && !core.isCompactBinaryArgument(rawItems[rawIndex + 1])) ||\n core.i64Arg(rawItems[rawIndex + width - 1]) < 0n\n ) return undefined;\n }\n core.assertCompactPayloadFits(minimum, maxBodyBytes);\n }\n\n const lengths = new Uint32Array(count * 2);\n const fencingValues = new BigInt64Array(count);\n const globalPartition = mixed ? undefined : args[0];\n const globalPartitionLength = globalPartition == null ? 0 : core.compactBinaryByteLength(globalPartition);\n let total = 1 + 4 + globalPartitionLength + 8 + 1 + 4;\n for (let rawIndex = 0, itemIndex = 0; rawIndex < rawItems.length; rawIndex += width, itemIndex += 1) {\n if (\n !core.isCompactBinaryArgument(rawItems[rawIndex]) ||\n (mixed && !core.isCompactBinaryArgument(rawItems[rawIndex + 1]))\n ) {\n return undefined;\n }\n const idLength = core.compactBinaryByteLength(rawItems[rawIndex]);\n const itemPartition = mixed ? rawItems[rawIndex + 1] : undefined;\n const itemPartitionLength = itemPartition == null ? 0 : core.compactBinaryByteLength(itemPartition);\n const fencing = core.i64Arg(rawItems[rawIndex + width - 1]);\n if (fencing < 0n) return undefined;\n lengths[itemIndex * 2] = idLength;\n lengths[itemIndex * 2 + 1] = itemPartitionLength;\n fencingValues[itemIndex] = fencing;\n total += 4 + idLength + 4 + itemPartitionLength + 8;\n }\n core.assertCompactPayloadFits(total, maxBodyBytes);\n\n const out = Buffer.allocUnsafe(total);\n let offset = 0;\n out.writeUInt8(tag, offset);\n offset += 1;\n offset = core.writeOptionalBinaryValue(out, offset, globalPartition, globalPartitionLength);\n out.writeBigInt64BE(BigInt(options.now_ms), offset);\n offset += 8;\n out.writeUInt8(core.independentMode(options.independent), offset);\n offset += 1;\n out.writeUInt32BE(count, offset);\n offset += 4;\n for (let rawIndex = 0, itemIndex = 0; rawIndex < rawItems.length; rawIndex += width, itemIndex += 1) {\n offset = core.writeBinaryValue(out, offset, rawItems[rawIndex], lengths[itemIndex * 2] ?? 0);\n offset = core.writeOptionalBinaryValue(\n out,\n offset,\n mixed ? rawItems[rawIndex + 1] : undefined,\n lengths[itemIndex * 2 + 1] ?? 0\n );\n out.writeBigInt64BE(fencingValues[itemIndex] ?? 0n, offset);\n offset += 8;\n }\n return {\n flags: wire.FLAG_CUSTOM_PAYLOAD,\n opcode: wire.COMMAND_OPCODES[\"FLOW.CANCEL_MANY\"],\n payload: out\n };\n}\n\nfunction isSafeIntegerNumber(value: unknown): value is number {\n return typeof value === \"number\" && Number.isSafeInteger(value);\n}\n\nfunction isOptionalSafeIntegerNumber(value: unknown): value is number | null | undefined {\n return value == null || isSafeIntegerNumber(value);\n}\n","import * as core from \"./protocol-core.js\";\n\nexport function compactManyRequestTag(\n value: unknown,\n regularTag: number,\n okOnSuccessTag: number\n): number | undefined {\n const mode = value == null ? \"\" : core.asText(value).toUpperCase();\n if (mode === \"\") return regularTag;\n return mode === \"OK_ON_SUCCESS\" ? okOnSuccessTag : undefined;\n}\n","import type { CommandArgument } from \"./internal.js\";\nimport * as core from \"./protocol-core.js\";\n\nexport function findItemToken(args: readonly CommandArgument[], start: number): number {\n for (let index = start; index < args.length; ) {\n const token = core.asText(args[index]).toUpperCase();\n if (token === \"ITEMS\" || token === \"ITEMS_EXT\") return index;\n if (\n token === \"ATTRIBUTE\" || token === \"ATTRIBUTE_MERGE\" ||\n token === \"VALUE\" || token === \"VALUE_REF\" || token === \"STATE_META\"\n ) {\n index += 3;\n } else if (token === \"ATTRIBUTE_DELETE\") {\n index += 2;\n } else if (\n token === \"IDEMPOTENT\" ||\n token === \"INDEPENDENT\" ||\n token === \"RECLAIM_EXPIRED\" ||\n token === \"INCLUDE_STATE\" ||\n token === \"FULL\" ||\n token === \"OVERRIDE\"\n ) {\n index += index + 1 < args.length && core.isBoolToken(args[index + 1]) ? 2 : 1;\n } else if (token === \"STATES\" || token === \"PARTITIONS\") {\n const count = core.safeIntegerNumberArg(args[index + 1]);\n if (count < 0) return -1;\n index += 2 + count;\n } else if (token === \"NOPAYLOAD\") {\n index += 1;\n } else {\n index += 2;\n }\n }\n return -1;\n}\n\nexport function parseFlowCreateItemsExt(\n values: readonly CommandArgument[],\n count: number,\n mixed: boolean\n): Record<string, unknown>[] | undefined {\n const items: Record<string, unknown>[] = [];\n let index = 0;\n for (let itemIndex = 0; itemIndex < count; itemIndex += 1) {\n if (index + 3 > values.length) return undefined;\n const item: Record<string, unknown> = { id: values[index], payload: values[index + 2] };\n const partition = values[index + 1];\n if (!core.commandTokenIs(partition, \"-\") && (mixed || partition != null)) {\n item.partition_key = partition;\n }\n index += 3;\n\n const itemValues = parseNamedCountMap(values, index);\n if (itemValues == null) return undefined;\n index = itemValues.next;\n if (Object.keys(itemValues.value).length > 0) item.values = itemValues.value;\n\n const itemRefs = parseNamedCountMap(values, index);\n if (itemRefs == null) return undefined;\n index = itemRefs.next;\n if (Object.keys(itemRefs.value).length > 0) item.value_refs = itemRefs.value;\n items.push(item);\n }\n return index === values.length ? items : undefined;\n}\n\nexport function parseFlowSpawnChildrenExt(\n values: readonly CommandArgument[],\n count: number\n): Record<string, unknown>[] | undefined {\n const children: Record<string, unknown>[] = [];\n let index = 0;\n for (let childIndex = 0; childIndex < count; childIndex += 1) {\n if (index + 4 > values.length) return undefined;\n const child: Record<string, unknown> = {\n id: values[index],\n type: values[index + 2],\n payload: values[index + 3]\n };\n const partition = values[index + 1];\n if (!core.commandTokenIs(partition, \"-\")) child.partition_key = partition;\n index += 4;\n\n const childValues = parseNamedCountMap(values, index);\n if (childValues == null) return undefined;\n index = childValues.next;\n if (Object.keys(childValues.value).length > 0) child.values = childValues.value;\n\n const childRefs = parseNamedCountMap(values, index);\n if (childRefs == null) return undefined;\n index = childRefs.next;\n if (Object.keys(childRefs.value).length > 0) child.value_refs = childRefs.value;\n children.push(child);\n }\n return index === values.length ? children : undefined;\n}\n\nexport function parseFlowSpawnChildren(\n values: readonly CommandArgument[],\n mixed: boolean\n): Record<string, unknown>[] | undefined {\n const width = mixed ? 4 : 3;\n if (values.length === 0 || values.length % width !== 0) return undefined;\n const children: Record<string, unknown>[] = [];\n for (let index = 0; index < values.length; index += width) {\n const child: Record<string, unknown> = {\n id: values[index],\n type: values[index + (mixed ? 2 : 1)],\n payload: values[index + (mixed ? 3 : 2)]\n };\n if (mixed) child.partition_key = values[index + 1];\n children.push(child);\n }\n return children;\n}\n\nexport function parseNamedCountMap(\n values: readonly CommandArgument[],\n start: number\n): { readonly next: number; readonly value: Record<string, unknown> } | undefined {\n if (start >= values.length) return undefined;\n const count = core.safeIntegerNumberArg(values[start]);\n if (count < 0 || start + 1 + count * 2 > values.length) return undefined;\n const value: Record<string, unknown> = {};\n let index = start + 1;\n for (let itemIndex = 0; itemIndex < count; itemIndex += 1) {\n core.setOwnValue(value, core.asText(values[index]), values[index + 1]);\n index += 2;\n }\n return { next: index, value };\n}\n","import { Buffer } from \"node:buffer\";\nimport type { CommandArgument } from \"./internal.js\";\nimport * as core from \"./protocol-core.js\";\nimport * as wire from \"./protocol-constants.js\";\nimport { compactManyRequestTag } from \"./protocol-flow-compact-common.js\";\n\nexport function compactFlowTransitionManyPayload(\n partition: CommandArgument,\n fromState: CommandArgument,\n toState: CommandArgument,\n rawItems: readonly CommandArgument[],\n mixed: boolean,\n options: Record<string, unknown>,\n maxBodyBytes: number\n): wire.ProtocolCommand | undefined {\n if (\n \"payload\" in options ||\n \"priority\" in options ||\n \"state_meta\" in options ||\n \"values\" in options ||\n \"value_refs\" in options ||\n \"drop_values\" in options ||\n \"override_values\" in options ||\n \"attributes_merge\" in options ||\n \"attributes_delete\" in options ||\n typeof options.now_ms !== \"number\" ||\n !Number.isSafeInteger(options.now_ms) ||\n options.now_ms < 0\n ) {\n return undefined;\n }\n const runAtMs = options.run_at_ms ?? options.now_ms;\n if (typeof runAtMs !== \"number\" || !Number.isSafeInteger(runAtMs) || runAtMs < 0) {\n return undefined;\n }\n const tag = compactManyRequestTag(\n options.return,\n wire.COMPACT_FLOW_TRANSITION_MANY_REQUEST,\n wire.COMPACT_FLOW_TRANSITION_MANY_OK_REQUEST\n );\n if (tag == null) return undefined;\n\n const width = mixed ? 4 : 3;\n const count = rawItems.length / width;\n if (count > 0xffff_ffff) return undefined;\n const minimum = 34 + count * 20;\n if (!core.compactPayloadFits(minimum, maxBodyBytes)) {\n for (let rawIndex = 0; rawIndex < rawItems.length; rawIndex += width) {\n const lease = rawItems[rawIndex + (mixed ? 3 : 2)];\n if (\n !core.isCompactBinaryArgument(rawItems[rawIndex]) ||\n (mixed && !core.isCompactBinaryArgument(rawItems[rawIndex + 1])) ||\n !core.isCompactBinaryArgument(lease) ||\n core.i64Arg(rawItems[rawIndex + (mixed ? 2 : 1)]) < 0n\n ) return undefined;\n }\n core.assertCompactPayloadFits(minimum, maxBodyBytes);\n }\n const lengths = new Uint32Array(count * 3);\n const fencingValues = new BigInt64Array(count);\n const fromStateLength = core.compactBinaryByteLength(fromState);\n const toStateLength = core.compactBinaryByteLength(toState);\n const globalPartition: CommandArgument | undefined = mixed ? undefined : partition;\n const globalPartitionLength = globalPartition == null ? 0 : core.compactBinaryByteLength(globalPartition);\n let total = 1\n + 4 + fromStateLength\n + 4 + toStateLength\n + 4 + globalPartitionLength\n + 8\n + 8\n + 1\n + 4;\n for (let rawIndex = 0, itemIndex = 0; rawIndex < rawItems.length; rawIndex += width, itemIndex += 1) {\n const lease = rawItems[rawIndex + (mixed ? 3 : 2)];\n if (\n !core.isCompactBinaryArgument(rawItems[rawIndex]) ||\n (mixed && !core.isCompactBinaryArgument(rawItems[rawIndex + 1])) ||\n !core.isCompactBinaryArgument(lease)\n ) {\n return undefined;\n }\n const idLength = core.compactBinaryByteLength(rawItems[rawIndex]);\n const itemPartition = mixed ? rawItems[rawIndex + 1] : undefined;\n const itemPartitionLength = itemPartition == null ? 0 : core.compactBinaryByteLength(itemPartition);\n const fencing = core.i64Arg(rawItems[rawIndex + (mixed ? 2 : 1)]);\n if (fencing < 0n) return undefined;\n const leaseValue = core.commandTokenIs(lease, \"-\") ? undefined : lease;\n const leaseLength = leaseValue == null ? 0 : core.compactBinaryByteLength(leaseValue);\n lengths[itemIndex * 3] = idLength;\n lengths[itemIndex * 3 + 1] = itemPartitionLength;\n lengths[itemIndex * 3 + 2] = leaseLength;\n fencingValues[itemIndex] = fencing;\n total += 4 + idLength + 4 + itemPartitionLength + 8 + 4 + leaseLength;\n }\n core.assertCompactPayloadFits(total, maxBodyBytes);\n\n const out = Buffer.allocUnsafe(total);\n let offset = 0;\n out.writeUInt8(tag, offset);\n offset += 1;\n offset = core.writeBinaryValue(out, offset, fromState, fromStateLength);\n offset = core.writeBinaryValue(out, offset, toState, toStateLength);\n offset = core.writeOptionalBinaryValue(out, offset, globalPartition, globalPartitionLength);\n out.writeBigInt64BE(BigInt(options.now_ms), offset);\n offset += 8;\n out.writeBigInt64BE(BigInt(runAtMs), offset);\n offset += 8;\n out.writeUInt8(core.independentMode(options.independent), offset);\n offset += 1;\n out.writeUInt32BE(count, offset);\n offset += 4;\n for (let rawIndex = 0, itemIndex = 0; rawIndex < rawItems.length; rawIndex += width, itemIndex += 1) {\n offset = core.writeBinaryValue(out, offset, rawItems[rawIndex], lengths[itemIndex * 3] ?? 0);\n offset = core.writeOptionalBinaryValue(\n out,\n offset,\n mixed ? rawItems[rawIndex + 1] : undefined,\n lengths[itemIndex * 3 + 1] ?? 0\n );\n out.writeBigInt64BE(fencingValues[itemIndex] ?? 0n, offset);\n offset += 8;\n const lease = rawItems[rawIndex + (mixed ? 3 : 2)];\n offset = core.writeOptionalBinaryValue(\n out,\n offset,\n core.commandTokenIs(lease, \"-\") ? undefined : lease,\n lengths[itemIndex * 3 + 2] ?? 0\n );\n }\n return {\n flags: wire.FLAG_CUSTOM_PAYLOAD,\n opcode: wire.OPCODES.flowTransitionMany,\n payload: out\n };\n}\n","import { Buffer } from \"node:buffer\";\nimport type { CommandArgument } from \"./internal.js\";\nimport * as core from \"./protocol-core.js\";\nimport * as wire from \"./protocol-constants.js\";\n\nexport function compactFlowValueMGetPayload(\n refs: readonly CommandArgument[],\n maxBytes: unknown,\n maxBodyBytes: number\n): wire.ProtocolCommand | undefined {\n if (\n refs.length > 0xffff_ffff ||\n (maxBytes != null && (\n typeof maxBytes !== \"number\" ||\n !Number.isSafeInteger(maxBytes) ||\n maxBytes < 0\n ))\n ) return undefined;\n const minimum = 13 + refs.length * 4;\n if (!core.compactPayloadFits(minimum, maxBodyBytes)) {\n for (const ref of refs) if (!core.isCompactBinaryArgument(ref)) return undefined;\n core.assertCompactPayloadFits(minimum, maxBodyBytes);\n }\n const lengths = new Uint32Array(refs.length);\n let total = 1 + 8 + 4;\n for (let index = 0; index < refs.length; index += 1) {\n if (!core.isCompactBinaryArgument(refs[index])) return undefined;\n const byteLength = core.compactBinaryByteLength(refs[index]);\n lengths[index] = byteLength;\n total += 4 + byteLength;\n }\n core.assertCompactPayloadFits(total, maxBodyBytes);\n\n const out = Buffer.allocUnsafe(total);\n let offset = 0;\n out.writeUInt8(wire.COMPACT_FLOW_VALUE_MGET_REQUEST, offset);\n offset += 1;\n out.writeBigInt64BE(core.optionalI64(maxBytes), offset);\n offset += 8;\n out.writeUInt32BE(refs.length, offset);\n offset += 4;\n for (let index = 0; index < refs.length; index += 1) {\n offset = core.writeBinaryValue(out, offset, refs[index], lengths[index] ?? 0);\n }\n return { flags: wire.FLAG_CUSTOM_PAYLOAD, opcode: wire.OPCODES.flowValueMGet, payload: out };\n}\n\nexport function compactFlowListPayload(\n args: readonly CommandArgument[],\n maxBodyBytes: number\n): wire.ProtocolCommand | undefined {\n const type = args[0];\n if (!core.isCompactBinaryArgument(type)) return undefined;\n let state: CommandArgument | undefined;\n let count = 100;\n let returnMode = 0;\n const seen = new Set<string>();\n for (let index = 1; index < args.length; index += 2) {\n if (index + 1 >= args.length) return undefined;\n const token = core.asText(args[index]).toUpperCase();\n if (seen.has(token)) return undefined;\n seen.add(token);\n if (token === \"STATE\") {\n if (!core.isCompactBinaryArgument(args[index + 1])) return undefined;\n state = args[index + 1];\n } else if (token === \"COUNT\") {\n const value = core.safeIntegerNumberArg(args[index + 1]);\n if (value <= 0) return undefined;\n count = value;\n } else if (token === \"RETURN\") {\n if (!core.commandTokenIs(args[index + 1], \"META\")) return undefined;\n returnMode = 1;\n } else {\n return undefined;\n }\n }\n\n const typeLength = core.compactBinaryByteLength(type);\n const stateLength = state == null ? 0 : core.compactBinaryByteLength(state);\n const total = 1 + 4 + typeLength + 4 + stateLength + 8 + 1;\n core.assertCompactPayloadFits(total, maxBodyBytes);\n\n const out = Buffer.allocUnsafe(total);\n let offset = 0;\n out.writeUInt8(wire.COMPACT_FLOW_LIST_REQUEST, offset);\n offset += 1;\n offset = core.writeBinaryValue(out, offset, type, typeLength);\n offset = core.writeOptionalBinaryValue(out, offset, state, stateLength);\n out.writeBigInt64BE(BigInt(count), offset);\n offset += 8;\n out.writeUInt8(returnMode, offset);\n return { flags: wire.FLAG_CUSTOM_PAYLOAD, opcode: wire.COMMAND_OPCODES[\"FLOW.LIST\"], payload: out };\n}\n","import type { CommandArgument } from \"./internal.js\";\nimport * as core from \"./protocol-core.js\";\nimport type { ProtocolCommand, ProtocolRoutingHints } from \"./protocol-constants.js\";\nimport { isPlainObject, parseFlowOptions } from \"./protocol-flow-options.js\";\n\nexport function withFlowPartitionRouting(\n command: ProtocolCommand,\n payload: unknown\n): ProtocolCommand {\n if (!isPlainObject(payload)) return command;\n const routing: ProtocolRoutingHints = {\n ...(Object.hasOwn(payload, \"partition_key\")\n ? { flowPartitionKey: payload.partition_key }\n : {}),\n ...(Array.isArray(payload.partition_keys)\n ? { flowPartitionKeys: payload.partition_keys }\n : {})\n };\n return Object.keys(routing).length === 0 ? command : { ...command, routing };\n}\n\nexport function flowCommandExecWithRouting(\n command: string,\n args: readonly CommandArgument[],\n optionStart: number,\n allowed: ReadonlySet<string>\n): ProtocolCommand {\n const fallback = core.commandExec([command, ...args]);\n let hasPartitionOption = false;\n for (let index = optionStart; index < args.length; index += 1) {\n if (core.commandTokenIs(args[index], \"PARTITION\") || core.commandTokenIs(args[index], \"PARTITIONS\")) {\n hasPartitionOption = true;\n break;\n }\n }\n if (!hasPartitionOption) return fallback;\n try {\n const options = parseFlowOptions(args, optionStart, args.length, {\n allowed,\n payloadValue: true\n });\n return options == null ? fallback : withFlowPartitionRouting(fallback, options);\n } catch {\n return fallback;\n }\n}\n\nexport function expandFlowClaimStates(args: readonly CommandArgument[]): CommandArgument[] {\n const expanded: CommandArgument[] = [];\n for (let index = 0; index < args.length; ) {\n if (core.commandTokenIs(args[index], \"STATES\")) {\n const count = core.safeIntegerNumberArg(args[index + 1]);\n for (let stateIndex = 0; stateIndex < count; stateIndex += 1) {\n expanded.push(\"STATE\", args[index + 2 + stateIndex]);\n }\n index += 2 + count;\n } else {\n expanded.push(args[index]);\n index += 1;\n }\n }\n return expanded;\n}\n","import type { CommandArgument } from \"./internal.js\";\nimport { splitFlowValueMGetArguments } from \"./command-grammar.js\";\nimport { denseCommandArgumentTail } from \"./protocol-array-validation.js\";\nimport * as core from \"./protocol-core.js\";\nimport * as wire from \"./protocol-constants.js\";\nimport {\n normalizeFlowSearchStateMeta,\n optionMap,\n parseFlowOptions\n} from \"./protocol-flow-options.js\";\nexport * from \"./protocol-flow-options.js\";\nexport * from \"./protocol-flow-admin.js\";\nimport {\n compactFlowClaimDuePayload,\n compactFlowCompleteManyPayload,\n compactFlowCreateManyPayload,\n compactFlowRetryManyPayload,\n compactFlowTransitionManyPayload\n} from \"./protocol-flow-compact.js\";\nexport {\n compactFlowCancelManyPayload,\n compactFlowClaimDuePayload,\n compactFlowCompleteManyPayload,\n compactFlowCreateManyPayload,\n compactFlowRetryManyPayload,\n compactFlowTransitionManyPayload,\n compactManyRequestTag\n} from \"./protocol-flow-compact.js\";\nimport { compactFlowValueMGetPayload } from \"./protocol-flow-compact-single.js\";\nexport { compactFlowListPayload, compactFlowValueMGetPayload } from \"./protocol-flow-compact-single.js\";\nimport {\n findItemToken,\n parseFlowCreateItemsExt,\n parseFlowSpawnChildren,\n parseFlowSpawnChildrenExt\n} from \"./protocol-flow-items.js\";\nexport * from \"./protocol-flow-items.js\";\nimport {\n expandFlowClaimStates,\n withFlowPartitionRouting\n} from \"./protocol-flow-routing.js\";\nexport * from \"./protocol-flow-routing.js\";\n\nexport function hasFlowCommandOnlyOption(command: string, args: readonly CommandArgument[]): boolean {\n if (command !== \"FLOW.SEARCH\") return false;\n for (let index = 1; index < args.length; ) {\n const token = core.asText(args[index]).toUpperCase();\n if (token === \"INDEXED_STATE_META\") return true;\n index += token === \"ATTRIBUTE\" || token === \"STATE_META\" ? 3 : 2;\n }\n return false;\n}\n\nexport function flowCreatePayload(args: readonly CommandArgument[]): wire.ProtocolCommand | undefined {\n if (args.length < 7) return undefined;\n const id = args[0];\n const options = parseFlowOptions(args, 1, args.length, {\n allowed: new Set([\n \"TYPE\",\n \"STATE\",\n \"NOW\",\n \"PARTITION\",\n \"PAYLOAD\",\n \"PARENT_FLOW_ID\",\n \"ROOT_FLOW_ID\",\n \"CORRELATION_ID\",\n \"RUN_AT\",\n \"PRIORITY\",\n \"IDEMPOTENT\",\n \"MAX_ACTIVE_MS\",\n \"RETENTION_TTL_MS\",\n \"ATTRIBUTE\",\n \"STATE_META\",\n \"VALUE\",\n \"VALUE_REF\"\n ]),\n payloadValue: true,\n required: new Set([\"TYPE\", \"STATE\", \"NOW\"])\n });\n if (options == null) return undefined;\n return { opcode: wire.OPCODES.flowCreate, payload: { id, ...options } };\n}\n\nexport function flowGetPayload(args: readonly CommandArgument[]): wire.ProtocolCommand | undefined {\n if (args.length < 1) return undefined;\n const options = parseFlowOptions(args, 1, args.length, {\n allowed: new Set([\"PARTITION\", \"FULL\", \"PAYLOAD\", \"NOPAYLOAD\", \"MAXBYTES\", \"VALUE\", \"VALUE_MAX_BYTES\"]),\n readValues: true\n });\n if (options == null) return undefined;\n return { opcode: wire.OPCODES.flowGet, payload: { id: args[0], ...options } };\n}\n\nexport function flowValuePutPayload(args: readonly CommandArgument[]): wire.ProtocolCommand | undefined {\n if (args.length < 1) return undefined;\n const options = parseFlowOptions(args, 1, args.length, {\n allowed: new Set([\"NOW\", \"PARTITION\", \"OWNER_FLOW_ID\", \"NAME\", \"OVERRIDE\", \"TTL\"])\n });\n if (options == null) return undefined;\n return { opcode: wire.OPCODES.flowValuePut, payload: { value: args[0], ...options } };\n}\n\nexport function flowValueMGetPayload(\n args: readonly CommandArgument[],\n maxBodyBytes: number,\n allowCompact: boolean\n): wire.ProtocolCommand | undefined {\n if (args.length === 0) return undefined;\n const { hasMaxBytes, maxBytes, refs } = splitFlowValueMGetArguments(args, 0);\n if (refs.length === 0) return undefined;\n const payload: Record<string, unknown> = { refs };\n if (hasMaxBytes) {\n core.setOwnValue(payload, \"max_bytes\", core.safeIntegerNumberArg(maxBytes));\n }\n if (allowCompact) {\n const compact = compactFlowValueMGetPayload(refs, payload.max_bytes, maxBodyBytes);\n if (compact != null) return compact;\n }\n return { opcode: wire.OPCODES.flowValueMGet, payload };\n}\n\nexport function flowCreateManyPayload(\n args: readonly CommandArgument[],\n maxBodyBytes: number,\n allowCompact: boolean\n): wire.ProtocolCommand | undefined {\n if (args.length < 2) return undefined;\n const partition = core.asText(args[0]);\n const itemsIndex = findItemToken(args, 1);\n if (itemsIndex < 0) return undefined;\n\n const options = parseFlowOptions(args, 1, itemsIndex, {\n allowed: new Set([\n \"TYPE\", \"STATE\", \"NOW\", \"RUN_AT\", \"PRIORITY\", \"IDEMPOTENT\", \"INDEPENDENT\",\n \"MAX_ACTIVE_MS\", \"RETENTION_TTL_MS\", \"ATTRIBUTE\", \"STATE_META\", \"VALUE\", \"VALUE_REF\"\n ]),\n required: new Set([\"TYPE\"])\n });\n if (options == null) return undefined;\n\n const mixed = partition.toUpperCase() === \"MIXED\";\n const auto = [\"AUTO\", \"NONE\"].includes(partition.toUpperCase());\n const itemToken = core.asText(args[itemsIndex]).toUpperCase();\n\n if (itemToken === \"ITEMS_EXT\") {\n const count = core.safeIntegerNumberArg(args[itemsIndex + 1]);\n if (count < 0) return undefined;\n const items = parseFlowCreateItemsExt(denseCommandArgumentTail(args, itemsIndex + 2, \"ITEMS_EXT\"), count, mixed);\n if (items == null) return undefined;\n const payload: Record<string, unknown> = { ...options, items };\n if (!auto && !mixed) payload.partition_key = partition;\n return { opcode: wire.OPCODES.flowCreateMany, payload };\n }\n\n const rawItems = denseCommandArgumentTail(args, itemsIndex + 1, \"ITEMS\");\n const width = mixed ? 3 : 2;\n if (rawItems.length === 0 || rawItems.length % width !== 0) return undefined;\n\n if (allowCompact) {\n const compact = compactFlowCreateManyPayload(\n partition,\n rawItems,\n mixed,\n auto,\n options,\n maxBodyBytes\n );\n if (compact != null) return compact;\n }\n\n const items: unknown[][] = [];\n for (let index = 0; index < rawItems.length; index += width) {\n if (mixed) {\n items.push([rawItems[index], rawItems[index + 1], rawItems[index + 2]]);\n } else {\n items.push([rawItems[index], rawItems[index + 1]]);\n }\n }\n\n const payload: Record<string, unknown> = { ...options, items };\n if (!auto && !mixed) payload.partition_key = partition;\n return { opcode: wire.OPCODES.flowCreateMany, payload };\n}\n\nexport function flowClaimDuePayload(\n args: readonly CommandArgument[],\n maxBodyBytes: number,\n allowCompact: boolean\n): wire.ProtocolCommand | undefined {\n if (args.length < 1) return undefined;\n const options = parseFlowOptions(args, 1, args.length, {\n allowed: new Set([\n \"STATE\",\n \"STATES\",\n \"PARTITION\",\n \"PARTITIONS\",\n \"WORKER\",\n \"LEASE_MS\",\n \"LIMIT\",\n \"PRIORITY\",\n \"NOW\",\n \"BLOCK\",\n \"BLOCK_MS\",\n \"RECLAIM_EXPIRED\",\n \"RECLAIM_RATIO\",\n \"RETURN\",\n \"PAYLOAD\",\n \"NOPAYLOAD\",\n \"MAXBYTES\",\n \"INCLUDE_STATE\",\n \"VALUE\",\n \"VALUE_MAX_BYTES\"\n ]),\n readValues: true\n });\n if (options == null) return undefined;\n const returnMode = options.return == null ? \"\" : core.asText(options.return).toUpperCase();\n if (!returnMode.startsWith(\"JOBS_COMPACT\")) {\n const fallback = Array.isArray(options.states)\n ? core.commandExec([\"FLOW.CLAIM_DUE\", ...expandFlowClaimStates(args)])\n : core.commandExec([\"FLOW.CLAIM_DUE\", ...args]);\n return withFlowPartitionRouting(fallback, options);\n }\n const compact = allowCompact\n ? compactFlowClaimDuePayload(args[0], options, maxBodyBytes)\n : undefined;\n const compactClaimMode = core.compactClaimResponseMode(options.return);\n const serverBlockMs = typeof options.block_ms === \"number\" && options.block_ms >= 0\n ? options.block_ms\n : undefined;\n const metadata = {\n ...(compactClaimMode == null ? {} : { compactClaimMode }),\n ...(serverBlockMs == null ? {} : { serverBlockMs })\n };\n if (compact != null) return { ...compact, ...metadata };\n return { opcode: wire.OPCODES.flowClaimDue, payload: { ...options, type: args[0] }, ...metadata };\n}\n\nexport function flowReclaimPayload(args: readonly CommandArgument[]): wire.ProtocolCommand | undefined {\n if (args.length < 1) return undefined;\n const options = parseFlowOptions(args, 1, args.length, {\n allowed: new Set([\n \"STATE\", \"PARTITION\", \"PARTITIONS\", \"WORKER\", \"LEASE_MS\", \"LIMIT\", \"PRIORITY\", \"NOW\",\n \"RETURN\", \"PAYLOAD\", \"NOPAYLOAD\", \"MAXBYTES\", \"INCLUDE_STATE\", \"VALUE\", \"VALUE_MAX_BYTES\"\n ]),\n readValues: true\n });\n if (options == null) return undefined;\n return { opcode: wire.OPCODES.flowReclaim, payload: { ...options, type: args[0] } };\n}\n\nexport function flowCompletePayload(args: readonly CommandArgument[]): wire.ProtocolCommand | undefined {\n return flowLeaseMutationPayload(wire.OPCODES.flowComplete, args, new Set([\n \"FENCING\", \"NOW\", \"PARTITION\", \"RESULT\", \"PAYLOAD\", \"TTL\", \"STATE_META\",\n \"VALUE\", \"VALUE_REF\", \"DROP_VALUE\", \"OVERRIDE_VALUE\", \"ATTRIBUTE_MERGE\", \"ATTRIBUTE_DELETE\"\n ]));\n}\n\nexport function flowTransitionPayload(args: readonly CommandArgument[]): wire.ProtocolCommand | undefined {\n if (args.length < 3) return undefined;\n const options = parseFlowOptions(args, 3, args.length, {\n allowed: new Set([\n \"LEASE_TOKEN\", \"FENCING\", \"NOW\", \"PARTITION\", \"PAYLOAD\", \"RUN_AT\", \"PRIORITY\",\n \"STATE_META\", \"VALUE\", \"VALUE_REF\", \"DROP_VALUE\", \"OVERRIDE_VALUE\",\n \"ATTRIBUTE_MERGE\", \"ATTRIBUTE_DELETE\"\n ]),\n payloadValue: true,\n required: new Set([\"LEASE_TOKEN\", \"FENCING\", \"NOW\"])\n });\n if (options == null) return undefined;\n return {\n opcode: wire.OPCODES.flowTransition,\n payload: { id: args[0], from_state: args[1], to_state: args[2], ...options }\n };\n}\n\nexport function flowLeaseMutationPayload(\n opcode: number,\n args: readonly CommandArgument[],\n allowed: ReadonlySet<string>\n): wire.ProtocolCommand | undefined {\n if (args.length < 2) return undefined;\n const options = parseFlowOptions(args, 2, args.length, {\n allowed,\n payloadValue: true,\n required: new Set([\"FENCING\", \"NOW\"])\n });\n if (options == null) return undefined;\n return { opcode, payload: { id: args[0], lease_token: args[1], ...options } };\n}\n\nexport function flowClaimedManyPayload(\n command: \"FLOW.COMPLETE_MANY\" | \"FLOW.RETRY_MANY\" | \"FLOW.FAIL_MANY\",\n opcode: number,\n args: readonly CommandArgument[],\n maxBodyBytes = Number.MAX_SAFE_INTEGER,\n allowCompact = true\n): wire.ProtocolCommand | undefined {\n if (args.length < 2) return undefined;\n const partition = core.asText(args[0]);\n const itemsIndex = findItemToken(args, 1);\n if (itemsIndex < 0) return undefined;\n\n const allowed = new Set([\n \"NOW\", \"INDEPENDENT\", \"PAYLOAD\", \"STATE_META\", \"VALUE\", \"VALUE_REF\", \"DROP_VALUE\", \"OVERRIDE_VALUE\",\n \"ATTRIBUTE_MERGE\", \"ATTRIBUTE_DELETE\"\n ]);\n if (command === \"FLOW.COMPLETE_MANY\") {\n allowed.add(\"RESULT\");\n allowed.add(\"TTL\");\n } else {\n allowed.add(\"ERROR\");\n if (command === \"FLOW.RETRY_MANY\") allowed.add(\"RUN_AT\");\n if (command === \"FLOW.FAIL_MANY\") allowed.add(\"TTL\");\n }\n allowed.add(\"RETURN\");\n const options = parseFlowOptions(args, 1, itemsIndex, {\n allowed,\n payloadValue: true\n });\n if (options == null) return undefined;\n\n const mixed = partition.toUpperCase() === \"MIXED\";\n const auto = partition.toUpperCase() === \"AUTO\";\n const rawItems = denseCommandArgumentTail(args, itemsIndex + 1, \"ITEMS\");\n const width = mixed ? 4 : 3;\n if (rawItems.length === 0 || rawItems.length % width !== 0) return undefined;\n\n if (allowCompact) {\n const compact = command === \"FLOW.RETRY_MANY\"\n ? compactFlowRetryManyPayload(partition, rawItems, mixed, auto, options, maxBodyBytes)\n : compactFlowCompleteManyPayload(opcode, partition, rawItems, mixed, auto, options, maxBodyBytes);\n if (compact != null) return compact;\n }\n\n const items: unknown[][] = [];\n for (let index = 0; index < rawItems.length; index += width) {\n if (mixed) {\n items.push([rawItems[index], rawItems[index + 1], rawItems[index + 2], rawItems[index + 3]]);\n } else {\n items.push([rawItems[index], rawItems[index + 1], rawItems[index + 2]]);\n }\n }\n\n const payload: Record<string, unknown> = { ...options, items };\n if (!auto && !mixed) payload.partition_key = partition;\n return { opcode, payload };\n}\n\nexport function flowTransitionManyPayload(\n args: readonly CommandArgument[],\n maxBodyBytes: number,\n allowCompact: boolean\n): wire.ProtocolCommand | undefined {\n if (args.length < 4) return undefined;\n const partition = core.asText(args[0]);\n const itemsIndex = findItemToken(args, 3);\n if (itemsIndex < 0) return undefined;\n const options = parseFlowOptions(args, 3, itemsIndex, {\n allowed: new Set([\n \"PAYLOAD\", \"RUN_AT\", \"PRIORITY\", \"NOW\", \"INDEPENDENT\", \"STATE_META\",\n \"VALUE\", \"VALUE_REF\", \"DROP_VALUE\", \"OVERRIDE_VALUE\", \"ATTRIBUTE_MERGE\", \"ATTRIBUTE_DELETE\",\n \"RETURN\"\n ]),\n payloadValue: true\n });\n if (options == null) return undefined;\n\n const mixed = partition.toUpperCase() === \"MIXED\";\n const rawItems = denseCommandArgumentTail(args, itemsIndex + 1, \"ITEMS\");\n const width = mixed ? 4 : 3;\n if (rawItems.length === 0 || rawItems.length % width !== 0) return undefined;\n if (allowCompact) {\n const compact = core.isCompactBinaryArgument(args[0])\n && core.isCompactBinaryArgument(args[1])\n && core.isCompactBinaryArgument(args[2])\n ? compactFlowTransitionManyPayload(\n args[0],\n args[1],\n args[2],\n rawItems,\n mixed,\n options,\n maxBodyBytes\n )\n : undefined;\n if (compact != null) return compact;\n }\n const items: Record<string, unknown>[] = [];\n for (let index = 0; index < rawItems.length; index += width) {\n const item: Record<string, unknown> = {\n id: rawItems[index],\n fencing_token: rawItems[index + (mixed ? 2 : 1)]\n };\n if (mixed) item.partition_key = rawItems[index + 1];\n const leaseToken = rawItems[index + (mixed ? 3 : 2)];\n if (!core.commandTokenIs(leaseToken, \"-\")) item.lease_token = leaseToken;\n items.push(item);\n }\n\n const payload: Record<string, unknown> = {\n from_state: args[1],\n to_state: args[2],\n ...options,\n items\n };\n if (!mixed) payload.partition_key = args[0];\n return { opcode: wire.OPCODES.flowTransitionMany, payload };\n}\n\nexport function flowSpawnChildrenPayload(args: readonly CommandArgument[]): wire.ProtocolCommand | undefined {\n if (args.length < 2) return undefined;\n const itemsIndex = findItemToken(args, 1);\n if (itemsIndex < 0) return undefined;\n const options = parseFlowOptions(args, 1, itemsIndex, {\n allowed: new Set([\n \"GROUP\", \"WAIT\", \"NOW\", \"PARTITION\", \"LEASE_TOKEN\", \"FENCING\", \"WAIT_STATE\", \"SUCCESS\",\n \"FAILURE\", \"FROM_STATE\", \"ON_CHILD_FAILED\", \"ON_PARENT_CLOSED\", \"MAX_ACTIVE_MS\", \"VALUE\", \"VALUE_REF\"\n ])\n });\n if (options == null) return undefined;\n\n const itemToken = core.asText(args[itemsIndex]).toUpperCase();\n let children: Record<string, unknown>[] | undefined;\n if (itemToken === \"ITEMS_EXT\") {\n const count = core.safeIntegerNumberArg(args[itemsIndex + 1]);\n if (count < 0) return undefined;\n children = parseFlowSpawnChildrenExt(denseCommandArgumentTail(args, itemsIndex + 2, \"ITEMS_EXT\"), count);\n } else {\n const mixed = itemsIndex + 1 < args.length && core.commandTokenIs(args[itemsIndex + 1], \"MIXED\");\n const start = itemsIndex + (mixed ? 2 : 1);\n children = parseFlowSpawnChildren(denseCommandArgumentTail(args, start, \"ITEMS\"), mixed);\n }\n if (children == null) return undefined;\n return {\n opcode: wire.OPCODES.flowSpawnChildren,\n payload: { id: args[0], ...options, children }\n };\n}\n\nexport function flowSearchPayload(args: readonly CommandArgument[]): wire.ProtocolCommand | undefined {\n if (args.length < 1) return undefined;\n const payload = optionMap(args.slice(1));\n if (payload == null) return undefined;\n normalizeFlowSearchStateMeta(payload);\n return { opcode: wire.OPCODES.flowSearch, payload: { type: args[0], ...payload } };\n}\n","import type { CommandArgument } from \"./internal.js\";\nimport * as wire from \"./protocol-constants.js\";\nimport { parseFlowOptions } from \"./protocol-flow-options.js\";\n\nexport function flowSignalPayload(args: readonly CommandArgument[]): wire.ProtocolCommand | undefined {\n if (args.length < 3) return undefined;\n const options = parseFlowOptions(args, 1, args.length, {\n allowed: new Set([\n \"SIGNAL\", \"PARTITION\", \"IDEMPOTENCY\", \"IF_STATE\", \"TRANSITION_TO\", \"RUN_AT\", \"NOW\",\n \"VALUE\", \"VALUE_REF\", \"DROP_VALUE\", \"OVERRIDE_VALUE\"\n ]),\n required: new Set([\"SIGNAL\"])\n });\n if (options == null) return undefined;\n return { opcode: wire.OPCODES.flowSignal, payload: { id: args[0], ...options } };\n}\n","import { InvalidCommandError } from \"./errors.js\";\nimport type { CommandArgument } from \"./internal.js\";\nimport {\n connectionPinnedCommands,\n connectionStateMutationCommands\n} from \"./command-metadata.js\";\nimport {\n commandName,\n isConnectionBlockingCommand\n} from \"./protocol-core.js\";\n\n/** Reject commands whose correctness depends on retaining exclusive socket state. */\nexport function assertCommandDoesNotRequirePinnedConnection(\n args: readonly CommandArgument[]\n): void {\n const outer = commandName(args[0]);\n assertNormalizedCommandDoesNotRequirePinnedConnection(args, outer);\n}\n\n/** Return whether a command depends on connection-local state or an exclusive session. */\nexport function commandRequiresDedicatedConnection(\n args: readonly CommandArgument[],\n normalizedOuter: string | undefined = commandName(args[0])\n): boolean {\n const command = connectionScopedCommandName(args, normalizedOuter);\n return command != null\n && (connectionPinnedCommands.has(command) || connectionStateMutationCommands.has(command));\n}\n\n/** Return whether a normalized command changes state attached to one socket. */\nexport function commandMutatesConnectionState(\n args: readonly CommandArgument[]\n): boolean {\n const command = connectionScopedCommandName(args, commandName(args[0]));\n return command != null && connectionStateMutationCommands.has(command);\n}\n\nfunction connectionScopedCommandName(\n args: readonly CommandArgument[],\n normalizedOuter: string | undefined\n): string | undefined {\n let index = 0;\n let command = normalizedOuter;\n if (command === \"COMMAND_EXEC\") {\n index += 1;\n command = commandName(args[index]);\n }\n if (command === \"CLIENT\" && commandName(args[index + 1]) === \"SETNAME\") {\n return \"CLIENT.SETNAME\";\n }\n return command;\n}\n\nexport function assertNormalizedCommandDoesNotRequirePinnedConnection(\n args: readonly CommandArgument[],\n outer: string | undefined\n): void {\n const command = connectionScopedCommandName(args, outer);\n if (command != null && connectionPinnedCommands.has(command)) {\n throw new InvalidCommandError(\n `${command} requires a pinned connection session, which the multiplexed native client does not support`\n );\n }\n}\n\n/** Reject connection-local state mutations on pooled or reconnecting executors. */\nexport function assertCommandHasStableConnectionState(\n args: readonly CommandArgument[]\n): void {\n const command = connectionScopedCommandName(args, commandName(args[0]));\n if (command != null && connectionStateMutationCommands.has(command)) {\n const display = command.replaceAll(\".\", \" \");\n throw new InvalidCommandError(\n `${display} requires a stable single connection; configure connection state when creating reconnecting or topology clients`\n );\n }\n}\n\n/** @internal Connection-scoped and blocking fallbacks must execute in order. */\nexport function commandRequiresOrderedPipelineExecution(\n args: readonly CommandArgument[]\n): boolean {\n return commandRequiresDedicatedConnection(args) || isConnectionBlockingCommand(args);\n}\n","import { Buffer } from \"node:buffer\";\nimport { FerricStoreError } from \"./errors.js\";\nimport type { Command, CommandArgument } from \"./internal.js\";\nimport {\n assertCompactPayloadFits,\n commandNameIs,\n compactBinaryByteLength,\n compactPayloadFits,\n isCompactBinaryScalar,\n writeBinaryValue\n} from \"./protocol-core.js\";\nimport * as wire from \"./protocol-constants.js\";\n\nexport function compactMsetPayload(\n args: readonly CommandArgument[],\n maxBodyBytes: number\n): wire.ProtocolCommand | undefined {\n if (args.length % 2 !== 0) throw new FerricStoreError(\"MSET requires key/value pairs\");\n const minimum = 6 + args.length * 4;\n if (!compactPayloadFits(minimum, maxBodyBytes)) {\n if (!compactArgumentsEligible(args, \"MSET arguments must be dense\")) return undefined;\n assertCompactPayloadFits(minimum, maxBodyBytes);\n }\n const byteLengths = new Uint32Array(args.length);\n let total = 6;\n for (let index = 0; index < args.length; index += 1) {\n if (!Object.hasOwn(args, index)) throw new TypeError(\"MSET arguments must be dense\");\n const value = args[index];\n if (!isCompactBinaryScalar(value)) return undefined;\n const byteLength = compactBinaryByteLength(value);\n byteLengths[index] = byteLength;\n total += 4 + byteLength;\n }\n assertCompactPayloadFits(total, maxBodyBytes);\n\n const out = Buffer.allocUnsafe(total);\n let offset = writeCompactPipelineHeader(out, 1, args.length / 2);\n for (let index = 0; index < args.length; index += 1) {\n offset = writeBinaryValue(out, offset, args[index], byteLengths[index] ?? 0);\n }\n return { flags: wire.FLAG_CUSTOM_PAYLOAD, opcode: wire.OPCODES.mset, payload: out };\n}\n\nexport function compactKeyPipelinePayload(\n opcode: number,\n args: readonly CommandArgument[],\n mode: number,\n maxBodyBytes: number\n): wire.ProtocolCommand | undefined {\n const minimum = 6 + args.length * 4;\n if (!compactPayloadFits(minimum, maxBodyBytes)) {\n if (!compactArgumentsEligible(args, \"command arguments must be dense\")) return undefined;\n assertCompactPayloadFits(minimum, maxBodyBytes);\n }\n const byteLengths = new Uint32Array(args.length);\n let total = 6;\n for (let index = 0; index < args.length; index += 1) {\n if (!Object.hasOwn(args, index)) throw new TypeError(\"command arguments must be dense\");\n const value = args[index];\n if (!isCompactBinaryScalar(value)) return undefined;\n const byteLength = compactBinaryByteLength(value);\n byteLengths[index] = byteLength;\n total += 4 + byteLength;\n }\n assertCompactPayloadFits(total, maxBodyBytes);\n\n const out = Buffer.allocUnsafe(total);\n let offset = writeCompactPipelineHeader(out, mode, args.length);\n for (let index = 0; index < args.length; index += 1) {\n offset = writeBinaryValue(out, offset, args[index], byteLengths[index] ?? 0);\n }\n return { flags: wire.FLAG_CUSTOM_PAYLOAD, opcode, payload: out };\n}\n\nexport function compactPipelinePayload(\n commands: readonly Command[],\n maxBodyBytes: number\n): Buffer | undefined {\n if (commands.length === 0) {\n assertCompactPayloadFits(6, maxBodyBytes);\n const out = Buffer.allocUnsafe(6);\n writeCompactPipelineHeader(out, 0x80 | 2, 0);\n return out;\n }\n if (!Object.hasOwn(commands, 0)) {\n throw new TypeError(\"pipeline commands must be a dense array of command arrays\");\n }\n if (commandNameIs(commands[0]?.[0], \"SET\")) return compactSetPipelinePayload(commands, maxBodyBytes);\n if (commandNameIs(commands[0]?.[0], \"GET\")) return compactGetPipelinePayload(commands, maxBodyBytes);\n return undefined;\n}\n\nfunction compactSetPipelinePayload(commands: readonly Command[], maxBodyBytes: number): Buffer | undefined {\n let total = 6;\n const minimum = total + commands.length * 8;\n if (!compactPayloadFits(minimum, maxBodyBytes)) {\n if (!compactPipelineEligible(commands, \"SET\", 3)) return undefined;\n assertCompactPayloadFits(minimum, maxBodyBytes);\n }\n const argumentByteLengths = new Uint32Array(commands.length * 2);\n const argumentValues = new Array<unknown>(commands.length * 2);\n for (let index = 0; index < commands.length; index += 1) {\n const command = commands[index];\n if (!Object.hasOwn(commands, index) || !Array.isArray(command)) {\n throw new TypeError(\"pipeline commands must be a dense array of command arrays\");\n }\n if (\n command.length !== 3\n || !Object.hasOwn(command, 0)\n || !Object.hasOwn(command, 1)\n || !Object.hasOwn(command, 2)\n ) {\n if (command.length === 3) throw new TypeError(\"pipeline command arguments must be dense\");\n return undefined;\n }\n if (!commandNameIs(command[0], \"SET\")) return undefined;\n const key: unknown = command[1];\n const value: unknown = command[2];\n if (!isCompactBinaryScalar(key) || !isCompactBinaryScalar(value)) return undefined;\n const keyByteLength = compactBinaryByteLength(key);\n const valueByteLength = compactBinaryByteLength(value);\n argumentValues[index * 2] = key;\n argumentValues[index * 2 + 1] = value;\n argumentByteLengths[index * 2] = keyByteLength;\n argumentByteLengths[index * 2 + 1] = valueByteLength;\n total += 8 + keyByteLength + valueByteLength;\n }\n assertCompactPayloadFits(total, maxBodyBytes);\n\n const out = Buffer.allocUnsafe(total);\n let offset = writeCompactPipelineHeader(out, 0x80 | 1, commands.length);\n for (let index = 0; index < commands.length; index += 1) {\n offset = writeBinaryValue(out, offset, argumentValues[index * 2], argumentByteLengths[index * 2] ?? 0);\n offset = writeBinaryValue(out, offset, argumentValues[index * 2 + 1], argumentByteLengths[index * 2 + 1] ?? 0);\n }\n return out;\n}\n\nfunction compactGetPipelinePayload(commands: readonly Command[], maxBodyBytes: number): Buffer | undefined {\n let total = 6;\n const minimum = total + commands.length * 4;\n if (!compactPayloadFits(minimum, maxBodyBytes)) {\n if (!compactPipelineEligible(commands, \"GET\", 2)) return undefined;\n assertCompactPayloadFits(minimum, maxBodyBytes);\n }\n const keyByteLengths = new Uint32Array(commands.length);\n const keys = new Array<unknown>(commands.length);\n for (let index = 0; index < commands.length; index += 1) {\n const command = commands[index];\n if (!Object.hasOwn(commands, index) || !Array.isArray(command)) {\n throw new TypeError(\"pipeline commands must be a dense array of command arrays\");\n }\n if (\n command.length !== 2\n || !Object.hasOwn(command, 0)\n || !Object.hasOwn(command, 1)\n ) {\n if (command.length === 2) throw new TypeError(\"pipeline command arguments must be dense\");\n return undefined;\n }\n if (!commandNameIs(command[0], \"GET\")) return undefined;\n const key: unknown = command[1];\n if (!isCompactBinaryScalar(key)) return undefined;\n const keyByteLength = compactBinaryByteLength(key);\n keys[index] = key;\n keyByteLengths[index] = keyByteLength;\n total += 4 + keyByteLength;\n }\n assertCompactPayloadFits(total, maxBodyBytes);\n\n const out = Buffer.allocUnsafe(total);\n let offset = writeCompactPipelineHeader(out, 0x80 | 2, commands.length);\n for (let index = 0; index < commands.length; index += 1) {\n offset = writeBinaryValue(out, offset, keys[index], keyByteLengths[index] ?? 0);\n }\n return out;\n}\n\nfunction compactArgumentsEligible(args: readonly CommandArgument[], sparseMessage: string): boolean {\n for (let index = 0; index < args.length; index += 1) {\n if (!Object.hasOwn(args, index)) throw new TypeError(sparseMessage);\n if (!isCompactBinaryScalar(args[index])) return false;\n }\n return true;\n}\n\nfunction compactPipelineEligible(\n commands: readonly Command[],\n commandName: \"GET\" | \"SET\",\n argumentCount: number\n): boolean {\n for (let index = 0; index < commands.length; index += 1) {\n const command = commands[index];\n if (!Object.hasOwn(commands, index) || !Array.isArray(command)) {\n throw new TypeError(\"pipeline commands must be a dense array of command arrays\");\n }\n if (command.length !== argumentCount) return false;\n for (let argumentIndex = 0; argumentIndex < argumentCount; argumentIndex += 1) {\n if (!Object.hasOwn(command, argumentIndex)) {\n throw new TypeError(\"pipeline command arguments must be dense\");\n }\n }\n if (!commandNameIs(command[0], commandName)) return false;\n for (let argumentIndex = 1; argumentIndex < argumentCount; argumentIndex += 1) {\n if (!isCompactBinaryScalar(command[argumentIndex])) return false;\n }\n }\n return true;\n}\n\nfunction writeCompactPipelineHeader(out: Buffer, mode: number, count: number): number {\n out.writeUInt8(wire.COMPACT_PIPELINE_REQUEST, 0);\n out.writeUInt8(mode, 1);\n out.writeUInt32BE(count, 2);\n return 6;\n}\n","import { Buffer } from \"node:buffer\";\nimport { FerricStoreError } from \"./errors.js\";\nimport type { CommandArgument } from \"./internal.js\";\nimport { integerArg, numberArg, optionalText, setOwnValue } from \"./protocol-core.js\";\nimport { COMMAND_OPCODES, type ProtocolCommand } from \"./protocol-constants.js\";\n\nexport function collectionProtocolCommand(\n command: string,\n args: readonly CommandArgument[]\n): ProtocolCommand | undefined {\n switch (command) {\n case \"CAS\":\n return compareAndSwapCommand(args);\n case \"LOCK\":\n return lockCommand(COMMAND_OPCODES.LOCK, args);\n case \"UNLOCK\":\n return binaryFieldsCommand(COMMAND_OPCODES.UNLOCK, args, \"owner\", 2);\n case \"EXTEND\":\n return lockCommand(COMMAND_OPCODES.EXTEND, args);\n case \"RATELIMIT.ADD\":\n return rateLimitCommand(args);\n case \"FETCH_OR_COMPUTE\":\n return fetchOrComputeCommand(args);\n case \"FETCH_OR_COMPUTE_RESULT\":\n return fetchOrComputeResultCommand(args);\n case \"FETCH_OR_COMPUTE_ERROR\":\n return fetchOrComputeErrorCommand(args);\n case \"HSET\":\n return hashSetCommand(args);\n case \"HGET\":\n return binaryFieldsCommand(COMMAND_OPCODES.HGET, args, \"field\", 2);\n case \"HMGET\":\n return binaryListCommand(COMMAND_OPCODES.HMGET, args, \"fields\");\n case \"HGETALL\":\n return keyOnlyCommand(COMMAND_OPCODES.HGETALL, args);\n case \"LPUSH\":\n return binaryListCommand(COMMAND_OPCODES.LPUSH, args, \"values\");\n case \"RPUSH\":\n return binaryListCommand(COMMAND_OPCODES.RPUSH, args, \"values\");\n case \"LPOP\":\n return listPopCommand(COMMAND_OPCODES.LPOP, args);\n case \"RPOP\":\n return listPopCommand(COMMAND_OPCODES.RPOP, args);\n case \"LRANGE\":\n return rangeCommand(COMMAND_OPCODES.LRANGE, args, false);\n case \"SADD\":\n return binaryListCommand(COMMAND_OPCODES.SADD, args, \"members\");\n case \"SREM\":\n return binaryListCommand(COMMAND_OPCODES.SREM, args, \"members\");\n case \"SMEMBERS\":\n return keyOnlyCommand(COMMAND_OPCODES.SMEMBERS, args);\n case \"SISMEMBER\":\n return binaryFieldsCommand(COMMAND_OPCODES.SISMEMBER, args, \"member\", 2);\n case \"ZADD\":\n return sortedSetAddCommand(args);\n case \"ZREM\":\n return binaryListCommand(COMMAND_OPCODES.ZREM, args, \"members\");\n case \"ZRANGE\":\n return rangeCommand(COMMAND_OPCODES.ZRANGE, args, true);\n case \"ZSCORE\":\n return binaryFieldsCommand(COMMAND_OPCODES.ZSCORE, args, \"member\", 2);\n default:\n return undefined;\n }\n}\n\nexport function stringSetPayload(args: readonly CommandArgument[]): Record<string, unknown> | undefined {\n if (!isBinaryCommandArgument(args[0]) || !isDirectKvValueArgument(args[1])) return undefined;\n const payload: Record<string, unknown> = { key: args[0], value: args[1] };\n let expirySeen = false;\n let nxSeen = false;\n let xxSeen = false;\n for (let index = 2; index < args.length; ) {\n const token = optionalText(args[index])?.toUpperCase();\n if (token === \"EX\" || token === \"PX\" || token === \"EXAT\" || token === \"PXAT\") {\n if (expirySeen || index + 1 >= args.length) return undefined;\n const value = positiveSafeInteger(args[index + 1]);\n if (value == null || (token === \"EX\" && value > Math.floor(Number.MAX_SAFE_INTEGER / 1_000))) {\n return undefined;\n }\n const field = token === \"EX\" || token === \"PX\" ? \"ttl\" : token.toLowerCase();\n setOwnValue(payload, field, token === \"EX\" ? value * 1_000 : value);\n expirySeen = true;\n index += 2;\n } else if (token === \"NX\") {\n if (xxSeen) return undefined;\n payload.nx = true;\n nxSeen = true;\n index += 1;\n } else if (token === \"XX\") {\n if (nxSeen) return undefined;\n payload.xx = true;\n xxSeen = true;\n index += 1;\n } else if (token === \"GET\") {\n payload.get = true;\n index += 1;\n } else if (token === \"KEEPTTL\") {\n if (expirySeen) return undefined;\n payload.keepttl = true;\n expirySeen = true;\n index += 1;\n } else {\n return undefined;\n }\n }\n return payload;\n}\n\nexport function typedKeyValuePairs(args: readonly CommandArgument[]): unknown[][] | undefined {\n if (args.length % 2 !== 0) throw new FerricStoreError(\"MSET requires key/value pairs\");\n const result = new Array<unknown[]>(args.length / 2);\n for (let index = 0; index < args.length; index += 2) {\n if (!isBinaryCommandArgument(args[index]) || !isDirectKvValueArgument(args[index + 1])) {\n return undefined;\n }\n result[index / 2] = [args[index], args[index + 1]];\n }\n return result;\n}\n\nfunction compareAndSwapCommand(args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (!isBinaryCommandArgument(args[0]) || (args.length !== 3 && args.length !== 5)) return undefined;\n const payload: Record<string, unknown> = { expected: args[1], key: args[0], value: args[2] };\n if (args.length === 5) {\n if (binaryToken(args[3]) !== \"EX\") return undefined;\n const seconds = positiveSafeInteger(args[4]);\n if (seconds == null || seconds > Math.floor(Number.MAX_SAFE_INTEGER / 1_000)) return undefined;\n payload.ttl = seconds * 1_000;\n }\n return { opcode: COMMAND_OPCODES.CAS, payload };\n}\n\nfunction lockCommand(opcode: number, args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (args.length !== 3 || !isBinaryCommandArgument(args[0]) || !isBinaryCommandArgument(args[1])) return undefined;\n const ttlMs = positiveSafeInteger(args[2]);\n return ttlMs == null ? undefined : { opcode, payload: { key: args[0], owner: args[1], ttl_ms: ttlMs } };\n}\n\nfunction rateLimitCommand(args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (!isBinaryCommandArgument(args[0]) || (args.length !== 3 && args.length !== 4)) return undefined;\n const windowMs = positiveSafeInteger(args[1]);\n const max = positiveSafeInteger(args[2]);\n const count = args.length === 4 ? positiveSafeInteger(args[3]) : undefined;\n if (windowMs == null || max == null || (args.length === 4 && count == null)) return undefined;\n return {\n opcode: COMMAND_OPCODES[\"RATELIMIT.ADD\"],\n payload: { ...(count == null ? {} : { count }), key: args[0], max, window_ms: windowMs }\n };\n}\n\nfunction fetchOrComputeCommand(args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (!isBinaryCommandArgument(args[0]) || (args.length !== 2 && args.length !== 3)) return undefined;\n const ttlMs = positiveSafeInteger(args[1]);\n if (ttlMs == null || (args.length === 3 && !isBinaryCommandArgument(args[2]))) return undefined;\n return {\n opcode: COMMAND_OPCODES.FETCH_OR_COMPUTE,\n payload: { ...(args.length === 3 ? { hint: args[2] } : {}), key: args[0], ttl_ms: ttlMs },\n serverBlockMs: ttlMs\n };\n}\n\nfunction fetchOrComputeResultCommand(args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (args.length !== 4 || !isBinaryCommandArgument(args[0]) || !isBinaryCommandArgument(args[1])) {\n throw new FerricStoreError(\"FETCH_OR_COMPUTE_RESULT requires key, ownership token, value, and ttl_ms\");\n }\n const ttlMs = positiveSafeInteger(args[3]);\n if (ttlMs == null) throw new FerricStoreError(\"FETCH_OR_COMPUTE_RESULT ttl_ms must be positive\");\n return {\n opcode: COMMAND_OPCODES.FETCH_OR_COMPUTE_RESULT,\n payload: { key: args[0], token: args[1], ttl_ms: ttlMs, value: args[2] }\n };\n}\n\nfunction fetchOrComputeErrorCommand(args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (\n args.length !== 3 ||\n !isBinaryCommandArgument(args[0]) ||\n !isBinaryCommandArgument(args[1]) ||\n !isBinaryCommandArgument(args[2])\n ) {\n throw new FerricStoreError(\"FETCH_OR_COMPUTE_ERROR requires key, ownership token, and message\");\n }\n return {\n opcode: COMMAND_OPCODES.FETCH_OR_COMPUTE_ERROR,\n payload: { key: args[0], message: args[2], token: args[1] }\n };\n}\n\nfunction hashSetCommand(args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (!isBinaryCommandArgument(args[0]) || args.length < 3 || args.length % 2 !== 1) return undefined;\n const fields = Object.create(null) as Record<string, CommandArgument>;\n for (let index = 1; index < args.length; index += 2) {\n const field = args[index];\n const value = args[index + 1];\n // Native map keys are textual. Binary fields stay on COMMAND_EXEC so\n // arbitrary bytes cannot be changed by UTF-8 coercion.\n if (typeof field !== \"string\" || !isBinaryCommandArgument(value)) return undefined;\n setOwnValue(fields, field, value);\n }\n return { opcode: COMMAND_OPCODES.HSET, payload: { fields, key: args[0] } };\n}\n\nfunction keyOnlyCommand(opcode: number, args: readonly CommandArgument[]): ProtocolCommand | undefined {\n return args.length === 1 && isBinaryCommandArgument(args[0])\n ? { opcode, payload: { key: args[0] } }\n : undefined;\n}\n\nfunction binaryFieldsCommand(\n opcode: number,\n args: readonly CommandArgument[],\n field: \"field\" | \"member\" | \"owner\",\n length: number\n): ProtocolCommand | undefined {\n if (\n args.length !== length ||\n !isBinaryCommandArgument(args[0]) ||\n !isBinaryCommandArgument(args[1])\n ) return undefined;\n return { opcode, payload: { [field]: args[1], key: args[0] } };\n}\n\nfunction binaryListCommand(\n opcode: number,\n args: readonly CommandArgument[],\n field: \"fields\" | \"members\" | \"values\"\n): ProtocolCommand | undefined {\n if (!isBinaryCommandArgument(args[0]) || args.length < 2) return undefined;\n const values = args.slice(1);\n if (!values.every(isBinaryCommandArgument)) return undefined;\n return { opcode, payload: { [field]: values, key: args[0] } };\n}\n\nfunction listPopCommand(opcode: number, args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (!isBinaryCommandArgument(args[0]) || (args.length !== 1 && args.length !== 2)) return undefined;\n if (args.length === 1) return { opcode, payload: { key: args[0] } };\n const count = parsedInteger(args[1]);\n if (count == null || count <= 0 || count === 1) return undefined;\n return { opcode, payload: { count, key: args[0] } };\n}\n\nfunction rangeCommand(\n opcode: number,\n args: readonly CommandArgument[],\n allowWithScores: boolean\n): ProtocolCommand | undefined {\n if (!isBinaryCommandArgument(args[0]) || (args.length !== 3 && (!allowWithScores || args.length !== 4))) {\n return undefined;\n }\n const start = parsedInteger(args[1]);\n const stop = parsedInteger(args[2]);\n if (start == null || stop == null) return undefined;\n if (args.length === 4 && binaryToken(args[3]) !== \"WITHSCORES\") return undefined;\n return {\n opcode,\n payload: {\n key: args[0],\n start,\n stop,\n ...(args.length === 4 ? { withscores: true } : {})\n }\n };\n}\n\nfunction sortedSetAddCommand(args: readonly CommandArgument[]): ProtocolCommand | undefined {\n if (!isBinaryCommandArgument(args[0]) || args.length < 3 || args.length % 2 !== 1) return undefined;\n const items: [number, string | Buffer][] = [];\n for (let index = 1; index < args.length; index += 2) {\n const score = parsedNumber(args[index]);\n const member = args[index + 1];\n if (score == null || !isBinaryCommandArgument(member)) return undefined;\n items.push([score, member]);\n }\n return { opcode: COMMAND_OPCODES.ZADD, payload: { items, key: args[0] } };\n}\n\nfunction parsedInteger(value: CommandArgument): number | undefined {\n try {\n const parsed = integerArg(value);\n return typeof parsed === \"number\" ? parsed : undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction positiveSafeInteger(value: CommandArgument): number | undefined {\n const parsed = parsedInteger(value);\n return parsed != null && parsed > 0 ? parsed : undefined;\n}\n\nfunction parsedNumber(value: CommandArgument): number | undefined {\n try {\n return numberArg(value);\n } catch {\n return undefined;\n }\n}\n\nexport function isBinaryCommandArgument(value: unknown): value is string | Buffer {\n return typeof value === \"string\" || Buffer.isBuffer(value);\n}\n\nfunction isDirectKvValueArgument(value: unknown): boolean {\n return isBinaryCommandArgument(value) || (typeof value === \"object\" && value != null);\n}\n\nfunction binaryToken(value: unknown): string | undefined {\n return typeof value === \"string\"\n ? value.toUpperCase()\n : Buffer.isBuffer(value)\n ? value.toString(\"utf8\").toUpperCase()\n : undefined;\n}\n","import { Buffer } from \"node:buffer\";\nimport { FerricStoreError } from \"./errors.js\";\nimport {\n binaryValueByteLength,\n requestFrameTooLarge,\n setOwnValue\n} from \"./protocol-core.js\";\nimport * as wire from \"./protocol-constants.js\";\n\nexport function encodeValue(value: unknown): Buffer {\n return encodeValueWithLimit(value, Number.MAX_SAFE_INTEGER);\n}\n\nfunction encodeValueWithLimit(value: unknown, maxBytes: number): Buffer {\n const plan = planValueWithLimit(value, maxBytes);\n const output = Buffer.allocUnsafe(plan.byteLength);\n writeValuePlan(output, 0, plan);\n return output;\n}\n\nexport function planValueWithLimit(value: unknown, maxBytes: number): wire.EncodeValuePlan {\n const budget: wire.EncodeValueBudget = {\n maxBytes,\n remainingBytes: maxBytes,\n remainingItems: wire.DEFAULT_MAX_VALUE_ITEMS\n };\n return planValueAt(value, budget, [], 0);\n}\n\nfunction planValueAt(\n value: unknown,\n budget: wire.EncodeValueBudget,\n ancestors: object[],\n depth: number\n): wire.EncodeValuePlan {\n return isProtocolContainer(value)\n ? planContainerValue(value, budget, ancestors, depth)\n : planScalarValue(value, budget);\n}\n\nfunction planContainerValue(\n value: readonly unknown[] | Record<string, unknown>,\n budget: wire.EncodeValueBudget,\n ancestors: object[],\n depth: number\n): wire.EncodeValuePlan {\n if (ancestors.includes(value)) {\n throw new FerricStoreError(\"native protocol value contains a circular reference\");\n }\n if (depth >= wire.DEFAULT_MAX_VALUE_DEPTH) {\n throw new FerricStoreError(\"native protocol value nesting exceeds max depth\");\n }\n\n const arrayValue: readonly unknown[] | undefined = Array.isArray(value) ? value : undefined;\n const entries = arrayValue == null ? Object.entries(value) : undefined;\n const count = arrayValue?.length ?? entries?.length ?? 0;\n if (count > wire.DEFAULT_MAX_VALUE_ITEMS) {\n throw new FerricStoreError(\"native protocol value container exceeds max items\");\n }\n if (count > budget.remainingItems) {\n throw new FerricStoreError(\"native protocol value total items exceed max items\");\n }\n budget.remainingItems -= count;\n consumeEncodeBytes(budget, 5);\n if (arrayValue != null && count > budget.remainingBytes) {\n throw requestFrameTooLarge(budget.maxBytes);\n }\n ancestors.push(value);\n try {\n if (arrayValue != null) {\n const items = new Array<wire.EncodeValuePlan>(arrayValue.length);\n let byteLength = 5;\n for (let index = 0; index < arrayValue.length; index += 1) {\n if (!Object.hasOwn(arrayValue, index)) {\n throw new FerricStoreError(\"native protocol value arrays must be dense\");\n }\n const item = planValueAt(arrayValue[index], budget, ancestors, depth + 1);\n items[index] = item;\n byteLength += item.byteLength;\n }\n return { byteLength, items, tag: 5 };\n }\n if (entries == null) {\n throw new FerricStoreError(\"native protocol value container could not be encoded\");\n }\n\n const entryPlans = new Array<wire.EncodeMapEntryPlan>(entries.length);\n let byteLength = 5;\n let index = 0;\n for (const [key, item] of entries) {\n const keyByteLength = Buffer.byteLength(key);\n consumeEncodeBytes(budget, 4 + keyByteLength);\n const valuePlan = planValueAt(item, budget, ancestors, depth + 1);\n entryPlans[index] = { key, keyByteLength, value: valuePlan };\n byteLength += 4 + keyByteLength + valuePlan.byteLength;\n index += 1;\n }\n return { byteLength, entries: entryPlans, tag: 6 };\n } finally {\n ancestors.pop();\n }\n}\n\nfunction isProtocolContainer(value: unknown): value is readonly unknown[] | Record<string, unknown> {\n if (Array.isArray(value)) return true;\n if (typeof value !== \"object\" || value == null) return false;\n const prototype = Object.getPrototypeOf(value) as object | null;\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction planScalarValue(value: unknown, budget: wire.EncodeValueBudget): wire.EncodeValuePlan {\n if (value == null) {\n consumeEncodeBytes(budget, 1);\n return { byteLength: 1, tag: 0 };\n }\n if (value === true) {\n consumeEncodeBytes(budget, 1);\n return { byteLength: 1, tag: 1 };\n }\n if (value === false) {\n consumeEncodeBytes(budget, 1);\n return { byteLength: 1, tag: 2 };\n }\n if (typeof value === \"number\" && Number.isInteger(value) && !Object.is(value, -0)) {\n if (!Number.isSafeInteger(value)) {\n throw new FerricStoreError(\"unsafe integer number; use bigint for exact native encoding\");\n }\n consumeEncodeBytes(budget, 9);\n return { byteLength: 9, tag: 3, value: BigInt(value) };\n }\n if (typeof value === \"bigint\") {\n if (value < wire.MIN_I64 || value > wire.MAX_I64) {\n throw new FerricStoreError(\"integer exceeds the signed 64-bit native range\");\n }\n consumeEncodeBytes(budget, 9);\n return { byteLength: 9, tag: 3, value };\n }\n if (typeof value === \"number\") {\n consumeEncodeBytes(budget, 9);\n return { byteLength: 9, tag: 7, value };\n }\n if (typeof value === \"string\" || Buffer.isBuffer(value) || value instanceof Uint8Array) {\n const valueByteLength = binaryValueByteLength(value);\n const byteLength = 5 + valueByteLength;\n consumeEncodeBytes(budget, byteLength);\n return { byteLength, tag: 4, value, valueByteLength };\n }\n throw new FerricStoreError(`unsupported native protocol value type: ${typeof value}`);\n}\n\nexport function writeValuePlan(output: Buffer, start: number, plan: wire.EncodeValuePlan): number {\n output.writeUInt8(plan.tag, start);\n let offset = start + 1;\n switch (plan.tag) {\n case 0:\n case 1:\n case 2:\n return offset;\n case 3:\n output.writeBigInt64BE(plan.value, offset);\n return offset + 8;\n case 4:\n output.writeUInt32BE(plan.valueByteLength, offset);\n offset += 4;\n if (typeof plan.value === \"string\") {\n output.write(plan.value, offset, plan.valueByteLength, \"utf8\");\n } else if (Buffer.isBuffer(plan.value)) {\n plan.value.copy(output, offset);\n } else {\n output.set(plan.value, offset);\n }\n return offset + plan.valueByteLength;\n case 5:\n output.writeUInt32BE(plan.items.length, offset);\n offset += 4;\n for (const item of plan.items) offset = writeValuePlan(output, offset, item);\n return offset;\n case 6:\n output.writeUInt32BE(plan.entries.length, offset);\n offset += 4;\n for (const entry of plan.entries) {\n output.writeUInt32BE(entry.keyByteLength, offset);\n offset += 4;\n output.write(entry.key, offset, entry.keyByteLength, \"utf8\");\n offset += entry.keyByteLength;\n offset = writeValuePlan(output, offset, entry.value);\n }\n return offset;\n case 7:\n output.writeDoubleBE(plan.value, offset);\n return offset + 8;\n }\n}\n\nfunction consumeEncodeBytes(budget: wire.EncodeValueBudget, bytes: number): void {\n if (bytes > budget.remainingBytes) {\n throw requestFrameTooLarge(budget.maxBytes);\n }\n budget.remainingBytes -= bytes;\n}\n\nexport function decodeValue(\n data: Buffer,\n offset = 0,\n options: wire.DecodeValueOptions = {}\n): { readonly value: unknown; readonly offset: number } {\n const limits = {\n maxDepth: normalizeDecodeLimit(options.maxDepth, wire.DEFAULT_MAX_VALUE_DEPTH),\n maxItems: normalizeDecodeLimit(options.maxItems, wire.DEFAULT_MAX_VALUE_ITEMS)\n };\n return decodeValueAt(data, offset, limits, { remainingItems: limits.maxItems }, 0);\n}\n\nfunction decodeValueAt(\n data: Buffer,\n offset: number,\n limits: wire.DecodeValueLimits,\n budget: wire.DecodeValueBudget,\n depth: number\n): { readonly value: unknown; readonly offset: number } {\n requireAvailable(data, offset, 1);\n const tag = data.readUInt8(offset);\n offset += 1;\n if (tag === 0) return { value: null, offset };\n if (tag === 1) return { value: true, offset };\n if (tag === 2) return { value: false, offset };\n if (tag === 3) {\n requireAvailable(data, offset, 8);\n const integer = data.readBigInt64BE(offset);\n return {\n value:\n integer <= wire.MAX_SAFE_INTEGER_BIGINT && integer >= wire.MIN_SAFE_INTEGER_BIGINT\n ? Number(integer)\n : integer,\n offset: offset + 8\n };\n }\n if (tag === 4) {\n const read = readBinary(data, offset);\n return { value: read.value, offset: read.offset };\n }\n if (tag === 5) {\n requireAvailable(data, offset, 4);\n const count = data.readUInt32BE(offset);\n requireValueContainer(count, depth, limits, budget);\n offset += 4;\n const values: unknown[] = [];\n for (let index = 0; index < count; index += 1) {\n const read = decodeValueAt(data, offset, limits, budget, depth + 1);\n values.push(read.value);\n offset = read.offset;\n }\n return { value: values, offset };\n }\n if (tag === 6) {\n requireAvailable(data, offset, 4);\n const count = data.readUInt32BE(offset);\n requireValueContainer(count, depth, limits, budget);\n offset += 4;\n const value: Record<string, unknown> = {};\n for (let index = 0; index < count; index += 1) {\n const key = readBinary(data, offset);\n offset = key.offset;\n const item = decodeValueAt(data, offset, limits, budget, depth + 1);\n setOwnValue(value, key.value.toString(\"utf8\"), item.value);\n offset = item.offset;\n }\n return { value, offset };\n }\n if (tag === 7) {\n requireAvailable(data, offset, 8);\n return { value: data.readDoubleBE(offset), offset: offset + 8 };\n }\n throw new FerricStoreError(`unknown protocol value tag ${tag}`);\n}\n\nexport function decodeValueWithBudget(\n data: Buffer,\n offset: number,\n budget: wire.DecodeValueBudget\n): { readonly value: unknown; readonly offset: number } {\n return decodeValueAt(data, offset, {\n maxDepth: wire.DEFAULT_MAX_VALUE_DEPTH,\n maxItems: wire.DEFAULT_MAX_VALUE_ITEMS\n }, budget, 0);\n}\n\nexport function readBinary(data: Buffer, offset: number): { readonly value: Buffer; readonly offset: number } {\n requireAvailable(data, offset, 4);\n const size = data.readUInt32BE(offset);\n offset += 4;\n if (size === wire.NULL_U32) {\n throw new FerricStoreError(\"invalid null binary length\");\n }\n requireAvailable(data, offset, size);\n return { value: data.subarray(offset, offset + size), offset: offset + size };\n}\n\nexport function normalizeDecodeLimit(value: number | undefined, fallback: number): number {\n return value == null || !Number.isFinite(value) ? fallback : Math.max(0, Math.trunc(value));\n}\n\nfunction requireValueContainer(\n count: number,\n depth: number,\n limits: wire.DecodeValueLimits,\n budget: wire.DecodeValueBudget\n): void {\n if (depth >= limits.maxDepth) {\n throw new FerricStoreError(\"native protocol value nesting exceeds max depth\");\n }\n if (count > limits.maxItems) {\n throw new FerricStoreError(\"native protocol value container exceeds max items\");\n }\n consumeDecodeItems(count, budget);\n}\n\nexport function consumeDecodeItems(count: number, budget: wire.DecodeValueBudget): void {\n if (count > budget.remainingItems) {\n throw new FerricStoreError(\"native protocol value total items exceed max items\");\n }\n budget.remainingItems -= count;\n}\n\nexport function requireAvailable(data: Buffer, offset: number, size: number): void {\n if (offset < 0 || size < 0 || data.byteLength - offset < size) {\n throw new FerricStoreError(\"native protocol value is truncated\", { raw: data });\n }\n}\n","import { Buffer } from \"node:buffer\";\nimport type { CommandArgument } from \"./internal.js\";\nimport { routingSlotForKey } from \"./topology-utilities.js\";\n\nconst validatedCommands = new WeakSet<readonly CommandArgument[]>();\n\nexport function assertAtomicKeyValueCommandSharesSlot(args: readonly CommandArgument[]): void {\n const value = args[0];\n const command = (typeof value === \"string\"\n ? value\n : Buffer.isBuffer(value)\n ? value.toString(\"utf8\")\n : \"\").toUpperCase();\n if (command === \"MSET\" || command === \"MSETNX\") {\n assertKeyValueCommandSharesSlot(args, command);\n }\n}\n\n/** Validate MSET-family keys in one pass without inspecting or copying values. */\nexport function assertKeyValueCommandSharesSlot(\n args: readonly CommandArgument[],\n command: \"MSET\" | \"MSETNX\"\n): void {\n if (validatedCommands.has(args) || args.length < 3 || args.length % 2 === 0) return;\n let expectedSlot: number | undefined;\n for (let index = 1; index < args.length; index += 2) {\n const key = args[index];\n if (typeof key !== \"string\" && !Buffer.isBuffer(key)) return;\n const slot = routingSlotForKey(key);\n expectedSlot ??= slot;\n if (slot !== expectedSlot) {\n throw new TypeError(`${command} keys must share a slot`);\n }\n }\n validatedCommands.add(args);\n}\n","import { Buffer } from \"node:buffer\";\nimport { crc32, crc32Utf8 } from \"./crc32.js\";\nimport { FerricStoreError } from \"./errors.js\";\nimport { normalizeFerricUrlHost } from \"./internal.js\";\nimport type { NativeProtocolEvent } from \"./adapters.js\";\nexport { crc32, crc32Utf8 } from \"./crc32.js\";\n\nexport interface RoutingEndpoint {\n readonly node: string;\n readonly host: string;\n readonly nativePort: number;\n readonly nativeTlsPort?: number;\n}\n\nexport interface ParsedFerricUrl {\n readonly host: string;\n readonly password?: string;\n readonly port: number;\n readonly tls: boolean;\n readonly username?: string;\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value != null && !Array.isArray(value) && !Buffer.isBuffer(value);\n}\n\nexport function getField(source: unknown, ...keys: string[]): unknown {\n if (source instanceof Map) {\n for (const key of keys) {\n if (source.has(key)) return source.get(key);\n const bufferKey = Buffer.from(key);\n for (const [itemKey, value] of source.entries()) {\n if (Buffer.isBuffer(itemKey) && itemKey.equals(bufferKey)) return value;\n }\n }\n return undefined;\n }\n if (isPlainObject(source)) {\n for (const key of keys) {\n if (Object.hasOwn(source, key)) return source[key];\n }\n }\n return undefined;\n}\n\nexport function textOrUndefined(value: unknown): string | undefined {\n if (typeof value === \"string\") return value;\n if (Buffer.isBuffer(value)) return value.toString(\"utf8\");\n return undefined;\n}\n\nexport function numberOrUndefined(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isSafeInteger(value) ? value : undefined;\n}\n\nexport function nativeEventName(event: NativeProtocolEvent): string | undefined {\n return textOrUndefined(getField(event.value, \"event\"))?.toUpperCase();\n}\n\nexport function endpointFromRange(item: unknown): RoutingEndpoint {\n const endpointValue = getField(item, \"endpoint\");\n if (endpointValue != null && !isPlainObject(endpointValue) && !(endpointValue instanceof Map)) {\n throw new FerricStoreError(\"invalid SHARDS endpoint\", { raw: item });\n }\n const raw = endpointValue ?? item;\n const host = textOrUndefined(getField(raw, \"host\", \"native_host\"));\n const nativePort = numberOrUndefined(getField(raw, \"native_port\"));\n if (host == null || !validEndpointHost(host) || nativePort == null || nativePort <= 0 || nativePort > 65_535) {\n throw new FerricStoreError(\"invalid SHARDS endpoint\", { raw: item });\n }\n const nativeTlsPortValue = getField(raw, \"native_tls_port\");\n const nativeTlsPort = numberOrUndefined(nativeTlsPortValue);\n if (nativeTlsPortValue != null && (nativeTlsPort == null || nativeTlsPort <= 0 || nativeTlsPort > 65_535)) {\n throw new FerricStoreError(\"invalid SHARDS endpoint\", { raw: item });\n }\n return {\n host,\n nativePort,\n node: textOrUndefined(getField(raw, \"node\", \"leader_node\", \"owner_node\")) ?? host,\n ...(nativeTlsPort == null ? {} : { nativeTlsPort })\n };\n}\n\nfunction validEndpointHost(host: string): boolean {\n if (host.length === 0 || host.trim() !== host || /[\\s\\\\/?#@]/u.test(host)) return false;\n const authorityHost = host.includes(\":\") && !host.startsWith(\"[\") ? `[${host}]` : host;\n try {\n const url = new URL(`ferric://${authorityHost}:6388`);\n return url.hostname !== \"\" && url.port === \"6388\" && url.username === \"\" && url.password === \"\";\n } catch {\n return false;\n }\n}\n\nexport function sameEndpoint(left: RoutingEndpoint, right: RoutingEndpoint): boolean {\n return normalizedEndpointHost(left.host) === normalizedEndpointHost(right.host) &&\n left.nativePort === right.nativePort &&\n left.nativeTlsPort === right.nativeTlsPort &&\n left.node === right.node;\n}\n\nexport function parseFerricUrl(value: string): ParsedFerricUrl {\n const url = new URL(value);\n if (url.protocol !== \"ferric:\" && url.protocol !== \"ferrics:\") {\n throw new FerricStoreError(`unsupported FerricStore URL scheme: ${url.protocol}`);\n }\n return {\n host: normalizeFerricUrlHost(url.hostname),\n ...(url.password === \"\" ? {} : { password: decodeURIComponent(url.password) }),\n port: Number(url.port || (url.protocol === \"ferrics:\" ? 6389 : 6388)),\n tls: url.protocol === \"ferrics:\",\n ...(url.username === \"\" ? {} : { username: decodeURIComponent(url.username) })\n };\n}\n\nexport function endpointKeyFor(endpoint: RoutingEndpoint): string {\n return `${normalizedEndpointHost(endpoint.host)}:${endpoint.nativePort}`;\n}\n\nexport function connectionKeyForEndpoint(endpoint: RoutingEndpoint, useTls: boolean): string {\n const port = useTls && endpoint.nativeTlsPort != null ? endpoint.nativeTlsPort : endpoint.nativePort;\n return `${useTls ? \"ferrics\" : \"ferric\"}://${normalizedEndpointHost(endpoint.host)}:${port}`;\n}\n\nexport function connectionKeyFromUrl(url: string): string {\n const parsed = parseFerricUrl(url);\n return `${parsed.tls ? \"ferrics\" : \"ferric\"}://${normalizedEndpointHost(parsed.host)}:${parsed.port}`;\n}\n\nexport function normalizedEndpointHost(host: string): string {\n const lower = host.toLowerCase();\n return lower.startsWith(\"[\") && lower.endsWith(\"]\") ? lower.slice(1, -1) : lower;\n}\n\nexport function urlFromEndpoint(endpoint: RoutingEndpoint, useTls: boolean): string {\n const port = useTls && endpoint.nativeTlsPort != null ? endpoint.nativeTlsPort : endpoint.nativePort;\n const host = endpoint.host.includes(\":\") && !endpoint.host.startsWith(\"[\") ? `[${endpoint.host}]` : endpoint.host;\n return `${useTls ? \"ferrics\" : \"ferric\"}://${host}:${port}`;\n}\n\nexport async function mapSettledWithConcurrency<T, R>(\n items: readonly T[],\n concurrency: number,\n operation: (item: T, index: number) => Promise<R>\n): Promise<PromiseSettledResult<R>[]> {\n const results = new Array<PromiseSettledResult<R>>(items.length);\n let nextIndex = 0;\n const worker = async (): Promise<void> => {\n while (nextIndex < items.length) {\n const index = nextIndex++;\n const item = items[index] as T;\n try {\n results[index] = { status: \"fulfilled\", value: await operation(item, index) };\n } catch (reason) {\n results[index] = { status: \"rejected\", reason };\n }\n }\n };\n await Promise.all(Array.from(\n { length: Math.min(concurrency, items.length) },\n async () => await worker()\n ));\n return results;\n}\n\nexport function throwFirstRejected(results: readonly PromiseSettledResult<unknown>[]): void {\n for (const result of results) {\n if (result.status === \"rejected\") throw result.reason;\n }\n}\n\nexport class TaskConcurrencyLimiter {\n private active = 0;\n private head = 0;\n private readonly pending: (() => void)[] = [];\n\n constructor(private readonly concurrency: number) {}\n\n async run<T>(operation: () => Promise<T>): Promise<T> {\n await this.acquire();\n try {\n return await operation();\n } finally {\n this.release();\n }\n }\n\n private acquire(): Promise<void> {\n if (this.active < this.concurrency) {\n this.active += 1;\n return Promise.resolve();\n }\n return new Promise<void>((resolve) => this.pending.push(resolve));\n }\n\n private release(): void {\n const next = this.pending[this.head];\n if (next == null) {\n this.active -= 1;\n return;\n }\n this.head += 1;\n next();\n if (this.head === this.pending.length) {\n this.pending.length = 0;\n this.head = 0;\n } else if (this.head >= 1_024 && this.head * 2 >= this.pending.length) {\n this.pending.splice(0, this.head);\n this.head = 0;\n }\n }\n}\n\nexport function normalizedHostSet(hosts: readonly (string | undefined)[]): ReadonlySet<string> {\n return new Set(\n hosts\n .filter((host): host is string => host != null && host !== \"\")\n .map((host) => normalizedEndpointHost(host))\n );\n}\n\nexport function bufferStartsWith(value: Buffer, prefix: Buffer): boolean {\n return value.byteLength >= prefix.byteLength && value.subarray(0, prefix.byteLength).equals(prefix);\n}\n\nconst OPEN_BRACE = \"{\".charCodeAt(0);\nconst CLOSE_BRACE = \"}\".charCodeAt(0);\n\nexport function hashTagOrKey(key: Buffer): Buffer {\n const start = key.indexOf(OPEN_BRACE);\n if (start < 0) return key;\n const end = key.indexOf(CLOSE_BRACE, start + 1);\n return end > start + 1 ? key.subarray(start + 1, end) : key;\n}\n\nconst ROUTE_SLOT_MASK = 1_023;\n\nexport function routingSlotForKey(key: string | Buffer): number {\n if (typeof key === \"string\") {\n const [start, end] = stringHashRange(key);\n return crc32Utf8(key, start, end) & ROUTE_SLOT_MASK;\n }\n const keyBytes = key;\n return crc32(hashTagOrKey(keyBytes)) & ROUTE_SLOT_MASK;\n}\n\nfunction stringHashRange(key: string): readonly [number, number] {\n const startBrace = key.indexOf(\"{\");\n const endBrace = startBrace < 0 ? -1 : key.indexOf(\"}\", startBrace + 1);\n return endBrace > startBrace + 1 ? [startBrace + 1, endBrace] : [0, key.length];\n}\n","import { Buffer } from \"node:buffer\";\nimport { FerricStoreError, classifyServerError } from \"./errors.js\";\nimport { asText } from \"./protocol-core.js\";\nimport * as wire from \"./protocol-constants.js\";\nimport { tryDecodeCompactResponse } from \"./protocol-compact-response.js\";\nimport { decodeValue } from \"./protocol-value.js\";\n\nexport function decodeResponse(\n frame: wire.ResponseFrame,\n expectedOpcode: number,\n hints: wire.ResponseDecodeHints = {}\n): unknown {\n if (frame.opcode !== expectedOpcode) {\n throw new FerricStoreError(\n `protocol response mismatch: expected opcode ${expectedOpcode}, got ${frame.opcode}`,\n { raw: frame }\n );\n }\n if ((frame.flags & wire.FLAG_COMPRESSED) !== 0) {\n throw new FerricStoreError(\"compressed native protocol responses are not supported by this SDK yet\");\n }\n if (frame.body.byteLength < 2) {\n throw new FerricStoreError(\"short native protocol response body\", { raw: frame.body });\n }\n const status = frame.body.readUInt16BE(0);\n const body = frame.body.subarray(2);\n const value = decodeResponseValue(frame.opcode, body, hints);\n if (status === wire.STATUS_OK) return value;\n const message = errorMessage(status, value);\n throw classifyServerError(message, value, undefined, status);\n}\n\nexport function unwrapPipelineResponse(\n value: unknown,\n options: { readonly throwOnItemError?: boolean } = {},\n expectedItems?: number\n): unknown[] {\n if (!Array.isArray(value)) {\n throw new FerricStoreError(\"native pipeline returned an invalid response\");\n }\n const items = value as unknown[];\n if (expectedItems != null && items.length !== expectedItems) {\n throw new FerricStoreError(\n `native pipeline returned ${items.length} items; expected ${expectedItems} items`\n );\n }\n\n if ((items as unknown as Record<symbol, unknown>)[wire.COMPACT_PIPELINE_DECODED] === true) {\n if (options.throwOnItemError !== false) {\n for (const item of items) if (item instanceof Error) throw item;\n }\n return items;\n }\n\n let hasStatusTuple = false;\n for (const item of items) {\n if (Array.isArray(item) && item.length >= 2 && pipelineStatus(item[0]) != null) {\n hasStatusTuple = true;\n break;\n }\n }\n if (!hasStatusTuple) return items;\n\n const out = new Array<unknown>(items.length);\n for (let index = 0; index < items.length; index += 1) {\n const item = items[index];\n if (Array.isArray(item) && item.length >= 2) {\n const status = pipelineStatus(item[0]);\n if (status != null) {\n const payload: unknown = item[1];\n if (status === \"ok\") {\n out[index] = payload;\n continue;\n }\n const error = classifyServerError(\n errorMessage(status === \"busy\" ? 4 : 1, payload),\n payload,\n undefined,\n status\n );\n if (options.throwOnItemError !== false) throw error;\n out[index] = error;\n continue;\n }\n }\n out[index] = item;\n }\n return out;\n}\n\nfunction pipelineStatus(value: unknown): \"busy\" | \"error\" | \"ok\" | null {\n if (typeof value !== \"string\" && !Buffer.isBuffer(value) && !(value instanceof Uint8Array)) return null;\n const status = asText(value).toLowerCase();\n return status === \"ok\" || status === \"busy\" || status === \"error\" ? status : null;\n}\n\nfunction decodeResponseValue(opcode: number, body: Buffer, hints: wire.ResponseDecodeHints): unknown {\n const compact = tryDecodeCompactResponse(opcode, body, hints);\n if (compact.found) return compact.value;\n const decoded = decodeValue(body);\n if (decoded.offset !== body.byteLength) {\n throw new FerricStoreError(\"native protocol response has trailing bytes\", { raw: body });\n }\n return decoded.value;\n}\n\nfunction errorMessage(status: number | string, value: unknown): string {\n if (typeof value === \"string\") return value;\n if (Buffer.isBuffer(value)) return value.toString(\"utf8\");\n if (typeof value === \"object\" && value != null && Object.hasOwn(value, \"message\")) {\n const message = (value as Record<string, unknown>).message;\n return typeof message === \"string\" ? message : String(message);\n }\n return `ERR native request failed status=${status}: ${String(value)}`;\n}\n","import { Buffer } from \"node:buffer\";\nimport { FerricStoreError, classifyServerError } from \"./errors.js\";\nimport { compactResponseOpcodeSupports } from \"./native-negotiation.js\";\nimport {\n decodeCompactBinaryListList,\n decodeCompactBinaryMapList,\n decodeCompactIntegerList,\n markCompactPipelineDecoded,\n readCompactBinaryList,\n readCompactBinaryMap\n} from \"./protocol-compact-collections.js\";\nimport * as wire from \"./protocol-constants.js\";\nimport { setOwnValue } from \"./protocol-core.js\";\nimport {\n consumeDecodeItems,\n decodeValueWithBudget,\n readBinary,\n requireAvailable\n} from \"./protocol-value.js\";\n\nexport function tryDecodeCompactResponse(\n opcode: number,\n body: Buffer,\n hints: wire.ResponseDecodeHints\n): { readonly found: boolean; readonly value: unknown } {\n if (body.byteLength === 0) return { found: false, value: undefined };\n const budget: wire.DecodeValueBudget = { remainingItems: wire.DEFAULT_MAX_VALUE_ITEMS };\n const tag = body.readUInt8(0);\n const pipelineValues = opcode === wire.OPCODES.pipeline && supports(hints, \"pipeline_v1\", opcode);\n if (tag === wire.COMPACT_OK_LIST && (supports(hints, \"ok_list_v1\", opcode) || pipelineValues)) {\n const values = decodeCompactOkList(body, budget);\n return {\n found: true,\n value: opcode === wire.OPCODES.pipeline\n ? markCompactPipelineDecoded(values)\n : values.length === 1 ? \"OK\" : values\n };\n }\n if (tag === wire.COMPACT_KV_GET && supports(hints, \"kv_get_v1\", opcode)) {\n return { found: true, value: decodeCompactKvGet(body) };\n }\n if (\n (tag === wire.COMPACT_KV_MGET || tag === wire.COMPACT_KV_MGET_FIXED) &&\n (supports(hints, \"kv_mget_v1\", opcode) || pipelineValues)\n ) {\n const values = tag === wire.COMPACT_KV_MGET\n ? decodeCompactMget(body, budget)\n : decodeCompactMgetFixed(body, budget);\n return {\n found: true,\n value: opcode === wire.OPCODES.pipeline ? markCompactPipelineDecoded(values) : values\n };\n }\n if (tag === wire.COMPACT_INTEGER_LIST && pipelineValues) {\n return { found: true, value: markCompactPipelineDecoded(decodeCompactIntegerList(body, budget)) };\n }\n if (tag === wire.COMPACT_BINARY_LIST_LIST && pipelineValues) {\n return { found: true, value: markCompactPipelineDecoded(decodeCompactBinaryListList(body, budget)) };\n }\n if (tag === wire.COMPACT_BINARY_MAP_LIST && pipelineValues) {\n return { found: true, value: markCompactPipelineDecoded(decodeCompactBinaryMapList(body, budget)) };\n }\n if (tag === wire.COMPACT_PIPELINE_RESPONSE && pipelineValues) {\n return { found: true, value: decodeCompactPipeline(body, budget, hints.pipelineClaimModes) };\n }\n if (\n tag === wire.COMPACT_FLOW_CLAIM_JOBS &&\n (supports(hints, \"flow_claim_jobs_v1\", opcode) || pipelineValues)\n ) {\n const values = decodeCompactClaimJobs(body, budget, hints.compactClaimMode);\n return {\n found: true,\n value: opcode === wire.OPCODES.pipeline ? markCompactPipelineDecoded(values) : values\n };\n }\n if (tag === wire.COMPACT_FLOW_RECORD && supports(hints, \"flow_record_v1\", opcode)) {\n const read = readCompactFlowRecord(body, 0, budget);\n if (read.offset !== body.byteLength) throw new FerricStoreError(\"trailing compact Flow record bytes\");\n return { found: true, value: read.value };\n }\n if (\n tag === wire.COMPACT_FLOW_RECORD_LIST &&\n (supports(hints, \"flow_record_list_v1\", opcode) || pipelineValues)\n ) {\n const read = readCompactFlowRecordList(body, 0, budget);\n if (read.offset !== body.byteLength) throw new FerricStoreError(\"trailing compact Flow record list bytes\");\n return {\n found: true,\n value: opcode === wire.OPCODES.pipeline ? markCompactPipelineDecoded(read.value) : read.value\n };\n }\n return { found: false, value: undefined };\n}\n\nfunction supports(hints: wire.ResponseDecodeHints, codec: string, opcode: number): boolean {\n return compactResponseOpcodeSupports(hints.compactResponseOpcodes, codec, opcode);\n}\n\nfunction decodeCompactOkList(data: Buffer, budget: wire.DecodeValueBudget): Buffer[] {\n requireAvailable(data, 0, 5);\n const count = data.readUInt32BE(1);\n requireCompactContainer(count, budget);\n if (data.byteLength !== 5) throw new FerricStoreError(\"invalid compact OK list response\");\n return Array.from({ length: count }, () => Buffer.from(\"OK\"));\n}\n\nfunction decodeCompactKvGet(data: Buffer): Buffer | null {\n requireAvailable(data, 0, 2);\n const present = data.readUInt8(1);\n if (present === 0) {\n if (data.byteLength !== 2) throw new FerricStoreError(\"trailing compact GET bytes\");\n return null;\n }\n if (present !== 1) throw new FerricStoreError(\"invalid compact GET response\");\n const read = readBinary(data, 2);\n if (read.offset !== data.byteLength) throw new FerricStoreError(\"trailing compact GET bytes\");\n return read.value;\n}\n\nfunction decodeCompactMget(data: Buffer, budget: wire.DecodeValueBudget): (Buffer | null)[] {\n requireAvailable(data, 0, 5);\n const count = data.readUInt32BE(1);\n requireCompactContainer(count, budget);\n let offset = 5;\n const values: (Buffer | null)[] = [];\n for (let index = 0; index < count; index += 1) {\n requireAvailable(data, offset, 1);\n const present = data.readUInt8(offset);\n offset += 1;\n if (present === 0) {\n values.push(null);\n } else if (present === 1) {\n const read = readBinary(data, offset);\n values.push(read.value);\n offset = read.offset;\n } else {\n throw new FerricStoreError(\"invalid compact MGET value marker\");\n }\n }\n if (offset !== data.byteLength) throw new FerricStoreError(\"trailing compact MGET bytes\");\n return values;\n}\n\nfunction decodeCompactMgetFixed(data: Buffer, budget: wire.DecodeValueBudget): Buffer[] {\n requireAvailable(data, 0, 9);\n const count = data.readUInt32BE(1);\n const size = data.readUInt32BE(5);\n requireCompactContainer(count, budget);\n const expected = 9 + count * size;\n if (size === wire.NULL_U32 || data.byteLength !== expected) {\n throw new FerricStoreError(\"invalid compact fixed MGET response\");\n }\n if (size === 0) return new Array<Buffer>(count).fill(Buffer.alloc(0));\n const values = new Array<Buffer>(count);\n for (let index = 0, offset = 9; index < count; index += 1, offset += size) {\n values[index] = data.subarray(offset, offset + size);\n }\n return values;\n}\n\nfunction decodeCompactPipeline(\n data: Buffer,\n budget: wire.DecodeValueBudget,\n claimModes: readonly (wire.CompactClaimMode | undefined)[] | undefined\n): unknown[] {\n requireAvailable(data, 0, 5);\n const count = data.readUInt32BE(1);\n requireCompactContainer(count, budget);\n if (count > Math.floor((data.byteLength - 5) / 2)) {\n throw new FerricStoreError(\"compact pipeline item count exceeds response bytes\");\n }\n let offset = 5;\n const values = new Array<unknown>(count);\n for (let index = 0; index < count; index += 1) {\n requireAvailable(data, offset, 1);\n const status = data.readUInt8(offset);\n offset += 1;\n if (status === 0) {\n requireAvailable(data, offset, 1);\n const kind = data.readUInt8(offset);\n offset += 1;\n if (kind === 0) {\n values[index] = null;\n } else if (kind === 1) {\n const read = readBinary(data, offset);\n values[index] = read.value;\n offset = read.offset;\n } else if (kind === 2) {\n const read = readCompactFlowRecord(data, offset, budget);\n values[index] = read.value;\n offset = read.offset;\n } else if (kind === 3) {\n const read = readCompactFlowRecordList(data, offset, budget);\n values[index] = read.value;\n offset = read.offset;\n } else if (kind === 4) {\n const read = readCompactClaimJob(data, offset, claimModes?.[index] ?? \"base\", budget);\n values[index] = read.value;\n offset = read.offset;\n } else if (kind === 5) {\n const read = readCompactFlowValueRef(data, offset, budget);\n values[index] = read.value;\n offset = read.offset;\n } else if (kind === 6) {\n const read = readCompactBinaryList(data, offset, budget);\n values[index] = read.value;\n offset = read.offset;\n } else if (kind === 7) {\n const read = readCompactBinaryMap(data, offset, budget);\n values[index] = read.value;\n offset = read.offset;\n } else {\n throw new FerricStoreError(\"unknown compact pipeline success kind\");\n }\n } else if (status === 1 || status === 2) {\n const read = readBinary(data, offset);\n const errorStatus = status === 1 ? \"busy\" : \"error\";\n values[index] = classifyServerError(\n errorMessage(status === 1 ? 4 : 1, read.value),\n read.value,\n undefined,\n errorStatus\n );\n offset = read.offset;\n } else {\n throw new FerricStoreError(\"unknown compact pipeline status\");\n }\n }\n if (offset !== data.byteLength) throw new FerricStoreError(\"trailing compact pipeline bytes\");\n return markCompactPipelineDecoded(values);\n}\n\nfunction decodeCompactClaimJobs(\n data: Buffer,\n budget: wire.DecodeValueBudget,\n mode?: wire.CompactClaimMode\n): unknown[] {\n requireAvailable(data, 0, 5);\n const count = data.readUInt32BE(1);\n requireCompactContainer(count, budget);\n if (mode != null) {\n const values: unknown[] = [];\n let offset = 5;\n for (let index = 0; index < count; index += 1) {\n const read = readCompactClaimJob(data, offset, mode, budget);\n values.push(read.value);\n offset = read.offset;\n }\n if (offset !== data.byteLength) {\n throw new FerricStoreError(`compact claim response did not match expected ${mode} mode`);\n }\n return values;\n }\n for (const candidate of [\"stateAttrs\", \"attrs\", \"state\", \"base\"] as const) {\n const attemptBudget = { remainingItems: budget.remainingItems };\n const decoded = tryReadCompactClaimJobs(data, 5, count, candidate, attemptBudget);\n if (decoded?.offset === data.byteLength) {\n budget.remainingItems = attemptBudget.remainingItems;\n return decoded.value;\n }\n }\n throw new FerricStoreError(\"trailing compact claim jobs bytes\");\n}\n\nfunction tryReadCompactClaimJobs(\n data: Buffer,\n offset: number,\n count: number,\n mode: wire.CompactClaimMode,\n budget: wire.DecodeValueBudget\n): { readonly value: unknown[]; readonly offset: number } | null {\n try {\n const values: unknown[] = [];\n for (let index = 0; index < count; index += 1) {\n const read = readCompactClaimJob(data, offset, mode, budget);\n values.push(read.value);\n offset = read.offset;\n }\n return { value: values, offset };\n } catch (error) {\n if (error instanceof FerricStoreError || error instanceof RangeError) return null;\n throw error;\n }\n}\n\nfunction readCompactClaimJob(\n data: Buffer,\n offset: number,\n mode: wire.CompactClaimMode = \"base\",\n budget: wire.DecodeValueBudget = { remainingItems: wire.DEFAULT_MAX_VALUE_ITEMS }\n): { readonly value: unknown[]; readonly offset: number } {\n const id = readBinary(data, offset);\n const partition = readOptionalBinary(data, id.offset);\n const lease = readBinary(data, partition.offset);\n requireAvailable(data, lease.offset, 8);\n const fencingBig = data.readBigInt64BE(lease.offset);\n const fencing = fencingBig <= wire.MAX_SAFE_INTEGER_BIGINT && fencingBig >= wire.MIN_SAFE_INTEGER_BIGINT\n ? Number(fencingBig)\n : fencingBig;\n offset = lease.offset + 8;\n if (mode === \"base\") {\n consumeDecodeItems(4, budget);\n return { value: [id.value, partition.value, lease.value, fencing], offset };\n }\n if (mode === \"attrs\") {\n consumeDecodeItems(6, budget);\n const attrs = decodeValueWithBudget(data, offset, budget);\n return { value: [id.value, partition.value, lease.value, fencing, null, attrs.value], offset: attrs.offset };\n }\n const runState = readOptionalBinary(data, offset);\n if (mode === \"state\") {\n consumeDecodeItems(5, budget);\n return { value: [id.value, partition.value, lease.value, fencing, runState.value], offset: runState.offset };\n }\n consumeDecodeItems(6, budget);\n const attrs = decodeValueWithBudget(data, runState.offset, budget);\n return {\n value: [id.value, partition.value, lease.value, fencing, runState.value, attrs.value],\n offset: attrs.offset\n };\n}\n\nfunction readCompactFlowValueRef(\n data: Buffer,\n offset: number,\n budget: wire.DecodeValueBudget\n): { readonly value: Record<string, unknown>; readonly offset: number } {\n consumeDecodeItems(1, budget);\n const ref = readBinary(data, offset);\n const partition = readOptionalBinary(data, ref.offset);\n if (partition.value != null) consumeDecodeItems(1, budget);\n const owner = readOptionalBinary(data, partition.offset);\n if (owner.value != null) consumeDecodeItems(1, budget);\n const value: Record<string, unknown> = { ref: ref.value };\n if (partition.value != null) value.partition_key = partition.value;\n if (owner.value != null) value.owner_flow_id = owner.value;\n return { value, offset: owner.offset };\n}\n\nfunction readCompactFlowRecord(\n data: Buffer,\n offset: number,\n budget: wire.DecodeValueBudget = { remainingItems: wire.DEFAULT_MAX_VALUE_ITEMS }\n): { readonly value: Record<string, unknown>; readonly offset: number } {\n requireAvailable(data, offset, 5);\n if (data.readUInt8(offset) !== wire.COMPACT_FLOW_RECORD) throw new FerricStoreError(\"expected compact Flow record\");\n offset += 1;\n const count = data.readUInt32BE(offset);\n requireCompactContainer(count, budget);\n offset += 4;\n const record: Record<string, unknown> = {};\n for (let index = 0; index < count; index += 1) {\n requireAvailable(data, offset, 1);\n const keyId = data.readUInt8(offset);\n offset += 1;\n let key: string;\n if (keyId === 0) {\n const read = readBinary(data, offset);\n key = read.value.toString(\"utf8\");\n offset = read.offset;\n } else {\n key = wire.FLOW_RECORD_FIELD_KEYS[keyId] ?? `field_${keyId}`;\n }\n const read = decodeValueWithBudget(data, offset, budget);\n setOwnValue(record, key, read.value);\n offset = read.offset;\n }\n return { value: record, offset };\n}\n\nfunction readCompactFlowRecordList(\n data: Buffer,\n offset: number,\n budget: wire.DecodeValueBudget = { remainingItems: wire.DEFAULT_MAX_VALUE_ITEMS }\n): { readonly value: Record<string, unknown>[]; readonly offset: number } {\n requireAvailable(data, offset, 5);\n if (data.readUInt8(offset) !== wire.COMPACT_FLOW_RECORD_LIST) {\n throw new FerricStoreError(\"expected compact Flow record list\");\n }\n offset += 1;\n const count = data.readUInt32BE(offset);\n requireCompactContainer(count, budget);\n offset += 4;\n const records: Record<string, unknown>[] = [];\n for (let index = 0; index < count; index += 1) {\n const read = readCompactFlowRecord(data, offset, budget);\n records.push(read.value);\n offset = read.offset;\n }\n return { value: records, offset };\n}\n\nfunction readOptionalBinary(data: Buffer, offset: number): { readonly value: Buffer | null; readonly offset: number } {\n requireAvailable(data, offset, 4);\n const size = data.readUInt32BE(offset);\n offset += 4;\n if (size === wire.NULL_U32) return { value: null, offset };\n requireAvailable(data, offset, size);\n return { value: data.subarray(offset, offset + size), offset: offset + size };\n}\n\nfunction requireCompactContainer(count: number, budget: wire.DecodeValueBudget): void {\n if (count > wire.DEFAULT_MAX_VALUE_ITEMS) {\n throw new FerricStoreError(\"native compact response container exceeds max items\");\n }\n consumeDecodeItems(count, budget);\n}\n\nfunction errorMessage(status: number | string, value: unknown): string {\n if (typeof value === \"string\") return value;\n if (Buffer.isBuffer(value)) return value.toString(\"utf8\");\n if (typeof value === \"object\" && value != null && Object.hasOwn(value, \"message\")) {\n const message = (value as Record<string, unknown>).message;\n return typeof message === \"string\" ? message : String(message);\n }\n return `ERR native request failed status=${status}: ${String(value)}`;\n}\n","import { Buffer } from \"node:buffer\";\nimport { field } from \"./internal.js\";\n\nexport type CompactResponseOpcodes = ReadonlyMap<string, ReadonlySet<number>>;\n\nexport interface NativeNegotiation {\n readonly compactResponseOpcodes: CompactResponseOpcodes;\n readonly maxResponseBytes?: number;\n}\n\nexport const EMPTY_COMPACT_RESPONSE_OPCODES: CompactResponseOpcodes = new Map();\n\n/** Parse the HELLO-shaped capability payload returned by HELLO or STARTUP. */\nexport function nativeNegotiation(value: unknown): NativeNegotiation {\n const capabilities = field(value, \"capabilities\") ?? value;\n const limits = field(capabilities, \"limits\");\n const responseCodecs = field(capabilities, \"response_codecs\");\n const maxResponseBytes = positiveSafeInteger(field(limits, \"max_response_bytes\"));\n return {\n compactResponseOpcodes: parseCompactResponseOpcodes(\n field(responseCodecs, \"compact_response_opcodes\")\n ),\n ...(maxResponseBytes == null ? {} : { maxResponseBytes })\n };\n}\n\nexport function compactResponseOpcodeSupports(\n capabilities: CompactResponseOpcodes | undefined,\n codec: string,\n opcode: number\n): boolean {\n return capabilities?.get(codec)?.has(opcode) === true;\n}\n\nfunction parseCompactResponseOpcodes(value: unknown): CompactResponseOpcodes {\n const entries = mapEntries(value);\n if (entries == null) return EMPTY_COMPACT_RESPONSE_OPCODES;\n const result = new Map<string, ReadonlySet<number>>();\n for (const [rawName, rawOpcodes] of entries) {\n const name = text(rawName);\n if (name == null || name.length === 0 || !Array.isArray(rawOpcodes)) continue;\n const opcodes = new Set<number>();\n let valid = true;\n for (let index = 0; index < rawOpcodes.length; index += 1) {\n if (!Object.hasOwn(rawOpcodes, index)) {\n valid = false;\n break;\n }\n const opcode = unsigned16(rawOpcodes[index]);\n if (opcode == null) {\n valid = false;\n break;\n }\n opcodes.add(opcode);\n }\n if (valid) result.set(name, opcodes);\n }\n return result;\n}\n\nfunction mapEntries(value: unknown): readonly (readonly [unknown, unknown])[] | undefined {\n if (value instanceof Map) return [...value.entries()];\n if (typeof value !== \"object\" || value == null || Array.isArray(value)) return undefined;\n return Object.entries(value as Record<string, unknown>);\n}\n\nfunction unsigned16(value: unknown): number | undefined {\n const parsed = nonNegativeSafeInteger(value);\n return parsed != null && parsed <= 0xffff ? parsed : undefined;\n}\n\nfunction positiveSafeInteger(value: unknown): number | undefined {\n const parsed = nonNegativeSafeInteger(value);\n return parsed != null && parsed > 0 ? parsed : undefined;\n}\n\nfunction nonNegativeSafeInteger(value: unknown): number | undefined {\n if (typeof value === \"bigint\") {\n return value >= 0n && value <= BigInt(Number.MAX_SAFE_INTEGER) ? Number(value) : undefined;\n }\n const source = text(value) ?? value;\n if (typeof source !== \"number\" && (typeof source !== \"string\" || !/^\\d+$/u.test(source))) {\n return undefined;\n }\n const parsed = Number(source);\n return Number.isSafeInteger(parsed) && parsed >= 0 ? parsed : undefined;\n}\n\nfunction text(value: unknown): string | undefined {\n if (typeof value === \"string\") return value;\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) {\n return Buffer.from(value).toString(\"utf8\");\n }\n return undefined;\n}\n","import { Buffer } from \"node:buffer\";\nimport { FerricStoreError } from \"./errors.js\";\nimport { setOwnValue } from \"./protocol-core.js\";\nimport * as wire from \"./protocol-constants.js\";\nimport { consumeDecodeItems, readBinary, requireAvailable } from \"./protocol-value.js\";\n\nexport function decodeCompactIntegerList(\n data: Buffer,\n budget: wire.DecodeValueBudget\n): (number | bigint)[] {\n requireAvailable(data, 0, 5);\n const count = data.readUInt32BE(1);\n requireCompactContainer(count, budget);\n if (data.byteLength !== 5 + count * 8) {\n throw new FerricStoreError(\"invalid compact integer list response\");\n }\n const values = new Array<number | bigint>(count);\n for (let index = 0, offset = 5; index < count; index += 1, offset += 8) {\n const value = data.readBigInt64BE(offset);\n values[index] = value <= wire.MAX_SAFE_INTEGER_BIGINT && value >= wire.MIN_SAFE_INTEGER_BIGINT\n ? Number(value)\n : value;\n }\n return values;\n}\n\nexport function decodeCompactBinaryListList(\n data: Buffer,\n budget: wire.DecodeValueBudget\n): Buffer[][] {\n requireAvailable(data, 0, 5);\n const count = data.readUInt32BE(1);\n requireCompactContainer(count, budget);\n let offset = 5;\n const values = new Array<Buffer[]>(count);\n for (let index = 0; index < count; index += 1) {\n const read = readCompactBinaryList(data, offset, budget);\n values[index] = read.value;\n offset = read.offset;\n }\n if (offset !== data.byteLength) throw new FerricStoreError(\"trailing compact binary list-list bytes\");\n return values;\n}\n\nexport function decodeCompactBinaryMapList(\n data: Buffer,\n budget: wire.DecodeValueBudget\n): Record<string, Buffer>[] {\n requireAvailable(data, 0, 5);\n const count = data.readUInt32BE(1);\n requireCompactContainer(count, budget);\n let offset = 5;\n const values = new Array<Record<string, Buffer>>(count);\n for (let index = 0; index < count; index += 1) {\n const read = readCompactBinaryMap(data, offset, budget);\n values[index] = read.value;\n offset = read.offset;\n }\n if (offset !== data.byteLength) throw new FerricStoreError(\"trailing compact binary map-list bytes\");\n return values;\n}\n\nexport function readCompactBinaryList(\n data: Buffer,\n offset: number,\n budget: wire.DecodeValueBudget\n): { readonly value: Buffer[]; readonly offset: number } {\n requireAvailable(data, offset, 4);\n const count = data.readUInt32BE(offset);\n requireCompactContainer(count, budget);\n offset += 4;\n const values = new Array<Buffer>(count);\n for (let index = 0; index < count; index += 1) {\n const read = readBinary(data, offset);\n values[index] = read.value;\n offset = read.offset;\n }\n return { value: values, offset };\n}\n\nexport function readCompactBinaryMap(\n data: Buffer,\n offset: number,\n budget: wire.DecodeValueBudget\n): { readonly value: Record<string, Buffer>; readonly offset: number } {\n requireAvailable(data, offset, 4);\n const count = data.readUInt32BE(offset);\n requireCompactContainer(count, budget);\n offset += 4;\n const values: Record<string, Buffer> = {};\n for (let index = 0; index < count; index += 1) {\n const key = readBinary(data, offset);\n const value = readBinary(data, key.offset);\n setOwnValue(values, key.value.toString(\"utf8\"), value.value);\n offset = value.offset;\n }\n return { value: values, offset };\n}\n\nexport function markCompactPipelineDecoded<T extends unknown[]>(values: T): T {\n Object.defineProperty(values, wire.COMPACT_PIPELINE_DECODED, { value: true });\n return values;\n}\n\nfunction requireCompactContainer(count: number, budget: wire.DecodeValueBudget): void {\n if (count > wire.DEFAULT_MAX_VALUE_ITEMS) {\n throw new FerricStoreError(\"native compact response container exceeds max items\");\n }\n consumeDecodeItems(count, budget);\n}\n","import type { NativeAdapterOptions } from \"./adapter-types.js\";\n\nexport const DEFAULT_MAX_CHUNK_BYTES = 64 * 1024 * 1024;\nexport const DEFAULT_MAX_CHUNK_FRAMES = 65_536;\nexport const DEFAULT_MAX_PENDING_CONTROL_REQUESTS = 4_096;\nexport const DEFAULT_MAX_RESPONSE_BYTES = 64 * 1024 * 1024;\nexport const DEFAULT_MAX_QUEUED_REQUESTS = 65_536;\nexport const DEFAULT_MAX_QUEUED_WRITE_BYTES = 64 * 1024 * 1024;\nexport const UNAUTHENTICATED_MAX_FRAME_BYTES = 64 * 1024;\n\nexport function assertNativeAdapterOptions(options: NativeAdapterOptions): void {\n const supplied = options as unknown as Record<string, unknown>;\n for (const name of [\"autoReconnect\", \"haRouting\", \"seeds\"]) {\n if (Object.hasOwn(supplied, name)) {\n throw new TypeError(`FerricStoreClient option ${name} is not accepted by NativeAdapter.fromUrl`);\n }\n }\n for (const name of [\"endpointPolicy\", \"endpointValidator\", \"topologyConcurrency\", \"trustedHosts\", \"warmConnections\"]) {\n if (Object.hasOwn(supplied, name)) {\n throw new TypeError(`TopologyNativeAdapterPool option ${name} is not accepted by NativeAdapter.fromUrl`);\n }\n }\n}\n","import net from \"node:net\";\nimport tls from \"node:tls\";\nimport { FerricStoreError } from \"./errors.js\";\nimport type { NativeAdapterOptions, NativeProtocolEvent } from \"./adapter-types.js\";\nimport {\n assertNativeAdapterOptions,\n DEFAULT_MAX_CHUNK_BYTES,\n DEFAULT_MAX_CHUNK_FRAMES,\n DEFAULT_MAX_PENDING_CONTROL_REQUESTS,\n DEFAULT_MAX_QUEUED_REQUESTS,\n DEFAULT_MAX_QUEUED_WRITE_BYTES,\n DEFAULT_MAX_RESPONSE_BYTES\n} from \"./native-adapter-config.js\";\nimport { connect, nativeBootstrapAbortError, parseFerricUrl } from \"./native-connection.js\";\nimport { snapshotNativeAdapterOptions } from \"./client-native-options.js\";\nimport { DEFAULT_MAX_FRAME_BYTES } from \"./protocol.js\";\n\nexport type NativeAdapterConstructorArguments = [\n socket: net.Socket | tls.TLSSocket,\n timeoutMs: number,\n protocolLanes: number,\n maxChunkBytes: number,\n maxChunkFrames: number,\n maxFrameBytes: number,\n maxResponseBytes: number,\n maxPendingControlRequests: number,\n maxQueuedRequests: number,\n heartbeatIntervalMs: number | undefined,\n onEvent: ((event: NativeProtocolEvent) => unknown) | undefined,\n maxQueuedWriteBytes: number\n];\n\ninterface NativeAdapterBootstrapHandle<T> {\n readonly adapter: T;\n readonly auth: (username: string, password: string) => Promise<void>;\n readonly close: () => Promise<void>;\n readonly startHeartbeat: () => void;\n readonly startup: (clientName?: string, events?: readonly string[]) => Promise<boolean>;\n}\n\nexport async function bootstrapNativeAdapter<T>(\n url: string,\n options: NativeAdapterOptions,\n create: (args: NativeAdapterConstructorArguments) => NativeAdapterBootstrapHandle<T>\n): Promise<T> {\n assertNativeAdapterOptions(options);\n const nativeOptions = snapshotNativeAdapterOptions(options);\n const parsed = parseFerricUrl(url);\n const socket = await connect(parsed, nativeOptions);\n const handle = create([\n socket,\n nativeOptions.timeoutMs ?? 30_000,\n nativeOptions.protocolLanes ?? 8,\n nativeOptions.maxChunkBytes ?? DEFAULT_MAX_CHUNK_BYTES,\n nativeOptions.maxChunkFrames ?? DEFAULT_MAX_CHUNK_FRAMES,\n nativeOptions.maxFrameBytes ?? DEFAULT_MAX_FRAME_BYTES,\n nativeOptions.maxResponseBytes ?? DEFAULT_MAX_RESPONSE_BYTES,\n nativeOptions.maxPendingControlRequests ?? DEFAULT_MAX_PENDING_CONTROL_REQUESTS,\n nativeOptions.maxQueuedRequests ?? DEFAULT_MAX_QUEUED_REQUESTS,\n nativeOptions.heartbeatIntervalMs,\n nativeOptions.onEvent,\n nativeOptions.maxQueuedWriteBytes ?? DEFAULT_MAX_QUEUED_WRITE_BYTES\n ]);\n const signal = nativeOptions.signal;\n const onAbort = (): void => {\n void handle.close().catch(() => undefined);\n };\n signal?.addEventListener(\"abort\", onAbort, { once: true });\n try {\n if (signal?.aborted) throw nativeBootstrapAbortError(signal.reason);\n const authRequired = await handle.startup(nativeOptions.clientName, nativeOptions.events);\n const password = nativeOptions.password ?? parsed.password;\n if (authRequired && (password == null || password === \"\")) {\n throw new FerricStoreError(\n \"FerricStore server requires authentication but no password was provided\"\n );\n }\n if (password != null && password !== \"\") {\n await handle.auth(nativeOptions.username ?? parsed.username ?? \"default\", password);\n }\n if (signal?.aborted) throw nativeBootstrapAbortError(signal.reason);\n handle.startHeartbeat();\n return handle.adapter;\n } catch (error) {\n await handle.close();\n if (signal?.aborted) throw nativeBootstrapAbortError(signal.reason);\n throw error;\n } finally {\n signal?.removeEventListener(\"abort\", onAbort);\n }\n}\n","import { Buffer } from \"node:buffer\";\nimport type { ConnectionOptions } from \"node:tls\";\nimport type {\n NativeAdapterOptions,\n NativeClientOptions,\n TopologyNativeAdapterOptions\n} from \"./adapters.js\";\nimport { snapshotOwnStringArray } from \"./string-array-snapshot.js\";\n\n/** Capture reconnect inputs once so later caller mutation cannot change transport trust or destinations. */\nexport function snapshotNativeClientOptions(options: NativeClientOptions): NativeClientOptions {\n const own = { ...options };\n const snapshot: NativeClientOptions = {\n ...own,\n ...(typeof own.autoReconnect === \"object\" && own.autoReconnect != null\n ? { autoReconnect: Object.freeze({ ...own.autoReconnect }) }\n : {}),\n ...(own.endpointPolicy == null\n ? {}\n : { endpointPolicy: snapshotEndpointPolicy(own.endpointPolicy) }),\n ...(own.events == null ? {} : { events: snapshotOwnStringArray(own.events, \"events\") }),\n ...(own.seeds == null ? {} : { seeds: snapshotOwnStringArray(own.seeds, \"seeds\") }),\n ...(own.tlsOptions == null ? {} : { tlsOptions: snapshotTlsOptions(own.tlsOptions) }),\n ...(own.trustedHosts == null\n ? {}\n : { trustedHosts: snapshotOwnStringArray(own.trustedHosts, \"trustedHosts\") })\n };\n return Object.freeze(snapshot);\n}\n\nexport function snapshotNativeAdapterOptions(options: NativeAdapterOptions): NativeAdapterOptions {\n return nativeAdapterOptions(snapshotNativeClientOptions(options));\n}\n\nexport function snapshotFerricUrls(urls: readonly string[]): readonly string[] {\n return snapshotOwnStringArray(urls, \"FerricStore URLs\");\n}\n\nexport function nativeAdapterOptions(options: NativeClientOptions): NativeAdapterOptions {\n const {\n autoReconnect,\n endpointPolicy,\n endpointValidator,\n haRouting,\n seeds,\n topologyConcurrency,\n trustedHosts,\n warmConnections,\n ...native\n } = options;\n void autoReconnect;\n void endpointPolicy;\n void endpointValidator;\n void haRouting;\n void seeds;\n void topologyConcurrency;\n void trustedHosts;\n void warmConnections;\n return native;\n}\n\nexport function topologyNativeOptions(options: NativeClientOptions): TopologyNativeAdapterOptions {\n const { autoReconnect, haRouting, seeds, ...topology } = options;\n void autoReconnect;\n void haRouting;\n void seeds;\n return topology;\n}\n\nfunction snapshotEndpointPolicy(\n policy: NonNullable<NativeClientOptions[\"endpointPolicy\"]>\n): NonNullable<NativeClientOptions[\"endpointPolicy\"]> {\n if (typeof policy !== \"object\") return policy;\n const own = { ...policy };\n if (!Object.hasOwn(own, \"allowHosts\") || !Array.isArray(own.allowHosts)) {\n throw new TypeError(\"endpointPolicy.allowHosts must be an own array of strings\");\n }\n return Object.freeze({\n allowHosts: snapshotOwnStringArray(own.allowHosts, \"endpointPolicy.allowHosts\")\n });\n}\n\nfunction snapshotTlsOptions(options: ConnectionOptions): ConnectionOptions {\n const source = options as unknown as Record<string, unknown>;\n const snapshot: Record<string, unknown> = {};\n for (const key of Object.keys(source)) {\n snapshot[key] = snapshotTlsValue(source[key], `tlsOptions.${key}`);\n }\n return Object.freeze(snapshot);\n}\n\nfunction snapshotTlsValue(value: unknown, name: string): unknown {\n if (Buffer.isBuffer(value)) return Buffer.from(value);\n if (value instanceof Uint8Array) return value.slice();\n if (Array.isArray(value)) {\n const snapshot = new Array<unknown>(value.length);\n for (let index = 0; index < value.length; index += 1) {\n if (!Object.hasOwn(value, index)) throw new TypeError(`${name} must be a dense array`);\n snapshot[index] = snapshotTlsValue(value[index], name);\n }\n return Object.freeze(snapshot);\n }\n return snapshotTlsIdentity(value, name);\n}\n\nfunction snapshotTlsIdentity(value: unknown, name: string): unknown {\n if (typeof value !== \"object\" || value == null) return value;\n const source = value as Record<string, unknown>;\n const materialKey = Object.hasOwn(source, \"pem\")\n ? \"pem\"\n : Object.hasOwn(source, \"buf\") ? \"buf\" : undefined;\n if (materialKey == null) return value;\n const snapshot = { ...source };\n snapshot[materialKey] = snapshotTlsValue(source[materialKey], `${name}.${materialKey}`);\n return Object.freeze(snapshot);\n}\n","export function snapshotOwnStringArray(\n values: readonly string[],\n name: string\n): readonly string[] {\n const snapshot = new Array<string>(values.length);\n for (let index = 0; index < values.length; index += 1) {\n const value = values[index];\n if (!Object.hasOwn(values, index) || typeof value !== \"string\") {\n throw new TypeError(`${name} must be a dense array of own strings`);\n }\n snapshot[index] = value;\n }\n return Object.freeze(snapshot);\n}\n","import type { Command, CommandArgument } from \"./internal.js\";\nimport { snapshotCommandRequestContext } from \"./request-context.js\";\n\nconst commandSnapshots = new WeakSet<readonly CommandArgument[]>();\n\n/** Capture positional command arguments once across asynchronous executor layers. */\nexport function snapshotCommandArguments(\n args: readonly CommandArgument[],\n sparseMessage = \"command arguments must be dense\"\n): Command {\n if (commandSnapshots.has(args)) return args;\n const snapshot = new Array<CommandArgument>(args.length);\n for (let index = 0; index < args.length; index += 1) {\n if (!Object.hasOwn(args, index)) throw new TypeError(sparseMessage);\n snapshot[index] = args[index];\n }\n // Invocation context is the only command-specific deep snapshot. Keep the\n // overwhelmingly common KV/Flow path to one cheap first-byte check.\n const command = snapshot[0];\n const firstByte = typeof command === \"string\" ? command.charCodeAt(0) : undefined;\n if (\n firstByte == null\n || firstByte === 73\n || firstByte === 105\n ) snapshotCommandRequestContext(snapshot);\n Object.freeze(snapshot);\n commandSnapshots.add(snapshot);\n return snapshot;\n}\n","import type { Command, CommandArgument } from \"./internal.js\";\nimport { snapshotCommandArguments } from \"./command-snapshot.js\";\nimport {\n COMPACT_PIPELINE_DECODED,\n commandRequiresOrderedPipelineExecution\n} from \"./protocol.js\";\n\nexport interface ExecutePipelineOptions {\n /** @internal Earlier command indexes that must settle before each individual fallback command starts. */\n fallbackDependencies?: readonly (readonly number[])[];\n /** Maximum concurrent requests when a native pipeline is unavailable. Defaults to 64. */\n fallbackConcurrency?: number;\n /** Preserve command execution order when a native pipeline is unavailable. */\n ordered?: boolean;\n throwOnItemError?: boolean;\n}\n\nconst DEFAULT_FALLBACK_CONCURRENCY = 64;\n\nconst pipelineItemRejections = Symbol(\"ferricstore.pipelineItemRejections\");\nconst pipelineCommandSnapshots = new WeakSet<readonly Command[]>();\nconst pipelineOptionSnapshots = new WeakSet<ExecutePipelineOptions>();\n\n/** @internal Validate the positional contract supplied by a pipeline executor. */\nexport function validatePipelineResponse(\n value: unknown,\n expectedItems: number,\n operation = \"pipeline\"\n): unknown[] {\n if (!Array.isArray(value)) {\n throw new TypeError(`${operation} returned an invalid response`);\n }\n if (value.length !== expectedItems) {\n throw new TypeError(`${operation} returned ${value.length} items; expected ${expectedItems}`);\n }\n if ((value as unknown as Record<symbol, unknown>)[COMPACT_PIPELINE_DECODED] === true) {\n return value;\n }\n for (let index = 0; index < value.length; index += 1) {\n if (!Object.hasOwn(value, index)) {\n throw new TypeError(`${operation} response item ${index} is missing`);\n }\n }\n return value;\n}\n\n/** @internal Reject holes before any pipeline command can be dispatched. */\nexport function assertDensePipelineCommands(commands: readonly Command[]): void {\n for (let index = 0; index < commands.length; index += 1) {\n const command = commands[index];\n if (!Object.hasOwn(commands, index) || !Array.isArray(command)) {\n throw new TypeError(\"pipeline commands must be a dense array of command arrays\");\n }\n for (let argumentIndex = 0; argumentIndex < command.length; argumentIndex += 1) {\n if (!Object.hasOwn(command, argumentIndex)) {\n throw new TypeError(\"pipeline command arguments must be dense\");\n }\n }\n }\n}\n\n/** Snapshot pipeline structure at admission while validating every positional slot once. */\nexport function snapshotPipelineCommands(commands: readonly Command[]): Command[] {\n if (pipelineCommandSnapshots.has(commands)) return commands as Command[];\n const snapshot = new Array<Command>(commands.length);\n for (let index = 0; index < commands.length; index += 1) {\n const command = commands[index];\n if (!Object.hasOwn(commands, index) || !Array.isArray(command)) {\n throw new TypeError(\"pipeline commands must be a dense array of command arrays\");\n }\n snapshot[index] = snapshotCommandArguments(command, \"pipeline command arguments must be dense\");\n }\n Object.freeze(snapshot);\n pipelineCommandSnapshots.add(snapshot);\n return snapshot;\n}\n\n/** Snapshot pipeline options, including dependency rows, once across executor layers. */\nexport function snapshotPipelineOptions(\n options: ExecutePipelineOptions | undefined\n): ExecutePipelineOptions | undefined {\n if (options == null || pipelineOptionSnapshots.has(options)) return options;\n const snapshot = { ...options };\n const dependencies = snapshot.fallbackDependencies;\n if (dependencies != null) {\n const dependencySnapshots = new Array<readonly number[]>(dependencies.length);\n for (let index = 0; index < dependencies.length; index += 1) {\n if (!Object.hasOwn(dependencies, index)) continue;\n const dependencySnapshot = dependencies[index]?.slice() ?? [];\n Object.freeze(dependencySnapshot);\n dependencySnapshots[index] = dependencySnapshot;\n }\n Object.freeze(dependencySnapshots);\n snapshot.fallbackDependencies = dependencySnapshots;\n }\n Object.freeze(snapshot);\n pipelineOptionSnapshots.add(snapshot);\n return snapshot;\n}\n\n/** @internal Rejection markers preserve arbitrary JavaScript rejection reasons. */\nexport function pipelineItemRejectionFlags(results: readonly unknown[]): readonly boolean[] | undefined {\n return (results as unknown as Record<symbol, readonly boolean[]>)[pipelineItemRejections];\n}\n\n/** @internal Attach per-item rejection markers without wrapping arbitrary rejection reasons. */\nexport function attachPipelineItemRejectionFlags(\n results: unknown[],\n rejected: readonly boolean[]\n): void {\n Object.defineProperty(results, pipelineItemRejections, { value: rejected });\n}\n\n/** @internal Preserve dependencies when a state-changing control command cannot be pipelined. */\nexport function pipelineFallbackOptions(\n commands: readonly Command[],\n options: ExecutePipelineOptions = {}\n): ExecutePipelineOptions {\n if (options.ordered === true) return options;\n for (const command of commands) {\n if (commandRequiresOrderedPipelineExecution(command)) return { ...options, ordered: true };\n }\n return options;\n}\n\n/** @internal */\nexport function pipelineErrorCollectingOptions(options: ExecutePipelineOptions): ExecutePipelineOptions {\n return options.throwOnItemError === false ? options : { ...options, throwOnItemError: false };\n}\n\n/** @internal Remap individual-fallback dependency indexes onto a pipeline subset. */\nexport function pipelineSubsetOptions(\n options: ExecutePipelineOptions,\n originalIndices: readonly number[]\n): ExecutePipelineOptions {\n const dependencies = options.fallbackDependencies;\n if (dependencies == null) return options;\n const localIndices = new Map<number, number>();\n originalIndices.forEach((originalIndex, localIndex) => localIndices.set(originalIndex, localIndex));\n return {\n ...options,\n fallbackDependencies: originalIndices.map((originalIndex) =>\n (dependencies[originalIndex] ?? []).flatMap((dependency) => {\n const localIndex = localIndices.get(dependency);\n return localIndex == null ? [] : [localIndex];\n })\n )\n };\n}\n\n/** @internal Slice dependencies while preserving their original ordering. */\nexport function pipelineSliceOptions(\n options: ExecutePipelineOptions,\n start: number,\n end: number\n): ExecutePipelineOptions {\n if (options.fallbackDependencies == null) return options;\n return pipelineSubsetOptions(\n options,\n Array.from({ length: end - start }, (_unused, index) => start + index)\n );\n}\n\n/** @internal */\nexport function surfaceFirstPipelineItemError(\n results: unknown[],\n options: ExecutePipelineOptions\n): unknown[] {\n if (options.throwOnItemError !== false) {\n const rejected = pipelineItemRejectionFlags(results);\n for (let index = 0; index < results.length; index += 1) {\n const result = results[index];\n if (rejected?.[index] === true || result instanceof Error) throw result;\n }\n }\n return results;\n}\n\n/** @internal */\nexport async function executeCommandArraysIndividually(\n executeCommandArgs: (args: readonly CommandArgument[]) => Promise<unknown>,\n commands: readonly Command[],\n options: ExecutePipelineOptions = {}\n): Promise<unknown[]> {\n assertDensePipelineCommands(commands);\n const rejected: boolean[] = [];\n let hasRejected = false;\n if (options.ordered === true) {\n const results: unknown[] = [];\n for (let index = 0; index < commands.length; index += 1) {\n const command = commands[index];\n if (command == null) continue;\n try {\n results.push(await executeCommandArgs(command));\n } catch (error) {\n rejected[index] = true;\n hasRejected = true;\n results.push(error);\n }\n }\n return surfaceIndividualCommandErrors(results, rejected, hasRejected, options);\n }\n const concurrency = fallbackConcurrency(options.fallbackConcurrency, commands.length);\n if (options.fallbackDependencies != null) {\n const results = new Array<unknown>(commands.length);\n const tasks = new Array<Promise<void>>(commands.length);\n const slots = new AsyncSlotPool(concurrency);\n for (let index = 0; index < commands.length; index += 1) {\n const command = commands[index];\n const dependencies = options.fallbackDependencies[index] ?? [];\n const prerequisites = dependencies.flatMap((dependency) => {\n const task = dependency >= 0 && dependency < index ? tasks[dependency] : undefined;\n return task == null ? [] : [task.catch(() => undefined)];\n });\n tasks[index] = Promise.all(prerequisites).then(async () => await slots.run(async () => {\n if (command == null) return;\n try {\n results[index] = await executeCommandArgs(command);\n } catch (error) {\n rejected[index] = true;\n hasRejected = true;\n results[index] = error;\n }\n }));\n }\n await Promise.all(tasks);\n return surfaceIndividualCommandErrors(results, rejected, hasRejected, options);\n }\n const results = new Array<unknown>(commands.length);\n let nextIndex = 0;\n const workers = Array.from({ length: concurrency }, async () => {\n while (nextIndex < commands.length) {\n const index = nextIndex++;\n const command = commands[index];\n if (command == null) continue;\n try {\n results[index] = await executeCommandArgs(command);\n } catch (error) {\n rejected[index] = true;\n hasRejected = true;\n results[index] = error;\n }\n }\n });\n await Promise.all(workers);\n return surfaceIndividualCommandErrors(results, rejected, hasRejected, options);\n}\n\ninterface SlotWaiter {\n next?: SlotWaiter;\n readonly resolve: () => void;\n}\n\nclass AsyncSlotPool {\n private active = 0;\n private waiterHead?: SlotWaiter;\n private waiterTail?: SlotWaiter;\n\n constructor(private readonly limit: number) {}\n\n async run<T>(operation: () => Promise<T>): Promise<T> {\n if (this.active >= this.limit) {\n await new Promise<void>((resolve) => {\n const waiter: SlotWaiter = { resolve };\n if (this.waiterTail == null) {\n this.waiterHead = waiter;\n } else {\n this.waiterTail.next = waiter;\n }\n this.waiterTail = waiter;\n });\n } else {\n this.active += 1;\n }\n try {\n return await operation();\n } finally {\n const waiter = this.waiterHead;\n if (waiter == null) {\n this.active -= 1;\n } else {\n this.waiterHead = waiter.next;\n if (this.waiterHead == null) this.waiterTail = undefined;\n waiter.resolve();\n }\n }\n }\n}\n\nfunction fallbackConcurrency(value: number | undefined, commandCount: number): number {\n if (value != null && (!Number.isSafeInteger(value) || value <= 0)) {\n throw new TypeError(\"fallbackConcurrency must be a positive safe integer\");\n }\n return Math.min(commandCount, value ?? DEFAULT_FALLBACK_CONCURRENCY);\n}\n\n/** @internal Backward-compatible variadic adapter for custom pipeline executors. */\nexport async function executeCommandsIndividually(\n executeCommand: (...args: CommandArgument[]) => Promise<unknown>,\n commands: readonly Command[],\n options: ExecutePipelineOptions = {}\n): Promise<unknown[]> {\n return await executeCommandArraysIndividually(\n async (command) => await executeCommand(...command),\n commands,\n options\n );\n}\n\nfunction surfaceIndividualCommandErrors(\n results: unknown[],\n rejected: readonly boolean[],\n hasRejected: boolean,\n options: ExecutePipelineOptions\n): unknown[] {\n if (options.throwOnItemError !== false) {\n for (let index = 0; index < results.length; index += 1) {\n const result = results[index];\n if (rejected[index] === true || result instanceof Error) throw result;\n }\n } else if (hasRejected) {\n attachPipelineItemRejectionFlags(results, rejected);\n }\n return results;\n}\n","import type { Command } from \"./internal.js\";\nimport {\n RequestFrameTooLargeError,\n tryPipelineCommand,\n unwrapPipelineResponse,\n type ProtocolCommand\n} from \"./protocol.js\";\nimport {\n attachPipelineItemRejectionFlags,\n executeCommandArraysIndividually,\n pipelineErrorCollectingOptions,\n pipelineFallbackOptions,\n pipelineItemRejectionFlags,\n pipelineSliceOptions,\n snapshotPipelineCommands,\n snapshotPipelineOptions,\n surfaceFirstPipelineItemError,\n type ExecutePipelineOptions\n} from \"./pipeline-execution.js\";\n\nexport interface NativePipelineHost {\n executeCommandArgs(args: Command): Promise<unknown>;\n executeCommandOnLane(args: Command, laneId: number): Promise<unknown>;\n executeProtocolCommand(command: ProtocolCommand, laneId?: number): Promise<unknown>;\n}\n\nexport async function executeNativeFusedPipeline(\n host: NativePipelineHost,\n commands: readonly Command[],\n laneId: number | undefined,\n options: ExecutePipelineOptions,\n maxPipelineCommands: number,\n maxRequestFrameBytes: number\n): Promise<unknown[] | undefined> {\n commands = snapshotPipelineCommands(commands);\n options = snapshotPipelineOptions(options) ?? options;\n if (commands.length === 0) return [];\n if (maxPipelineCommands === 0 || commands.length > maxPipelineCommands) return undefined;\n try {\n const pipeline = tryPipelineCommand(commands, maxRequestFrameBytes);\n if (pipeline == null) return undefined;\n const response = await host.executeProtocolCommand(pipeline, laneId);\n return unwrapPipelineResponse(response, options, commands.length);\n } catch (error) {\n if (error instanceof RequestFrameTooLargeError) return undefined;\n throw error;\n }\n}\n\nexport async function executeNativePipeline(\n host: NativePipelineHost,\n commands: readonly Command[],\n laneId: number | undefined,\n options: ExecutePipelineOptions,\n maxPipelineCommands: number,\n maxRequestFrameBytes: number\n): Promise<unknown[]> {\n commands = snapshotPipelineCommands(commands);\n options = snapshotPipelineOptions(options) ?? options;\n if (commands.length === 0) return [];\n if (maxPipelineCommands === 0) {\n return await executeIndividually(host, commands, laneId, pipelineFallbackOptions(commands, options));\n }\n if (commands.length <= maxPipelineCommands) {\n return await executeChunk(host, commands, laneId, options, maxRequestFrameBytes);\n }\n\n const collectingOptions = pipelineErrorCollectingOptions(options);\n const results = new Array<unknown>(commands.length);\n let rejected: boolean[] | undefined;\n for (let start = 0; start < commands.length; start += maxPipelineCommands) {\n const chunk = commands.slice(start, start + maxPipelineCommands);\n const chunkResults = await executeChunk(\n host,\n chunk,\n laneId,\n pipelineSliceOptions(collectingOptions, start, start + chunk.length),\n maxRequestFrameBytes\n );\n for (let index = 0; index < chunkResults.length; index += 1) results[start + index] = chunkResults[index];\n rejected = collectPipelineRejections(chunkResults, start, rejected);\n }\n if (rejected != null) attachPipelineItemRejectionFlags(results, rejected);\n return surfaceFirstPipelineItemError(results, options);\n}\n\nasync function executeChunk(\n host: NativePipelineHost,\n commands: readonly Command[],\n laneId: number | undefined,\n options: ExecutePipelineOptions,\n maxRequestFrameBytes: number\n): Promise<unknown[]> {\n try {\n const pipeline = tryPipelineCommand(commands, maxRequestFrameBytes);\n if (pipeline != null) {\n const response = await host.executeProtocolCommand(pipeline, laneId);\n return unwrapPipelineResponse(response, options, commands.length);\n }\n } catch (error) {\n if (!(error instanceof RequestFrameTooLargeError)) throw error;\n const collectingOptions = pipelineErrorCollectingOptions(options);\n if (commands.length === 1) {\n const results = await executeIndividually(host, commands, laneId, collectingOptions);\n return surfaceFirstPipelineItemError(results, options);\n }\n const middle = Math.ceil(commands.length / 2);\n const first = await executeChunk(\n host,\n commands.slice(0, middle),\n laneId,\n pipelineSliceOptions(collectingOptions, 0, middle),\n maxRequestFrameBytes\n );\n const second = await executeChunk(\n host,\n commands.slice(middle),\n laneId,\n pipelineSliceOptions(collectingOptions, middle, commands.length),\n maxRequestFrameBytes\n );\n return surfaceFirstPipelineItemError(mergePipelineResults(first, second), options);\n }\n return await executeIndividually(host, commands, laneId, pipelineFallbackOptions(commands, options));\n}\n\nfunction mergePipelineResults(first: unknown[], second: unknown[]): unknown[] {\n const results = [...first, ...second];\n let rejected = collectPipelineRejections(first, 0);\n rejected = collectPipelineRejections(second, first.length, rejected);\n if (rejected != null) attachPipelineItemRejectionFlags(results, rejected);\n return results;\n}\n\nfunction collectPipelineRejections(\n results: readonly unknown[],\n offset: number,\n rejected?: boolean[]\n): boolean[] | undefined {\n const flags = pipelineItemRejectionFlags(results);\n if (flags == null) return rejected;\n for (let index = 0; index < flags.length; index += 1) {\n if (flags[index] === true) (rejected ??= [])[offset + index] = true;\n }\n return rejected;\n}\n\nasync function executeIndividually(\n host: NativePipelineHost,\n commands: readonly Command[],\n laneId: number | undefined,\n options: ExecutePipelineOptions\n): Promise<unknown[]> {\n return await executeCommandArraysIndividually(async (command) => {\n return laneId == null\n ? await host.executeCommandArgs(command)\n : await host.executeCommandOnLane(command, laneId);\n }, commands, options);\n}\n","import { FerricStoreError, RequestTimeoutError } from \"./errors.js\";\nimport { setLongTimeout } from \"./internal.js\";\nimport type { PendingRequest } from \"./native-pending-request.js\";\nimport type { ProtocolCommand } from \"./protocol.js\";\n\ninterface NativePendingTimeoutOperations {\n readonly discardRequest: (requestId: bigint) => { readonly bytes: number; readonly frames: number };\n readonly getPending: (requestId: bigint) => PendingRequest | undefined;\n readonly isWriteQueued: (requestId: bigint) => boolean;\n readonly retireConnection: (error: Error) => void;\n readonly takePending: (requestId: bigint) => PendingRequest | undefined;\n}\n\nexport function timeoutNativePendingRequest(\n operations: NativePendingTimeoutOperations,\n requestId: bigint,\n timeoutMs: number\n): void {\n const pending = operations.getPending(requestId);\n if (pending == null) return;\n const queued = operations.isWriteQueued(requestId);\n if (!pending.hasFlowControlCredit || queued) {\n operations.takePending(requestId)?.reject(new RequestTimeoutError(\n timeoutMs,\n queued ? \"unsent\" : \"possibly_sent\"\n ));\n return;\n }\n\n // The frame has entered the socket, so the server still owns this credit.\n // Retain correlation and credit until the final frame or grace expiry.\n pending.timedOut = true;\n pending.lateResponseTimer = setLongTimeout(() => {\n if (operations.getPending(requestId) !== pending) return;\n operations.retireConnection(new FerricStoreError(\n `FerricStore timed-out response did not arrive within ${timeoutMs}ms grace period`\n ));\n }, timeoutMs);\n pending.lateResponseTimer.unref();\n const discardedChunks = operations.discardRequest(requestId);\n if (discardedChunks.frames > 0) {\n pending.discardedResponseBytes =\n (pending.discardedResponseBytes ?? 0) + discardedChunks.bytes;\n pending.discardedResponseFrames =\n (pending.discardedResponseFrames ?? 0) + discardedChunks.frames;\n }\n pending.reject(new RequestTimeoutError(timeoutMs, \"possibly_sent\"));\n}\n\nexport function nativeResponseTimeoutMs(\n command: ProtocolCommand,\n requestTimeoutMs: number\n): number | undefined {\n const blockMs = command.serverBlockMs;\n if (blockMs == null) return requestTimeoutMs;\n if (blockMs === 0) return undefined;\n return Math.min(Number.MAX_SAFE_INTEGER, requestTimeoutMs + blockMs);\n}\n","import { FerricStoreError } from \"./errors.js\";\nimport { FLAG_MORE_CHUNKS, type ResponseFrame } from \"./protocol.js\";\n\nexport class NativeChunkAssembler {\n private readonly chunks = new Map<string, Buffer[]>();\n private readonly keysByRequest = new Map<bigint, Set<string>>();\n private readonly bytesByKey = new Map<string, number>();\n private readonly framesByKey = new Map<string, number>();\n private totalBytes = 0;\n private totalFrames = 0;\n\n constructor(\n private readonly maxChunkBytes: number,\n private readonly maxChunkFrames: number,\n private maxResponseBytes: number\n ) {}\n\n updateMaxResponseBytes(limit: number): void {\n this.maxResponseBytes = Math.min(this.maxResponseBytes, limit);\n }\n\n assemble(frame: ResponseFrame): ResponseFrame | undefined {\n const key = `${frame.requestId}:${frame.opcode}:${frame.laneId}`;\n const previous = this.chunks.get(key);\n if ((frame.flags & FLAG_MORE_CHUNKS) === 0 && previous == null) return frame;\n\n const bytes = (this.bytesByKey.get(key) ?? 0) + frame.body.byteLength;\n const frames = (this.framesByKey.get(key) ?? 0) + 1;\n this.assertLimits(bytes, frames, frame.body.byteLength);\n this.totalBytes += frame.body.byteLength;\n this.totalFrames += 1;\n this.bytesByKey.set(key, bytes);\n this.framesByKey.set(key, frames);\n\n if (previous == null) {\n this.chunks.set(key, [frame.body]);\n let keys = this.keysByRequest.get(frame.requestId);\n if (keys == null) {\n keys = new Set<string>();\n this.keysByRequest.set(frame.requestId, keys);\n }\n keys.add(key);\n } else {\n previous.push(frame.body);\n }\n if ((frame.flags & FLAG_MORE_CHUNKS) !== 0) return undefined;\n\n const chunks = this.chunks.get(key);\n if (chunks == null) return frame;\n try {\n const body = Buffer.concat(chunks, bytes);\n return { ...frame, body, bodyLength: body.byteLength };\n } finally {\n this.release(key, frame.requestId);\n }\n }\n\n discardRequest(requestId: bigint): { bytes: number; frames: number } {\n const keys = this.keysByRequest.get(requestId);\n if (keys == null) return { bytes: 0, frames: 0 };\n let bytes = 0;\n let frames = 0;\n for (const key of [...keys]) {\n bytes += this.bytesByKey.get(key) ?? 0;\n frames += this.framesByKey.get(key) ?? 0;\n this.release(key, requestId);\n }\n return { bytes, frames };\n }\n\n clear(): void {\n this.chunks.clear();\n this.keysByRequest.clear();\n this.bytesByKey.clear();\n this.framesByKey.clear();\n this.totalBytes = 0;\n this.totalFrames = 0;\n }\n\n private assertLimits(bytes: number, frames: number, addedBytes: number): void {\n if (bytes > this.maxChunkBytes) {\n throw new FerricStoreError(`native protocol chunked response exceeded ${this.maxChunkBytes} bytes`);\n }\n if (frames > this.maxChunkFrames) {\n throw new FerricStoreError(`native protocol chunked response exceeded ${this.maxChunkFrames} frames`);\n }\n if (bytes > this.maxResponseBytes) {\n throw new FerricStoreError(`native protocol response exceeded ${this.maxResponseBytes} bytes`);\n }\n if (this.totalBytes + addedBytes > this.maxChunkBytes) {\n throw new FerricStoreError(`native protocol buffered chunk responses exceeded ${this.maxChunkBytes} bytes`);\n }\n if (this.totalFrames + 1 > this.maxChunkFrames) {\n throw new FerricStoreError(`native protocol buffered chunk responses exceeded ${this.maxChunkFrames} frames`);\n }\n }\n\n private release(key: string, requestId: bigint): void {\n this.totalBytes = Math.max(0, this.totalBytes - (this.bytesByKey.get(key) ?? 0));\n this.totalFrames = Math.max(0, this.totalFrames - (this.framesByKey.get(key) ?? 0));\n this.chunks.delete(key);\n this.bytesByKey.delete(key);\n this.framesByKey.delete(key);\n const keys = this.keysByRequest.get(requestId);\n keys?.delete(key);\n if (keys?.size === 0) this.keysByRequest.delete(requestId);\n }\n}\n","import { Buffer } from \"node:buffer\";\nimport { FerricStoreError } from \"./errors.js\";\nimport type { NativeProtocolEvent } from \"./adapter-types.js\";\nimport { NativeChunkAssembler } from \"./native-chunk-assembler.js\";\nimport { NativeHeartbeat } from \"./native-heartbeat.js\";\nimport type { PendingRequest } from \"./native-pending-request.js\";\nimport {\n EMPTY_COMPACT_RESPONSE_OPCODES,\n type CompactResponseOpcodes\n} from \"./native-negotiation.js\";\nimport { NativeReceiveBuffer } from \"./native-receive-buffer.js\";\nimport {\n FLAG_MORE_CHUNKS,\n MAX_FRAMES_PER_DECODE,\n OPCODES,\n decodeResponse,\n type ResponseFrame\n} from \"./protocol.js\";\n\ninterface NativeResponseHandlerOptions {\n readonly applyFlowControlLimits: (value: unknown) => void;\n readonly beginDraining: () => void;\n readonly chunkAssembler: NativeChunkAssembler;\n readonly compactResponseOpcodes?: () => CompactResponseOpcodes;\n readonly destroy: (error?: Error) => void;\n readonly failAll: (reason: unknown, connectionClosed: boolean, message?: string) => void;\n readonly heartbeat: NativeHeartbeat;\n readonly maxChunkBytes: number;\n readonly maxChunkFrames: number;\n readonly maxFrameBytes: number;\n readonly maxResponseBytes: number;\n readonly onEvent?: (event: NativeProtocolEvent) => unknown;\n readonly pause: () => void;\n readonly pending: ReadonlyMap<bigint, PendingRequest>;\n readonly resume: () => void;\n readonly takePending: (requestId: bigint) => PendingRequest | undefined;\n}\n\n/** Correlate, decode, and bound inbound native protocol frames. */\nexport class NativeResponseHandler {\n private readonly receiveBuffer = new NativeReceiveBuffer();\n private drainScheduled = false;\n private paused = false;\n private stopped = false;\n private maxResponseBytes: number;\n\n constructor(private readonly options: NativeResponseHandlerOptions) {\n this.maxResponseBytes = options.maxResponseBytes;\n }\n\n updateMaxResponseBytes(limit: number): void {\n this.maxResponseBytes = Math.min(this.maxResponseBytes, limit);\n this.options.chunkAssembler.updateMaxResponseBytes(this.maxResponseBytes);\n }\n\n onData(chunk: Buffer): void {\n if (this.stopped) return;\n try {\n this.receiveBuffer.append(chunk);\n } catch (error) {\n this.fail(error);\n return;\n }\n if (!this.drainScheduled) this.drainFrames();\n }\n\n stop(): void {\n this.stopped = true;\n this.receiveBuffer.clear();\n }\n\n private drainFrames(): void {\n if (this.stopped) return;\n try {\n for (let count = 0; count < MAX_FRAMES_PER_DECODE; count += 1) {\n const frame = this.receiveBuffer.nextFrame(this.options.maxFrameBytes);\n if (frame == null) {\n this.resume();\n return;\n }\n this.handleFrame(frame);\n if (this.stopped) return;\n }\n this.scheduleDrain();\n } catch (error) {\n this.fail(error);\n }\n }\n\n private scheduleDrain(): void {\n if (this.drainScheduled || this.stopped) return;\n this.drainScheduled = true;\n if (!this.paused) {\n this.paused = true;\n this.options.pause();\n }\n setImmediate(() => {\n this.drainScheduled = false;\n this.drainFrames();\n });\n }\n\n private resume(): void {\n if (!this.paused) return;\n this.paused = false;\n this.options.resume();\n }\n\n private fail(error: unknown): void {\n this.stop();\n this.options.failAll(error, true, error instanceof Error ? error.message : String(error));\n this.options.destroy(error instanceof Error ? error : undefined);\n }\n\n private handleFrame(frame: ResponseFrame): void {\n this.options.heartbeat.recordInbound();\n if (frame.requestId === 0n) {\n if (frame.laneId !== 0) {\n throw new FerricStoreError(\"native protocol management frame used non-control lane\", {\n raw: frame\n });\n }\n if (\n frame.opcode !== OPCODES.event\n && frame.opcode !== OPCODES.goaway\n && frame.opcode !== OPCODES.windowUpdate\n ) {\n throw new FerricStoreError(`native protocol unsupported management opcode ${frame.opcode}`, {\n raw: frame\n });\n }\n const completeFrame = this.options.chunkAssembler.assemble(frame);\n if (completeFrame != null) this.handleManagementFrame(completeFrame);\n return;\n }\n const pending = this.options.pending.get(frame.requestId);\n if (pending == null) return;\n if (frame.opcode !== pending.opcode || frame.laneId !== pending.laneId) {\n throw new FerricStoreError(\"native protocol response correlation mismatch\", { raw: frame });\n }\n if (pending.timedOut) {\n this.discardTimedOutFrame(frame, pending);\n return;\n }\n const completeFrame = this.options.chunkAssembler.assemble(frame);\n if (completeFrame == null) return;\n if (completeFrame.body.byteLength > this.maxResponseBytes) {\n throw new FerricStoreError(\n `native protocol response exceeded ${this.maxResponseBytes} bytes`\n );\n }\n\n let value: unknown;\n let responseError: unknown;\n try {\n value = decodeResponse(completeFrame, pending.opcode, {\n ...pending,\n compactResponseOpcodes: this.options.compactResponseOpcodes?.() ?? EMPTY_COMPACT_RESPONSE_OPCODES\n });\n if (pending.opcode === OPCODES.windowUpdate) this.options.applyFlowControlLimits(value);\n } catch (error) {\n responseError = error;\n }\n const completed = this.options.takePending(frame.requestId);\n if (completed == null) return;\n if (responseError == null) completed.resolve(value);\n else completed.reject(responseError);\n }\n\n private discardTimedOutFrame(frame: ResponseFrame, pending: PendingRequest): void {\n const discardedResponseBytes = (pending.discardedResponseBytes ?? 0) + frame.body.byteLength;\n const discardedResponseFrames = (pending.discardedResponseFrames ?? 0) + 1;\n pending.discardedResponseBytes = discardedResponseBytes;\n pending.discardedResponseFrames = discardedResponseFrames;\n const chunked = discardedResponseFrames > 1 || (frame.flags & FLAG_MORE_CHUNKS) !== 0;\n if (\n discardedResponseBytes > this.maxResponseBytes ||\n (chunked && discardedResponseBytes > this.options.maxChunkBytes)\n ) {\n throw new FerricStoreError(\"native protocol discarded response exceeded configured byte limits\");\n }\n if (discardedResponseFrames > this.options.maxChunkFrames) {\n throw new FerricStoreError(\"native protocol discarded response exceeded configured frame limits\");\n }\n if ((frame.flags & FLAG_MORE_CHUNKS) === 0) this.options.takePending(frame.requestId);\n }\n\n private handleManagementFrame(frame: ResponseFrame): void {\n if (frame.body.byteLength > this.maxResponseBytes) {\n throw new FerricStoreError(\n `native protocol response exceeded ${this.maxResponseBytes} bytes`\n );\n }\n const value = decodeResponse(frame, frame.opcode, {\n compactResponseOpcodes: this.options.compactResponseOpcodes?.() ?? EMPTY_COMPACT_RESPONSE_OPCODES\n });\n if (frame.opcode === OPCODES.windowUpdate) this.options.applyFlowControlLimits(value);\n const event: NativeProtocolEvent = {\n flags: frame.flags,\n laneId: frame.laneId,\n opcode: frame.opcode,\n value\n };\n if (frame.opcode === OPCODES.goaway) this.options.beginDraining();\n try {\n const callback = this.options.onEvent?.(event);\n if (callback != null) void Promise.resolve(callback).catch(() => undefined);\n } catch {\n // User event handlers must not corrupt transport state.\n }\n }\n}\n","import { FerricStoreError } from \"./errors.js\";\nimport { HEADER_SIZE, tryDecodeFrame, type ResponseFrame } from \"./protocol.js\";\n\nconst FRAME_ASSEMBLY_PAGE_BYTES = 64 * 1024;\n\nclass NativeFrameAssembly {\n readonly pages: Buffer[] = [];\n private pageBytes = 0;\n private receivedBytes = 0;\n\n constructor(private readonly frameLength: number) {}\n\n get complete(): boolean {\n return this.receivedBytes === this.frameLength;\n }\n\n append(chunk: Buffer): number {\n let sourceOffset = 0;\n while (sourceOffset < chunk.byteLength && this.receivedBytes < this.frameLength) {\n let page = this.pages[this.pages.length - 1];\n if (page == null || this.pageBytes === page.byteLength) {\n page = Buffer.allocUnsafe(Math.min(\n FRAME_ASSEMBLY_PAGE_BYTES,\n this.frameLength - this.receivedBytes\n ));\n this.pages.push(page);\n this.pageBytes = 0;\n }\n const bytes = Math.min(\n chunk.byteLength - sourceOffset,\n page.byteLength - this.pageBytes,\n this.frameLength - this.receivedBytes\n );\n chunk.copy(page, this.pageBytes, sourceOffset, sourceOffset + bytes);\n this.pageBytes += bytes;\n this.receivedBytes += bytes;\n sourceOffset += bytes;\n }\n return sourceOffset;\n }\n\n finish(): Buffer {\n if (!this.complete) throw new FerricStoreError(\"native receive buffer frame is incomplete\");\n const first = this.pages[0];\n if (first == null) throw new FerricStoreError(\"native receive buffer frame is empty\");\n return this.pages.length === 1 ? first : Buffer.concat(this.pages, this.frameLength);\n }\n}\n\nexport class NativeReceiveBuffer {\n private assembly?: NativeFrameAssembly;\n private readonly chunks: Buffer[] = [];\n private bufferedBytes = 0;\n private chunkIndex = 0;\n private chunkOffset = 0;\n\n append(chunk: Buffer): void {\n if (chunk.byteLength === 0) return;\n const consumed = this.assembly?.append(chunk) ?? 0;\n if (consumed < chunk.byteLength) {\n const remaining = consumed === 0 ? chunk : chunk.subarray(consumed);\n this.chunks.push(remaining);\n this.bufferedBytes += remaining.byteLength;\n }\n }\n\n clear(): void {\n this.assembly = undefined;\n this.chunks.length = 0;\n this.bufferedBytes = 0;\n this.chunkIndex = 0;\n this.chunkOffset = 0;\n }\n\n nextFrame(maxFrameBytes: number): ResponseFrame | undefined {\n const assembly = this.assembly;\n if (assembly != null) {\n if (!assembly.complete) return undefined;\n this.assembly = undefined;\n return this.decodeFrame(assembly.finish(), maxFrameBytes);\n }\n if (this.bufferedBytes < HEADER_SIZE) return undefined;\n const header = this.peek(HEADER_SIZE);\n tryDecodeFrame(header, maxFrameBytes);\n const frameLength = HEADER_SIZE + header.readUInt32BE(20);\n if (this.bufferedBytes < frameLength) {\n this.assembly = new NativeFrameAssembly(frameLength);\n this.drainInto(this.assembly);\n return undefined;\n }\n return this.decodeFrame(this.read(frameLength), maxFrameBytes);\n }\n\n private decodeFrame(encoded: Buffer, maxFrameBytes: number): ResponseFrame {\n const parsed = tryDecodeFrame(encoded, maxFrameBytes);\n if (parsed?.rest.byteLength !== 0) {\n throw new FerricStoreError(\"invalid buffered native protocol frame\");\n }\n return parsed.frame;\n }\n\n private drainInto(assembly: NativeFrameAssembly): void {\n while (this.bufferedBytes > 0) {\n const chunk = this.chunks[this.chunkIndex];\n if (chunk == null) throw new FerricStoreError(\"native receive buffer underflow\");\n const bytes = assembly.append(chunk.subarray(this.chunkOffset));\n if (bytes <= 0) throw new FerricStoreError(\"native receive buffer frame overflow\");\n this.bufferedBytes -= bytes;\n this.chunkOffset += bytes;\n if (this.chunkOffset === chunk.byteLength) {\n this.chunkIndex += 1;\n this.chunkOffset = 0;\n }\n }\n this.compact();\n }\n\n private peek(length: number): Buffer {\n const first = this.chunks[this.chunkIndex];\n if (first == null) throw new FerricStoreError(\"native receive buffer underflow\");\n const firstBytes = first.byteLength - this.chunkOffset;\n if (firstBytes >= length) return first.subarray(this.chunkOffset, this.chunkOffset + length);\n\n const out = Buffer.allocUnsafe(length);\n let outputOffset = 0;\n let chunkIndex = this.chunkIndex;\n let chunkOffset = this.chunkOffset;\n while (outputOffset < length) {\n const chunk = this.chunks[chunkIndex];\n if (chunk == null) throw new FerricStoreError(\"native receive buffer underflow\");\n const bytes = Math.min(length - outputOffset, chunk.byteLength - chunkOffset);\n chunk.copy(out, outputOffset, chunkOffset, chunkOffset + bytes);\n outputOffset += bytes;\n chunkIndex += 1;\n chunkOffset = 0;\n }\n return out;\n }\n\n private read(length: number): Buffer {\n const out = this.peek(length);\n let remaining = length;\n while (remaining > 0) {\n const chunk = this.chunks[this.chunkIndex];\n if (chunk == null) throw new FerricStoreError(\"native receive buffer underflow\");\n const bytes = Math.min(remaining, chunk.byteLength - this.chunkOffset);\n remaining -= bytes;\n this.chunkOffset += bytes;\n if (this.chunkOffset === chunk.byteLength) {\n this.chunkIndex += 1;\n this.chunkOffset = 0;\n }\n }\n this.bufferedBytes -= length;\n this.compact();\n return out;\n }\n\n private compact(): void {\n if (this.chunkIndex === this.chunks.length) {\n this.chunks.length = 0;\n this.chunkIndex = 0;\n this.chunkOffset = 0;\n } else if (this.chunkIndex >= 1_024 && this.chunkIndex * 2 >= this.chunks.length) {\n this.chunks.splice(0, this.chunkIndex);\n this.chunkIndex = 0;\n }\n }\n}\n","import { OPCODES, type ProtocolCommand } from \"./protocol-constants.js\";\n\nconst MAX_REQUEST_ID = 0xffff_ffff_ffff_ffffn;\n\nexport class NativeRequestScheduler {\n private dataLane = 0;\n private requestId = 0n;\n\n nextRequestId(): bigint {\n this.requestId = this.requestId === MAX_REQUEST_ID ? 1n : this.requestId + 1n;\n return this.requestId;\n }\n\n assignLane(command: ProtocolCommand, protocolLanes: number): ProtocolCommand {\n if (command.laneId != null) return command;\n if (command.opcode < 0x0100 && command.opcode !== OPCODES.pipeline) {\n return { ...command, laneId: 0 };\n }\n this.dataLane = (this.dataLane % protocolLanes) + 1;\n return { ...command, laneId: this.dataLane };\n }\n}\n","import type net from \"node:net\";\nimport type tls from \"node:tls\";\nimport { Buffer } from \"node:buffer\";\nimport { OverloadedError } from \"./errors.js\";\nimport {\n possiblySentConnectionClosedError,\n unsentConnectionClosedError\n} from \"./adapter-connection-errors.js\";\n\ninterface QueuedWrite {\n readonly bytes: number;\n frame?: Buffer;\n readonly requestId: bigint;\n}\n\nexport class NativeWriteQueue {\n private readonly queuedWrites: QueuedWrite[] = [];\n private readonly queuedWritesByRequest = new Map<bigint, QueuedWrite>();\n private queuedWriteBytes = 0;\n private queuedWriteHead = 0;\n private queuedWriteTombstones = 0;\n private writeBlocked = false;\n\n constructor(\n private readonly socket: net.Socket | tls.TLSSocket,\n private readonly maxQueuedWriteBytes: number,\n private readonly isClosed: () => boolean,\n private readonly hasPending: (requestId: bigint) => boolean,\n private readonly rejectPending: (requestId: bigint, error: Error) => void\n ) {}\n\n cancel(requestId: bigint): void {\n const queued = this.queuedWritesByRequest.get(requestId);\n if (queued?.frame == null) return;\n queued.frame = undefined;\n this.queuedWritesByRequest.delete(requestId);\n this.queuedWriteBytes = Math.max(0, this.queuedWriteBytes - queued.bytes);\n this.queuedWriteTombstones += 1;\n this.compactTombstones();\n }\n\n clear(): void {\n this.queuedWrites.length = 0;\n this.queuedWritesByRequest.clear();\n this.queuedWriteBytes = 0;\n this.queuedWriteHead = 0;\n this.queuedWriteTombstones = 0;\n this.writeBlocked = false;\n }\n\n flush(): void {\n if (this.isClosed()) {\n this.clear();\n return;\n }\n this.writeBlocked = false;\n while (!this.writeBlocked && this.queuedWriteHead < this.queuedWrites.length) {\n const queued = this.queuedWrites[this.queuedWriteHead];\n this.queuedWriteHead += 1;\n if (queued?.frame == null) {\n if (queued != null) {\n this.queuedWriteTombstones = Math.max(0, this.queuedWriteTombstones - 1);\n }\n continue;\n }\n const frame = queued.frame;\n queued.frame = undefined;\n this.queuedWritesByRequest.delete(queued.requestId);\n this.queuedWriteBytes = Math.max(0, this.queuedWriteBytes - queued.bytes);\n if (this.hasPending(queued.requestId)) this.writeFrame(queued.requestId, frame);\n }\n if (this.queuedWriteHead === this.queuedWrites.length) {\n this.queuedWrites.length = 0;\n this.queuedWriteHead = 0;\n this.queuedWriteTombstones = 0;\n } else if (this.queuedWriteHead >= 1_024 && this.queuedWriteHead * 2 >= this.queuedWrites.length) {\n this.queuedWrites.splice(0, this.queuedWriteHead);\n this.queuedWriteHead = 0;\n }\n }\n\n has(requestId: bigint): boolean {\n return this.queuedWritesByRequest.has(requestId);\n }\n\n rejectQueued(error: Error): void {\n for (const requestId of [...this.queuedWritesByRequest.keys()]) {\n this.rejectPending(requestId, error);\n this.cancel(requestId);\n }\n }\n\n write(requestId: bigint, frame: Buffer): void {\n if (!this.writeBlocked) {\n this.writeFrame(requestId, frame);\n return;\n }\n if (frame.byteLength > this.maxQueuedWriteBytes - this.queuedWriteBytes) {\n this.rejectPending(requestId, new OverloadedError(\n \"FerricStore client write queue is full\",\n { reason: \"client_write_queue_full\" }\n ));\n return;\n }\n const queued: QueuedWrite = { bytes: frame.byteLength, frame, requestId };\n this.queuedWrites.push(queued);\n this.queuedWritesByRequest.set(requestId, queued);\n this.queuedWriteBytes += queued.bytes;\n }\n\n private compactTombstones(): void {\n if (this.queuedWritesByRequest.size === 0) {\n this.queuedWrites.length = 0;\n this.queuedWriteHead = 0;\n this.queuedWriteTombstones = 0;\n return;\n }\n const remaining = this.queuedWrites.length - this.queuedWriteHead;\n if (this.queuedWriteTombstones < 1_024 || this.queuedWriteTombstones * 2 < remaining) return;\n let writeIndex = 0;\n for (let index = this.queuedWriteHead; index < this.queuedWrites.length; index += 1) {\n const queued = this.queuedWrites[index];\n if (queued?.frame != null) {\n this.queuedWrites[writeIndex] = queued;\n writeIndex += 1;\n }\n }\n this.queuedWrites.length = writeIndex;\n this.queuedWriteHead = 0;\n this.queuedWriteTombstones = 0;\n }\n\n private writeFrame(requestId: bigint, frame: Buffer): void {\n try {\n const accepted = this.socket.write(frame, (error) => {\n if (error != null) {\n this.rejectPending(requestId, possiblySentConnectionClosedError(error));\n }\n });\n if (!accepted) this.writeBlocked = true;\n } catch (error) {\n this.rejectPending(requestId, unsentConnectionClosedError(error));\n }\n }\n}\n","import { startupLimits } from \"./native-connection.js\";\nimport {\n EMPTY_COMPACT_RESPONSE_OPCODES,\n nativeNegotiation,\n type CompactResponseOpcodes\n} from \"./native-negotiation.js\";\nimport { UNAUTHENTICATED_MAX_FRAME_BYTES } from \"./native-adapter-config.js\";\n\nexport interface AppliedNativeCapabilities {\n readonly laneQueue?: number;\n readonly lanes?: number;\n readonly maxResponseBytes?: number;\n readonly pipelineCommands?: number;\n}\n\n/** Connection-local HELLO capabilities and pre-auth request-size enforcement. */\nexport class NativeConnectionCapabilities {\n compactResponseOpcodes: CompactResponseOpcodes = EMPTY_COMPACT_RESPONSE_OPCODES;\n requestFrameBytes: number;\n private negotiatedRequestFrameBytes: number;\n\n constructor(private readonly configuredRequestFrameBytes: number) {\n this.negotiatedRequestFrameBytes = configuredRequestFrameBytes;\n this.requestFrameBytes = Math.min(configuredRequestFrameBytes, UNAUTHENTICATED_MAX_FRAME_BYTES);\n }\n\n apply(value: unknown): AppliedNativeCapabilities {\n const limits = startupLimits(value);\n const negotiation = nativeNegotiation(value);\n this.compactResponseOpcodes = negotiation.compactResponseOpcodes;\n if (limits.frameBytes != null) {\n this.negotiatedRequestFrameBytes = Math.min(\n this.configuredRequestFrameBytes,\n limits.frameBytes\n );\n this.requestFrameBytes = Math.min(this.requestFrameBytes, this.negotiatedRequestFrameBytes);\n }\n return {\n ...(limits.laneQueue == null ? {} : { laneQueue: limits.laneQueue }),\n ...(limits.lanes == null ? {} : { lanes: limits.lanes }),\n ...(negotiation.maxResponseBytes == null ? {} : { maxResponseBytes: negotiation.maxResponseBytes }),\n ...(limits.pipelineCommands == null ? {} : { pipelineCommands: limits.pipelineCommands })\n };\n }\n\n activateAuthenticated(): void {\n this.requestFrameBytes = this.negotiatedRequestFrameBytes;\n }\n}\n","import type { CommandExecutor } from \"./adapter-types.js\";\nimport type { CommandArgument } from \"./internal.js\";\nexport type {\n CommandExecutor,\n NativeAdapterOptions,\n NativeClientOptions,\n NativeProtocolEvent,\n ReconnectOptions,\n TopologyNativeAdapterOptions\n} from \"./adapter-types.js\";\nimport { assertSafeVariadicDispatch } from \"./variadic-dispatch.js\";\nexport { NativeAdapter } from \"./native-adapter.js\";\nexport { snapshotCommandArguments } from \"./command-snapshot.js\";\nexport {\n assertDensePipelineCommands,\n attachPipelineItemRejectionFlags,\n executeCommandArraysIndividually,\n executeCommandsIndividually,\n pipelineErrorCollectingOptions,\n pipelineFallbackOptions,\n pipelineItemRejectionFlags,\n pipelineSubsetOptions,\n snapshotPipelineCommands,\n snapshotPipelineOptions,\n surfaceFirstPipelineItemError,\n validatePipelineResponse,\n type ExecutePipelineOptions\n} from \"./pipeline-execution.js\";\n\n/** @internal Dispatch an argument array while retaining compatibility with custom executors. */\nexport function executeCommandArgs(\n executor: CommandExecutor,\n args: readonly CommandArgument[]\n): Promise<unknown> {\n if (executor.executeCommandArgs != null) return executor.executeCommandArgs(args);\n assertSafeVariadicDispatch(args.length, \"executeCommandArgs\");\n return executor.executeCommand(...args);\n}\n","import { Buffer } from \"node:buffer\";\nimport {\n executeCommandArgs,\n type CommandExecutor,\n type ExecutePipelineOptions,\n type ReconnectOptions\n} from \"./adapters.js\";\nimport { ConnectionClosedError, FerricStoreError } from \"./errors.js\";\nimport { sleep, type Command, type CommandArgument } from \"./internal.js\";\nimport { snapshotCommandArguments } from \"./command-snapshot.js\";\nimport {\n executeCommandArraysIndividually,\n pipelineFallbackOptions,\n snapshotPipelineCommands,\n snapshotPipelineOptions\n} from \"./pipeline-execution.js\";\nimport { assertCommandHasStableConnectionState } from \"./protocol.js\";\nimport type { RoutingRoute, RoutingTopology } from \"./topology.js\";\n\nexport class ReconnectingExecutor implements CommandExecutor {\n private readonly baseDelayMs: number;\n private closed = false;\n private closePromise?: Promise<void>;\n private readonly jitterPct: number;\n private readonly maxDelayMs: number;\n private readonly maxRetries: number;\n private readonly retryAbortController = new AbortController();\n private executorPromise: Promise<CommandExecutor>;\n private reconnectPromise?: Promise<CommandExecutor>;\n\n constructor(\n private readonly createExecutor: (signal?: AbortSignal) => Promise<CommandExecutor>,\n options: ReconnectOptions = {}\n ) {\n const captured = { ...options };\n this.baseDelayMs = normalizeNonNegativeInteger(captured.baseDelayMs ?? 25, 25);\n this.maxDelayMs = Math.max(\n this.baseDelayMs,\n normalizeNonNegativeInteger(captured.maxDelayMs ?? 1_000, 1_000)\n );\n this.jitterPct = Math.min(100, normalizeNonNegativeInteger(captured.jitterPct ?? 20, 20));\n this.maxRetries = normalizeNonNegativeInteger(captured.maxRetries ?? 1, 1);\n this.executorPromise = createExecutor(this.retryAbortController.signal);\n void this.executorPromise.catch(() => undefined);\n }\n\n async executeCommand(...args: CommandArgument[]): Promise<unknown> {\n return await this.executeCommandArgs(args);\n }\n\n async executeCommandArgs(args: readonly CommandArgument[]): Promise<unknown> {\n const snapshot = snapshotCommandArguments(args);\n assertCommandHasStableConnectionState(snapshot);\n return await this.withReconnect((executor) => executeCommandArgs(executor, snapshot));\n }\n\n async ready(): Promise<void> {\n await this.executorPromise;\n }\n\n async executePipeline(\n commands: readonly Command[],\n options: ExecutePipelineOptions = {}\n ): Promise<unknown[]> {\n const snapshot = snapshotPipelineCommands(commands);\n const snapshotOptions = snapshotPipelineOptions(options) ?? {};\n for (const command of snapshot) assertCommandHasStableConnectionState(command);\n if (this.closed) throw new FerricStoreError(\"FerricStore client is closed\");\n const initialExecutor = await this.executorPromise;\n if (this.closed) throw new FerricStoreError(\"FerricStore client is closed\");\n if (initialExecutor.executePipeline == null) {\n return await executeCommandArraysIndividually(\n async (command) => await this.executeCommandArgs(command),\n snapshot,\n pipelineFallbackOptions(snapshot, snapshotOptions)\n );\n }\n try {\n return await initialExecutor.executePipeline(snapshot, snapshotOptions);\n } catch (error) {\n // A native pipeline can span requests; never replay possibly confirmed effects.\n if (!this.closed && this.maxRetries > 0 && isReconnectableClosedConnectionError(error)) {\n await this.reconnect(initialExecutor).catch(() => undefined);\n }\n throw error;\n }\n }\n\n async executeFusedPipeline(\n commands: readonly Command[],\n options: ExecutePipelineOptions = {}\n ): Promise<unknown[] | undefined> {\n const snapshot = snapshotPipelineCommands(commands);\n const snapshotOptions = snapshotPipelineOptions(options) ?? {};\n for (const command of snapshot) assertCommandHasStableConnectionState(command);\n if (this.closed) throw new FerricStoreError(\"FerricStore client is closed\");\n const initialExecutor = await this.executorPromise;\n if (this.closed) throw new FerricStoreError(\"FerricStore client is closed\");\n if (initialExecutor.executeFusedPipeline == null) return undefined;\n try {\n return await initialExecutor.executeFusedPipeline(snapshot, snapshotOptions);\n } catch (error) {\n if (!this.closed && this.maxRetries > 0 && isReconnectableClosedConnectionError(error)) {\n await this.reconnect(initialExecutor).catch(() => undefined);\n }\n throw error;\n }\n }\n\n async refreshTopology(): Promise<RoutingTopology> {\n return await this.withReconnect(async (executor) => {\n if (executor.refreshTopology == null) {\n throw new FerricStoreError(\"topology refresh requires a topology-aware native executor\");\n }\n return await executor.refreshTopology();\n }, isReadOnlyReconnectableClosedConnectionError);\n }\n\n async route(key: string | Buffer): Promise<RoutingRoute> {\n return await this.withReconnect(async (executor) => {\n if (executor.route == null) {\n throw new FerricStoreError(\"route lookup requires a topology-aware native executor\");\n }\n return await executor.route(key);\n }, isReadOnlyReconnectableClosedConnectionError);\n }\n\n async close(): Promise<void> {\n if (this.closePromise != null) {\n await this.closePromise;\n return;\n }\n this.closed = true;\n this.retryAbortController.abort(new FerricStoreError(\"FerricStore client is closed\"));\n const executorPromise = this.executorPromise;\n const reconnectPromise = this.reconnectPromise;\n this.closePromise = (async () => {\n let closeError: unknown;\n let closeFailed = false;\n const executor = await executorPromise.catch(() => undefined);\n try {\n await Promise.resolve(executor?.close?.());\n } catch (error) {\n closeFailed = true;\n closeError = error;\n }\n await reconnectPromise?.catch(() => undefined);\n if (closeFailed) throw closeError;\n })();\n await this.closePromise;\n }\n\n private async withReconnect<T>(\n operation: (executor: CommandExecutor) => Promise<T>,\n reconnectable: (error: unknown) => boolean = isReconnectableClosedConnectionError\n ): Promise<T> {\n let executor = await this.executorPromise;\n let retries = 0;\n for (;;) {\n if (this.closed) throw new FerricStoreError(\"FerricStore client is closed\");\n try {\n return await operation(executor);\n } catch (error) {\n if (this.closed || retries >= this.maxRetries || !reconnectable(error)) throw error;\n for (;;) {\n retries += 1;\n try {\n executor = await this.reconnect(executor);\n break;\n } catch (reconnectError) {\n if (this.closed || retries >= this.maxRetries) throw reconnectError;\n await this.waitBeforeReconnect(retries);\n }\n }\n }\n }\n }\n\n private async waitBeforeReconnect(failedAttempts: number): Promise<void> {\n const exponent = Math.min(30, Math.max(0, failedAttempts - 1));\n const base = Math.min(this.maxDelayMs, this.baseDelayMs * 2 ** exponent);\n const jitter = base * (this.jitterPct / 100) * Math.random();\n try {\n await sleep(Math.min(this.maxDelayMs, base + jitter), this.retryAbortController.signal);\n } catch (error) {\n if (this.closed) throw new FerricStoreError(\"FerricStore client is closed\", { cause: error });\n throw error;\n }\n }\n\n private async reconnect(staleExecutor: CommandExecutor): Promise<CommandExecutor> {\n if (this.closed) throw new FerricStoreError(\"FerricStore client is closed\");\n const competingReconnect = this.reconnectPromise;\n if (competingReconnect != null) return await competingReconnect;\n const observedExecutorPromise = this.executorPromise;\n const currentExecutor = await observedExecutorPromise.catch(() => undefined);\n if (this.closed) throw new FerricStoreError(\"FerricStore client is closed\");\n if (this.reconnectPromise != null) return await this.reconnectPromise;\n if (this.executorPromise !== observedExecutorPromise) return await this.executorPromise;\n if (currentExecutor != null && currentExecutor !== staleExecutor) return currentExecutor;\n this.reconnectPromise = (async () => {\n await Promise.resolve(staleExecutor.close?.()).catch(() => undefined);\n const nextExecutor = await this.createExecutor(this.retryAbortController.signal);\n if (this.closed) {\n await Promise.resolve(nextExecutor.close?.()).catch(() => undefined);\n throw new FerricStoreError(\"FerricStore client is closed\");\n }\n this.executorPromise = Promise.resolve(nextExecutor);\n return nextExecutor;\n })().finally(() => {\n this.reconnectPromise = undefined;\n });\n return await this.reconnectPromise;\n }\n}\n\nexport function isReconnectableClosedConnectionError(error: unknown): boolean {\n return error instanceof ConnectionClosedError && error.requestDisposition === \"unsent\";\n}\n\nfunction isReadOnlyReconnectableClosedConnectionError(error: unknown): boolean {\n const pending: unknown[] = [error];\n const seen = new Set<unknown>();\n for (let visited = 0; visited < 16 && pending.length > 0; visited += 1) {\n const current = pending.pop();\n if (isReconnectableClosedConnectionError(current)) return true;\n if (\n current == null ||\n (typeof current !== \"object\" && typeof current !== \"function\") ||\n seen.has(current)\n ) continue;\n seen.add(current);\n if (current instanceof Error && current.cause != null) pending.push(current.cause);\n if (current instanceof FerricStoreError && current.raw != null) pending.push(current.raw);\n }\n return false;\n}\n\nfunction normalizeNonNegativeInteger(value: number, fallback: number): number {\n return Number.isFinite(value) ? Math.max(0, Math.trunc(value)) : fallback;\n}\n","import { Buffer } from \"node:buffer\";\nimport { FerricStoreError } from \"./errors.js\";\nimport type { Command, CommandArgument } from \"./internal.js\";\nimport {\n assertCommandHasStableConnectionState,\n assertCommandDoesNotRequirePinnedConnection\n} from \"./protocol.js\";\nimport {\n NativeAdapter,\n pipelineFallbackOptions,\n snapshotCommandArguments,\n snapshotPipelineCommands,\n snapshotPipelineOptions,\n type CommandExecutor,\n type ExecutePipelineOptions,\n type NativeAdapterOptions,\n type TopologyNativeAdapterOptions\n} from \"./adapters.js\";\nimport { singleRouteForCommands } from \"./topology-routing.js\";\nimport { RoutingTopology, type RoutingRoute } from \"./routing-topology.js\";\nexport { RoutingTopology, type RoutingRoute } from \"./routing-topology.js\";\nimport {\n assertTopologyNativeAdapterOptions,\n isRetryableRouteError,\n nativeOnlyOptions,\n normalizeTopologyConcurrency,\n seedAuthIdentity,\n seedConnectionOptions,\n snapshotTopologyNativeAdapterOptions,\n waitForExplicitlySafeReroute,\n withSeedAuthDefaults\n} from \"./topology-options.js\";\nimport {\n connectionKeyForEndpoint,\n connectionKeyFromUrl,\n mapSettledWithConcurrency,\n nativeEventName,\n parseFerricUrl,\n urlFromEndpoint,\n type RoutingEndpoint\n} from \"./topology-utilities.js\";\nexport type { RoutingEndpoint } from \"./topology-utilities.js\";\nimport { TopologyEndpointTrust } from \"./topology-endpoint-trust.js\";\nexport type { EndpointPolicy } from \"./topology-endpoint-trust.js\";\nimport type { RefreshCandidate, RoutedCommandData } from \"./topology-execution-types.js\";\nimport { topologyRefreshCandidates } from \"./topology-refresh-candidates.js\";\nimport { topologyForInstallation } from \"./topology-installation.js\";\nimport { TopologyPipelineExecutor } from \"./topology-pipeline.js\";\nimport { TopologyAdapterRegistry } from \"./topology-adapter-registry.js\";\nimport { MAX_TOPOLOGY_PLANNING_ATTEMPTS, StaleTopologyRouteError, topologyRouteIsCurrent } from \"./topology-route-snapshot.js\";\nimport { topologyRouteData } from \"./topology-route-planner.js\";\nimport { TopologyScatterExecutor } from \"./topology-scatter.js\";\n\nexport class TopologyNativeAdapterPool implements CommandExecutor {\n private readonly adapterOptions: NativeAdapterOptions;\n private readonly seedAdapterOptions: NativeAdapterOptions;\n private closed = false;\n private readonly adapterRegistry = new TopologyAdapterRegistry(\n () => this.assertOpen(),\n () => this.closed\n );\n private closePromise?: Promise<void>;\n private readonly endpointTrust: TopologyEndpointTrust;\n private readonly seedUrlByEndpointKey: ReadonlyMap<string, string>;\n private readonly seedUrls: readonly string[];\n private readonly tls: boolean;\n private readonly topologyConcurrency: number;\n private readonly pipelineExecutor: TopologyPipelineExecutor;\n private readonly scatterExecutor: TopologyScatterExecutor;\n private readonly warmConnections: boolean;\n private eventRefreshPromise?: Promise<void>;\n private lastSuccessfulRefreshKey?: string;\n private refreshPromise?: Promise<RoutingTopology>;\n private refreshRequested = false;\n private topologyValue = RoutingTopology.empty();\n\n private constructor(urls: readonly string[], options: TopologyNativeAdapterOptions = {}) {\n if (urls.length === 0) {\n throw new FerricStoreError(\"TopologyNativeAdapterPool requires at least one seed URL\");\n }\n assertTopologyNativeAdapterOptions(options);\n const seedTransports = urls.map((url) => parseFerricUrl(url).tls);\n const tls = seedTransports[0] ?? false;\n if (seedTransports.some((secure) => secure !== tls)) {\n throw new FerricStoreError(\"TopologyNativeAdapterPool cannot mix ferric:// and ferrics:// seed URLs\");\n }\n this.topologyConcurrency = normalizeTopologyConcurrency(options.topologyConcurrency);\n this.warmConnections = options.warmConnections ?? false;\n this.tls = tls;\n const adapterOptions = nativeOnlyOptions(withSeedAuthDefaults(urls, options));\n const userOnEvent = adapterOptions.onEvent;\n this.adapterOptions = {\n ...adapterOptions,\n events: [...new Set([...(adapterOptions.events ?? []), \"TOPOLOGY_CHANGED\"])],\n onEvent: (event) => {\n try {\n const callback = userOnEvent?.(event);\n if (callback != null) {\n void Promise.resolve(callback).catch(() => undefined);\n }\n } catch {\n // User callbacks are isolated from topology maintenance.\n }\n if (!this.closed && nativeEventName(event) === \"TOPOLOGY_CHANGED\") {\n this.requestTopologyRefresh();\n }\n }\n };\n this.seedAdapterOptions = seedConnectionOptions(this.adapterOptions, options);\n const seedUrlByEndpointKey = new Map<string, string>();\n const seedAuthByEndpointKey = new Map<string, string>();\n for (const url of urls) {\n const key = connectionKeyFromUrl(url);\n const auth = seedAuthIdentity(url, this.seedAdapterOptions);\n const existingAuth = seedAuthByEndpointKey.get(key);\n if (existingAuth != null && existingAuth !== auth) {\n throw new FerricStoreError(`duplicate seed endpoint ${key} has conflicting credentials`);\n }\n seedAuthByEndpointKey.set(key, auth);\n if (!seedUrlByEndpointKey.has(key)) seedUrlByEndpointKey.set(key, url);\n }\n this.seedUrlByEndpointKey = seedUrlByEndpointKey;\n this.seedUrls = [...seedUrlByEndpointKey.values()];\n this.endpointTrust = new TopologyEndpointTrust(\n options.endpointPolicy,\n options.endpointValidator,\n new Set(seedUrlByEndpointKey.keys()),\n options.trustedHosts ?? [],\n this.tls\n );\n this.pipelineExecutor = new TopologyPipelineExecutor({\n concurrency: this.topologyConcurrency,\n controlPipeline: async (commands, pipelineOptions) =>\n await (await this.controlAdapter()).executePipeline(commands, pipelineOptions),\n executeCommandArgs: async (command) => await this.executeCommandArgs(command),\n executePipelineOnRoute: async (commands, route, pipelineOptions) =>\n await this.executePipelineOnRoute(commands, route, pipelineOptions),\n routeData: (args) => this.routeData(args)\n });\n this.scatterExecutor = new TopologyScatterExecutor({\n concurrency: this.topologyConcurrency,\n executeOnRoute: async (args, route) => await this.executeOnRoute(args, route),\n route: (key) => this.route(key)\n });\n }\n\n static async fromUrls(urls: readonly string[], options: TopologyNativeAdapterOptions = {}): Promise<TopologyNativeAdapterPool> {\n const pool = new TopologyNativeAdapterPool(urls, snapshotTopologyNativeAdapterOptions(options));\n try {\n await pool.refreshTopology();\n return pool;\n } catch (error) {\n await pool.close();\n throw error;\n }\n }\n\n get topology(): RoutingTopology {\n return this.topologyValue;\n }\n\n private requestTopologyRefresh(): void {\n this.refreshRequested = true;\n queueMicrotask(() => {\n if (this.closed || this.eventRefreshPromise != null) return;\n const refresh = this.drainTopologyRefreshRequests();\n this.eventRefreshPromise = refresh;\n void refresh.catch(() => undefined).finally(() => {\n if (this.eventRefreshPromise !== refresh) return;\n this.eventRefreshPromise = undefined;\n if (!this.closed && this.refreshRequested) this.requestTopologyRefresh();\n });\n });\n }\n\n private async drainTopologyRefreshRequests(): Promise<void> {\n while (!this.closed && this.refreshRequested) {\n if (this.refreshPromise != null) {\n await this.refreshPromise;\n continue;\n }\n this.refreshRequested = false;\n await this.refreshTopology();\n }\n }\n\n async refreshTopology(): Promise<RoutingTopology> {\n this.assertOpen();\n if (this.refreshPromise != null) {\n return await this.refreshPromise;\n }\n const refresh = this.loadTopology();\n this.refreshPromise = refresh;\n try {\n return await refresh;\n } finally {\n if (this.refreshPromise === refresh) {\n this.refreshPromise = undefined;\n }\n }\n }\n\n private async loadTopology(): Promise<RoutingTopology> {\n let lastError: unknown;\n for (const candidate of this.refreshCandidates()) {\n try {\n const adapter = candidate.seed\n ? await this.adapterForSeedUrl(candidate.url)\n : await this.adapterForEndpoint(candidate.endpoint);\n const candidateTopology = RoutingTopology.build(await adapter.executeCommand(\"SHARDS\"));\n this.endpointTrust.validateTopology(candidateTopology);\n this.assertOpen();\n const topology = topologyForInstallation(this.topologyValue, candidateTopology);\n const changed = topology !== this.topologyValue;\n if (changed) this.topologyValue = topology;\n this.lastSuccessfulRefreshKey = connectionKeyFromUrl(candidate.url);\n if (!changed) return topology;\n if (this.warmConnections) {\n await mapSettledWithConcurrency(\n [...topology.endpoints.values()],\n this.topologyConcurrency,\n async (endpoint) => await this.adapterForEndpoint(endpoint)\n );\n this.assertOpen();\n }\n this.retireRemovedAdapters(topology);\n return topology;\n } catch (error) {\n if (this.closed) {\n this.assertOpen();\n }\n lastError = error;\n }\n }\n throw new FerricStoreError(\"no FerricStore topology endpoint reachable\", { raw: lastError });\n }\n\n route(key: string | Buffer): RoutingRoute {\n this.assertOpen();\n const route = this.topologyValue.routeKey(key);\n this.endpointTrust.validate(route.endpoint);\n return route;\n }\n\n async executeCommand(...args: CommandArgument[]): Promise<unknown> {\n return await this.executeCommandArgs(args);\n }\n\n async executeCommandArgs(args: readonly CommandArgument[]): Promise<unknown> {\n this.assertOpen();\n const snapshot = snapshotCommandArguments(args);\n assertCommandHasStableConnectionState(snapshot);\n let rerouteAttempt = 0;\n for (let planningAttempt = 0; planningAttempt < MAX_TOPOLOGY_PLANNING_ATTEMPTS; planningAttempt += 1) {\n const routed = this.routeData(snapshot);\n if (routed == null) {\n const scattered = await this.scatterExecutor.execute(snapshot);\n if (scattered.handled) {\n return scattered.value;\n }\n return await (await this.controlAdapter()).executeCommandArgs(snapshot);\n }\n\n const adapter = await this.adapterForCurrentRoute(routed.route);\n if (adapter == null) continue;\n try {\n return routed.command == null\n ? await adapter.executeCommandOnLane(snapshot, routed.route.laneId)\n : await adapter.executeProtocolCommand(routed.command, routed.route.laneId);\n } catch (error) {\n if (await this.refreshAndCanRetrySafeReroute(error, rerouteAttempt)) {\n rerouteAttempt += 1;\n continue;\n }\n throw error;\n }\n }\n throw new StaleTopologyRouteError();\n }\n\n async executePipeline(commands: readonly Command[], options: ExecutePipelineOptions = {}): Promise<unknown[]> {\n this.assertOpen();\n const snapshot = snapshotPipelineCommands(commands);\n const snapshotOptions = snapshotPipelineOptions(options) ?? {};\n if (snapshot.length === 0) return [];\n for (const command of snapshot) {\n assertCommandDoesNotRequirePinnedConnection(command);\n assertCommandHasStableConnectionState(command);\n }\n\n for (let planningAttempt = 0; planningAttempt < MAX_TOPOLOGY_PLANNING_ATTEMPTS; planningAttempt += 1) {\n const route = singleRouteForCommands(snapshot, (command) => this.routeData(command));\n if (route == null) {\n return await this.executeSplitPipeline(snapshot, pipelineFallbackOptions(snapshot, snapshotOptions));\n }\n try {\n return await this.executePipelineOnRoute(snapshot, route, snapshotOptions);\n } catch (error) {\n if (error instanceof StaleTopologyRouteError) continue;\n throw error;\n }\n }\n throw new StaleTopologyRouteError();\n }\n\n async executeFusedPipeline(\n commands: readonly Command[],\n options: ExecutePipelineOptions = {}\n ): Promise<unknown[] | undefined> {\n this.assertOpen();\n const snapshot = snapshotPipelineCommands(commands);\n const snapshotOptions = snapshotPipelineOptions(options) ?? {};\n if (snapshot.length === 0) return [];\n for (const command of snapshot) {\n assertCommandDoesNotRequirePinnedConnection(command);\n assertCommandHasStableConnectionState(command);\n }\n let rerouteAttempt = 0;\n for (let planningAttempt = 0; planningAttempt < MAX_TOPOLOGY_PLANNING_ATTEMPTS; planningAttempt += 1) {\n const route = singleRouteForCommands(snapshot, (command) => this.routeData(command));\n if (route == null) return undefined;\n const adapter = await this.adapterForCurrentRoute(route);\n if (adapter == null) continue;\n try {\n return await adapter.executeFusedPipelineOnLane(snapshot, route.laneId, snapshotOptions);\n } catch (error) {\n if (await this.refreshAndCanRetrySafeReroute(error, rerouteAttempt)) {\n rerouteAttempt += 1;\n continue;\n }\n throw error;\n }\n }\n throw new StaleTopologyRouteError();\n }\n\n private async refreshAndCanRetrySafeReroute(error: unknown, attempt: number): Promise<boolean> {\n if (attempt !== 0 || !isRetryableRouteError(error)) return false;\n const refreshed = await this.refreshTopology().then(\n () => true,\n () => false\n );\n if (!refreshed || !(await waitForExplicitlySafeReroute(error))) return false;\n this.assertOpen();\n return true;\n }\n\n private async executePipelineOnRoute(\n commands: readonly Command[],\n route: RoutingRoute,\n options: ExecutePipelineOptions\n ): Promise<unknown[]> {\n const adapter = await this.adapterForCurrentRoute(route);\n if (adapter == null) throw new StaleTopologyRouteError();\n try {\n return await adapter.executePipelineOnLane(commands, route.laneId, options);\n } catch (error) {\n if (isRetryableRouteError(error)) {\n await this.refreshTopology().catch(() => undefined);\n }\n throw error;\n }\n }\n\n private async executeSplitPipeline(\n commands: readonly Command[],\n options: ExecutePipelineOptions\n ): Promise<unknown[]> {\n return await this.pipelineExecutor.execute(commands, options);\n }\n\n async close(): Promise<void> {\n if (this.closePromise != null) {\n await this.closePromise;\n return;\n }\n this.closed = true;\n this.closePromise = this.adapterRegistry.close(this.topologyConcurrency);\n await this.closePromise;\n }\n\n private routeData(args: readonly CommandArgument[]): RoutedCommandData | undefined {\n return topologyRouteData(args, (key) => this.route(key));\n }\n\n private async executeOnRoute(args: readonly CommandArgument[], route: RoutingRoute): Promise<unknown> {\n const adapter = await this.adapterForCurrentRoute(route);\n if (adapter == null) throw new StaleTopologyRouteError();\n try {\n return await adapter.executeCommandOnLane(args, route.laneId);\n } catch (error) {\n if (isRetryableRouteError(error)) {\n await this.refreshTopology().catch(() => undefined);\n }\n throw error;\n }\n }\n\n private async controlAdapter(): Promise<NativeAdapter> {\n this.assertOpen();\n for (const candidate of this.refreshCandidates()) {\n try {\n return candidate.seed\n ? await this.adapterForSeedUrl(candidate.url)\n : await this.adapterForEndpoint(candidate.endpoint);\n } catch {\n // Try the next known control endpoint.\n }\n }\n return await this.adapterForSeedUrl(this.seedUrls[0] ?? \"ferric://127.0.0.1:6388\");\n }\n\n private async adapterForSeedUrl(url: string): Promise<NativeAdapter> {\n const key = connectionKeyFromUrl(url);\n return await this.adapterRegistry.get(key, url, this.seedAdapterOptions);\n }\n\n private async adapterForEndpoint(endpoint: RoutingEndpoint): Promise<NativeAdapter> {\n this.endpointTrust.validate(endpoint);\n const key = connectionKeyForEndpoint(endpoint, this.tls);\n const seedUrl = this.seedUrlByEndpointKey.get(key);\n if (seedUrl != null) {\n return await this.adapterForSeedUrl(seedUrl);\n }\n return await this.adapterRegistry.get(key, urlFromEndpoint(endpoint, this.tls), this.adapterOptions);\n }\n\n private async adapterForCurrentRoute(route: RoutingRoute): Promise<NativeAdapter | undefined> {\n if (!topologyRouteIsCurrent(this.topologyValue, route)) return undefined;\n const adapter = await this.adapterForEndpoint(route.endpoint);\n return topologyRouteIsCurrent(this.topologyValue, route) ? adapter : undefined;\n }\n\n private retireRemovedAdapters(topology: RoutingTopology): void {\n const active = this.endpointTrust.activeConnectionKeys(topology);\n this.adapterRegistry.retireRemoved(\n active,\n (key) => this.endpointTrust.activeConnectionKeys(this.topologyValue).has(key)\n );\n }\n\n private refreshCandidates(): RefreshCandidate[] {\n return topologyRefreshCandidates(this.seedUrls, this.topologyValue.endpoints.values(), this.tls,\n this.lastSuccessfulRefreshKey);\n }\n private assertOpen(): void {\n if (this.closed) throw new FerricStoreError(\"FerricStore topology adapter pool is closed\");\n }\n}\n","import { Buffer } from \"node:buffer\";\nimport { createHash } from \"node:crypto\";\nimport {\n flowApprovalIdCommands,\n flowGovernanceScopeCommands,\n flowScheduleCommands,\n flowStateIdCommands,\n typeScopedFlowCommands\n} from \"./command-metadata.js\";\nimport {\n commandToken,\n commandView,\n routingKeyArguments,\n splitFlowValueMGetArguments\n} from \"./command-grammar.js\";\nimport { FerricStoreError } from \"./errors.js\";\nimport type { Command, CommandArgument } from \"./internal.js\";\nimport type { RoutingRoute } from \"./routing-topology.js\";\nimport type { RoutedCommandData, RoutedKeyGroup } from \"./topology-execution-types.js\";\nimport {\n buildProtocolCommand,\n OPCODES,\n type ProtocolCommand\n} from \"./protocol.js\";\nimport {\n crc32,\n crc32Utf8,\n getField,\n isPlainObject,\n routingSlotForKey\n} from \"./topology-utilities.js\";\n\ntype RoutingKeyLookup =\n | { readonly handled: false }\n | { readonly handled: true; readonly key?: string | Buffer };\n\nexport interface FlowRoutingData {\n readonly command?: ProtocolCommand;\n readonly key: string | Buffer;\n}\n\nconst FLOW_PARTITION_ROUTE_CACHE_MAX = 1_024;\nconst flowPartitionRouteCache = new Map<string, string>();\n\nexport function routingKeyFromProtocolPayload(\n name: string | undefined,\n command: ProtocolCommand\n): string | Buffer | undefined {\n if (command.opcode < 0x0100 || name === \"CLUSTER.KEYSLOT\" || name === \"SHARDS\" || name === \"ROUTE\") {\n return undefined;\n }\n\n if (isPlainObject(command.payload)) {\n for (const field of [\n \"key\", \"partition_key\", \"id\", \"owner_flow_id\", \"parent_flow_id\", \"root_flow_id\", \"correlation_id\", \"scope\"\n ]) {\n const value = getField(command.payload, field);\n if (typeof value === \"string\" || Buffer.isBuffer(value)) {\n return value;\n }\n }\n\n const keys = getField(command.payload, \"keys\");\n if (Array.isArray(keys)) {\n return singleShardKey(keys);\n }\n\n const pairsValue = getField(command.payload, \"pairs\");\n if (Array.isArray(pairsValue)) {\n return singleShardKey(\n pairsValue\n .filter((pair): pair is readonly unknown[] => Array.isArray(pair) && pair.length > 0)\n .map((pair) => pair[0])\n );\n }\n }\n\n return undefined;\n}\n\nexport function routingKeyFromArgs(\n name: string | undefined,\n args: readonly CommandArgument[]\n): RoutingKeyLookup {\n const routed = routingKeyArguments(name, args);\n return routed.handled\n ? { handled: true, key: singleShardKey(routed.keys) }\n : { handled: false };\n}\n\nexport function flowRoutingData(name: string, args: readonly CommandArgument[]): FlowRoutingData | undefined {\n const parsedCommand = commandView(args);\n const flowArgs = args.slice(parsedCommand.argumentStart);\n if (flowArgs.length === 0) {\n return undefined;\n }\n\n if (name === \"FLOW.VALUE.MGET\") {\n const { refs } = splitFlowValueMGetArguments(args, parsedCommand.argumentStart);\n return flowRoutingResult(singleShardKey(refs));\n }\n\n // Schedule storage uses :erlang.phash2/2. There is no stable, portable\n // JavaScript implementation of that VM-specific hash, so schedule commands\n // intentionally use the control path and let the server route them.\n if (flowScheduleCommands.has(name)) {\n return undefined;\n }\n\n if (flowApprovalIdCommands.has(name)) {\n const id = flowArgs[0];\n return flowRoutingResult(flowLogicalPartitionRoutingKey(id));\n }\n\n if (flowGovernanceScopeCommands.has(name)) {\n const scope = flowArgs[0];\n return flowRoutingResult(flowLogicalPartitionRoutingKey(scope));\n }\n\n if (name === \"FLOW.CREATE_MANY\" || name === \"FLOW.COMPLETE_MANY\" || name === \"FLOW.TRANSITION_MANY\" || name === \"FLOW.RETRY_MANY\" || name === \"FLOW.FAIL_MANY\" || name === \"FLOW.CANCEL_MANY\") {\n const partition = flowArgs[0];\n if (typeof partition === \"string\" && partition.toUpperCase() !== \"AUTO\" && partition.toUpperCase() !== \"MIXED\") {\n return flowRoutingResult(flowLogicalPartitionRoutingKey(partition));\n }\n if (Buffer.isBuffer(partition)) {\n const text = partition.toString(\"utf8\").toUpperCase();\n if (text !== \"AUTO\" && text !== \"MIXED\") {\n return flowRoutingResult(flowLogicalPartitionRoutingKey(partition));\n }\n }\n return undefined;\n }\n\n const hasPartitionOption = flowArgs.some((arg) => {\n const token = commandPart(arg);\n return token === \"PARTITION\" || token === \"PARTITIONS\";\n });\n let protocolCommand: ProtocolCommand | undefined;\n if (hasPartitionOption || name === \"FLOW.VALUE.PUT\") {\n try {\n protocolCommand = buildProtocolCommand(args, Number.MAX_SAFE_INTEGER, false);\n } catch {\n return undefined;\n }\n }\n\n if (hasPartitionOption) {\n const partition = flowPartitionRoutingKeyFromCommand(\n protocolCommand,\n name === \"FLOW.CLAIM_DUE\" || name === \"FLOW.RECLAIM\"\n );\n if (!partition.handled) {\n // If the protocol grammar cannot parse the command, use the control path\n // instead of guessing option widths and risking a wrong-shard route.\n return undefined;\n }\n // Claim requests may use the compact custom-binary payload. Route from the\n // parsed generic form, then let the selected adapter rebuild with its real\n // frame limit so the hot path keeps compact encoding and safe preflight.\n return flowRoutingResult(\n partition.key,\n name === \"FLOW.CLAIM_DUE\" ? undefined : protocolCommand\n );\n }\n\n if (name === \"FLOW.VALUE.PUT\") {\n if (protocolCommand == null || protocolCommand.opcode === OPCODES.commandExec || !isPlainObject(protocolCommand.payload)) {\n return undefined;\n }\n const owner = getField(protocolCommand.payload, \"owner_flow_id\");\n const valueName = getField(protocolCommand.payload, \"name\");\n return isRoutingKey(owner) && isRoutingKey(valueName)\n ? flowRoutingResult(flowAutoIdRoutingKey(owner), protocolCommand)\n : undefined;\n }\n\n if (typeScopedFlowCommands.has(name)) {\n return undefined;\n }\n\n if (!flowStateIdCommands.has(name)) {\n return undefined;\n }\n\n return flowRoutingResult(flowAutoIdRoutingKey(flowArgs[0]), protocolCommand);\n}\n\nfunction flowRoutingResult(\n key: string | Buffer | undefined,\n command?: ProtocolCommand\n): FlowRoutingData | undefined {\n if (key == null) return undefined;\n return command == null ? { key } : { command, key };\n}\n\nfunction flowPartitionRoutingKeyFromCommand(\n command: ProtocolCommand | undefined,\n claim: boolean\n): RoutingKeyLookup {\n if (command == null) {\n return { handled: false };\n }\n if (command.routing != null && Object.hasOwn(command.routing, \"flowPartitionKey\")) {\n const partition = command.routing.flowPartitionKey;\n return {\n handled: true,\n key: claim\n ? flowClaimLogicalPartitionRoutingKey(partition)\n : flowLogicalPartitionRoutingKey(partition)\n };\n }\n if (command.routing != null && Object.hasOwn(command.routing, \"flowPartitionKeys\")) {\n const partitions = command.routing.flowPartitionKeys;\n return {\n handled: true,\n key: Array.isArray(partitions)\n ? claim\n ? singleShardFlowClaimPartitionKey(partitions)\n : singleShardFlowPartitionKey(partitions)\n : undefined\n };\n }\n if (command.opcode === OPCODES.commandExec || !isPlainObject(command.payload)) {\n return { handled: false };\n }\n if (Object.hasOwn(command.payload, \"partition_key\")) {\n const partition = getField(command.payload, \"partition_key\");\n return {\n handled: true,\n key: claim\n ? flowClaimLogicalPartitionRoutingKey(partition)\n : flowLogicalPartitionRoutingKey(partition)\n };\n }\n if (Object.hasOwn(command.payload, \"partition_keys\")) {\n const partitions = getField(command.payload, \"partition_keys\");\n return {\n handled: true,\n key: Array.isArray(partitions)\n ? claim\n ? singleShardFlowClaimPartitionKey(partitions)\n : singleShardFlowPartitionKey(partitions)\n : undefined\n };\n }\n return { handled: false };\n}\n\nfunction isRoutingKey(value: unknown): value is string | Buffer {\n return typeof value === \"string\" || Buffer.isBuffer(value);\n}\n\nfunction flowLogicalPartitionRoutingKey(value: unknown): string | undefined {\n if (typeof value !== \"string\" && !Buffer.isBuffer(value)) {\n return undefined;\n }\n const bytes = Buffer.isBuffer(value) ? value : Buffer.from(value);\n const text = bytes.toString(\"utf8\");\n const autoMatch = /^__flow_auto__:(0|[1-9]\\d{0,2})$/u.exec(text);\n if (autoMatch != null) {\n const bucket = Number(autoMatch[1]);\n if (bucket < 256) {\n return `{fa:${bucket}}`;\n }\n }\n const cacheKey = `${Buffer.isBuffer(value) ? \"b\" : \"s\"}:${bytes.toString(\"base64\")}`;\n const cached = flowPartitionRouteCache.get(cacheKey);\n if (cached != null) {\n flowPartitionRouteCache.delete(cacheKey);\n flowPartitionRouteCache.set(cacheKey, cached);\n return cached;\n }\n\n const digest = createHash(\"sha256\").update(bytes).digest(\"base64url\");\n const routeKey = `{f:${digest}}`;\n if (flowPartitionRouteCache.size >= FLOW_PARTITION_ROUTE_CACHE_MAX) {\n const oldest = flowPartitionRouteCache.keys().next().value;\n if (oldest != null) flowPartitionRouteCache.delete(oldest);\n }\n flowPartitionRouteCache.set(cacheKey, routeKey);\n return routeKey;\n}\n\nfunction flowAutoIdRoutingKey(value: unknown): string | undefined {\n if (typeof value !== \"string\" && !Buffer.isBuffer(value)) {\n return undefined;\n }\n const bucket = (Buffer.isBuffer(value) ? crc32(value) : crc32Utf8(value)) & 0xff;\n return `{fa:${bucket}}`;\n}\n\nfunction flowClaimLogicalPartitionRoutingKey(value: unknown): string | undefined {\n if (typeof value !== \"string\" && !Buffer.isBuffer(value)) return undefined;\n const selector = commandPart(value);\n if (selector === \"AUTO\" || selector === \"ANY\") return undefined;\n if (selector === \"GLOBAL\") return \"{f}\";\n return flowLogicalPartitionRoutingKey(value);\n}\n\nfunction singleShardFlowPartitionKey(values: readonly unknown[]): string | Buffer | undefined {\n const keys = values.map((value) => flowLogicalPartitionRoutingKey(value));\n return keys.some((key) => key == null)\n ? undefined\n : singleShardKey(keys);\n}\n\nfunction singleShardFlowClaimPartitionKey(values: readonly unknown[]): string | Buffer | undefined {\n const keys = values.map((value) => flowClaimLogicalPartitionRoutingKey(value));\n return keys.some((key) => key == null) ? undefined : singleShardKey(keys);\n}\n\nfunction singleShardKey(keys: readonly unknown[]): string | Buffer | undefined {\n if (\n keys.length === 0 ||\n keys.some((key) => typeof key !== \"string\" && !Buffer.isBuffer(key))\n ) {\n return undefined;\n }\n const usable = keys as readonly (string | Buffer)[];\n const first = usable[0];\n if (first == null) {\n return undefined;\n }\n const firstSlot = routingSlotForKey(first);\n return usable.every((key) => routingSlotForKey(key) === firstSlot) ? first : undefined;\n}\n\nexport function commandName(args: readonly CommandArgument[]): string | undefined {\n return commandView(args).name;\n}\n\nexport const commandPart = commandToken;\n\nexport function routedCommandArgs(\n name: string,\n entries: readonly { readonly key: string | Buffer }[],\n suffix: readonly CommandArgument[] = []\n): CommandArgument[] {\n const args = new Array<CommandArgument>(1 + entries.length + suffix.length);\n args[0] = name;\n for (let index = 0; index < entries.length; index += 1) {\n const entry = entries[index];\n if (entry == null) throw new FerricStoreError(\"routed command contained an empty key entry\");\n args[index + 1] = entry.key;\n }\n for (let index = 0; index < suffix.length; index += 1) {\n args[1 + entries.length + index] = suffix[index];\n }\n return args;\n}\n\nexport function routedKeyGroups(\n keys: readonly CommandArgument[],\n routeKey: (key: string | Buffer) => RoutingRoute\n): RoutedKeyGroup[] | undefined {\n if (keys.length === 0) return undefined;\n const groups = new Map<string, RoutedKeyGroup>();\n for (let index = 0; index < keys.length; index += 1) {\n const key = keys[index];\n if (typeof key !== \"string\" && !Buffer.isBuffer(key)) return undefined;\n const route = routeKey(key);\n const groupKey = `${route.endpointKey}\\0${route.laneId}`;\n const group = groups.get(groupKey);\n const entry = { index, key };\n if (group == null) groups.set(groupKey, { entries: [entry], route });\n else group.entries.push(entry);\n }\n return [...groups.values()];\n}\n\nexport function singleRouteForCommands(\n commands: readonly Command[],\n routeData: (command: Command) => RoutedCommandData | undefined\n): RoutingRoute | undefined {\n let route: RoutingRoute | undefined;\n for (const command of commands) {\n const current = routeData(command)?.route;\n if (current == null) return undefined;\n if (route == null) route = current;\n else if (route.endpointKey !== current.endpointKey || route.laneId !== current.laneId) return undefined;\n }\n return route;\n}\n","/** A runtime read-only facade over a map whose backing storage stays private. */\nclass ReadonlyMapView<K, V> implements ReadonlyMap<K, V> {\n readonly #source: ReadonlyMap<K, V>;\n\n constructor(source: ReadonlyMap<K, V>) {\n this.#source = source;\n }\n\n get size(): number {\n return this.#source.size;\n }\n\n entries() {\n return this.#source.entries();\n }\n\n forEach(\n callback: (value: V, key: K, map: ReadonlyMap<K, V>) => void,\n thisArg?: unknown\n ): void {\n for (const [key, value] of this.#source) callback.call(thisArg, value, key, this);\n }\n\n get(key: K): V | undefined {\n return this.#source.get(key);\n }\n\n has(key: K): boolean {\n return this.#source.has(key);\n }\n\n keys() {\n return this.#source.keys();\n }\n\n values() {\n return this.#source.values();\n }\n\n [Symbol.iterator]() {\n return this.#source[Symbol.iterator]();\n }\n}\n\nexport function readonlyMapView<K, V>(source: ReadonlyMap<K, V>): ReadonlyMap<K, V> {\n return Object.freeze(new ReadonlyMapView(source));\n}\n","import { FerricStoreError } from \"./errors.js\";\nimport { readonlyMapView } from \"./readonly-map-view.js\";\nimport {\n endpointFromRange,\n endpointKeyFor,\n getField,\n numberOrUndefined,\n routingSlotForKey,\n sameEndpoint,\n textOrUndefined,\n type RoutingEndpoint\n} from \"./topology-utilities.js\";\n\nconst ROUTE_SLOT_COUNT = 1024;\n\nexport interface RoutingRoute {\n readonly shard: number;\n readonly laneId: number;\n readonly endpointKey: string;\n readonly endpoint: RoutingEndpoint;\n readonly leaderNode: string;\n readonly slot?: number;\n}\n\nexport class RoutingTopology {\n readonly routeEpoch: number;\n readonly shardCount: number;\n readonly slots: readonly (RoutingRoute | undefined)[];\n readonly endpoints: ReadonlyMap<string, RoutingEndpoint>;\n\n private constructor(\n routeEpoch: number,\n shardCount: number,\n slots: readonly (RoutingRoute | undefined)[],\n endpoints: ReadonlyMap<string, RoutingEndpoint>\n ) {\n this.routeEpoch = routeEpoch;\n this.shardCount = shardCount;\n this.slots = slots;\n this.endpoints = endpoints;\n Object.freeze(this);\n }\n\n static empty(): RoutingTopology {\n return new RoutingTopology(\n 0,\n 0,\n Object.freeze(new Array<RoutingRoute | undefined>(ROUTE_SLOT_COUNT)),\n readonlyMapView(new Map<string, RoutingEndpoint>())\n );\n }\n\n static build(payload: unknown): RoutingTopology {\n const ranges = getField(payload, \"ranges\");\n if (!Array.isArray(ranges)) {\n throw new FerricStoreError(\"invalid SHARDS topology payload\", { raw: payload });\n }\n\n const declaredSlotsValue = getField(payload, \"slots\");\n const declaredSlots = numberOrUndefined(declaredSlotsValue);\n const routeEpochValue = getField(payload, \"route_epoch\");\n const routeEpoch = numberOrUndefined(routeEpochValue);\n const shardCountValue = getField(payload, \"shard_count\");\n const declaredShardCount = numberOrUndefined(shardCountValue);\n if (\n (declaredSlotsValue != null && declaredSlots !== ROUTE_SLOT_COUNT) ||\n (routeEpochValue != null && (routeEpoch == null || routeEpoch < 0)) ||\n (shardCountValue != null && (declaredShardCount == null || declaredShardCount <= 0))\n ) {\n throw new FerricStoreError(\"invalid SHARDS topology metadata\", { raw: payload });\n }\n\n const slots: (RoutingRoute | undefined)[] = Array.from({ length: ROUTE_SLOT_COUNT });\n const endpoints = new Map<string, RoutingEndpoint>();\n const routesByShard = new Map<number, RoutingRoute>();\n const shards = new Set<number>();\n\n for (const item of ranges) {\n if (textOrUndefined(getField(item, \"hint\")) === \"leader_unknown\") {\n throw new FerricStoreError(\"SHARDS range has no leader\", { raw: item });\n }\n\n const first = numberOrUndefined(getField(item, \"first_slot\"));\n const last = numberOrUndefined(getField(item, \"last_slot\"));\n const shard = numberOrUndefined(getField(item, \"shard\"));\n const laneId = numberOrUndefined(getField(item, \"lane_id\"));\n const endpoint = Object.freeze(endpointFromRange(item));\n if (\n first == null || last == null || shard == null || laneId == null ||\n first < 0 || last < first || last >= ROUTE_SLOT_COUNT ||\n shard < 0 || shard > 0xffff_ffff || laneId <= 0 || laneId > 0xffff_ffff\n ) {\n throw new FerricStoreError(\"invalid SHARDS range\", { raw: item });\n }\n if (declaredShardCount != null && shard >= declaredShardCount) {\n throw new FerricStoreError(\"invalid SHARDS shard metadata\", { raw: item });\n }\n\n const endpointKey = endpointKeyFor(endpoint);\n const route: RoutingRoute = Object.freeze({\n endpoint,\n endpointKey,\n laneId,\n leaderNode: endpoint.node,\n shard\n });\n const existingRoute = routesByShard.get(shard);\n if (\n existingRoute != null &&\n (existingRoute.endpointKey !== endpointKey || existingRoute.laneId !== laneId ||\n !sameEndpoint(existingRoute.endpoint, endpoint))\n ) {\n throw new FerricStoreError(`invalid SHARDS topology: inconsistent route for shard ${shard}`, { raw: item });\n }\n routesByShard.set(shard, route);\n\n const existingEndpoint = endpoints.get(endpointKey);\n if (existingEndpoint != null && !sameEndpoint(existingEndpoint, endpoint)) {\n throw new FerricStoreError(`invalid SHARDS topology: inconsistent endpoint ${endpointKey}`, { raw: item });\n }\n for (let slot = first; slot <= last; slot += 1) {\n if (slots[slot] != null) {\n throw new FerricStoreError(`invalid SHARDS topology: overlapping slot ${slot}`, { raw: item });\n }\n slots[slot] = route;\n }\n endpoints.set(endpointKey, endpoint);\n shards.add(shard);\n }\n\n const missingSlot = slots.findIndex((route) => route == null);\n if (missingSlot !== -1) {\n throw new FerricStoreError(`invalid SHARDS topology: no route for slot ${missingSlot}`, { raw: payload });\n }\n const shardCount = declaredShardCount ?? shards.size;\n if (shardCount === 0 || shards.size !== shardCount) {\n throw new FerricStoreError(\"invalid SHARDS shard count\", { raw: payload });\n }\n for (let shard = 0; shard < shardCount; shard += 1) {\n if (!shards.has(shard)) {\n throw new FerricStoreError(`invalid SHARDS topology: no range for shard ${shard}`, { raw: payload });\n }\n }\n\n return new RoutingTopology(\n routeEpoch ?? 0,\n shardCount,\n Object.freeze(slots),\n readonlyMapView(endpoints)\n );\n }\n\n static slotForKey(key: string | Buffer): number {\n return routingSlotForKey(key);\n }\n\n routeKey(key: string | Buffer): RoutingRoute {\n const slot = RoutingTopology.slotForKey(key);\n const route = this.slots[slot];\n if (route == null) throw new FerricStoreError(`no route for slot ${slot}`);\n return { ...route, slot };\n }\n}\n","import type { NativeAdapterOptions, TopologyNativeAdapterOptions } from \"./adapters.js\";\nimport { snapshotNativeClientOptions, topologyNativeOptions } from \"./client-native-options.js\";\nimport { ConnectionClosedError, FerricStoreError, RerouteError } from \"./errors.js\";\nimport { sleep } from \"./internal.js\";\nimport { parseFerricUrl } from \"./topology-utilities.js\";\n\nconst DEFAULT_TOPOLOGY_CONCURRENCY = 16;\n\nexport function snapshotTopologyNativeAdapterOptions(\n options: TopologyNativeAdapterOptions\n): TopologyNativeAdapterOptions {\n return topologyNativeOptions(snapshotNativeClientOptions(options));\n}\n\nexport function normalizeTopologyConcurrency(value: number | undefined): number {\n if (value == null) return DEFAULT_TOPOLOGY_CONCURRENCY;\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new TypeError(\"topologyConcurrency must be a positive safe integer\");\n }\n return value;\n}\n\nexport function nativeOnlyOptions(options: TopologyNativeAdapterOptions): NativeAdapterOptions {\n const {\n endpointPolicy,\n endpointValidator,\n topologyConcurrency,\n trustedHosts,\n warmConnections,\n ...nativeOptions\n } = options;\n void endpointPolicy;\n void endpointValidator;\n void topologyConcurrency;\n void trustedHosts;\n void warmConnections;\n return nativeOptions;\n}\n\nexport function withSeedAuthDefaults(\n urls: readonly string[],\n options: TopologyNativeAdapterOptions\n): TopologyNativeAdapterOptions {\n const next: TopologyNativeAdapterOptions = { ...options };\n const seeds = urls.map((url) => parseFerricUrl(url));\n if (next.password == null) {\n const credentials = seeds.find((seed) => seed.password != null);\n if (credentials != null) {\n next.password = credentials.password;\n next.username ??= credentials.username ?? \"default\";\n }\n } else {\n next.username ??= seeds.find((seed) => seed.username != null)?.username ?? \"default\";\n }\n return next;\n}\n\nexport function assertTopologyNativeAdapterOptions(options: TopologyNativeAdapterOptions): void {\n const supplied = options as unknown as Record<string, unknown>;\n for (const name of [\"autoReconnect\", \"haRouting\", \"seeds\"]) {\n if (Object.hasOwn(supplied, name)) {\n throw new TypeError(`FerricStoreClient option ${name} is not accepted by TopologyNativeAdapterPool`);\n }\n }\n}\n\nexport function seedConnectionOptions(\n defaults: NativeAdapterOptions,\n explicit: NativeAdapterOptions\n): NativeAdapterOptions {\n if (explicit.password != null) return defaults;\n const options = { ...defaults };\n delete options.password;\n if (explicit.username == null) delete options.username;\n return options;\n}\n\nexport function seedAuthIdentity(url: string, options: NativeAdapterOptions): string {\n const parsed = parseFerricUrl(url);\n const password = options.password ?? parsed.password;\n if (password == null || password === \"\") return \"none\";\n return JSON.stringify([options.username ?? parsed.username ?? \"default\", password]);\n}\n\nexport function isRetryableRouteError(error: unknown): boolean {\n if (error instanceof RerouteError || error instanceof ConnectionClosedError) return true;\n if (!(error instanceof Error)) return false;\n const message = error.message.toLowerCase();\n return message.includes(\"connection closed\") ||\n message.includes(\"connection is closed\") ||\n message.includes(\"shard not available\") ||\n message.includes(\"shard is not available\") ||\n /\\bnot (?:the )?leader\\b/u.test(message) ||\n /\\bstale leader\\b/u.test(message);\n}\n\nexport function isExplicitlySafeReroute(error: unknown): boolean {\n if (error instanceof ConnectionClosedError) {\n return error.requestDisposition === \"unsent\";\n }\n return error instanceof RerouteError &&\n error.retryable === true &&\n error.safeToRetry === true;\n}\n\nexport function retryAfterMs(error: unknown): number {\n return error instanceof FerricStoreError ? error.retryAfterMs ?? 0 : 0;\n}\n\nexport async function waitForExplicitlySafeReroute(error: unknown): Promise<boolean> {\n if (!isExplicitlySafeReroute(error)) return false;\n const delayMs = retryAfterMs(error);\n if (delayMs > 0) await sleep(delayMs);\n return true;\n}\n","import { FerricStoreError } from \"./errors.js\";\nimport type { RoutingTopology } from \"./routing-topology.js\";\nimport {\n connectionKeyForEndpoint,\n normalizedEndpointHost,\n normalizedHostSet,\n type RoutingEndpoint\n} from \"./topology-utilities.js\";\n\n/** Trust policy for endpoints learned from SHARDS topology responses. */\nexport type EndpointPolicy = \"seed_hosts\" | \"any\" | \"none\" | { readonly allowHosts: readonly string[] };\n\nexport class TopologyEndpointTrust {\n private readonly allowedHosts: ReadonlySet<string> | undefined;\n private readonly policy: EndpointPolicy;\n private readonly trustedHosts: ReadonlySet<string>;\n\n constructor(\n policy: EndpointPolicy | undefined,\n private readonly endpointValidator: ((endpoint: RoutingEndpoint) => boolean | void) | undefined,\n private readonly seedEndpointKeys: ReadonlySet<string>,\n trustedHosts: readonly string[],\n private readonly tls: boolean\n ) {\n this.policy = policy ?? \"seed_hosts\";\n this.allowedHosts = typeof this.policy === \"object\"\n ? normalizedHostSet(this.policy.allowHosts)\n : undefined;\n this.trustedHosts = normalizedHostSet(trustedHosts);\n }\n\n activeConnectionKeys(topology: RoutingTopology): Set<string> {\n const active = new Set(this.seedEndpointKeys);\n for (const endpoint of topology.endpoints.values()) {\n active.add(connectionKeyForEndpoint(endpoint, this.tls));\n }\n return active;\n }\n\n validate(endpoint: RoutingEndpoint): void {\n let allowed: boolean;\n if (this.policy === \"any\") {\n allowed = true;\n } else if (this.policy === \"none\") {\n allowed = this.seedEndpointKeys.has(connectionKeyForEndpoint(endpoint, this.tls));\n } else if (this.policy === \"seed_hosts\") {\n allowed =\n this.seedEndpointKeys.has(connectionKeyForEndpoint(endpoint, this.tls))\n || this.trustedHosts.has(normalizedEndpointHost(endpoint.host));\n } else if (\"allowHosts\" in this.policy) {\n allowed = this.allowedHosts?.has(normalizedEndpointHost(endpoint.host)) === true;\n } else {\n throw new FerricStoreError(\"invalid endpoint policy\", { raw: this.policy });\n }\n if (!allowed || this.endpointValidator?.(endpoint) === false) {\n throw new FerricStoreError(\"unsafe learned endpoint\", { raw: endpoint });\n }\n }\n\n validateTopology(topology: RoutingTopology): void {\n for (const endpoint of topology.endpoints.values()) this.validate(endpoint);\n }\n}\n","import type { RefreshCandidate } from \"./topology-execution-types.js\";\nimport {\n connectionKeyFromUrl,\n urlFromEndpoint,\n type RoutingEndpoint\n} from \"./topology-utilities.js\";\n\nexport function topologyRefreshCandidates(\n seedUrls: readonly string[],\n endpoints: Iterable<RoutingEndpoint>,\n tls: boolean,\n preferred: string | undefined\n): RefreshCandidate[] {\n const candidates: RefreshCandidate[] = [\n ...seedUrls.map((url) => ({ seed: true as const, url })),\n ...[...endpoints].map((endpoint) => ({\n endpoint,\n seed: false as const,\n url: urlFromEndpoint(endpoint, tls)\n }))\n ];\n const seen = new Set<string>();\n const unique = candidates.filter((candidate) => {\n const key = connectionKeyFromUrl(candidate.url);\n if (seen.has(key)) return false;\n seen.add(key);\n return true;\n });\n if (preferred == null) return unique;\n const index = unique.findIndex((candidate) => connectionKeyFromUrl(candidate.url) === preferred);\n if (index <= 0) return unique;\n const [candidate] = unique.splice(index, 1);\n if (candidate != null) unique.unshift(candidate);\n return unique;\n}\n","import type { RoutingTopology } from \"./routing-topology.js\";\nimport { sameEndpoint } from \"./topology-utilities.js\";\n\n/** Treat the core route epoch as an opaque fingerprint and avoid churning an identical view. */\nexport function topologyForInstallation(\n current: RoutingTopology,\n candidate: RoutingTopology\n): RoutingTopology {\n if (current.shardCount === 0) return candidate;\n return candidate.routeEpoch === current.routeEpoch && sameTopologyView(current, candidate)\n ? current\n : candidate;\n}\n\nfunction sameTopologyView(left: RoutingTopology, right: RoutingTopology): boolean {\n if (left.shardCount !== right.shardCount || left.endpoints.size !== right.endpoints.size) {\n return false;\n }\n for (const [key, endpoint] of left.endpoints) {\n const other = right.endpoints.get(key);\n if (other == null || !sameEndpoint(endpoint, other)) return false;\n }\n for (let slot = 0; slot < left.slots.length; slot += 1) {\n const a = left.slots[slot];\n const b = right.slots[slot];\n if (a == null) return false;\n if (b == null) return false;\n if (\n a.shard !== b.shard || a.laneId !== b.laneId ||\n a.endpointKey !== b.endpointKey || a.leaderNode !== b.leaderNode ||\n !sameEndpoint(a.endpoint, b.endpoint)\n ) return false;\n }\n return left.slots.length === right.slots.length;\n}\n","import type { Command, CommandArgument } from \"./internal.js\";\nimport {\n attachPipelineItemRejectionFlags,\n executeCommandArraysIndividually,\n pipelineErrorCollectingOptions,\n pipelineItemRejectionFlags,\n pipelineSubsetOptions,\n surfaceFirstPipelineItemError,\n type ExecutePipelineOptions\n} from \"./adapters.js\";\nimport { decomposableCommandNames } from \"./command-metadata.js\";\nimport { FerricStoreError } from \"./errors.js\";\nimport type { RoutingRoute } from \"./routing-topology.js\";\nimport { commandName } from \"./topology-routing.js\";\nimport type { RoutedCommandData, RoutedPipelineGroup } from \"./topology-execution-types.js\";\nimport {\n TaskConcurrencyLimiter,\n mapSettledWithConcurrency,\n throwFirstRejected\n} from \"./topology-utilities.js\";\n\ninterface TopologyPipelineContext {\n readonly concurrency: number;\n readonly controlPipeline: (\n commands: readonly Command[],\n options: ExecutePipelineOptions\n ) => Promise<unknown[]>;\n readonly executeCommandArgs: (command: Command) => Promise<unknown>;\n readonly executePipelineOnRoute: (\n commands: readonly Command[],\n route: RoutingRoute,\n options: ExecutePipelineOptions\n ) => Promise<unknown[]>;\n readonly routeData: (args: readonly CommandArgument[]) => RoutedCommandData | undefined;\n}\n\nexport class TopologyPipelineExecutor {\n constructor(private readonly context: TopologyPipelineContext) {}\n\n async execute(commands: readonly Command[], options: ExecutePipelineOptions): Promise<unknown[]> {\n if (options.ordered === true) {\n return await executeCommandArraysIndividually(this.context.executeCommandArgs, commands, options);\n }\n const output = new Array<unknown>(commands.length);\n const routedGroups = new Map<string, RoutedPipelineGroup>();\n const controlCommands: Command[] = [];\n const controlIndices: number[] = [];\n const standalone: { readonly command: Command; readonly index: number }[] = [];\n const collectingOptions = pipelineErrorCollectingOptions(options);\n let rejected: boolean[] | undefined;\n const captureGroupFailure = (indices: readonly number[], error: unknown): void => {\n rejected ??= [];\n for (const index of indices) {\n output[index] = error;\n rejected[index] = true;\n }\n };\n const captureGroupResponses = (indices: readonly number[], responses: unknown[]): void => {\n if (responses.length !== indices.length) {\n throw new FerricStoreError(\"topology pipeline response did not match command group\", {\n raw: responses\n });\n }\n const responseRejections = pipelineItemRejectionFlags(responses);\n indices.forEach((index, responseIndex) => {\n if (!Object.hasOwn(responses, responseIndex)) {\n throw new FerricStoreError(\"topology pipeline response did not match command group\", {\n raw: responses\n });\n }\n output[index] = responses[responseIndex];\n if (responseRejections?.[responseIndex] === true) {\n (rejected ??= [])[index] = true;\n }\n });\n };\n\n commands.forEach((command, index) => {\n const routed = this.context.routeData(command);\n if (routed == null) {\n if (decomposableCommandNames.has(commandName(command) ?? \"\")) standalone.push({ command, index });\n else {\n controlCommands.push(command);\n controlIndices.push(index);\n }\n return;\n }\n const key = `${routed.route.endpointKey}\\0${routed.route.laneId}`;\n const group = routedGroups.get(key);\n if (group == null) {\n routedGroups.set(key, { commands: [command], indices: [index], route: routed.route });\n } else {\n group.commands.push(command);\n group.indices.push(index);\n }\n });\n\n const units: { readonly indices: readonly number[]; readonly run: () => Promise<void> }[] =\n [...routedGroups.values()].map((group) => ({\n indices: group.indices,\n run: async () => {\n try {\n const responses = await this.context.executePipelineOnRoute(\n group.commands,\n group.route,\n pipelineSubsetOptions(collectingOptions, group.indices)\n );\n captureGroupResponses(group.indices, responses);\n } catch (error) {\n captureGroupFailure(group.indices, error);\n }\n }\n }));\n if (controlCommands.length > 0) {\n units.push({\n indices: controlIndices,\n run: async () => {\n try {\n const responses = await this.context.controlPipeline(\n controlCommands,\n pipelineSubsetOptions(collectingOptions, controlIndices)\n );\n captureGroupResponses(controlIndices, responses);\n } catch (error) {\n captureGroupFailure(controlIndices, error);\n }\n }\n });\n }\n for (const { command, index } of standalone) {\n units.push({\n indices: [index],\n run: async () => {\n try {\n output[index] = await this.context.executeCommandArgs(command);\n } catch (error) {\n captureGroupFailure([index], error);\n }\n }\n });\n }\n\n const commandDependencies = collectingOptions.fallbackDependencies;\n if (commandDependencies == null) {\n throwFirstRejected(await mapSettledWithConcurrency(\n units,\n this.context.concurrency,\n async (unit) => await unit.run()\n ));\n } else {\n const unitByCommand = new Map<number, number>();\n units.forEach((unit, unitIndex) => {\n for (const commandIndex of unit.indices) unitByCommand.set(commandIndex, unitIndex);\n });\n const dependencies = units.map(() => new Set<number>());\n for (let commandIndex = 0; commandIndex < commandDependencies.length; commandIndex += 1) {\n const unitIndex = unitByCommand.get(commandIndex);\n if (unitIndex == null) continue;\n for (const dependencyIndex of commandDependencies[commandIndex] ?? []) {\n if (dependencyIndex < 0 || dependencyIndex >= commandIndex) continue;\n const dependencyUnit = unitByCommand.get(dependencyIndex);\n if (dependencyUnit != null && dependencyUnit !== unitIndex) dependencies[unitIndex]?.add(dependencyUnit);\n }\n }\n\n if (dependencies.every((unitDependencies) => unitDependencies.size === 0)) {\n throwFirstRejected(await mapSettledWithConcurrency(\n units,\n this.context.concurrency,\n async (unit) => await unit.run()\n ));\n } else {\n const limiter = new TaskConcurrencyLimiter(this.context.concurrency);\n const tasks = new Array<Promise<void>>(units.length);\n const runUnit = (unitIndex: number): Promise<void> => {\n const existing = tasks[unitIndex];\n if (existing != null) return existing;\n const unit = units[unitIndex];\n if (unit == null) return Promise.resolve();\n const task = Promise.all(\n [...(dependencies[unitIndex] ?? [])].map(async (dependency) => await runUnit(dependency))\n ).then(async () => await limiter.run(unit.run));\n tasks[unitIndex] = task;\n return task;\n };\n await Promise.all(units.map(async (_unit, unitIndex) => await runUnit(unitIndex)));\n }\n }\n if (rejected != null) attachPipelineItemRejectionFlags(output, rejected);\n return surfaceFirstPipelineItemError(output, options);\n }\n}\n","import { ConnectionClosedError } from \"./errors.js\";\nimport type { NativeAdapterOptions } from \"./adapter-types.js\";\nimport { NativeAdapter } from \"./native-adapter.js\";\nimport { mapSettledWithConcurrency } from \"./topology-utilities.js\";\n\n/** Owns topology adapter creation, deduplication, and graceful retirement. */\nexport class TopologyAdapterRegistry {\n private readonly creations = new Map<string, Promise<NativeAdapter>>();\n private readonly creationControllers = new WeakMap<Promise<NativeAdapter>, AbortController>();\n private readonly adapters = new Map<string, NativeAdapter>();\n private readonly retiring = new Set<NativeAdapter>();\n\n constructor(\n private readonly assertOpen: () => void,\n private readonly isClosed: () => boolean\n ) {}\n\n async get(\n key: string,\n url: string,\n options: NativeAdapterOptions,\n retryUnavailable = true\n ): Promise<NativeAdapter> {\n this.assertOpen();\n const existing = this.adapters.get(key);\n if (existing != null) {\n if (!existing.isUnavailable) return existing;\n if (this.adapters.get(key) === existing) this.adapters.delete(key);\n this.retire(existing);\n }\n\n let creation = this.creations.get(key);\n if (creation == null) {\n const controller = new AbortController();\n const signal = options.signal == null\n ? controller.signal\n : AbortSignal.any([options.signal, controller.signal]);\n const started = (async () => {\n const adapter = await NativeAdapter.fromUrl(url, { ...options, signal });\n if (this.isClosed()) {\n await adapter.close();\n this.assertOpen();\n }\n this.adapters.set(key, adapter);\n return adapter;\n })();\n const tracked = started.finally(() => {\n if (this.creations.get(key) === tracked) this.creations.delete(key);\n });\n creation = tracked;\n this.creationControllers.set(creation, controller);\n this.creations.set(key, creation);\n }\n\n const adapter = await creation;\n if (!adapter.isUnavailable) return adapter;\n if (this.creations.get(key) === creation) this.creations.delete(key);\n if (this.adapters.get(key) === adapter) this.adapters.delete(key);\n this.retire(adapter);\n if (!retryUnavailable) throw new ConnectionClosedError(\"unsent\");\n return await this.get(key, url, options, false);\n }\n\n retireRemoved(active: ReadonlySet<string>, isCurrentlyActive: (key: string) => boolean): void {\n for (const [key, adapter] of this.adapters.entries()) {\n if (active.has(key)) continue;\n if (this.adapters.get(key) === adapter) this.adapters.delete(key);\n this.retire(adapter);\n }\n for (const [key, creation] of this.creations.entries()) {\n if (active.has(key)) continue;\n this.creationControllers.get(creation)?.abort(new ConnectionClosedError(\"unsent\"));\n void creation.then((adapter) => {\n if (isCurrentlyActive(key)) return;\n if (this.adapters.get(key) === adapter) this.adapters.delete(key);\n this.retire(adapter);\n }).catch(() => undefined);\n }\n }\n\n async close(concurrency: number): Promise<void> {\n const adapters = [...new Set([...this.adapters.values(), ...this.retiring])];\n const creations = [...this.creations.values()];\n for (const creation of creations) {\n this.creationControllers.get(creation)?.abort(new ConnectionClosedError(\"unsent\"));\n }\n this.adapters.clear();\n this.retiring.clear();\n await mapSettledWithConcurrency(\n [\n ...adapters.map((adapter) => async () => await adapter.close()),\n ...creations.map((creation) => async () => await (await creation).close())\n ],\n concurrency,\n async (close) => await close()\n );\n this.creations.clear();\n }\n\n private retire(adapter: NativeAdapter): void {\n if (this.retiring.has(adapter)) return;\n this.retiring.add(adapter);\n void adapter.retire().then(\n () => this.retiring.delete(adapter),\n () => this.retiring.delete(adapter)\n );\n }\n}\n","import { FerricStoreError } from \"./errors.js\";\nimport type { RoutingRoute, RoutingTopology } from \"./routing-topology.js\";\nimport { sameEndpoint } from \"./topology-utilities.js\";\n\nexport const MAX_TOPOLOGY_PLANNING_ATTEMPTS = 8;\n\nexport class StaleTopologyRouteError extends FerricStoreError {\n constructor() {\n super(\"FerricStore topology route became stale before dispatch\");\n }\n}\n\nexport function topologyRouteIsCurrent(\n topology: RoutingTopology,\n route: RoutingRoute\n): boolean {\n const current = route.slot == null ? undefined : topology.slots[route.slot];\n return current?.endpointKey === route.endpointKey &&\n current.laneId === route.laneId &&\n current.shard === route.shard &&\n current.leaderNode === route.leaderNode &&\n sameEndpoint(current.endpoint, route.endpoint);\n}\n","import type { CommandArgument } from \"./internal.js\";\nimport { buildProtocolCommand, type ProtocolCommand } from \"./protocol.js\";\nimport type { RoutingRoute } from \"./routing-topology.js\";\nimport type { RoutedCommandData } from \"./topology-execution-types.js\";\nimport {\n commandName,\n flowRoutingData,\n routingKeyFromArgs,\n routingKeyFromProtocolPayload\n} from \"./topology-routing.js\";\n\n/** Plan one command against the caller's current routing snapshot. */\nexport function topologyRouteData(\n args: readonly CommandArgument[],\n route: (key: string | Buffer) => RoutingRoute\n): RoutedCommandData | undefined {\n if (args.length === 0) return undefined;\n\n const name = commandName(args);\n if (name?.startsWith(\"FLOW.\") === true) {\n const routed = flowRoutingData(name, args);\n return routed == null\n ? undefined\n : {\n ...(routed.command == null ? {} : { command: routed.command }),\n route: route(routed.key)\n };\n }\n\n const keyFromArgs = routingKeyFromArgs(name, args);\n if (keyFromArgs.handled) {\n return keyFromArgs.key == null ? undefined : { route: route(keyFromArgs.key) };\n }\n\n let command: ProtocolCommand;\n try {\n command = buildProtocolCommand(args);\n } catch {\n return undefined;\n }\n const key = routingKeyFromProtocolPayload(name, command);\n return key == null ? undefined : { command, route: route(key) };\n}\n","import { commandView, splitFlowValueMGetArguments } from \"./command-grammar.js\";\nimport { FerricStoreError } from \"./errors.js\";\nimport { integer, type CommandArgument } from \"./internal.js\";\nimport type { RoutingRoute } from \"./routing-topology.js\";\nimport {\n commandName,\n routedCommandArgs,\n routedKeyGroups\n} from \"./topology-routing.js\";\nimport { mapSettledWithConcurrency } from \"./topology-utilities.js\";\n\ntype ScatterResult =\n | { readonly handled: false }\n | { readonly handled: true; readonly value: unknown };\n\ninterface TopologyScatterDependencies {\n readonly concurrency: number;\n readonly executeOnRoute: (\n args: readonly CommandArgument[],\n route: RoutingRoute\n ) => Promise<unknown>;\n readonly route: (key: string | Buffer) => RoutingRoute;\n}\n\n/** Decompose only commands whose shard results can be combined exactly. */\nexport class TopologyScatterExecutor {\n constructor(private readonly dependencies: TopologyScatterDependencies) {}\n\n async execute(args: readonly CommandArgument[]): Promise<ScatterResult> {\n const name = commandName(args);\n if (name === \"MGET\") {\n const value = await this.scatterArray(name, args.slice(1));\n return value == null ? { handled: false } : { handled: true, value };\n }\n if (name === \"DEL\" || name === \"EXISTS\" || name === \"UNLINK\") {\n const value = await this.scatterCount(name, args.slice(1));\n return value == null ? { handled: false } : { handled: true, value };\n }\n if (name === \"FLOW.VALUE.MGET\") {\n const { refs, suffix } = splitFlowValueMGetArguments(\n args,\n commandView(args).argumentStart\n );\n const value = await this.scatterArray(name, refs, suffix);\n return value == null ? { handled: false } : { handled: true, value };\n }\n return { handled: false };\n }\n\n private async scatterArray(\n name: string,\n keys: readonly CommandArgument[],\n suffix: readonly CommandArgument[] = []\n ): Promise<unknown[] | undefined> {\n const groups = this.keyGroups(keys);\n if (groups == null) return undefined;\n const output = new Array<unknown>(keys.length);\n const settled = await mapSettledWithConcurrency(\n groups,\n this.dependencies.concurrency,\n async (group) => {\n const response = await this.dependencies.executeOnRoute(\n routedCommandArgs(name, group.entries, suffix),\n group.route\n );\n if (!Array.isArray(response) || response.length !== group.entries.length) {\n throw new FerricStoreError(\n `${name} shard response length did not match request length`,\n { raw: response }\n );\n }\n group.entries.forEach((entry, index) => {\n if (!Object.hasOwn(response, index)) {\n throw new FerricStoreError(`${name} shard response item ${index} is missing`, {\n raw: response\n });\n }\n output[entry.index] = response[index];\n });\n }\n );\n for (const result of settled) {\n if (result.status === \"rejected\") throw result.reason;\n }\n return output;\n }\n\n private async scatterCount(\n name: string,\n keys: readonly CommandArgument[]\n ): Promise<number | undefined> {\n const groups = this.keyGroups(keys);\n if (groups == null) return undefined;\n const settled = await mapSettledWithConcurrency(\n groups,\n this.dependencies.concurrency,\n async (group) => {\n const response = await this.dependencies.executeOnRoute(\n routedCommandArgs(name, group.entries),\n group.route\n );\n const count = integer(response);\n if (count < 0 || count > group.entries.length) {\n throw new FerricStoreError(`${name} shard returned an invalid count`, { raw: response });\n }\n return count;\n }\n );\n let total = 0;\n for (const result of settled) {\n if (result.status === \"rejected\") throw result.reason;\n total += result.value;\n }\n return total;\n }\n\n private keyGroups(keys: readonly CommandArgument[]) {\n return routedKeyGroups(keys, this.dependencies.route);\n }\n}\n","import { Buffer } from \"node:buffer\";\nimport { setOwnValue, text } from \"./internal.js\";\nimport { mapDenseResponseArray } from \"./response-array-normalization.js\";\n\n/** Normalize response-map keys and containers without coercing opaque binary leaves. */\nexport function toStringKeyMapPreservingValues(value: unknown): Record<string, unknown> | undefined {\n if (value == null) return undefined;\n const result: Record<string, unknown> = {};\n if (value instanceof Map) {\n for (const [key, item] of value.entries()) {\n setOwnValue(result, text(key), normalizeMapStructurePreservingBytes(item));\n }\n return result;\n }\n if (\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n !Buffer.isBuffer(value) &&\n !(value instanceof Uint8Array)\n ) {\n for (const [key, item] of Object.entries(value)) {\n setOwnValue(result, text(key), normalizeMapStructurePreservingBytes(item));\n }\n return result;\n }\n return undefined;\n}\n\nfunction normalizeMapStructurePreservingBytes(value: unknown): unknown {\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) return value;\n if (value instanceof Map) {\n const result: Record<string, unknown> = {};\n for (const [key, item] of value.entries()) {\n setOwnValue(result, text(key), normalizeMapStructurePreservingBytes(item));\n }\n return result;\n }\n if (Array.isArray(value)) {\n return mapDenseResponseArray(value, normalizeMapStructurePreservingBytes);\n }\n if (typeof value === \"object\" && value != null) {\n const result: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(value)) {\n setOwnValue(result, text(key), normalizeMapStructurePreservingBytes(item));\n }\n return result;\n }\n return value;\n}\n","import { Buffer } from \"node:buffer\";\nimport type { Codec } from \"./codecs.js\";\nimport { bytes, integer, normalizeRefMeta, setOwnValue, text, toStringKeyMap } from \"./internal.js\";\nimport type { FetchOrComputeResult, KeyInfo, RateLimitResult } from \"./types.js\";\n\nexport function rateLimitResultFromResp(value: unknown): RateLimitResult {\n if (!Array.isArray(value) || value.length !== 4) {\n throw new TypeError(\"RATELIMIT.ADD returned an unexpected response\");\n }\n const status = requiredResponseString(value[0], \"RATELIMIT.ADD\");\n if (status !== \"allowed\" && status !== \"denied\") {\n throw new TypeError(\"RATELIMIT.ADD returned an unexpected response\");\n }\n return {\n status,\n count: requiredNonNegativeInteger(value[1], \"RATELIMIT.ADD\"),\n remaining: requiredNonNegativeInteger(value[2], \"RATELIMIT.ADD\"),\n resetMs: requiredNonNegativeInteger(value[3], \"RATELIMIT.ADD\"),\n allowed: status === \"allowed\"\n };\n}\n\nexport function keyInfoFromResp(value: unknown): KeyInfo {\n const raw = keyInfoMap(value);\n return {\n type: requiredResponseString(raw.type, \"FERRICSTORE.KEY_INFO\"),\n valueSize: requiredNonNegativeInteger(raw.value_size, \"FERRICSTORE.KEY_INFO\"),\n ttlMs: requiredInteger(raw.ttl_ms, \"FERRICSTORE.KEY_INFO\"),\n hotCacheStatus: requiredResponseString(raw.hot_cache_status, \"FERRICSTORE.KEY_INFO\"),\n lastWriteShard: requiredNonNegativeInteger(raw.last_write_shard, \"FERRICSTORE.KEY_INFO\"),\n raw\n };\n}\n\nexport function fetchOrComputeResultFromResp<T = unknown>(\n value: unknown,\n codec: Codec\n): FetchOrComputeResult<T> {\n if (!Array.isArray(value) || value.length < 2 || value.length > 3) {\n throw new TypeError(\"FETCH_OR_COMPUTE returned an unexpected response\");\n }\n const status = requiredResponseString(value[0], \"FETCH_OR_COMPUTE\");\n if (status === \"hit\") {\n if (value.length !== 2) throw new TypeError(\"FETCH_OR_COMPUTE returned an unexpected response\");\n return {\n computeMode: \"hit\",\n status,\n value: decodePayload(codec, value[1]) as T | null,\n hit: true,\n shouldCompute: false\n };\n }\n if (status !== \"compute\" || value.length !== 3) {\n throw new TypeError(\"FETCH_OR_COMPUTE returned an unexpected response\");\n }\n return {\n status,\n computeHint: responseBytes(value[1], \"FETCH_OR_COMPUTE\"),\n computeMode: \"fenced\",\n computeToken: responseBytes(value[2], \"FETCH_OR_COMPUTE\"),\n hit: false,\n shouldCompute: true\n };\n}\n\nfunction decodePayload(codec: Codec, value: unknown): unknown {\n if (value == null) return null;\n if (Buffer.isBuffer(value)) return codec.decode(value);\n if (value instanceof Uint8Array) return codec.decode(Buffer.from(value));\n if (typeof value === \"string\") return codec.decode(Buffer.from(value));\n return normalizeRefMeta(value);\n}\n\nfunction requiredResponseString(value: unknown, context: string): string {\n if (typeof value !== \"string\" && !Buffer.isBuffer(value) && !(value instanceof Uint8Array)) {\n throw new TypeError(`${context} returned an unexpected response`);\n }\n const result = text(value);\n if (result.length === 0) throw new TypeError(`${context} returned an unexpected response`);\n return result;\n}\n\nfunction requiredInteger(value: unknown, context: string): number {\n if (value == null || value === \"\") throw new TypeError(`${context} returned an unexpected response`);\n return integer(value);\n}\n\nfunction requiredNonNegativeInteger(value: unknown, context: string): number {\n const result = requiredInteger(value, context);\n if (result < 0) throw new TypeError(`${context} returned an unexpected response`);\n return result;\n}\n\nfunction responseBytes(value: unknown, context: string): Buffer {\n if (\n typeof value !== \"string\" &&\n !Buffer.isBuffer(value) &&\n !(value instanceof Uint8Array)\n ) {\n throw new TypeError(`${context} returned an unexpected response`);\n }\n return bytes(value);\n}\n\nfunction keyInfoMap(value: unknown): Record<string, unknown> {\n if (Array.isArray(value)) {\n if (value.length % 2 !== 0) throw new TypeError(\"FERRICSTORE.KEY_INFO returned an unexpected response\");\n const raw: Record<string, unknown> = {};\n for (let index = 0; index < value.length; index += 2) {\n const key = requiredResponseString(value[index], \"FERRICSTORE.KEY_INFO\");\n setOwnValue(raw, key, value[index + 1]);\n }\n return raw;\n }\n const raw = toStringKeyMap(value);\n if (raw == null) throw new TypeError(\"FERRICSTORE.KEY_INFO returned an unexpected response\");\n return raw;\n}\n","import type { Codec } from \"./codecs.js\";\nimport {\n bytes,\n field,\n integer,\n integerReply,\n normalizeRefMeta,\n optionalString,\n setOwnValue,\n text,\n toStringKeyMap,\n type CommandArgument\n} from \"./internal.js\";\nimport { toStringKeyMapPreservingValues } from \"./response-map-preservation.js\";\nimport type { ExceptionPolicy } from \"./worker-types.js\";\nexport type {\n BackoffKind,\n BackpressurePolicy,\n ExceptionPolicy,\n RetryPolicy,\n ValueConfig,\n WorkerConfig,\n WorkerProfile,\n WorkerRefillStrategy\n} from \"./worker-types.js\";\n\nexport type MaxActiveMs = number | \"infinity\";\n/** An exact Flow fencing token; bigint is used beyond JavaScript's safe integer range. */\nexport type FencingToken = number | bigint;\n\nexport interface ChildSpec {\n id: string;\n type: string;\n payload?: unknown;\n partitionKey?: string;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n}\n\nexport type StateMetaValue = string | number | boolean | Buffer;\nexport type StateMeta = Record<string, StateMetaValue>;\n\nexport interface CreateItem {\n id: string;\n payload?: unknown;\n partitionKey?: string;\n attributes?: Record<string, CommandArgument>;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n stateMeta?: StateMeta;\n}\n\n/** @internal */\nexport const CLAIMED_ITEM_WIRE: unique symbol = Symbol(\"ferricstore.claimedItemWire\");\n\n/** @internal */\nexport interface ClaimedItemWire {\n id: Buffer;\n partitionKey?: Buffer | null;\n leaseToken: Buffer;\n fencingToken: FencingToken;\n}\n\nexport interface ClaimedItem<TPayload = unknown> {\n id: string;\n leaseToken: Buffer;\n fencingToken: FencingToken;\n partitionKey?: string;\n /** Present when supplied by a full response or known compact-claim context. */\n type?: string;\n state: string;\n runState?: string;\n payload?: TPayload | null;\n attributes?: Record<string, unknown>;\n /** @internal */\n [CLAIMED_ITEM_WIRE]?: ClaimedItemWire;\n}\n\nexport interface FencedItem {\n id: string;\n fencingToken: FencingToken;\n leaseToken?: Buffer;\n partitionKey?: string;\n}\n\nexport interface RateLimitResult {\n status: string;\n count: number;\n remaining: number;\n resetMs: number;\n allowed: boolean;\n}\n\nexport interface KeyInfo {\n type: string;\n valueSize: number;\n ttlMs: number;\n hotCacheStatus: string;\n lastWriteShard: number;\n raw: Record<string, unknown>;\n}\n\nexport interface FetchOrComputeHitResult<T = unknown> {\n readonly computeMode: \"hit\";\n readonly hit: true;\n readonly shouldCompute: false;\n readonly status: \"hit\";\n readonly value: T | null;\n}\n\nexport interface FetchOrComputeComputeResult {\n /** Opaque application hint echoed for the process elected to compute. */\n readonly computeHint: Buffer;\n readonly computeMode: \"fenced\";\n /** Fencing token required when publishing the computed result or error. */\n readonly computeToken: Buffer;\n readonly hit: false;\n readonly shouldCompute: true;\n readonly status: \"compute\";\n}\n\nexport type FetchOrComputeFencedResult = FetchOrComputeComputeResult;\nexport type FetchOrComputeResult<T = unknown> = FetchOrComputeHitResult<T> | FetchOrComputeComputeResult;\n\nexport interface FlowMaxActiveFailure {\n readonly maxActiveMs: number;\n readonly reason: \"max_active_ms\";\n}\n\nexport interface FlowRecord<TPayload = unknown> {\n id: string;\n type: string;\n state: string;\n partitionKey: string;\n runState?: string;\n payload?: TPayload | null;\n leaseToken: Buffer;\n fencingToken: FencingToken;\n version: number;\n parentFlowId?: string;\n rootFlowId?: string;\n correlationId?: string;\n maxActiveMs?: number;\n error?: unknown;\n failureReason?: string;\n valueRefs?: Record<string, unknown>;\n values?: Record<string, unknown>;\n valueSizes?: Record<string, unknown>;\n valueOmitted?: Record<string, unknown>;\n valueMissing?: Record<string, unknown>;\n attributes?: Record<string, unknown>;\n stateMeta?: Record<string, unknown>;\n indexedStateMeta?: string;\n raw?: unknown;\n}\n\nexport { fetchOrComputeResultFromResp, keyInfoFromResp, rateLimitResultFromResp } from \"./native-kv-responses.js\";\n\nexport function normalizeExceptionPolicy(value: ExceptionPolicy | undefined): ExceptionPolicy {\n if (value == null) {\n return \"retry\";\n }\n if (value === \"retry\" || value === \"fail\" || value === \"raise\") {\n return value;\n }\n throw new Error(\"exceptionPolicy must be 'retry', 'fail', or 'raise'\");\n}\n\nexport function claimedItemFromResp<TPayload = unknown>(\n value: unknown,\n codec?: Codec,\n context: { readonly type?: string } = {}\n): ClaimedItem<TPayload> {\n if (Array.isArray(value)) {\n const tuple = value as unknown[];\n if (tuple.length < 4 || tuple.length > 6) {\n throw new TypeError(\"compact claim returned an unexpected response\");\n }\n const id = requiredBytes(tuple[0], \"compact claim id\");\n const partition = tuple[1] == null ? null : requiredBytes(tuple[1], \"compact claim partition\");\n const leaseToken = requiredBytes(tuple[2], \"compact claim lease token\");\n const fencingToken = requiredFencingToken(tuple[3], \"compact claim fencing token\");\n const legacyAttributes = toStringKeyMapPreservingValues(tuple[4]);\n const rawAttributes = tuple[5] ?? legacyAttributes;\n const attributes = rawAttributes == null ? undefined : toStringKeyMapPreservingValues(rawAttributes);\n if (rawAttributes != null && attributes == null) {\n throw new TypeError(\"compact claim attributes returned an unexpected response\");\n }\n const item: ClaimedItem<TPayload> = {\n id: text(id),\n partitionKey: optionalString(partition),\n leaseToken,\n fencingToken,\n runState: legacyAttributes == null ? optionalResponseString(tuple[4], \"compact claim run state\") : undefined,\n ...(attributes == null ? {} : { attributes }),\n ...(context.type == null ? {} : { type: context.type }),\n state: \"running\"\n };\n Object.defineProperty(item, CLAIMED_ITEM_WIRE, {\n enumerable: false,\n value: { id, partitionKey: partition, leaseToken, fencingToken }\n });\n return item;\n }\n\n assertResponseRecord(value, \"FLOW claim\");\n const payload = field(value, \"payload\");\n return {\n id: requiredTextField(value, \"id\", \"FLOW claim\"),\n leaseToken: requiredBytes(field(value, \"lease_token\"), \"FLOW claim lease_token\"),\n fencingToken: requiredFencingToken(field(value, \"fencing_token\"), \"FLOW claim fencing_token\"),\n partitionKey: optionalResponseString(field(value, \"partition_key\"), \"FLOW claim partition_key\"),\n type: requiredTextField(value, \"type\", \"FLOW claim\"),\n state: requiredTextField(value, \"state\", \"FLOW claim\"),\n runState: optionalResponseString(field(value, \"run_state\"), \"FLOW claim run_state\"),\n attributes: optionalMapField(value, \"attributes\", \"FLOW claim\", true),\n payload: payload == null ? undefined : (decodePayload(codec, payload) as TPayload | null)\n };\n}\n\nexport function flowRecordFromResp<TPayload = unknown>(\n value: unknown,\n codec?: Codec\n): FlowRecord<TPayload> {\n assertResponseRecord(value, \"FLOW record\");\n const payload = field(value, \"payload\");\n const values = decodeValues(field(value, \"values\"), codec, \"FLOW record values\");\n const maxActiveMs = optionalPositiveResponseInteger(\n field(value, \"max_active_ms\"),\n \"FLOW record max_active_ms\"\n );\n const rawError = field(value, \"error\");\n const error = flowError(rawError, codec);\n const failureReason = optionalResponseString(field(rawError, \"reason\"), \"FLOW record error reason\");\n\n return {\n id: requiredTextField(value, \"id\", \"FLOW record\"),\n type: requiredTextField(value, \"type\", \"FLOW record\"),\n state: requiredTextField(value, \"state\", \"FLOW record\"),\n partitionKey: optionalResponseString(field(value, \"partition_key\"), \"FLOW record partition_key\") ?? \"\",\n runState: optionalResponseString(field(value, \"run_state\"), \"FLOW record run_state\"),\n payload: payload == null ? undefined : (decodePayload(codec, payload) as TPayload | null),\n leaseToken: optionalResponseBytes(field(value, \"lease_token\"), \"FLOW record lease_token\"),\n fencingToken: optionalFencingToken(field(value, \"fencing_token\"), \"FLOW record fencing_token\"),\n version: optionalResponseInteger(field(value, \"version\"), \"FLOW record version\"),\n parentFlowId: optionalResponseString(field(value, \"parent_flow_id\"), \"FLOW record parent_flow_id\"),\n rootFlowId: optionalResponseString(field(value, \"root_flow_id\"), \"FLOW record root_flow_id\"),\n correlationId: optionalResponseString(field(value, \"correlation_id\"), \"FLOW record correlation_id\"),\n ...(maxActiveMs == null ? {} : { maxActiveMs }),\n ...(error == null ? {} : { error }),\n ...(failureReason == null ? {} : { failureReason }),\n valueRefs: optionalMapField(value, \"value_refs\", \"FLOW record\"),\n values,\n valueSizes: optionalMapField(value, \"value_sizes\", \"FLOW record\"),\n valueOmitted: optionalMapField(value, \"value_omitted\", \"FLOW record\"),\n valueMissing: optionalMapField(value, \"value_missing\", \"FLOW record\"),\n attributes: optionalMapField(value, \"attributes\", \"FLOW record\", true),\n stateMeta: optionalMapField(value, \"state_meta\", \"FLOW record\", true),\n indexedStateMeta: optionalResponseString(field(value, \"indexed_state_meta\"), \"FLOW record indexed_state_meta\"),\n raw: value\n };\n}\n\nfunction flowError(value: unknown, codec: Codec | undefined): unknown {\n if (value == null) return undefined;\n const reason = optionalResponseString(field(value, \"reason\"), \"FLOW record error reason\");\n if (reason === \"max_active_ms\") {\n const maxActiveMs = optionalPositiveResponseInteger(\n field(value, \"max_active_ms\"),\n \"FLOW record error max_active_ms\"\n );\n if (maxActiveMs == null) {\n throw new TypeError(\"FLOW record error max_active_ms returned an unexpected response\");\n }\n return { maxActiveMs, reason } satisfies FlowMaxActiveFailure;\n }\n return decodePayload(codec, value);\n}\n\nfunction decodePayload(codec: Codec | undefined, value: unknown): unknown {\n if (value == null) {\n return null;\n }\n if (Buffer.isBuffer(value)) {\n return codec?.decode(value) ?? value;\n }\n if (value instanceof Uint8Array) {\n const buffer = Buffer.from(value);\n return codec?.decode(buffer) ?? buffer;\n }\n if (typeof value === \"string\" && codec != null) {\n return codec.decode(Buffer.from(value));\n }\n return normalizeRefMeta(value);\n}\n\nfunction decodeValues(\n value: unknown,\n codec: Codec | undefined,\n context: string\n): Record<string, unknown> | undefined {\n if (value == null) {\n return undefined;\n }\n const map = toStringKeyMapPreservingValues(value);\n if (map == null) {\n throw new TypeError(`${context} returned an unexpected response`);\n }\n\n const decoded: Record<string, unknown> = {};\n for (const [key, item] of Object.entries(map)) {\n setOwnValue(decoded, key, decodePayload(codec, item));\n }\n return decoded;\n}\n\nfunction optionalMapField(\n value: unknown,\n key: string,\n context: string,\n preserveValues = false\n): Record<string, unknown> | undefined {\n const item = field(value, key);\n if (item == null) {\n return undefined;\n }\n const map = preserveValues ? toStringKeyMapPreservingValues(item) : toStringKeyMap(item);\n if (map == null) {\n throw new TypeError(`${context} ${key} returned an unexpected response`);\n }\n return map;\n}\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value == null || Buffer.isBuffer(value) || value instanceof Uint8Array || Array.isArray(value)) {\n return false;\n }\n const prototype: unknown = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction assertResponseRecord(value: unknown, context: string): asserts value is Map<unknown, unknown> | Record<string, unknown> {\n if (!(value instanceof Map) && !isPlainObject(value)) {\n throw new TypeError(`${context} returned an unexpected response`);\n }\n}\n\nfunction requiredTextField(value: unknown, key: string, context: string): string {\n const item = field(value, key);\n if (typeof item !== \"string\" && !Buffer.isBuffer(item) && !(item instanceof Uint8Array)) {\n throw new TypeError(`${context} is missing required ${key}`);\n }\n const result = text(item);\n if (result.length === 0) {\n throw new TypeError(`${context} is missing required ${key}`);\n }\n return result;\n}\n\nfunction requiredBytes(value: unknown, context: string): Buffer {\n if (typeof value !== \"string\" && !Buffer.isBuffer(value) && !(value instanceof Uint8Array)) {\n throw new TypeError(`${context} returned an unexpected response`);\n }\n const result = bytes(value);\n if (result.byteLength === 0) {\n throw new TypeError(`${context} returned an unexpected response`);\n }\n return result;\n}\n\nfunction requiredInteger(value: unknown, context: string): number {\n if (value == null || value === \"\") {\n throw new TypeError(`${context} returned an unexpected response`);\n }\n return integer(value);\n}\n\nfunction requiredFencingToken(value: unknown, context: string): FencingToken {\n if (value == null || value === \"\") {\n throw new TypeError(`${context} returned an unexpected response`);\n }\n return integerReply(value);\n}\n\nfunction optionalResponseString(value: unknown, context: string): string | undefined {\n if (\n value == null ||\n value === \"\" ||\n ((Buffer.isBuffer(value) || value instanceof Uint8Array) && value.byteLength === 0)\n ) {\n return undefined;\n }\n if (typeof value !== \"string\" && !Buffer.isBuffer(value) && !(value instanceof Uint8Array)) {\n throw new TypeError(`${context} returned an unexpected response`);\n }\n return text(value);\n}\n\nfunction responseBytes(value: unknown, context: string): Buffer {\n if (typeof value !== \"string\" && !Buffer.isBuffer(value) && !(value instanceof Uint8Array)) {\n throw new TypeError(`${context} returned an unexpected response`);\n }\n return bytes(value);\n}\n\nfunction optionalResponseBytes(value: unknown, context: string): Buffer {\n return value == null ? Buffer.alloc(0) : responseBytes(value, context);\n}\n\nfunction optionalResponseInteger(value: unknown, context: string): number {\n return value == null ? 0 : requiredInteger(value, context);\n}\n\nfunction optionalFencingToken(value: unknown, context: string): FencingToken {\n return value == null ? 0 : requiredFencingToken(value, context);\n}\n\nfunction optionalPositiveResponseInteger(value: unknown, context: string): number | undefined {\n if (value == null) return undefined;\n const result = requiredInteger(value, context);\n if (result <= 0) {\n throw new TypeError(`${context} returned an unexpected response`);\n }\n return result;\n}\n","import { isDeepStrictEqual } from \"node:util\";\nimport type { Codec } from \"./codecs.js\";\nimport { encodeFlowValue } from \"./flow-value-snapshot.js\";\nimport { snapshotOwnStringArray } from \"./string-array-snapshot.js\";\nimport type {\n AdminListOptions,\n ApprovalListOptions,\n AttributeQueryOptions,\n ClaimDueOptions,\n FlowAdminRecord,\n FlowStateMode,\n FlowStatePolicy,\n FlowStatePolicyLike,\n ManagementPairs,\n ReadOptions,\n RequestContext,\n SearchStateMeta\n} from \"./client-options.js\";\nimport { append, appendBool, arrayResponse, normalizeRefMeta, text, type CommandArgument } from \"./internal.js\";\nimport { normalizeRequestContext } from \"./request-context.js\";\nexport { appendAttributeMutations } from \"./flow-argument-helpers.js\";\nimport {\n CLAIMED_ITEM_WIRE,\n type ClaimedItem,\n type CreateItem,\n type FencedItem,\n type RetryPolicy,\n type StateMeta\n} from \"./types.js\";\nexport * from \"./client-response-helpers.js\";\n\nexport function finiteNonNegativeInteger(value: number | undefined, fallback: number): number {\n return value == null || !Number.isFinite(value)\n ? fallback\n : Math.max(0, Math.trunc(value));\n}\n\nexport function finiteNonNegativeNumber(value: number | undefined, fallback: number): number {\n return value == null || !Number.isFinite(value) ? fallback : Math.max(0, value);\n}\n\nexport function appendReadOptions(args: CommandArgument[], options: ReadOptions): void {\n append(args, \"COUNT\", options.count);\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"FROM_MS\", options.fromMs);\n append(args, \"TO_MS\", options.toMs);\n appendBool(args, \"REV\", options.rev);\n append(args, \"STATE\", options.state);\n appendBool(args, \"TERMINAL_ONLY\", options.terminalOnly);\n appendBool(args, \"INCLUDE_COLD\", options.includeCold);\n appendBool(args, \"CONSISTENT_PROJECTION\", options.consistentProjection);\n}\n\nexport function appendAttributeQueryOptions(args: CommandArgument[], options: AttributeQueryOptions): void {\n append(args, \"STATE\", options.state);\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"COUNT\", options.count);\n appendBool(args, \"CONSISTENT_PROJECTION\", options.consistentProjection);\n}\n\nexport function approvalListArgs(command: string, options: ApprovalListOptions): CommandArgument[] {\n const args: CommandArgument[] = [command];\n append(args, \"STATUS\", options.status);\n append(args, \"SCOPE\", options.scope);\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"FLOW_ID\", options.flowId);\n append(args, \"LIMIT\", options.limit);\n return args;\n}\n\nexport function adminListArgs(\n command: string,\n options: AdminListOptions & { nowMs?: number }\n): CommandArgument[] {\n const args: CommandArgument[] = [command];\n append(args, \"SCOPE\", options.scope);\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"LIMIT\", options.limit);\n append(args, \"NOW\", options.nowMs);\n return args;\n}\n\nexport function adminRecordResponse(value: unknown, context: string): FlowAdminRecord {\n const normalized = normalizeRefMeta(value);\n if (!isPlainObject(normalized)) {\n throw new TypeError(`${context} returned an invalid record response`);\n }\n return normalized;\n}\n\nexport function optionalAdminRecord(value: unknown, context: string): FlowAdminRecord | null {\n return value == null ? null : adminRecordResponse(value, context);\n}\n\nexport function adminRecordList(value: unknown, context: string): FlowAdminRecord[] {\n return arrayResponse(value).map((item) => adminRecordResponse(item, context));\n}\n\nexport function okLike(value: unknown): boolean {\n if (typeof value === \"string\") return value.toUpperCase() === \"OK\";\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) {\n return Buffer.from(value).toString(\"utf8\").toUpperCase() === \"OK\";\n }\n return false;\n}\n\nexport function appendStateMeta(args: CommandArgument[], stateMeta: StateMeta | undefined): void {\n for (const [name, value] of Object.entries(stateMeta ?? {})) {\n args.push(\"STATE_META\", name, value);\n }\n}\n\nexport function appendAttributes(args: CommandArgument[], attributes: Record<string, CommandArgument> | undefined): void {\n for (const [name, value] of Object.entries(attributes ?? {})) {\n args.push(\"ATTRIBUTE\", name, value);\n }\n}\n\nexport function appendSearchStateMeta(\n args: CommandArgument[],\n state: string | undefined,\n stateMeta: SearchStateMeta | undefined\n): void {\n const entries = Object.entries(stateMeta ?? {});\n if (entries.length === 0) {\n return;\n }\n\n if (entries.every(([, value]) => isPlainObject(value))) {\n for (const [metaState, values] of entries) {\n args.push(\"STATE_META\", metaState, values as Record<string, unknown>);\n }\n return;\n }\n\n if (state == null) {\n throw new Error(\"search stateMeta filters require state or nested state metadata\");\n }\n\n args.push(\"STATE_META\", state, stateMeta);\n}\n\nexport function normalizeAdminResponse(value: unknown): unknown {\n return normalizeRefMeta(value);\n}\n\nexport function jsonArg(value: Record<string, unknown> | string): string {\n return typeof value === \"string\" ? value : JSON.stringify(value);\n}\n\nexport function commandWithRequestContext(\n command: string,\n args: readonly CommandArgument[],\n requestContext: RequestContext | undefined\n): CommandArgument[] {\n const commandArgs: CommandArgument[] = [command, ...args];\n if (requestContext != null) {\n commandArgs.push(\"REQUEST_CONTEXT\", normalizeRequestContext(requestContext));\n }\n return commandArgs;\n}\n\nexport function infoText(value: unknown): string {\n if (typeof value === \"string\" || Buffer.isBuffer(value)) {\n return text(value);\n }\n const normalized = normalizeRefMeta(value);\n if (isPlainObject(normalized)) {\n return Object.entries(normalized)\n .map(([key, item]) => `${key}=${diagnosticValueText(item)}`)\n .join(\" \");\n }\n return diagnosticValueText(normalized);\n}\n\nexport function diagnosticValueText(value: unknown): string {\n if (value == null) {\n return \"\";\n }\n if (Buffer.isBuffer(value)) {\n return value.toString(\"utf8\");\n }\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\" || typeof value === \"bigint\") {\n return String(value);\n }\n return JSON.stringify(value);\n}\n\nexport function managementPairArgs(pairs: ManagementPairs): CommandArgument[] {\n const args: CommandArgument[] = [];\n for (const [key, value] of Object.entries(pairs)) {\n if (value != null) {\n args.push(key.toUpperCase(), value);\n }\n }\n return args;\n}\n\nexport function appendFlowStatePolicy(args: CommandArgument[], policy: FlowStatePolicyLike): void {\n if (isFlowStatePolicy(policy)) {\n appendPolicyMode(args, \"state\", policy.mode);\n if (policy.retry != null) {\n appendRetryPolicy(args, policy.retry);\n }\n return;\n }\n appendRetryPolicy(args, policy);\n}\n\nexport function isFlowStatePolicy(policy: FlowStatePolicyLike): policy is FlowStatePolicy {\n return typeof policy === \"object\" && policy != null && (\n Object.hasOwn(policy, \"mode\") || Object.hasOwn(policy, \"retry\")\n );\n}\n\nexport function ruleArgs(rules: string | readonly string[]): readonly string[] {\n return typeof rules === \"string\" ? [rules] : snapshotOwnStringArray(rules, \"ACL rules\");\n}\n\nexport function isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value != null && !Array.isArray(value) && !Buffer.isBuffer(value);\n}\n\nexport function sharedCreateManyStateMeta(items: readonly CreateItem[], stateMeta: StateMeta | undefined): StateMeta | undefined {\n if (stateMeta != null) {\n for (const item of items) {\n if (item.stateMeta != null && !stateMetaEquals(stateMeta, item.stateMeta)) {\n throw new Error(\"createMany item stateMeta must match shared stateMeta when both are provided\");\n }\n }\n return stateMeta;\n }\n\n let shared: StateMeta | undefined;\n let sawMissing = false;\n for (const item of items) {\n const itemMeta = item.stateMeta;\n if (itemMeta == null) {\n sawMissing = true;\n continue;\n }\n if (sawMissing || (shared != null && !stateMetaEquals(itemMeta, shared))) {\n throw new Error(\"createMany supports shared stateMeta only; use stateMeta or separate create calls for per-item stateMeta\");\n }\n shared = itemMeta;\n }\n if (shared != null && sawMissing) {\n throw new Error(\"createMany supports shared stateMeta only; use stateMeta or separate create calls for per-item stateMeta\");\n }\n return shared;\n}\n\nexport function sharedCreateManyAttributes(\n items: readonly CreateItem[],\n attributes: Record<string, CommandArgument> | undefined\n): Record<string, CommandArgument> | undefined {\n if (attributes != null) {\n for (const item of items) {\n if (hasOwnEnumerableProperty(item.attributes) && !isDeepStrictEqual(attributes, item.attributes)) {\n throw new Error(\"createMany item attributes must match shared attributes when both are provided\");\n }\n }\n return attributes;\n }\n\n let shared: Record<string, CommandArgument> | undefined;\n let sawMissing = false;\n for (const item of items) {\n const itemAttributes = item.attributes;\n if (!hasOwnEnumerableProperty(itemAttributes)) {\n sawMissing = true;\n continue;\n }\n if (sawMissing || (shared != null && !isDeepStrictEqual(itemAttributes, shared))) {\n throw new Error(\n \"createMany supports shared attributes only; use attributes or separate create calls for per-item attributes\"\n );\n }\n shared = itemAttributes;\n }\n if (shared != null && sawMissing) {\n throw new Error(\n \"createMany supports shared attributes only; use attributes or separate create calls for per-item attributes\"\n );\n }\n return shared;\n}\n\nexport function hasOwnEnumerableProperty(value: Record<string, CommandArgument> | undefined): value is Record<string, CommandArgument> {\n if (value == null) return false;\n for (const key in value) {\n if (Object.prototype.hasOwnProperty.call(value, key)) return true;\n }\n return false;\n}\n\nexport function stateMetaEquals(left: StateMeta, right: StateMeta): boolean {\n const leftEntries = Object.entries(left);\n if (leftEntries.length !== Object.keys(right).length) {\n return false;\n }\n return leftEntries.every(([key, value]) => stateMetaValueEquals(value, right[key]));\n}\n\nexport function stateMetaValueEquals(left: StateMeta[keyof StateMeta], right: StateMeta[keyof StateMeta] | undefined): boolean {\n if (Buffer.isBuffer(left) || Buffer.isBuffer(right)) {\n return Buffer.isBuffer(left) && Buffer.isBuffer(right) && left.equals(right);\n }\n return Object.is(left, right);\n}\n\nexport function appendNamedCounts(\n args: CommandArgument[],\n codec: Codec,\n values: Record<string, unknown>,\n valueRefs: Record<string, string>\n): void {\n args.push(Object.keys(values).length);\n for (const [name, value] of Object.entries(values)) {\n args.push(name, encodeFlowValue(codec, value));\n }\n args.push(Object.keys(valueRefs).length);\n for (const [name, ref] of Object.entries(valueRefs)) {\n args.push(name, ref);\n }\n}\n\nexport function appendClaimedItems(\n args: CommandArgument[],\n partitionKey: string | undefined,\n items: ClaimedItem[],\n command: string\n): void {\n assertManyPartitionMatches(partitionKey, items, command);\n args.push(\"ITEMS\");\n for (const item of items) {\n const wire = item[CLAIMED_ITEM_WIRE];\n if (partitionKey == null) {\n args.push(wire?.id ?? item.id, wire?.partitionKey ?? item.partitionKey ?? \"-\", Buffer.from(wire?.leaseToken ?? item.leaseToken), wire?.fencingToken ?? item.fencingToken);\n } else {\n args.push(wire?.id ?? item.id, Buffer.from(wire?.leaseToken ?? item.leaseToken), wire?.fencingToken ?? item.fencingToken);\n }\n }\n}\n\nexport function appendFencedItems(\n args: CommandArgument[],\n partitionKey: string | undefined,\n items: FencedItem[],\n command: string,\n includeLease: boolean\n): void {\n assertManyPartitionMatches(partitionKey, items, command);\n args.push(\"ITEMS\");\n for (const item of items) {\n if (partitionKey == null) {\n args.push(item.id, item.partitionKey ?? \"-\", item.fencingToken);\n } else {\n args.push(item.id, item.fencingToken);\n }\n if (includeLease) {\n args.push(item.leaseToken == null ? Buffer.alloc(0) : Buffer.from(item.leaseToken));\n }\n }\n}\n\nexport function assertManyPartitionMatches(\n partitionKey: string | undefined,\n items: readonly { readonly partitionKey?: string }[],\n command: string\n): void {\n for (let index = 0; index < items.length; index += 1) {\n const item = items[index];\n if (!Object.hasOwn(items, index) || item == null) {\n throw new TypeError(`${command} items must be dense`);\n }\n if (partitionKey != null && item.partitionKey != null && item.partitionKey !== partitionKey) {\n throw new Error(`${command} item partitionKey does not match batch partitionKey`);\n }\n }\n}\n\nexport function appendRetryPolicy(args: CommandArgument[], policy: RetryPolicy): void {\n append(args, \"MAX_RETRIES\", policy.maxRetries);\n append(args, \"BACKOFF\", policy.backoff);\n append(args, \"BASE_MS\", policy.baseMs);\n append(args, \"MAX_MS\", policy.maxMs);\n append(args, \"JITTER_PCT\", policy.jitterPct);\n append(args, \"EXHAUSTED_TO\", policy.exhaustedTo);\n}\n\nexport function appendPolicyMode(args: CommandArgument[], state: string | undefined, mode: FlowStateMode | undefined): void {\n if (mode == null) {\n return;\n }\n if (state == null) {\n throw new Error(\"policy mode requires state\");\n }\n switch (mode) {\n case \"fifo\":\n args.push(\"MODE\", \"FIFO\");\n return;\n case \"parallel\":\n args.push(\"MODE\", \"PARALLEL\");\n return;\n default:\n throw new Error(\"policy mode must be 'fifo' or 'parallel'\");\n }\n}\n\nexport function appendPayloadRead(args: CommandArgument[], payload: boolean | undefined, maxBytes: number | undefined): void {\n if (payload === false) {\n args.push(\"NOPAYLOAD\");\n return;\n }\n if (payload === true || maxBytes != null) {\n args.push(\"PAYLOAD\");\n }\n if (maxBytes != null) {\n args.push(\"MAXBYTES\", maxBytes);\n }\n}\n\nexport function claimDataRequested(options: Pick<ClaimDueOptions, \"payload\" | \"payloadMaxBytes\" | \"values\">): boolean {\n return options.payload === true || options.payloadMaxBytes != null || (options.values?.length ?? 0) > 0;\n}\n\nexport function compactClaimReturnMode(includeState: boolean, includeAttributes: boolean): string {\n if (includeState) {\n return includeAttributes ? \"JOBS_COMPACT_STATE_ATTRS\" : \"JOBS_COMPACT_STATE\";\n }\n return includeAttributes ? \"JOBS_COMPACT_ATTRS\" : \"JOBS_COMPACT\";\n}\n","import { FerricStoreError, mapException } from \"./errors.js\";\nimport { unwrapPipelineResponse } from \"./protocol.js\";\n\nexport function isRecordLike(value: unknown): boolean {\n return typeof value === \"object\" && value != null && !Buffer.isBuffer(value) &&\n !(value instanceof Uint8Array) && !Array.isArray(value);\n}\n\nexport function requiredArrayResponse(value: unknown, command: string): unknown[] {\n if (!Array.isArray(value)) {\n throw new FerricStoreError(`${command} returned an invalid response`, { raw: value });\n }\n return value;\n}\n\nexport function isCompactClaimTuple(value: unknown): value is unknown[] {\n if (!Array.isArray(value) || value.length < 4) return false;\n const tuple = value as unknown[];\n const id = tuple[0];\n const leaseToken = tuple[2];\n const fencingToken = tuple[3];\n return (\n (typeof id === \"string\" || Buffer.isBuffer(id) || id instanceof Uint8Array) &&\n (typeof leaseToken === \"string\" || Buffer.isBuffer(leaseToken) || leaseToken instanceof Uint8Array) &&\n (typeof fencingToken === \"number\" || typeof fencingToken === \"bigint\" || typeof fencingToken === \"string\")\n );\n}\n\n/** @internal */\nexport function completeJobsResultError(value: unknown, expectedCount: number): Error | undefined {\n if (value instanceof Error) return errorFromUnknown(value);\n if (completionOk(value)) return undefined;\n if (!Array.isArray(value)) {\n return new FerricStoreError(\"FLOW.COMPLETE_MANY returned an unexpected response\", { raw: value });\n }\n\n let results: unknown[];\n try {\n results = unwrapPipelineResponse(value, { throwOnItemError: false });\n } catch (error) {\n return errorFromUnknown(error);\n }\n if (results.length !== expectedCount) {\n return new FerricStoreError(\n `FLOW.COMPLETE_MANY returned ${results.length} items; expected ${expectedCount}`,\n { raw: value }\n );\n }\n for (const result of results) {\n if (result instanceof Error) return errorFromUnknown(result);\n if (!completionOk(result)) {\n return new FerricStoreError(\n \"FLOW.COMPLETE_MANY returned an unexpected per-item result\",\n { raw: result }\n );\n }\n }\n return undefined;\n}\n\nexport function completionOk(value: unknown): boolean {\n if (value === true || value === 1) return true;\n if (typeof value === \"string\") return value.toUpperCase() === \"OK\";\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) {\n return Buffer.from(value).toString(\"utf8\").toUpperCase() === \"OK\";\n }\n return false;\n}\n\nexport function errorFromUnknown(error: unknown): Error {\n const mapped = mapException(error);\n return mapped instanceof Error ? mapped : new Error(String(error));\n}\n\nexport function throwMapped(error: unknown): never {\n const mapped = mapException(error);\n throw mapped instanceof Error ? mapped : error;\n}\n","import type { ClaimHydrationItem, FlowBatchCompletedItem } from \"./client-options.js\";\nimport { FerricStoreError } from \"./errors.js\";\nimport type { ClaimedItem } from \"./types.js\";\n\nexport class ClaimHydrationError extends FerricStoreError {\n override readonly code = \"flow_claim_hydration_partial\";\n readonly claimed: readonly ClaimedItem[];\n readonly failedIndex: number;\n readonly hydratedItems: readonly ClaimHydrationItem[];\n\n constructor(\n cause: unknown,\n claimed: readonly ClaimedItem[],\n hydratedItems: readonly ClaimHydrationItem[],\n failedIndex: number\n ) {\n const detail = cause instanceof Error\n ? cause.message\n : typeof cause === \"string\"\n ? cause\n : \"fallback read failed\";\n super(\n `Legacy claim hydration failed after ${hydratedItems.length} of ${claimed.length} record(s): ${detail}`,\n { cause }\n );\n this.claimed = claimed;\n this.failedIndex = failedIndex;\n this.hydratedItems = hydratedItems;\n }\n}\n\n/** A chunked independent Flow operation failed after zero or more item results were confirmed. */\nexport class FlowBatchError extends FerricStoreError {\n override readonly code = \"flow_batch_partial\";\n readonly completed: number;\n readonly completedItems: readonly FlowBatchCompletedItem[];\n readonly operation: string;\n\n constructor(operation: string, cause: unknown, completedItems: readonly FlowBatchCompletedItem[]) {\n const detail = cause instanceof Error\n ? cause.message\n : typeof cause === \"string\"\n ? cause\n : \"batch execution failed\";\n super(\n completedItems.length === 0\n ? `${operation} failed before any item result was confirmed: ${detail}`\n : `${operation} failed after ${completedItems.length} confirmed item result(s): ${detail}`,\n { cause }\n );\n this.completed = completedItems.length;\n this.completedItems = completedItems;\n this.operation = operation;\n }\n}\n\nexport function confirmedFlowBatchItems(results: readonly unknown[]): FlowBatchCompletedItem[] {\n const completed: FlowBatchCompletedItem[] = [];\n for (let index = 0; index < results.length; index += 1) {\n if (Object.hasOwn(results, index)) {\n completed.push({ index, value: results[index] });\n }\n }\n return completed;\n}\n","import { autoPartitionKeyForId } from \"./internal.js\";\nimport type { CreateItem } from \"./types.js\";\n\ninterface AutoPartitionItemGroup {\n readonly bucket: string;\n readonly indices: number[];\n readonly items: CreateItem[];\n}\n\n/** @internal Reject sparse producer arrays before any batch can be dispatched. */\nexport function assertDenseCreateItems(items: readonly CreateItem[], operation: string): void {\n for (let index = 0; index < items.length; index += 1) {\n if (!Object.hasOwn(items, index) || items[index] == null) {\n throw new TypeError(`${operation} items must be dense`);\n }\n }\n}\n\n/** @internal Group auto-partition producer items in one linear pass. */\nexport function groupAutoPartitionItems(items: readonly CreateItem[]): AutoPartitionItemGroup[] {\n const byBucket = new Map<string, AutoPartitionItemGroup>();\n for (let index = 0; index < items.length; index += 1) {\n const item = items[index];\n if (!Object.hasOwn(items, index) || item == null) {\n throw new TypeError(\"enqueueMany items must be dense\");\n }\n const bucket = autoPartitionKeyForId(item.id);\n const existing = byBucket.get(bucket);\n if (existing == null) {\n byBucket.set(bucket, { bucket, indices: [index], items: [item] });\n } else {\n existing.indices.push(index);\n existing.items.push(item);\n }\n }\n return [...byBucket.values()];\n}\n","import { Buffer } from \"node:buffer\";\nimport type { FerricStoreClient } from \"./client.js\";\nimport { FerricStoreError } from \"./errors.js\";\nimport { append, type CommandArgument } from \"./internal.js\";\n\ninterface ValueMGetEntry {\n readonly found: boolean;\n readonly value?: unknown;\n}\n\n/** @internal */\nexport async function valueMGetEntries(\n client: FerricStoreClient,\n refs: readonly string[],\n options: { readonly maxBytes?: number } = {}\n): Promise<ValueMGetEntry[]> {\n const refCount = refs.length;\n if (refCount === 0) {\n return [];\n }\n const args = new Array<CommandArgument>(1 + refCount);\n args[0] = \"FLOW.VALUE.MGET\";\n for (let index = 0; index < refCount; index += 1) {\n if (!Object.hasOwn(refs, index)) {\n throw new TypeError(\"FLOW.VALUE.MGET refs must be dense\");\n }\n args[index + 1] = refs[index];\n }\n append(args, \"MAX_BYTES\", options.maxBytes);\n const response = await client.commandArgs(args);\n if (!Array.isArray(response)) {\n throw new FerricStoreError(\"FLOW.VALUE.MGET returned an invalid response\", { raw: response });\n }\n if (response.length !== refCount) {\n throw new FerricStoreError(\n `FLOW.VALUE.MGET response length ${response.length} did not match request length ${refCount}`,\n { raw: response }\n );\n }\n const entries = new Array<ValueMGetEntry>(response.length);\n for (let index = 0; index < response.length; index += 1) {\n if (!Object.hasOwn(response, index)) {\n throw new FerricStoreError(`FLOW.VALUE.MGET response item ${index} is missing`, {\n raw: response\n });\n }\n const item: unknown = response[index];\n if (item == null) {\n entries[index] = { found: false };\n } else if (Buffer.isBuffer(item)) {\n entries[index] = { found: true, value: client.codec.decode(item) };\n } else if (item instanceof Uint8Array) {\n entries[index] = { found: true, value: client.codec.decode(Buffer.from(item)) };\n } else if (typeof item === \"string\") {\n entries[index] = { found: true, value: client.codec.decode(Buffer.from(item)) };\n } else {\n entries[index] = { found: true, value: item };\n }\n }\n return entries;\n}\n","import { Buffer } from \"node:buffer\";\nimport {\n executeCommandArraysIndividually,\n executeCommandArgs,\n pipelineFallbackOptions,\n pipelineItemRejectionFlags,\n snapshotCommandArguments,\n snapshotPipelineCommands,\n snapshotPipelineOptions,\n type CommandExecutor,\n type ExecutePipelineOptions\n} from \"./adapters.js\";\nimport type { AutoBatchOptions } from \"./client-options.js\";\nimport {\n neverAutoBatchCommandPrefixes,\n neverAutoBatchCommands,\n safeAutoBatchCommands\n} from \"./command-metadata.js\";\nimport { autoBatchCommandName, autoBatchOrderingPlan } from \"./auto-batch-ordering.js\";\nimport { FerricStoreError, mapException } from \"./errors.js\";\nimport { setLongTimeout, type Command, type CommandArgument, type LongTimer } from \"./internal.js\";\nimport { commandHasServerBlock, commandRequiresDedicatedConnection } from \"./protocol.js\";\nimport type { RoutingRoute, RoutingTopology } from \"./topology.js\";\n\ninterface NormalizedAutoBatchOptions {\n readonly maxCommands: number;\n readonly maxDelayMs: number;\n readonly mode: \"safe\" | \"all\";\n}\n\ninterface AutoBatchItem {\n readonly command: Command;\n readonly reject: (reason: unknown) => void;\n readonly resolve: (value: unknown) => void;\n}\n\ninterface AutoBatchKeyState {\n lastWrite?: Promise<void>;\n readonly reads: Set<Promise<void>>;\n}\n\nclass AutoBatchExecutor implements CommandExecutor {\n private globalBatchTail: Promise<void> = Promise.resolve();\n private readonly batchKeyStates = new Map<string, AutoBatchKeyState>();\n private closed = false;\n private closePromise?: Promise<void>;\n private readonly inFlightBatches = new Set<Promise<void>>();\n private readonly inFlightHelpers = new Set<Promise<unknown>>();\n private orderingBarrier: Promise<void> | undefined;\n private readonly pending: AutoBatchItem[] = [];\n private scheduled = false;\n private timer: LongTimer | undefined;\n\n constructor(\n private readonly executor: CommandExecutor,\n private readonly options: NormalizedAutoBatchOptions\n ) {}\n\n async executeCommand(...args: CommandArgument[]): Promise<unknown> {\n return await this.executeCommandArgs(args);\n }\n\n async executeCommandArgs(args: readonly CommandArgument[]): Promise<unknown> {\n if (this.closed) {\n throw new FerricStoreError(\"FerricStore client is closed\");\n }\n const command = snapshotCommandArguments(args);\n if (this.executor.executePipeline == null) {\n return await executeCommandArgs(this.executor, command);\n }\n if (!autoBatchCommandAllowed(command, this.options.mode)) {\n if (commandHasServerBlock(command)) {\n return await this.executeBlockingAfterPendingBatches(\n async () => await executeCommandArgs(this.executor, command)\n );\n }\n return await this.executeAfterPendingBatches(\n async () => await executeCommandArgs(this.executor, command)\n );\n }\n const orderingBarrier = this.orderingBarrier;\n if (orderingBarrier != null) {\n await orderingBarrier;\n if (this.closed) {\n throw new FerricStoreError(\"FerricStore client is closed\");\n }\n }\n\n return await new Promise<unknown>((resolve, reject) => {\n this.pending.push({ command, reject, resolve });\n\n if (this.pending.length >= this.options.maxCommands) {\n void this.flushNow();\n } else {\n this.scheduleFlush();\n }\n });\n }\n\n async executePipeline(commands: readonly Command[], options?: ExecutePipelineOptions): Promise<unknown[]> {\n if (this.closed) {\n throw new FerricStoreError(\"FerricStore client is closed\");\n }\n const snapshot = snapshotPipelineCommands(commands);\n const snapshotOptions = snapshotPipelineOptions(options);\n return await this.executeAfterPendingBatches(async () => {\n if (this.executor.executePipeline != null) {\n return await this.executor.executePipeline(snapshot, snapshotOptions);\n }\n\n return await executeCommandArraysIndividually(\n async (command) => await executeCommandArgs(this.executor, command),\n snapshot,\n pipelineFallbackOptions(snapshot, snapshotOptions)\n );\n });\n }\n\n async executeFusedPipeline(\n commands: readonly Command[],\n options?: ExecutePipelineOptions\n ): Promise<unknown[] | undefined> {\n if (this.closed) {\n throw new FerricStoreError(\"FerricStore client is closed\");\n }\n if (this.executor.executeFusedPipeline == null) return undefined;\n const snapshot = snapshotPipelineCommands(commands);\n const snapshotOptions = snapshotPipelineOptions(options);\n return await this.executeAfterPendingBatches(\n async () => await this.executor.executeFusedPipeline?.(snapshot, snapshotOptions)\n );\n }\n\n async refreshTopology(): Promise<RoutingTopology> {\n if (this.closed) {\n throw new FerricStoreError(\"FerricStore client is closed\");\n }\n const refreshTopology = this.executor.refreshTopology?.bind(this.executor);\n if (refreshTopology == null) {\n throw new Error(\"topology refresh requires a topology-aware native executor\");\n }\n return await this.executeHelper(async () => await refreshTopology());\n }\n\n async route(key: string | Buffer): Promise<RoutingRoute> {\n if (this.closed) {\n throw new FerricStoreError(\"FerricStore client is closed\");\n }\n const route = this.executor.route?.bind(this.executor);\n if (route == null) {\n throw new Error(\"route lookup requires a topology-aware native executor\");\n }\n return await this.executeHelper(async () => await route(key));\n }\n\n async close(): Promise<void> {\n if (this.closePromise != null) {\n await this.closePromise;\n return;\n }\n this.closed = true;\n this.closePromise = (async () => {\n this.scheduled = false;\n if (this.timer != null) {\n this.timer.cancel();\n this.timer = undefined;\n }\n this.failPending(new Error(\"FerricStore client closed before auto-batch flush\"));\n await this.orderingBarrier;\n await this.waitForInFlightBatches();\n await Promise.allSettled([...this.inFlightHelpers]);\n await this.executor.close?.();\n })();\n await this.closePromise;\n }\n\n private async executeAfterPendingBatches<T>(operation: () => Promise<T>): Promise<T> {\n if (this.closed) {\n throw new FerricStoreError(\"FerricStore client is closed\");\n }\n const previousBarrier = this.orderingBarrier;\n let releaseBarrier: (() => void) | undefined;\n const barrier = new Promise<void>((resolve) => { releaseBarrier = resolve; });\n this.orderingBarrier = barrier;\n\n try {\n await previousBarrier;\n await this.flushNow();\n return await operation();\n } finally {\n releaseBarrier?.();\n if (this.orderingBarrier === barrier) {\n this.orderingBarrier = undefined;\n }\n }\n }\n\n private executeHelper<T>(operation: () => Promise<T>): Promise<T> {\n if (this.closed) {\n return Promise.reject(new FerricStoreError(\"FerricStore client is closed\"));\n }\n const task = Promise.resolve().then(operation);\n this.inFlightHelpers.add(task);\n void task.then(\n () => this.inFlightHelpers.delete(task),\n () => this.inFlightHelpers.delete(task)\n );\n return task;\n }\n\n private async executeBlockingAfterPendingBatches<T>(operation: () => Promise<T>): Promise<T> {\n const previousBarrier = this.orderingBarrier;\n let releaseBarrier: (() => void) | undefined;\n const barrier = new Promise<void>((resolve) => { releaseBarrier = resolve; });\n this.orderingBarrier = barrier;\n let dispatched: Promise<T>;\n\n try {\n await previousBarrier;\n await this.flushNow();\n if (this.closed) {\n throw new FerricStoreError(\"FerricStore client is closed\");\n }\n dispatched = operation();\n } finally {\n releaseBarrier?.();\n if (this.orderingBarrier === barrier) {\n this.orderingBarrier = undefined;\n }\n }\n\n return await dispatched;\n }\n\n private scheduleFlush(): void {\n if (this.scheduled) {\n return;\n }\n\n this.scheduled = true;\n\n if (this.options.maxDelayMs <= 0) {\n queueMicrotask(() => {\n this.scheduled = false;\n void this.flushNow();\n });\n return;\n }\n\n this.timer = setLongTimeout(() => {\n this.scheduled = false;\n this.timer = undefined;\n void this.flushNow();\n }, this.options.maxDelayMs);\n }\n\n private async flushNow(): Promise<void> {\n this.scheduled = false;\n\n if (this.timer != null) {\n this.timer.cancel();\n this.timer = undefined;\n }\n\n if (this.pending.length === 0) {\n await this.waitForInFlightBatches();\n return;\n }\n\n const batch = this.pending.splice(0, this.options.maxCommands);\n if (this.pending.length > 0) {\n this.scheduleFlush();\n }\n\n const orderingPlan = autoBatchOrderingPlan(batch);\n const accesses = orderingPlan?.accesses;\n const keyStates = new Map<string, AutoBatchKeyState>();\n const dependencies: Promise<void>[] = accesses == null\n ? [...this.inFlightBatches]\n : [this.globalBatchTail];\n if (accesses != null) {\n for (const [key, access] of accesses) {\n let state = this.batchKeyStates.get(key);\n if (state == null) {\n state = { reads: new Set() };\n this.batchKeyStates.set(key, state);\n }\n keyStates.set(key, state);\n if (state.lastWrite != null) dependencies.push(state.lastWrite);\n if (access === \"write\") {\n for (const read of state.reads) dependencies.push(read);\n }\n }\n }\n const operation = Promise.all([...new Set(dependencies)].map(async (dependency) => {\n await dependency.catch(() => undefined);\n })).then(async () => await this.sendBatch(batch, orderingPlan?.fallbackDependencies)).finally(() => {\n this.inFlightBatches.delete(operation);\n if (accesses == null) {\n if (this.globalBatchTail === operation) this.globalBatchTail = Promise.resolve();\n } else {\n for (const [key, access] of accesses) {\n const state = keyStates.get(key);\n if (state == null) continue;\n if (access === \"read\") {\n state.reads.delete(operation);\n } else if (state.lastWrite === operation) {\n state.lastWrite = undefined;\n }\n if (state.lastWrite == null && state.reads.size === 0 && this.batchKeyStates.get(key) === state) {\n this.batchKeyStates.delete(key);\n }\n }\n }\n });\n if (accesses == null) {\n this.globalBatchTail = operation;\n } else {\n for (const [key, access] of accesses) {\n const state = keyStates.get(key);\n if (state == null) continue;\n if (access === \"read\") {\n state.reads.add(operation);\n } else {\n state.reads.clear();\n state.lastWrite = operation;\n }\n }\n }\n this.inFlightBatches.add(operation);\n await operation;\n await this.waitForInFlightBatches();\n }\n\n private async waitForInFlightBatches(): Promise<void> {\n while (this.inFlightBatches.size > 0) {\n await Promise.all([...this.inFlightBatches]);\n }\n }\n\n private async sendBatch(\n batch: readonly AutoBatchItem[],\n fallbackDependencies: readonly (readonly number[])[] | undefined\n ): Promise<void> {\n try {\n const results = await this.executor.executePipeline?.(\n batch.map((item) => item.command),\n fallbackDependencies == null\n ? { ordered: true, throwOnItemError: false }\n : { fallbackDependencies, throwOnItemError: false }\n );\n\n if (!Array.isArray(results) || results.length !== batch.length) {\n const error = new Error(\"FerricStore auto-batch response length mismatch\");\n for (const item of batch) item.reject(error);\n return;\n }\n\n const rejected = pipelineItemRejectionFlags(results);\n for (let index = 0; index < batch.length; index += 1) {\n const item = batch[index];\n const result = results[index];\n if (item == null) continue;\n if (!Object.hasOwn(results, index)) {\n item.reject(new Error(`FerricStore auto-batch response item ${index} is missing`));\n continue;\n }\n if (result instanceof Error) {\n item.reject(autoBatchErrorFromUnknown(result));\n } else if (rejected?.[index] === true) {\n item.reject(result);\n } else {\n item.resolve(result);\n }\n }\n } catch (error) {\n for (const item of batch) item.reject(error);\n }\n }\n\n private failPending(error: Error): void {\n const pending = this.pending.splice(0);\n for (const item of pending) item.reject(error);\n }\n}\n\nexport function maybeAutoBatchExecutor(\n executor: CommandExecutor,\n options: boolean | AutoBatchOptions | undefined\n): CommandExecutor {\n const normalized = normalizeAutoBatchOptions(options);\n return normalized == null ? executor : new AutoBatchExecutor(executor, normalized);\n}\n\nfunction normalizeAutoBatchOptions(\n options: boolean | AutoBatchOptions | undefined\n): NormalizedAutoBatchOptions | null {\n if (options == null || options === false) {\n return null;\n }\n\n if (options === true) {\n return { maxCommands: 512, maxDelayMs: 0, mode: \"safe\" };\n }\n\n if (options.enabled === false) {\n return null;\n }\n\n return {\n maxCommands: finitePositiveInteger(options.maxCommands, 512),\n maxDelayMs: finiteNonNegativeInteger(options.maxDelayMs, 0),\n mode: options.mode === \"all\" ? \"all\" : \"safe\"\n };\n}\nfunction autoBatchCommandAllowed(command: Command, mode: \"safe\" | \"all\"): boolean {\n const name = autoBatchCommandName(command);\n if (\n name == null\n || neverAutoBatchCommands.has(name)\n || commandHasServerBlock(command)\n || commandRequiresDedicatedConnection(command, name)\n ) {\n return false;\n }\n\n const prefix = name.includes(\".\") ? name.slice(0, name.indexOf(\".\")) : name;\n if (neverAutoBatchCommandPrefixes.has(prefix)) {\n return false;\n }\n\n return mode === \"all\" || safeAutoBatchCommands.has(name);\n}\n\nexport function finitePositiveInteger(value: number | undefined, fallback: number): number {\n return value == null || !Number.isFinite(value)\n ? fallback\n : Math.max(1, Math.trunc(value));\n}\nfunction finiteNonNegativeInteger(value: number | undefined, fallback: number): number {\n return value == null || !Number.isFinite(value)\n ? fallback\n : Math.max(0, Math.trunc(value));\n}\n\nfunction autoBatchErrorFromUnknown(error: unknown): Error {\n const mapped = mapException(error);\n return mapped instanceof Error ? mapped : new Error(String(error));\n}\n","import { Buffer } from \"node:buffer\";\nimport {\n commandToken as commandPart,\n commandView,\n splitFlowValueMGetArguments\n} from \"./command-grammar.js\";\nimport {\n flowIdReadAutoBatchCommands,\n flowIdWriteAutoBatchCommands,\n flowManyWriteAutoBatchCommands,\n readOnlyAutoBatchCommands,\n safeAutoBatchCommands\n} from \"./command-metadata.js\";\nimport type { Command, CommandArgument } from \"./internal.js\";\n\nexport interface AutoBatchOrderingPlan {\n readonly accesses: ReadonlyMap<string, \"read\" | \"write\">;\n readonly fallbackDependencies: readonly (readonly number[])[];\n}\n\nexport function autoBatchOrderingPlan(\n batch: readonly { readonly command: Command }[]\n): AutoBatchOrderingPlan | undefined {\n const accesses = new Map<string, \"read\" | \"write\">();\n const fallbackDependencies: number[][] = [];\n const lastWrites = new Map<string, number>();\n const reads = new Map<string, Set<number>>();\n for (let index = 0; index < batch.length; index += 1) {\n const item = batch[index];\n if (item == null) return undefined;\n const rawCommandAccesses = autoBatchCommandOrderingAccesses(item.command);\n if (rawCommandAccesses == null) return undefined;\n const commandAccesses = new Map<string, \"read\" | \"write\">();\n for (const [key, access] of rawCommandAccesses) {\n if (access === \"write\" || !commandAccesses.has(key)) commandAccesses.set(key, access);\n if (access === \"write\" || !accesses.has(key)) accesses.set(key, access);\n }\n const dependencies = new Set<number>();\n for (const [key, access] of commandAccesses) {\n const lastWrite = lastWrites.get(key);\n if (lastWrite != null) dependencies.add(lastWrite);\n if (access === \"write\") {\n for (const read of reads.get(key) ?? []) dependencies.add(read);\n }\n }\n fallbackDependencies[index] = [...dependencies].sort((left, right) => left - right);\n for (const [key, access] of commandAccesses) {\n if (access === \"read\") {\n let keyReads = reads.get(key);\n if (keyReads == null) {\n keyReads = new Set();\n reads.set(key, keyReads);\n }\n keyReads.add(index);\n } else {\n reads.delete(key);\n lastWrites.set(key, index);\n }\n }\n }\n return accesses.size === 0 ? undefined : { accesses, fallbackDependencies };\n}\n\nfunction autoBatchCommandOrderingAccesses(\n command: Command\n): readonly (readonly [string, \"read\" | \"write\"])[] | undefined {\n const name = autoBatchCommandName(command);\n if (name == null || !safeAutoBatchCommands.has(name)) return undefined;\n if (name.startsWith(\"FLOW.\")) return flowAutoBatchOrderingAccesses(command, name);\n let values: readonly CommandArgument[];\n if (name === \"DEL\" || name === \"EXISTS\" || name === \"MGET\") {\n values = command.slice(1);\n } else if (name === \"MSET\") {\n if (command.length < 3 || (command.length - 1) % 2 !== 0) return undefined;\n const pairs: CommandArgument[] = [];\n for (let index = 1; index < command.length; index += 2) {\n const key = command[index];\n if (!isAutoBatchResourceValue(key)) return undefined;\n pairs.push(key);\n }\n values = pairs;\n } else {\n values = command.slice(1, 2);\n }\n\n const access = readOnlyAutoBatchCommands.has(name) ? \"read\" : \"write\";\n const keys: (readonly [string, \"read\" | \"write\"])[] = [];\n for (const value of values) {\n if (!isAutoBatchResourceValue(value)) return undefined;\n keys.push([autoBatchResourceKey(\"kv\", value), access]);\n }\n return keys.length === 0 ? undefined : keys;\n}\n\nfunction flowAutoBatchOrderingAccesses(\n command: Command,\n name: string\n): readonly (readonly [string, \"read\" | \"write\"])[] | undefined {\n if (name === \"FLOW.VALUE.MGET\") return flowValueMGetAutoBatchOrderingAccesses(command);\n if (name === \"FLOW.VALUE.PUT\") return flowValuePutAutoBatchOrderingAccesses(command);\n if (flowManyWriteAutoBatchCommands.has(name)) {\n const ids = flowManyAutoBatchIds(command, name);\n return ids?.map((id) => [autoBatchResourceKey(\"flow\", id), \"write\"] as const);\n }\n const access = flowIdReadAutoBatchCommands.has(name)\n ? \"read\"\n : flowIdWriteAutoBatchCommands.has(name)\n ? \"write\"\n : undefined;\n if (access == null) return undefined;\n const idIndex = commandView(command).argumentStart;\n const id = command[idIndex];\n if (!isAutoBatchResourceValue(id)) return undefined;\n return [[autoBatchResourceKey(\"flow\", id), access]];\n}\n\nfunction flowValueMGetAutoBatchOrderingAccesses(\n command: Command\n): readonly (readonly [string, \"read\"])[] | undefined {\n const { refs } = splitFlowValueMGetArguments(command, commandView(command).argumentStart);\n const accesses: (readonly [string, \"read\"])[] = [];\n for (const value of refs) {\n if (!isAutoBatchResourceValue(value)) return undefined;\n accesses.push([autoBatchResourceKey(\"flow_value\", value), \"read\"]);\n }\n return accesses.length === 0 ? undefined : accesses;\n}\n\nfunction flowValuePutAutoBatchOrderingAccesses(\n command: Command\n): readonly (readonly [string, \"write\"])[] | undefined {\n const valueIndex = commandView(command).argumentStart;\n if (command[valueIndex] == null) return undefined;\n const owner = flowValuePutOwner(command, valueIndex + 1);\n if (isAutoBatchResourceValue(owner)) {\n return [[autoBatchResourceKey(\"flow\", owner), \"write\"]];\n }\n // Shared values are content addressed, but hashing a potentially large value\n // here would duplicate encoding work on the batching hot path.\n return [[\"flow_value:shared\", \"write\"]];\n}\n\nfunction flowManyAutoBatchIds(command: Command, name: string): readonly (string | Buffer)[] | undefined {\n if (name === \"FLOW.RUN_STEPS_MANY\") return runStepsManyAutoBatchIds(command);\n if (name === \"FLOW.CREATE_MANY\") return createManyAutoBatchIds(command);\n const mixed = commandPart(command[commandView(command).argumentStart]) === \"MIXED\";\n if (name === \"FLOW.CANCEL_MANY\") {\n return fixedFlowItemIds(command, mixed ? 3 : 2, (itemIndex) =>\n isAutoBatchResourceValue(command[itemIndex])\n && (!mixed || isAutoBatchResourceValue(command[itemIndex + 1]))\n && isFencingToken(command[itemIndex + (mixed ? 2 : 1)])\n );\n }\n if (name === \"FLOW.TRANSITION_MANY\") {\n return fixedFlowItemIds(command, mixed ? 4 : 3, (itemIndex) =>\n isAutoBatchResourceValue(command[itemIndex])\n && (!mixed || isAutoBatchResourceValue(command[itemIndex + 1]))\n && isFencingToken(command[itemIndex + (mixed ? 2 : 1)])\n && Buffer.isBuffer(command[itemIndex + (mixed ? 3 : 2)])\n );\n }\n return fixedFlowItemIds(command, mixed ? 4 : 3, (itemIndex) =>\n isAutoBatchResourceValue(command[itemIndex])\n && (!mixed || isAutoBatchResourceValue(command[itemIndex + 1]))\n && Buffer.isBuffer(command[itemIndex + (mixed ? 2 : 1)])\n && isFencingToken(command[itemIndex + (mixed ? 3 : 2)])\n );\n}\n\nfunction createManyAutoBatchIds(command: Command): readonly (string | Buffer)[] | undefined {\n const argumentStart = commandView(command).argumentStart;\n const mixed = commandPart(command[argumentStart]) === \"MIXED\";\n for (let markerIndex = argumentStart + 1; markerIndex < command.length; markerIndex += 1) {\n const marker = commandPart(command[markerIndex]);\n if (marker === \"ITEMS\") {\n const width = mixed ? 3 : 2;\n const ids = fixedFlowItemIds(command, width, (itemIndex) =>\n isAutoBatchResourceValue(command[itemIndex])\n && (!mixed || isAutoBatchResourceValue(command[itemIndex + 1]))\n && Buffer.isBuffer(command[itemIndex + width - 1])\n , markerIndex);\n if (ids != null) return ids;\n } else if (marker === \"ITEMS_EXT\") {\n const ids = extendedCreateManyAutoBatchIds(command, markerIndex);\n if (ids != null) return ids;\n }\n }\n return undefined;\n}\n\nfunction extendedCreateManyAutoBatchIds(\n command: Command,\n markerIndex: number\n): readonly (string | Buffer)[] | undefined {\n const itemCount = nonNegativeItemCount(command[markerIndex + 1]);\n if (itemCount == null || itemCount === 0) return undefined;\n const ids: (string | Buffer)[] = [];\n let cursor = markerIndex + 2;\n for (let itemIndex = 0; itemIndex < itemCount; itemIndex += 1) {\n const id = command[cursor];\n if (\n !isAutoBatchResourceValue(id)\n || !isAutoBatchResourceValue(command[cursor + 1])\n || !Buffer.isBuffer(command[cursor + 2])\n ) return undefined;\n ids.push(id);\n cursor += 3;\n const afterValues = skipExtendedNamedItems(command, cursor, true);\n if (afterValues == null) return undefined;\n const afterRefs = skipExtendedNamedItems(command, afterValues, false);\n if (afterRefs == null) return undefined;\n cursor = afterRefs;\n }\n return cursor === command.length ? ids : undefined;\n}\n\nfunction skipExtendedNamedItems(command: Command, countIndex: number, encodedValues: boolean): number | undefined {\n const count = nonNegativeItemCount(command[countIndex]);\n if (count == null) return undefined;\n const firstItem = countIndex + 1;\n if (count > Math.floor((command.length - firstItem) / 2)) return undefined;\n for (let index = 0; index < count; index += 1) {\n const name = command[firstItem + index * 2];\n const value = command[firstItem + index * 2 + 1];\n if (\n !isAutoBatchResourceValue(name)\n || (encodedValues ? !Buffer.isBuffer(value) : !isAutoBatchResourceValue(value))\n ) return undefined;\n }\n return firstItem + count * 2;\n}\n\nfunction runStepsManyAutoBatchIds(command: Command): readonly (string | Buffer)[] | undefined {\n for (let markerIndex = commandView(command).argumentStart; markerIndex + 1 < command.length; markerIndex += 1) {\n if (commandPart(command[markerIndex]) !== \"ITEMS\") continue;\n const items = command[markerIndex + 1];\n if (!Array.isArray(items) || markerIndex + 2 !== command.length) continue;\n const ids: (string | Buffer)[] = [];\n for (const item of items) {\n if (isAutoBatchResourceValue(item)) {\n ids.push(item);\n continue;\n }\n if (typeof item !== \"object\" || item == null || Array.isArray(item) || Buffer.isBuffer(item)) return undefined;\n const id = (item as Record<string, unknown>).id;\n if (!isAutoBatchResourceValue(id)) return undefined;\n ids.push(id);\n }\n return ids.length === 0 ? undefined : ids;\n }\n return undefined;\n}\n\nfunction fixedFlowItemIds(\n command: Command,\n width: number,\n validItem: (itemIndex: number) => boolean,\n onlyMarkerIndex?: number\n): readonly (string | Buffer)[] | undefined {\n const start = onlyMarkerIndex ?? commandView(command).argumentStart;\n const end = onlyMarkerIndex == null ? command.length : onlyMarkerIndex + 1;\n for (let markerIndex = start; markerIndex < end; markerIndex += 1) {\n if (commandPart(command[markerIndex]) !== \"ITEMS\") continue;\n const itemCount = command.length - markerIndex - 1;\n if (itemCount <= 0 || itemCount % width !== 0) continue;\n const ids: (string | Buffer)[] = [];\n let valid = true;\n for (let itemIndex = markerIndex + 1; itemIndex < command.length; itemIndex += width) {\n const id = command[itemIndex];\n if (!isAutoBatchResourceValue(id) || !validItem(itemIndex)) {\n valid = false;\n break;\n }\n ids.push(id);\n }\n if (valid) return ids;\n }\n return undefined;\n}\n\nfunction flowValuePutOwner(command: Command, start: number): CommandArgument {\n let owner: CommandArgument;\n for (let index = start; index < command.length; index += 2) {\n const token = commandPart(command[index]);\n if (index + 1 >= command.length || token == null || !flowValuePutOptionTokens.has(token)) return undefined;\n if (token === \"OWNER_FLOW_ID\") owner = command[index + 1];\n }\n return owner;\n}\n\nconst flowValuePutOptionTokens = new Set([\"NAME\", \"NOW\", \"OVERRIDE\", \"OWNER_FLOW_ID\", \"PARTITION\", \"TTL\", \"TTL_MS\"]);\n\nfunction isAutoBatchResourceValue(value: unknown): value is string | Buffer {\n return typeof value === \"string\" || Buffer.isBuffer(value);\n}\n\nfunction isFencingToken(value: unknown): boolean {\n return (typeof value === \"number\" && Number.isSafeInteger(value)) || typeof value === \"bigint\";\n}\n\nfunction nonNegativeItemCount(value: unknown): number | undefined {\n return typeof value === \"number\" && Number.isSafeInteger(value) && value >= 0 ? value : undefined;\n}\n\nfunction autoBatchResourceKey(namespace: \"flow\" | \"flow_value\" | \"kv\", value: string | Buffer): string {\n return `${namespace}:${Buffer.from(value).toString(\"base64\")}`;\n}\n\nexport function autoBatchCommandName(command: Command): string | null {\n return commandView(command).name ?? null;\n}\n","import { ClaimHydrationError } from \"./client-errors.js\";\nimport { errorFromUnknown } from \"./client-helpers.js\";\nimport type { ClaimHydrationItem } from \"./client-options.js\";\nimport type { ClaimedItem, FlowRecord } from \"./types.js\";\nimport { snapshotOwnStringArray } from \"./string-array-snapshot.js\";\n\ninterface ClaimOptionsSnapshotSource {\n partitionKeys?: string[];\n states?: string[];\n values?: readonly string[];\n}\n\nexport function snapshotClaimOptions<T extends ClaimOptionsSnapshotSource>(\n options: T,\n reusableAfterAwait = false\n): T {\n const snapshot = { ...options };\n if (reusableAfterAwait && snapshot.partitionKeys != null) {\n snapshot.partitionKeys = snapshotOwnStringArray(snapshot.partitionKeys, \"partitionKeys\") as string[];\n }\n if (reusableAfterAwait && snapshot.states != null) {\n snapshot.states = snapshotOwnStringArray(snapshot.states, \"states\") as string[];\n }\n if (snapshot.values != null) {\n snapshot.values = snapshotOwnStringArray(snapshot.values, \"values\");\n }\n return Object.freeze(snapshot);\n}\n\nexport async function hydrateClaimedRecords(\n claimed: readonly ClaimedItem[],\n concurrency: number,\n hydrate: (item: ClaimedItem) => Promise<FlowRecord>\n): Promise<FlowRecord[]> {\n const results = new Array<FlowRecord>(claimed.length);\n let cursor = 0;\n let failure: { readonly error: unknown; readonly index: number } | undefined;\n const run = async (): Promise<void> => {\n while (failure == null) {\n const index = cursor;\n cursor += 1;\n const item = claimed[index];\n if (item == null) return;\n try {\n results[index] = await hydrate(item);\n } catch (error) {\n failure ??= { error, index };\n }\n }\n };\n\n await Promise.all(Array.from({ length: Math.min(concurrency, claimed.length) }, run));\n if (failure != null) {\n const hydratedItems: ClaimHydrationItem[] = [];\n for (let index = 0; index < results.length; index += 1) {\n const record = results[index];\n if (record != null) hydratedItems.push({ index, record });\n }\n throw new ClaimHydrationError(failure.error, claimed, hydratedItems, failure.index);\n }\n return results;\n}\n\nexport function claimFailure(error: unknown): {\n readonly claimed: (FlowRecord | ClaimedItem)[];\n readonly claimError: Error;\n} {\n const claimError = errorFromUnknown(error);\n return {\n claimed: claimError instanceof ClaimHydrationError ? [...claimError.claimed] : [],\n claimError\n };\n}\n","import { Buffer } from \"node:buffer\";\nimport {\n append,\n appendBool,\n appendNamedValues,\n appendValueReturn,\n arrayResponse,\n expandManyResponse,\n nowMs,\n parseKvResponse,\n type CommandArgument\n} from \"./internal.js\";\nimport { flowRecordFromResp, type ChildSpec, type FencingToken, type FlowRecord, type MaxActiveMs } from \"./types.js\";\nimport type {\n FlowPolicyOptions,\n HistoryOptions,\n ReadOptions,\n SearchOptions\n} from \"./client-options.js\";\nimport {\n appendAttributes,\n appendFlowStatePolicy,\n appendNamedCounts,\n appendPayloadRead,\n appendPolicyMode,\n appendReadOptions,\n appendRetryPolicy,\n appendSearchStateMeta,\n isRecordLike,\n requiredArrayResponse\n} from \"./client-helpers.js\";\nimport { FlowBatchError, confirmedFlowBatchItems } from \"./client-errors.js\";\nimport { FerricStoreManagementClient } from \"./client-management.js\";\nimport { executeProducerWriteWithBackpressure } from \"./producer-backpressure.js\";\n\n/** @internal Read, policy, and shared Flow helpers kept off the primary implementation module. */\nexport class FerricStoreFlowSupportClient extends FerricStoreManagementClient {\n async rewind(id: string, options: {\n partitionKey?: string;\n toEvent?: string;\n expectState?: string;\n nowMs?: number;\n returnRecord?: boolean;\n } = {}): Promise<FlowRecord | Buffer | unknown> {\n const partitionKey = options.partitionKey;\n const returnRecord = options.returnRecord === true;\n const args: CommandArgument[] = [\"FLOW.REWIND\", id, \"NOW\", options.nowMs ?? nowMs()];\n append(args, \"PARTITION\", partitionKey);\n append(args, \"TO_EVENT\", options.toEvent);\n append(args, \"EXPECT_STATE\", options.expectState);\n const response = await this.commandArgs(args);\n if (returnRecord) {\n return await this.recordOrGet(response, id, partitionKey);\n }\n return response;\n }\n\n async get<TPayload = unknown>(id: string, options: {\n partitionKey?: string;\n full?: boolean;\n payload?: boolean;\n payloadMaxBytes?: number;\n values?: readonly string[];\n valueMaxBytes?: number;\n } = {}): Promise<FlowRecord<TPayload> | undefined> {\n const args: CommandArgument[] = [\"FLOW.GET\", id];\n append(args, \"PARTITION\", options.partitionKey);\n appendBool(args, \"FULL\", options.full);\n appendPayloadRead(args, options.payload, options.payloadMaxBytes);\n appendValueReturn(args, { values: options.values, valueMaxBytes: options.valueMaxBytes });\n const response = await this.commandArgs(args);\n if (response == null) {\n return undefined;\n }\n return flowRecordFromResp<TPayload>(response, this.codec);\n }\n\n async list(type: string, options: ReadOptions = {}): Promise<FlowRecord[]> {\n return await this.indexQuery(\"FLOW.LIST\", type, options);\n }\n\n async search(type: string, options: SearchOptions = {}): Promise<FlowRecord[]> {\n const args: CommandArgument[] = [\"FLOW.SEARCH\", type];\n appendReadOptions(args, options);\n appendAttributes(args, options.attributes);\n appendSearchStateMeta(args, options.state, options.stateMeta);\n const response = await this.commandArgs(args);\n return this.records(requiredArrayResponse(response, \"FLOW.SEARCH\"));\n }\n\n async terminals(type: string, options: ReadOptions = {}): Promise<FlowRecord[]> {\n return await this.indexQuery(\"FLOW.TERMINALS\", type, options);\n }\n\n async failures(type: string, options: ReadOptions = {}): Promise<FlowRecord[]> {\n return await this.indexQuery(\"FLOW.FAILURES\", type, options);\n }\n\n async byParent(parentFlowId: string, options: ReadOptions = {}): Promise<FlowRecord[]> {\n return await this.indexQuery(\"FLOW.BY_PARENT\", parentFlowId, options);\n }\n\n async byRoot(rootFlowId: string, options: ReadOptions = {}): Promise<FlowRecord[]> {\n return await this.indexQuery(\"FLOW.BY_ROOT\", rootFlowId, options);\n }\n\n async byCorrelation(correlationId: string, options: ReadOptions = {}): Promise<FlowRecord[]> {\n return await this.indexQuery(\"FLOW.BY_CORRELATION\", correlationId, options);\n }\n\n async info(type: string): Promise<Record<string, unknown>> {\n return parseKvResponse(await this.command(\"FLOW.INFO\", type));\n }\n\n async stuck(type: string, options: {\n partitionKey?: string;\n count?: number;\n olderThanMs?: number;\n nowMs?: number;\n } = {}): Promise<FlowRecord[]> {\n const args: CommandArgument[] = [\"FLOW.STUCK\", type];\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"COUNT\", options.count);\n append(args, \"OLDER_THAN\", options.olderThanMs);\n append(args, \"NOW\", options.nowMs);\n return this.records(arrayResponse(await this.commandArgs(args)));\n }\n\n async history(id: string, options: HistoryOptions = {}): Promise<unknown[]> {\n const args: CommandArgument[] = [\"FLOW.HISTORY\", id];\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"COUNT\", options.count);\n append(args, \"FROM_EVENT\", options.fromEvent);\n append(args, \"TO_EVENT\", options.toEvent);\n append(args, \"FROM_MS\", options.fromMs);\n append(args, \"TO_MS\", options.toMs);\n append(args, \"FROM_VERSION\", options.fromVersion);\n append(args, \"TO_VERSION\", options.toVersion);\n appendBool(args, \"REV\", options.rev);\n append(args, \"EVENT\", options.event);\n append(args, \"WORKER\", options.worker);\n appendBool(args, \"INCLUDE_COLD\", options.includeCold);\n appendBool(args, \"CONSISTENT_PROJECTION\", options.consistentProjection);\n appendBool(args, \"VALUES\", options.values);\n append(args, \"PAYLOAD_MAX_BYTES\", options.payloadMaxBytes);\n return arrayResponse(await this.commandArgs(args));\n }\n\n async spawnChildren(parentId: string, children: ChildSpec[], options: {\n groupId?: string;\n partitionKey?: string;\n leaseToken?: Buffer;\n fencingToken?: FencingToken;\n wait?: string;\n waitState?: string;\n success?: string;\n failure?: string;\n fromState?: string;\n nowMs?: number;\n onChildFailed?: string;\n onParentClosed?: string;\n maxActiveMs?: MaxActiveMs;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n } = {}): Promise<unknown> {\n if (children.length === 0) throw new TypeError(\"spawnChildren children must be non-empty\");\n let extendedItems = false;\n let mixed = false;\n for (let index = 0; index < children.length; index += 1) {\n const child = children[index];\n if (!Object.hasOwn(children, index) || child == null) {\n throw new TypeError(\"spawnChildren children must be dense\");\n }\n if (child.values != null || child.valueRefs != null) extendedItems = true;\n if (child.partitionKey != null) mixed = true;\n }\n const args: CommandArgument[] = [\n \"FLOW.SPAWN_CHILDREN\",\n parentId,\n \"GROUP\",\n options.groupId ?? \"default\",\n \"WAIT\",\n options.wait ?? \"all\",\n \"NOW\",\n options.nowMs ?? nowMs()\n ];\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"LEASE_TOKEN\", options.leaseToken);\n append(args, \"FENCING\", options.fencingToken);\n append(args, \"WAIT_STATE\", options.waitState);\n append(args, \"SUCCESS\", options.success);\n append(args, \"FAILURE\", options.failure);\n append(args, \"FROM_STATE\", options.fromState);\n append(args, \"ON_CHILD_FAILED\", options.onChildFailed);\n append(args, \"ON_PARENT_CLOSED\", options.onParentClosed);\n append(args, \"MAX_ACTIVE_MS\", options.maxActiveMs);\n appendNamedValues(args, this.codec, options);\n if (extendedItems) {\n args.push(\"ITEMS_EXT\", children.length);\n for (const child of children) {\n args.push(child.id, child.partitionKey ?? \"-\", child.type, this.codec.encode(child.payload));\n appendNamedCounts(args, this.codec, child.values ?? {}, child.valueRefs ?? {});\n }\n } else {\n args.push(\"ITEMS\");\n if (mixed) {\n args.push(\"MIXED\");\n }\n for (const child of children) {\n if (mixed) {\n if (child.partitionKey == null) {\n throw new Error(\"mixed spawnChildren children require partitionKey\");\n }\n args.push(child.id, child.partitionKey, child.type, this.codec.encode(child.payload));\n } else {\n args.push(child.id, child.type, this.codec.encode(child.payload));\n }\n }\n }\n return await this.commandArgs(args);\n }\n\n async installPolicy(type: string, options: FlowPolicyOptions = {}): Promise<unknown> {\n const args: CommandArgument[] = [\"FLOW.POLICY.SET\", type];\n if (options.indexedAttributes != null) {\n args.push(\"INDEXED_ATTRIBUTES\", JSON.stringify(options.indexedAttributes));\n }\n append(args, \"INDEXED_STATE_META\", options.indexedStateMeta);\n append(args, \"MAX_ACTIVE_MS\", options.maxActiveMs);\n append(args, \"STATE\", options.state);\n appendPolicyMode(args, options.state, options.mode);\n if (options.retry != null) {\n appendRetryPolicy(args, options.retry);\n }\n for (const [state, policy] of Object.entries(options.states ?? {})) {\n args.push(\"STATE\", state);\n appendFlowStatePolicy(args, policy);\n }\n append(args, \"RETENTION_TTL_MS\", options.retentionTtlMs);\n return await this.commandArgs(args);\n }\n\n async policyGet(type: string, options: { state?: string } = {}): Promise<Record<string, unknown>> {\n const args: CommandArgument[] = [\"FLOW.POLICY.GET\", type];\n append(args, \"STATE\", options.state);\n return parseKvResponse(await this.commandArgs(args));\n }\n\n async retentionCleanup(): Promise<Record<string, unknown>> {\n return parseKvResponse(await this.command(\"FLOW.RETENTION_CLEANUP\"));\n }\n\n protected async executeProducerWrite(args: CommandArgument[]): Promise<unknown> {\n return await executeProducerWriteWithBackpressure(\n async () => await this.commandArgs(args),\n this.backpressure,\n this.closeSignal\n );\n }\n\n protected async recordOrGet(response: unknown, id: string, partitionKey: string | undefined): Promise<FlowRecord> {\n if (isRecordLike(response)) {\n return flowRecordFromResp(response, this.codec);\n }\n const record = await this.get(id, { partitionKey });\n if (record == null) {\n throw new Error(`Flow ${id} was not returned and could not be loaded`);\n }\n return record;\n }\n\n protected records(values: unknown[]): FlowRecord[] {\n const records = new Array<FlowRecord>(values.length);\n for (let index = 0; index < values.length; index += 1) {\n if (!Object.hasOwn(values, index)) {\n throw new TypeError(`Flow record response item ${index} is missing`);\n }\n records[index] = flowRecordFromResp(values[index], this.codec);\n }\n return records;\n }\n\n protected recordsOrResponse(value: unknown): unknown[] | unknown {\n if (Array.isArray(value) && value.every(isRecordLike)) {\n return this.records(value);\n }\n return value;\n }\n\n protected flowManyLimitError(operation: string): Error {\n return new Error(\n `${operation} accepts at most ${this.flowManyBatchLimit.toLocaleString(\"en-US\")} items unless independent=true allows safe chunking`\n );\n }\n\n protected async executeIndependentManyChunks<T>(\n operation: string,\n items: readonly T[],\n capture: (item: T) => T,\n execute: (batchItems: T[]) => Promise<unknown[] | unknown>\n ): Promise<unknown[]> {\n const results: unknown[] = [];\n const captured = new Array<T>(items.length);\n for (let index = 0; index < items.length; index += 1) {\n if (!Object.hasOwn(items, index)) throw new TypeError(`${operation} items must be dense`);\n captured[index] = capture(items[index] as T);\n }\n for (let start = 0; start < captured.length; start += this.flowManyBatchLimit) {\n const batchItems = captured.slice(start, start + this.flowManyBatchLimit);\n try {\n const response = await execute(batchItems);\n for (const result of expandManyResponse(response, batchItems.length)) results.push(result);\n } catch (error) {\n throw new FlowBatchError(operation, error, confirmedFlowBatchItems(results));\n }\n }\n return results;\n }\n\n private async indexQuery(command: string, key: string, options: ReadOptions): Promise<FlowRecord[]> {\n const args: CommandArgument[] = [command, key];\n appendReadOptions(args, options);\n const response = await this.commandArgs(args);\n return this.records(requiredArrayResponse(response, command));\n }\n\n protected appendPartitionOptions(\n args: CommandArgument[],\n options: { partitionKey?: string; partitionKeys?: string[] }\n ): void {\n if (options.partitionKey != null && options.partitionKeys != null) {\n throw new Error(\"partitionKey and partitionKeys are mutually exclusive\");\n }\n append(args, \"PARTITION\", options.partitionKey);\n if (options.partitionKeys != null) {\n if (options.partitionKeys.length === 0) {\n throw new Error(\"partitionKeys must be non-empty\");\n }\n args.push(\"PARTITIONS\", options.partitionKeys.length);\n for (let index = 0; index < options.partitionKeys.length; index += 1) {\n const partitionKey = options.partitionKeys[index];\n if (!Object.hasOwn(options.partitionKeys, index) || typeof partitionKey !== \"string\") {\n throw new TypeError(\"partitionKeys must be a dense array of strings\");\n }\n args.push(partitionKey);\n }\n }\n }\n}\n","import { Buffer } from \"node:buffer\";\nimport { infoText, ruleArgs } from \"./client-helpers.js\";\nimport type { FerricStoreClientOptions } from \"./client-options.js\";\nimport {\n bgsaveResponse,\n clientNameResponse,\n concatCommandArgs,\n fetchOrComputeCompletionToken,\n unsupportedClientCaching,\n unsupportedClientTracking\n} from \"./client-core-helpers.js\";\nimport {\n append,\n arrayResponse,\n booleanResponse,\n integer,\n okResponse,\n textResponse,\n type Command,\n type CommandArgument\n} from \"./internal.js\";\nimport type { CommandExecutor } from \"./adapters.js\";\nimport { FerricStoreAdministrationClient } from \"./client-administration.js\";\nimport {\n BloomFilterStore,\n CountMinSketchStore,\n CuckooFilterStore,\n TDigestStore,\n TopKStore\n} from \"./modules.js\";\nimport {\n BitmapStore,\n GeoStore,\n HashStore,\n HyperLogLogStore,\n KeyValueStore,\n ListStore,\n SetStore,\n SortedSetStore,\n StreamStore\n} from \"./store.js\";\nimport { fetchOrComputeResultFromResp, keyInfoFromResp, rateLimitResultFromResp, type FetchOrComputeResult, type KeyInfo, type RateLimitResult } from \"./types.js\";\n\nexport class FerricStoreClientCore extends FerricStoreAdministrationClient {\n protected extendLeaseOkResponseSupport?: boolean | \"probing\";\n readonly bitmap: BitmapStore;\n readonly bloom: BloomFilterStore;\n readonly cms: CountMinSketchStore;\n readonly cuckoo: CuckooFilterStore;\n readonly geo: GeoStore;\n readonly hash: HashStore;\n readonly hyperloglog: HyperLogLogStore;\n readonly kv: KeyValueStore;\n readonly lists: ListStore;\n readonly sets: SetStore;\n readonly stream: StreamStore;\n readonly tdigest: TDigestStore;\n readonly topk: TopKStore;\n readonly zset: SortedSetStore;\n\n constructor(executor: CommandExecutor, options: FerricStoreClientOptions = {}) {\n super(executor, options);\n this.bitmap = new BitmapStore(this);\n this.bloom = new BloomFilterStore(this);\n this.cms = new CountMinSketchStore(this);\n this.cuckoo = new CuckooFilterStore(this);\n this.geo = new GeoStore(this);\n this.hash = new HashStore(this);\n this.hyperloglog = new HyperLogLogStore(this);\n this.kv = new KeyValueStore(this);\n this.lists = new ListStore(this);\n this.sets = new SetStore(this);\n this.stream = new StreamStore(this);\n this.tdigest = new TDigestStore(this);\n this.topk = new TopKStore(this);\n this.zset = new SortedSetStore(this);\n }\n async ping(message?: CommandArgument): Promise<unknown> {\n return await this.command(\"PING\", ...(message == null ? [] : [message]));\n }\n\n async echo(message: CommandArgument): Promise<unknown> {\n return await this.command(\"ECHO\", message);\n }\n\n async serverInfo(section?: string): Promise<string> {\n return textResponse(await this.command(\"INFO\", ...(section == null ? [] : [section])), \"INFO\");\n }\n\n async configGet(pattern: string): Promise<unknown> {\n return await this.command(\"CONFIG\", \"GET\", pattern);\n }\n\n async configSet(key: string, value: CommandArgument, options: { local?: boolean } = {}): Promise<boolean> {\n return okResponse(await this.command(\"CONFIG\", \"SET\", ...(options.local === true ? [\"LOCAL\"] : []), key, value));\n }\n\n async configGetLocal(key: string): Promise<unknown> {\n return await this.command(\"CONFIG\", \"GET\", \"LOCAL\", key);\n }\n\n async configResetStat(): Promise<boolean> {\n return okResponse(await this.command(\"CONFIG\", \"RESETSTAT\"));\n }\n\n async configRewrite(): Promise<boolean> {\n return okResponse(await this.command(\"CONFIG\", \"REWRITE\"));\n }\n\n async slowlogGet(count?: number): Promise<unknown[]> {\n return arrayResponse(await this.command(\"SLOWLOG\", \"GET\", ...(count == null ? [] : [count])));\n }\n\n async slowlogLen(): Promise<number> {\n return integer(await this.command(\"SLOWLOG\", \"LEN\"));\n }\n\n async slowlogReset(): Promise<boolean> {\n return okResponse(await this.command(\"SLOWLOG\", \"RESET\"));\n }\n\n async commandMetadata(): Promise<unknown> {\n return await this.command(\"COMMAND\");\n }\n\n async commandCount(): Promise<number> {\n return integer(await this.command(\"COMMAND\", \"COUNT\"));\n }\n\n async commandList(): Promise<unknown[]> {\n return arrayResponse(await this.command(\"COMMAND\", \"LIST\"));\n }\n\n async commandInfo(...names: string[]): Promise<unknown[]> {\n return arrayResponse(await this.commandArgs(concatCommandArgs([\"COMMAND\", \"INFO\"], names)));\n }\n\n async commandDocs(...names: string[]): Promise<unknown> {\n return await this.commandArgs(concatCommandArgs([\"COMMAND\", \"DOCS\"], names));\n }\n\n async commandGetKeys(command: Command): Promise<unknown[]> {\n return arrayResponse(await this.commandArgs(concatCommandArgs([\"COMMAND\", \"GETKEYS\"], command)));\n }\n\n async clientId(): Promise<number> {\n return integer(await this.command(\"CLIENT\", \"ID\"));\n }\n\n async clientSetName(name: string): Promise<boolean> {\n return okResponse(await this.command(\"CLIENT\", \"SETNAME\", name));\n }\n\n async clientGetName(): Promise<string | null> {\n return clientNameResponse(await this.command(\"CLIENT\", \"GETNAME\"));\n }\n\n async clientInfo(): Promise<string> {\n return infoText(await this.command(\"CLIENT\", \"INFO\"));\n }\n\n async clientList(options: { type?: string } = {}): Promise<string> {\n return textResponse(\n await this.command(\"CLIENT\", \"LIST\", ...(options.type == null ? [] : [\"TYPE\", options.type])),\n \"CLIENT LIST\"\n );\n }\n\n async clientTracking(_mode: \"ON\" | \"OFF\", _options: {\n redirect?: number;\n prefixes?: string[];\n bcast?: boolean;\n optin?: boolean;\n optout?: boolean;\n noloop?: boolean;\n } = {}): Promise<boolean> {\n void _mode;\n void _options;\n return unsupportedClientTracking();\n }\n\n async clientCaching(_mode: \"YES\" | \"NO\"): Promise<boolean> {\n void _mode;\n return unsupportedClientCaching();\n }\n\n async clientTrackingInfo(): Promise<unknown> {\n return await this.command(\"CLIENT\", \"TRACKINGINFO\");\n }\n\n async clientGetRedir(): Promise<number> {\n return integer(await this.command(\"CLIENT\", \"GETREDIR\"));\n }\n\n async save(): Promise<boolean> {\n return okResponse(await this.command(\"SAVE\"));\n }\n\n async bgsave(): Promise<boolean> {\n return bgsaveResponse(await this.command(\"BGSAVE\"));\n }\n\n async lastsave(): Promise<number> {\n return integer(await this.command(\"LASTSAVE\"));\n }\n\n async lolwut(version?: number): Promise<string> {\n return textResponse(await this.command(\"LOLWUT\", ...(version == null ? [] : [\"VERSION\", version])), \"LOLWUT\");\n }\n\n async moduleList(): Promise<unknown[]> {\n return arrayResponse(await this.command(\"MODULE\", \"LIST\"));\n }\n\n async publish(channel: string, message: CommandArgument): Promise<number> {\n return integer(await this.command(\"PUBLISH\", channel, message));\n }\n\n async pubsubChannels(pattern?: string): Promise<unknown[]> {\n return arrayResponse(await this.command(\"PUBSUB\", \"CHANNELS\", ...(pattern == null ? [] : [pattern])));\n }\n\n async pubsubNumSub(...channels: string[]): Promise<unknown[]> {\n return arrayResponse(await this.commandArgs(concatCommandArgs([\"PUBSUB\", \"NUMSUB\"], channels)));\n }\n\n async pubsubNumPat(): Promise<number> {\n return integer(await this.command(\"PUBSUB\", \"NUMPAT\"));\n }\n\n async aclSetUser(username: string, rules: string | readonly string[]): Promise<boolean> {\n return okResponse(\n await this.commandArgs(concatCommandArgs([\"ACL\", \"SETUSER\", username], ruleArgs(rules)))\n );\n }\n\n async aclDelUser(...usernames: string[]): Promise<number> {\n return integer(await this.commandArgs(concatCommandArgs([\"ACL\", \"DELUSER\"], usernames)));\n }\n\n async aclGetUser(username: string): Promise<unknown> {\n return await this.command(\"ACL\", \"GETUSER\", username);\n }\n\n async aclList(): Promise<unknown[]> {\n return arrayResponse(await this.command(\"ACL\", \"LIST\"));\n }\n\n async aclListUsers(): Promise<unknown[]> {\n return await this.aclList();\n }\n\n async aclWhoami(): Promise<string> {\n return textResponse(await this.command(\"ACL\", \"WHOAMI\"), \"ACL WHOAMI\");\n }\n\n async aclSave(): Promise<boolean> {\n return okResponse(await this.command(\"ACL\", \"SAVE\"));\n }\n\n async aclLoad(): Promise<boolean> {\n return okResponse(await this.command(\"ACL\", \"LOAD\"));\n }\n\n async auth(password: string, username?: string): Promise<boolean> {\n return okResponse(await this.command(\"AUTH\", ...(username == null ? [] : [username]), password));\n }\n\n async cas(key: string, expected: unknown, value: unknown, options: { ex?: number } = {}): Promise<boolean> {\n const args: CommandArgument[] = [\"CAS\", key, this.codec.encode(expected), this.codec.encode(value)];\n append(args, \"EX\", options.ex);\n return booleanResponse(await this.commandArgs(args));\n }\n\n async lock(key: string, owner: string, ttlMs: number): Promise<boolean> {\n return okResponse(await this.command(\"LOCK\", key, owner, ttlMs));\n }\n\n async unlock(key: string, owner: string): Promise<number> {\n return integer(await this.command(\"UNLOCK\", key, owner));\n }\n\n async extendLock(key: string, owner: string, ttlMs: number): Promise<number> {\n return integer(await this.command(\"EXTEND\", key, owner, ttlMs));\n }\n\n async rateLimitAdd(key: string, options: { windowMs: number; max: number; count?: number }): Promise<RateLimitResult> {\n return rateLimitResultFromResp(\n await this.command(\"RATELIMIT.ADD\", key, options.windowMs, options.max, options.count ?? 1)\n );\n }\n\n async keyInfo(key: string): Promise<KeyInfo> {\n return keyInfoFromResp(await this.command(\"FERRICSTORE.KEY_INFO\", key));\n }\n\n async fetchOrCompute<T = unknown>(\n key: string,\n options: { ttlMs: number; hint?: string }\n ): Promise<FetchOrComputeResult<T>> {\n const args: CommandArgument[] = [\"FETCH_OR_COMPUTE\", key, options.ttlMs];\n if (options.hint != null) {\n args.push(options.hint);\n }\n return fetchOrComputeResultFromResp<T>(await this.commandArgs(args), this.codec);\n }\n\n async fetchOrComputeResult(\n key: string,\n value: unknown,\n options: { ttlMs: number; computeToken: Buffer }\n ): Promise<boolean> {\n const computeToken = fetchOrComputeCompletionToken(options);\n const encoded = this.codec.encode(value);\n return okResponse(await this.command(\n \"FETCH_OR_COMPUTE_RESULT\",\n key,\n computeToken,\n encoded,\n options.ttlMs\n ));\n }\n\n async fetchOrComputeError(\n key: string,\n message: string,\n options: { computeToken: Buffer }\n ): Promise<boolean> {\n const computeToken = fetchOrComputeCompletionToken(options);\n return okResponse(await this.command(\n \"FETCH_OR_COMPUTE_ERROR\",\n key,\n computeToken,\n message\n ));\n }\n\n}\n","import { Buffer } from \"node:buffer\";\nimport { InvalidCommandError } from \"./errors.js\";\nimport { okResponse, text, textResponse, type CommandArgument } from \"./internal.js\";\n\nexport function bgsaveResponse(response: unknown): boolean {\n if (\n (typeof response === \"string\" || Buffer.isBuffer(response) || response instanceof Uint8Array) &&\n text(response) === \"Background saving started\"\n ) {\n return true;\n }\n return okResponse(response);\n}\n\nexport function clientNameResponse(response: unknown): string | null {\n return response == null ? null : textResponse(response, \"CLIENT GETNAME\");\n}\n\nexport function fetchOrComputeCompletionToken(\n options: { readonly computeToken: Buffer } | undefined\n): Buffer {\n if (options == null || !Object.hasOwn(options, \"computeToken\") || options.computeToken === undefined) {\n throw new TypeError(\n \"fetch-or-compute completion requires computeToken\"\n );\n }\n if (!Buffer.isBuffer(options.computeToken)) {\n throw new TypeError(\"fetch-or-compute computeToken must be a Buffer\");\n }\n return options.computeToken;\n}\n\nexport function concatCommandArgs(\n prefix: readonly CommandArgument[],\n suffix: readonly CommandArgument[]\n): CommandArgument[] {\n const args = new Array<CommandArgument>(prefix.length + suffix.length);\n for (let index = 0; index < prefix.length; index += 1) args[index] = prefix[index];\n for (let index = 0; index < suffix.length; index += 1) {\n args[prefix.length + index] = suffix[index];\n }\n return args;\n}\n\nexport function unsupportedClientTracking(): never {\n throw new InvalidCommandError(\n \"CLIENT TRACKING is not supported by the FerricStore native protocol; use native event subscriptions\"\n );\n}\n\nexport function unsupportedClientCaching(): never {\n throw new InvalidCommandError(\"CLIENT CACHING is not supported by the FerricStore native protocol\");\n}\n","import { Buffer } from \"node:buffer\";\nimport type { Codec } from \"./codecs.js\";\nimport { RawCodec } from \"./codecs.js\";\nimport { maybeAutoBatchExecutor } from \"./auto-batch.js\";\nimport { ErrorMappingExecutor } from \"./client-executor.js\";\nimport { finiteNonNegativeInteger, finiteNonNegativeNumber } from \"./client-helpers.js\";\nimport type { FerricStoreClientOptions } from \"./client-options.js\";\nimport { snapshotClientOptions } from \"./client-config.js\";\nimport {\n executeCommandArraysIndividually,\n executeCommandArgs,\n pipelineFallbackOptions,\n snapshotPipelineCommands,\n snapshotPipelineOptions,\n validatePipelineResponse,\n type CommandExecutor,\n type ExecutePipelineOptions\n} from \"./adapters.js\";\nimport type { Command, CommandArgument } from \"./internal.js\";\nimport type { RoutingRoute, RoutingTopology } from \"./topology.js\";\nimport type { BackpressurePolicy } from \"./types.js\";\nimport { FerricStoreError } from \"./errors.js\";\nimport { assertAtomicKeyValueCommandSharesSlot } from \"./key-slot-validation.js\";\n\nconst DEFAULT_FLOW_MANY_BATCH_LIMIT = 1_000;\nconst DEFAULT_LEGACY_CLAIM_HYDRATION_CONCURRENCY = 16;\n\nexport class FerricStoreClientBase {\n readonly executor: CommandExecutor;\n readonly codec: Codec;\n readonly backpressure: Required<BackpressurePolicy>;\n readonly flowManyBatchLimit: number;\n readonly legacyClaimHydrationConcurrency: number;\n private readonly closeAbortController = new AbortController();\n private closePromise?: Promise<void>;\n\n constructor(executor: CommandExecutor, options: FerricStoreClientOptions = {}) {\n const captured = snapshotClientOptions(options);\n this.executor = maybeAutoBatchExecutor(new ErrorMappingExecutor(executor), captured.autoBatch);\n this.codec = captured.codec ?? new RawCodec();\n this.flowManyBatchLimit = normalizeFlowManyBatchLimit(captured.flowManyBatchLimit);\n this.legacyClaimHydrationConcurrency = normalizeLegacyClaimHydrationConcurrency(\n captured.legacyClaimHydrationConcurrency\n );\n this.backpressure = {\n baseDelayMs: finiteNonNegativeInteger(captured.backpressure?.baseDelayMs, 25),\n jitterPct: finiteNonNegativeNumber(captured.backpressure?.jitterPct, 20),\n maxDelayMs: finiteNonNegativeInteger(captured.backpressure?.maxDelayMs, 1_000),\n maxRetries: finiteNonNegativeInteger(captured.backpressure?.maxRetries, 8)\n };\n }\n\n async command(...args: CommandArgument[]): Promise<unknown> {\n assertAtomicKeyValueCommandSharesSlot(args);\n return await executeCommandArgs(this.executor, args);\n }\n\n /** Execute an already-built command without a JavaScript variadic-call limit. */\n async commandArgs(args: readonly CommandArgument[]): Promise<unknown> {\n assertAtomicKeyValueCommandSharesSlot(args);\n return await executeCommandArgs(this.executor, args);\n }\n\n async pipeline(commands: readonly Command[], options?: ExecutePipelineOptions): Promise<unknown[]> {\n const snapshot = snapshotPipelineCommands(commands);\n for (const command of snapshot) assertAtomicKeyValueCommandSharesSlot(command);\n const snapshotOptions = snapshotPipelineOptions(options);\n const results = this.executor.executePipeline != null\n ? await this.executor.executePipeline(snapshot, snapshotOptions)\n : await executeCommandArraysIndividually(\n async (command) => await this.commandArgs(command),\n snapshot,\n pipelineFallbackOptions(snapshot, snapshotOptions)\n );\n return validatePipelineResponse(results, snapshot.length);\n }\n\n async close(): Promise<void> {\n this.closeAbortController.abort(new FerricStoreError(\"FerricStore client is closed\"));\n this.closePromise ??= (async () => await this.executor.close?.())();\n await this.closePromise;\n }\n\n protected get closeSignal(): AbortSignal {\n return this.closeAbortController.signal;\n }\n\n async refreshTopology(): Promise<RoutingTopology> {\n if (this.executor.refreshTopology == null) {\n throw new Error(\"topology refresh requires a topology-aware native executor\");\n }\n return await this.executor.refreshTopology();\n }\n\n async route(key: string | Buffer): Promise<RoutingRoute> {\n if (this.executor.route == null) throw new Error(\"route lookup requires a topology-aware native executor\");\n return await this.executor.route(key);\n }\n}\n\nfunction normalizeFlowManyBatchLimit(value: number | undefined): number {\n if (value == null) return DEFAULT_FLOW_MANY_BATCH_LIMIT;\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new TypeError(\"flowManyBatchLimit must be a positive safe integer\");\n }\n return value;\n}\n\nfunction normalizeLegacyClaimHydrationConcurrency(value: number | undefined): number {\n if (value == null) return DEFAULT_LEGACY_CLAIM_HYDRATION_CONCURRENCY;\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new TypeError(\"legacyClaimHydrationConcurrency must be a positive safe integer\");\n }\n return value;\n}\n","import { Buffer } from \"node:buffer\";\nimport {\n executeCommandArraysIndividually,\n executeCommandArgs,\n pipelineFallbackOptions,\n type CommandExecutor,\n type ExecutePipelineOptions\n} from \"./adapters.js\";\nimport { throwMapped } from \"./client-helpers.js\";\nimport type { Command, CommandArgument } from \"./internal.js\";\nimport type { RoutingRoute, RoutingTopology } from \"./topology.js\";\n\nexport class ErrorMappingExecutor implements CommandExecutor {\n constructor(private readonly executor: CommandExecutor) {}\n\n async executeCommand(...args: CommandArgument[]): Promise<unknown> {\n return await this.executeCommandArgs(args);\n }\n\n async executeCommandArgs(args: readonly CommandArgument[]): Promise<unknown> {\n try {\n return await executeCommandArgs(this.executor, args);\n } catch (error) {\n throwMapped(error);\n }\n }\n\n async executePipeline(commands: readonly Command[], options?: ExecutePipelineOptions): Promise<unknown[]> {\n let results: unknown[];\n try {\n if (this.executor.executePipeline != null) {\n results = await this.executor.executePipeline(commands, options);\n } else {\n results = await executeCommandArraysIndividually(\n async (command) => await executeCommandArgs(this.executor, command),\n commands,\n pipelineFallbackOptions(commands, options)\n );\n }\n } catch (error) {\n throwMapped(error);\n }\n return results;\n }\n\n async executeFusedPipeline(\n commands: readonly Command[],\n options?: ExecutePipelineOptions\n ): Promise<unknown[] | undefined> {\n if (this.executor.executeFusedPipeline == null) return undefined;\n try {\n return await this.executor.executeFusedPipeline(commands, options);\n } catch (error) {\n throwMapped(error);\n }\n }\n\n async refreshTopology(): Promise<RoutingTopology> {\n if (this.executor.refreshTopology == null) {\n throw new Error(\"topology refresh requires a topology-aware native executor\");\n }\n return await this.executor.refreshTopology();\n }\n\n async route(key: string | Buffer): Promise<RoutingRoute> {\n if (this.executor.route == null) {\n throw new Error(\"route lookup requires a topology-aware native executor\");\n }\n return await this.executor.route(key);\n }\n\n async close(): Promise<void> {\n await this.executor.close?.();\n }\n}\n","import type {\n FerricStoreClientFromUrlOptions\n} from \"./client-options.js\";\n\n/** Capture public client configuration before construction crosses an async boundary. */\nexport function snapshotClientOptions<T extends FerricStoreClientFromUrlOptions>(options: T): T {\n const own = { ...options };\n const snapshot = {\n ...own,\n ...(typeof own.autoBatch === \"object\" && own.autoBatch != null\n ? { autoBatch: Object.freeze({ ...own.autoBatch }) }\n : {}),\n ...(own.backpressure == null\n ? {}\n : { backpressure: Object.freeze({ ...own.backpressure }) }),\n ...(typeof own.reconnect === \"object\" && own.reconnect != null\n ? { reconnect: Object.freeze({ ...own.reconnect }) }\n : {})\n };\n return Object.freeze(snapshot);\n}\n","import { FerricStoreClientBase } from \"./client-base.js\";\nimport { concatCommandArgs } from \"./client-core-helpers.js\";\nimport {\n commandWithRequestContext,\n jsonArg,\n managementPairArgs,\n normalizeAdminResponse\n} from \"./client-helpers.js\";\nimport type {\n InvocationCreateOptions,\n ManagementPairs,\n RequestContextOptions\n} from \"./client-options.js\";\nimport {\n append,\n arrayResponse,\n integer,\n okResponse,\n parseKvResponse,\n textResponse,\n type CommandArgument\n} from \"./internal.js\";\n\n/** Cluster, FerricStore administration, telemetry, and invocation commands. */\nexport class FerricStoreAdministrationClient extends FerricStoreClientBase {\n async clusterHealth(): Promise<Record<string, unknown>> {\n return parseKvResponse(await this.command(\"CLUSTER.HEALTH\"));\n }\n\n async clusterStats(): Promise<Record<string, unknown>> {\n return parseKvResponse(await this.command(\"CLUSTER.STATS\"));\n }\n\n async clusterKeyslot(key: string): Promise<number> {\n return integer(await this.command(\"CLUSTER.KEYSLOT\", key));\n }\n\n async clusterSlots(): Promise<unknown> {\n return await this.command(\"CLUSTER.SLOTS\");\n }\n\n async clusterStatus(): Promise<Record<string, unknown>> {\n return parseKvResponse(await this.command(\"CLUSTER.STATUS\"));\n }\n\n async clusterRole(): Promise<unknown> {\n return await this.command(\"CLUSTER.ROLE\");\n }\n\n async clusterJoin(node: string, options: { replace?: boolean } = {}): Promise<boolean> {\n return okResponse(await this.command(\n \"CLUSTER.JOIN\",\n node,\n ...(options.replace === true ? [\"REPLACE\"] : [])\n ));\n }\n\n async clusterLeave(): Promise<boolean> {\n return okResponse(await this.command(\"CLUSTER.LEAVE\"));\n }\n\n async clusterFailover(shardIndex: number, targetNode: string): Promise<boolean> {\n return okResponse(await this.command(\"CLUSTER.FAILOVER\", shardIndex, targetNode));\n }\n\n async clusterPromote(node: string): Promise<boolean> {\n return okResponse(await this.command(\"CLUSTER.PROMOTE\", node));\n }\n\n async clusterDemote(node: string): Promise<boolean> {\n return okResponse(await this.command(\"CLUSTER.DEMOTE\", node));\n }\n\n async ferricstoreConfig(...args: CommandArgument[]): Promise<unknown> {\n return await this.commandArgs(concatCommandArgs([\"FERRICSTORE.CONFIG\"], args));\n }\n\n async ferricstoreHotness(...args: CommandArgument[]): Promise<Record<string, unknown>> {\n return parseKvResponse(await this.commandArgs(concatCommandArgs([\"FERRICSTORE.HOTNESS\"], args)));\n }\n\n async ferricstoreMetrics(...args: CommandArgument[]): Promise<string> {\n return textResponse(\n await this.commandArgs(concatCommandArgs([\"FERRICSTORE.METRICS\"], args)),\n \"FERRICSTORE.METRICS\"\n );\n }\n\n async ferricstoreBlobgc(...args: CommandArgument[]): Promise<unknown> {\n return await this.commandArgs(concatCommandArgs([\"FERRICSTORE.BLOBGC\"], args));\n }\n\n async ferricstoreDoctor(...args: CommandArgument[]): Promise<unknown> {\n return await this.commandArgs(concatCommandArgs([\"FERRICSTORE.DOCTOR\"], args));\n }\n\n async capabilities(): Promise<Record<string, unknown>> {\n return normalizeAdminResponse(\n await this.command(\"FERRICSTORE.CAPABILITIES\")\n ) as Record<string, unknown>;\n }\n\n async ensureNamespace(prefix: string, attrs: ManagementPairs = {}): Promise<unknown> {\n return normalizeAdminResponse(\n await this.commandArgs(\n concatCommandArgs([\"FERRICSTORE.NAMESPACE\", \"ENSURE\", prefix], managementPairArgs(attrs))\n )\n );\n }\n\n async getNamespace(prefix: string): Promise<unknown> {\n return normalizeAdminResponse(await this.command(\"FERRICSTORE.NAMESPACE\", \"GET\", prefix));\n }\n\n async listNamespaces(): Promise<unknown> {\n return normalizeAdminResponse(await this.command(\"FERRICSTORE.NAMESPACE\", \"LIST\"));\n }\n\n async deleteNamespace(prefix: string): Promise<unknown> {\n return normalizeAdminResponse(await this.command(\"FERRICSTORE.NAMESPACE\", \"DELETE\", prefix));\n }\n\n async setQuota(namespace: string, quotaSpec: ManagementPairs = {}): Promise<unknown> {\n return normalizeAdminResponse(\n await this.commandArgs(\n concatCommandArgs([\"FERRICSTORE.QUOTA\", \"SET\", namespace], managementPairArgs(quotaSpec))\n )\n );\n }\n\n async getQuota(namespace: string): Promise<unknown> {\n return normalizeAdminResponse(await this.command(\"FERRICSTORE.QUOTA\", \"GET\", namespace));\n }\n\n async quotaUsage(namespace: string): Promise<unknown> {\n return normalizeAdminResponse(await this.command(\"FERRICSTORE.QUOTA\", \"USAGE\", namespace));\n }\n\n async clusterInfo(): Promise<Record<string, unknown>> {\n return normalizeAdminResponse(\n await this.command(\"FERRICSTORE.TELEMETRY\", \"CLUSTER_INFO\")\n ) as Record<string, unknown>;\n }\n\n async namespaceUsage(prefix: string): Promise<Record<string, unknown>> {\n return normalizeAdminResponse(\n await this.command(\"FERRICSTORE.TELEMETRY\", \"NAMESPACE_USAGE\", prefix)\n ) as Record<string, unknown>;\n }\n\n async flowQuery(attrs: ManagementPairs = {}): Promise<unknown[]> {\n const response = normalizeAdminResponse(\n await this.commandArgs(\n concatCommandArgs([\"FERRICSTORE.TELEMETRY\", \"FLOW_QUERY\"], managementPairArgs(attrs))\n )\n );\n return arrayResponse(response);\n }\n\n async flowHistory(id: string, attrs: ManagementPairs = {}): Promise<unknown[]> {\n const response = normalizeAdminResponse(\n await this.commandArgs(\n concatCommandArgs(\n [\"FERRICSTORE.TELEMETRY\", \"FLOW_HISTORY\", id],\n managementPairArgs(attrs)\n )\n )\n );\n return arrayResponse(response);\n }\n\n async invocationDefinitionPut(\n definition: Record<string, unknown> | string,\n options: RequestContextOptions = {}\n ): Promise<unknown> {\n return normalizeAdminResponse(\n await this.commandArgs(commandWithRequestContext(\n \"INVOCATION.DEFINITION.PUT\",\n [jsonArg(definition)],\n options.requestContext\n ))\n );\n }\n\n async invocationDefinitionGet(\n name: string,\n options: RequestContextOptions = {}\n ): Promise<unknown> {\n return normalizeAdminResponse(\n await this.commandArgs(commandWithRequestContext(\n \"INVOCATION.DEFINITION.GET\",\n [name],\n options.requestContext\n ))\n );\n }\n\n async invocationDefinitionList(options: RequestContextOptions = {}): Promise<unknown[]> {\n const response = normalizeAdminResponse(\n await this.commandArgs(commandWithRequestContext(\n \"INVOCATION.DEFINITION.LIST\",\n [],\n options.requestContext\n ))\n );\n return arrayResponse(response);\n }\n\n async invocationCreate(\n name: string,\n attrs: Record<string, unknown>,\n options: InvocationCreateOptions = {}\n ): Promise<unknown> {\n const envelope: Record<string, unknown> = { attrs };\n if (options.context != null) envelope.context = options.context;\n if (options.idempotencyKey != null) envelope.idempotency_key = options.idempotencyKey;\n return normalizeAdminResponse(\n await this.commandArgs(commandWithRequestContext(\n \"INVOCATION.CREATE\",\n [name, jsonArg(envelope)],\n options.requestContext\n ))\n );\n }\n\n async invocationGet(id: string, options: RequestContextOptions = {}): Promise<unknown> {\n return normalizeAdminResponse(\n await this.commandArgs(commandWithRequestContext(\n \"INVOCATION.GET\",\n [id],\n options.requestContext\n ))\n );\n }\n\n async invocationPartitionList(\n name: string,\n options: RequestContextOptions & { scope?: string } = {}\n ): Promise<unknown[]> {\n const args: CommandArgument[] = [name];\n append(args, \"SCOPE\", options.scope);\n const response = normalizeAdminResponse(\n await this.commandArgs(commandWithRequestContext(\n \"INVOCATION.PARTITION.LIST\",\n args,\n options.requestContext\n ))\n );\n return arrayResponse(response);\n }\n}\n","import { Buffer } from \"node:buffer\";\nimport type { Codec } from \"./codecs.js\";\nimport {\n binaryBooleanResponse,\n integer,\n textResponse,\n type CommandArgument\n} from \"./internal.js\";\nimport type {\n GeoAddOptions,\n GetExOptions,\n RangeLimit,\n ScanOptions,\n SetOptions,\n StoreCommandClient,\n XReadStream,\n ZAddOptions\n} from \"./store.js\";\nimport { assertSafeVariadicDispatch } from \"./variadic-dispatch.js\";\n\nexport function encode(codec: Codec, value: unknown): Buffer {\n return codec.encode(value);\n}\n\nexport function decode<T>(codec: Codec, value: unknown): T | null {\n if (value == null) return null;\n if (Buffer.isBuffer(value)) return codec.decode(value) as T | null;\n if (value instanceof Uint8Array) return codec.decode(Buffer.from(value)) as T | null;\n return value as T;\n}\n\nexport function number(value: unknown): number {\n return integer(value);\n}\n\nexport function binaryInteger(value: unknown): number {\n return binaryBooleanResponse(value) ? 1 : 0;\n}\n\nexport function string(value: unknown): string {\n return textResponse(value);\n}\n\nexport function array(value: unknown, expectedItems?: number, command?: string): unknown[] {\n if (!Array.isArray(value)) {\n throw new TypeError(\"server returned an invalid array response\");\n }\n if (expectedItems != null && value.length !== expectedItems) {\n throw new TypeError(`${command ?? \"server\"} returned ${value.length} items; expected ${expectedItems}`);\n }\n return value;\n}\n\n/** @internal Validate a variable-length response without copying it. */\nexport function denseArray(value: unknown, command: string): unknown[] {\n return assertDenseArray(array(value), command);\n}\n\n/** @internal Validate a positional response without copying it. */\nexport function denseArrayResponse(\n value: unknown,\n expectedItems: number,\n command: string\n): unknown[] {\n return assertDenseArray(array(value, expectedItems, command), command);\n}\n\nfunction assertDenseArray(items: unknown[], command: string): unknown[] {\n for (let index = 0; index < items.length; index += 1) {\n if (!Object.hasOwn(items, index)) {\n throw new TypeError(`${command} response item ${index} is missing`);\n }\n }\n return items;\n}\n\n/** @internal Validate and transform a variable-length response in one pass. */\nexport function mapArray<T>(\n value: unknown,\n command: string,\n transform: (item: unknown, index: number) => T\n): T[] {\n const items = array(value);\n const result = new Array<T>(items.length);\n for (let index = 0; index < items.length; index += 1) {\n if (!Object.hasOwn(items, index)) {\n throw new TypeError(`${command} response item ${index} is missing`);\n }\n result[index] = transform(items[index], index);\n }\n return result;\n}\n\n/** @internal Validate and transform a positional response in one pass. */\nexport function mapArrayResponse<T>(\n value: unknown,\n expectedItems: number,\n command: string,\n transform: (item: unknown, index: number) => T\n): T[] {\n const items = array(value, expectedItems, command);\n const result = new Array<T>(items.length);\n for (let index = 0; index < items.length; index += 1) {\n if (!Object.hasOwn(items, index)) {\n throw new TypeError(`${command} response item ${index} is missing`);\n }\n result[index] = transform(items[index], index);\n }\n return result;\n}\n\n/** @internal Reject an empty required collection without copying or scanning it. */\nexport function requireNonEmpty<T>(\n values: readonly T[],\n command: string,\n noun = \"argument\"\n): readonly T[] {\n if (values.length === 0) throw new TypeError(`${command} requires at least one ${noun}`);\n return values;\n}\n\nfunction commandName(args: readonly CommandArgument[]): string {\n return typeof args[0] === \"string\" ? args[0] : \"command\";\n}\n\nexport function commandArgs(\n client: StoreCommandClient,\n args: readonly CommandArgument[]\n): Promise<unknown> {\n if (client.commandArgs != null) return client.commandArgs(args);\n assertSafeVariadicDispatch(args.length, \"commandArgs\");\n return client.command(...args);\n}\n\n/** @internal Normalize an unambiguous scalar rest parameter or one array argument. */\nexport function arrayOrRest<T>(values: readonly (T | readonly T[])[]): readonly T[] {\n const first = values[0];\n return values.length === 1 && Array.isArray(first)\n ? first as readonly T[]\n : values as readonly T[];\n}\n\nexport function appendXReadStreams(\n args: CommandArgument[],\n streams: readonly XReadStream[]\n): void {\n const offset = args.length;\n const streamCount = streams.length;\n requireNonEmpty(streams, commandName(args), \"stream\");\n args.length = offset + 1 + streamCount * 2;\n args[offset] = \"STREAMS\";\n for (let index = 0; index < streamCount; index += 1) {\n if (!Object.hasOwn(streams, index)) {\n throw new TypeError(\"XREAD streams must be dense\");\n }\n const stream = streams[index];\n if (stream == null) throw new TypeError(\"XREAD streams must contain only stream descriptors\");\n if (!Object.hasOwn(stream, \"key\") || !Object.hasOwn(stream, \"id\")) {\n throw new TypeError(`${commandName(args)} streams require own key and id fields`);\n }\n args[offset + 1 + index] = stream.key;\n args[offset + 1 + streamCount + index] = stream.id;\n }\n}\n\nexport function concatArgs(\n ...parts: readonly (readonly CommandArgument[])[]\n): CommandArgument[] {\n let length = 0;\n for (const part of parts) length += part.length;\n const args = new Array<CommandArgument>(length);\n let offset = 0;\n for (const part of parts) {\n for (let index = 0; index < part.length; index += 1) {\n if (!Object.hasOwn(part, index)) {\n throw new TypeError(\"command argument arrays must be dense\");\n }\n args[offset++] = part[index];\n }\n }\n return args;\n}\n\nexport function encodedArgs(\n prefix: readonly CommandArgument[],\n codec: Codec,\n values: readonly unknown[],\n allowEmpty = false\n): CommandArgument[] {\n if (!allowEmpty) requireNonEmpty(values, commandName(prefix));\n const args = new Array<CommandArgument>(prefix.length + values.length);\n for (let index = 0; index < prefix.length; index += 1) args[index] = prefix[index];\n for (let index = 0; index < values.length; index += 1) {\n if (!Object.hasOwn(values, index)) {\n throw new TypeError(\"command argument arrays must be dense\");\n }\n args[prefix.length + index] = codec.encode(values[index]);\n }\n return args;\n}\n\nexport function keyValueArgs(\n prefix: readonly CommandArgument[],\n codec: Codec,\n entries: Record<string, unknown> | [string, unknown][]\n): CommandArgument[] {\n const validateTuples = Array.isArray(entries);\n const pairs = validateTuples ? entries : Object.entries(entries);\n requireNonEmpty(pairs, commandName(prefix), \"entry\");\n const args = new Array<CommandArgument>(prefix.length + pairs.length * 2);\n for (let index = 0; index < prefix.length; index += 1) args[index] = prefix[index];\n for (let index = 0; index < pairs.length; index += 1) {\n const pair = pairs[index];\n if (\n !Object.hasOwn(pairs, index)\n || pair == null\n || validateTuples && (\n !Array.isArray(pair)\n || pair.length !== 2\n || !Object.hasOwn(pair, 0)\n || !Object.hasOwn(pair, 1)\n )\n ) {\n throw new TypeError(\"key/value entries must be dense two-item tuples\");\n }\n args[index * 2 + prefix.length] = pair[0];\n args[index * 2 + prefix.length + 1] = codec.encode(pair[1]);\n }\n return args;\n}\n\nexport function encodedEntryArgs(\n prefix: readonly CommandArgument[],\n codec: Codec,\n entries: readonly (readonly [unknown, CommandArgument])[]\n): CommandArgument[] {\n requireNonEmpty(entries, commandName(prefix), \"entry\");\n const args = new Array<CommandArgument>(prefix.length + entries.length * 2);\n for (let index = 0; index < prefix.length; index += 1) args[index] = prefix[index];\n for (let index = 0; index < entries.length; index += 1) {\n const entry = entries[index];\n if (\n !Object.hasOwn(entries, index)\n || entry == null\n || !Array.isArray(entry)\n || entry.length !== 2\n || !Object.hasOwn(entry, 0)\n || !Object.hasOwn(entry, 1)\n ) {\n throw new TypeError(\"entries must be dense two-item tuples\");\n }\n args[prefix.length + index * 2] = codec.encode(entry[0]);\n args[prefix.length + index * 2 + 1] = entry[1];\n }\n return args;\n}\n\nexport function setOptions(options: SetOptions): CommandArgument[] {\n const ex = ownOption(options, \"ex\");\n const exat = ownOption(options, \"exat\");\n const get = ownOption(options, \"get\");\n const keepTtl = ownOption(options, \"keepTtl\");\n const nx = ownOption(options, \"nx\");\n const px = ownOption(options, \"px\");\n const pxat = ownOption(options, \"pxat\");\n const xx = ownOption(options, \"xx\");\n if (nx === true && xx === true) {\n throw new TypeError(\"SET NX and XX options are mutually exclusive\");\n }\n let expiryModes = keepTtl === true ? 1 : 0;\n if (ex != null) expiryModes += 1;\n if (px != null) expiryModes += 1;\n if (exat != null) expiryModes += 1;\n if (pxat != null) expiryModes += 1;\n if (expiryModes > 1) {\n throw new TypeError(\"SET expiry options are mutually exclusive\");\n }\n const args: CommandArgument[] = [];\n if (ex != null) args.push(\"EX\", ex);\n if (px != null) args.push(\"PX\", px);\n if (exat != null) args.push(\"EXAT\", exat);\n if (pxat != null) args.push(\"PXAT\", pxat);\n if (nx === true) args.push(\"NX\");\n if (xx === true) args.push(\"XX\");\n if (get === true) args.push(\"GET\");\n if (keepTtl === true) args.push(\"KEEPTTL\");\n return args;\n}\n\nexport function getexOptions(options: GetExOptions): CommandArgument[] {\n const persist = ownOption(options, \"persist\");\n const ex = ownOption(options, \"ex\");\n const px = ownOption(options, \"px\");\n const exat = ownOption(options, \"exat\");\n const pxat = ownOption(options, \"pxat\");\n let expiryModes = persist === true ? 1 : 0;\n if (ex != null) expiryModes += 1;\n if (px != null) expiryModes += 1;\n if (exat != null) expiryModes += 1;\n if (pxat != null) expiryModes += 1;\n if (expiryModes > 1) {\n throw new TypeError(\"GETEX expiry options are mutually exclusive\");\n }\n if (persist === true) return [\"PERSIST\"];\n if (ex != null) return [\"EX\", ex];\n if (px != null) return [\"PX\", px];\n if (exat != null) return [\"EXAT\", exat];\n if (pxat != null) return [\"PXAT\", pxat];\n return [];\n}\n\nexport function scanOptions(options: ScanOptions, command = \"SCAN\"): CommandArgument[] {\n const type = ownOption(options, \"type\");\n const match = ownOption(options, \"match\");\n const count = ownOption(options, \"count\");\n if (type != null && command !== \"SCAN\") {\n throw new TypeError(`${command} does not support the TYPE option`);\n }\n const args: CommandArgument[] = [];\n if (match != null) args.push(\"MATCH\", match);\n if (count != null) args.push(\"COUNT\", count);\n if (type != null) args.push(\"TYPE\", type);\n return args;\n}\n\nexport function zaddOptions(options: ZAddOptions): CommandArgument[] {\n const ch = ownOption(options, \"ch\");\n const gt = ownOption(options, \"gt\");\n const lt = ownOption(options, \"lt\");\n const nx = ownOption(options, \"nx\");\n const xx = ownOption(options, \"xx\");\n if (nx === true && xx === true) {\n throw new TypeError(\"ZADD NX and XX options are mutually exclusive\");\n }\n if (gt === true && lt === true) {\n throw new TypeError(\"ZADD GT and LT options are mutually exclusive\");\n }\n if (nx === true && (gt === true || lt === true)) {\n throw new TypeError(\"ZADD NX cannot be combined with GT or LT\");\n }\n const args: CommandArgument[] = [];\n if (nx === true) args.push(\"NX\");\n if (xx === true) args.push(\"XX\");\n if (gt === true) args.push(\"GT\");\n if (lt === true) args.push(\"LT\");\n if (ch === true) args.push(\"CH\");\n return args;\n}\n\nexport function geoAddOptions(options: GeoAddOptions): CommandArgument[] {\n const ch = ownOption(options, \"ch\");\n const nx = ownOption(options, \"nx\");\n const xx = ownOption(options, \"xx\");\n if (nx === true && xx === true) {\n throw new TypeError(\"GEOADD NX and XX options are mutually exclusive\");\n }\n const args: CommandArgument[] = [];\n if (nx === true) args.push(\"NX\");\n if (xx === true) args.push(\"XX\");\n if (ch === true) args.push(\"CH\");\n return args;\n}\n\nexport function rangeScoreOptions(\n options: { withScores?: boolean; limit?: RangeLimit },\n withScores = ownOption(options, \"withScores\") === true\n): CommandArgument[] {\n const limit = ownOption(options, \"limit\");\n const args: CommandArgument[] = [];\n if (withScores) args.push(\"WITHSCORES\");\n if (limit != null) {\n if (!Object.hasOwn(limit, \"offset\") || !Object.hasOwn(limit, \"count\")) {\n throw new TypeError(\"LIMIT requires own offset and count values\");\n }\n args.push(\"LIMIT\", limit.offset, limit.count);\n }\n return args;\n}\n\nexport function ownOption<T extends object, K extends keyof T>(options: T, key: K): T[K] | undefined {\n return Object.hasOwn(options, key) ? options[key] : undefined;\n}\n","import { binaryBooleanResponse, integerReply, okResponse, type CommandArgument } from \"./internal.js\";\nimport {\n array,\n arrayOrRest,\n binaryInteger,\n commandArgs,\n concatArgs,\n decode,\n denseArray,\n encode,\n encodedArgs,\n encodedEntryArgs,\n mapArray,\n mapArrayResponse,\n ownOption,\n requireNonEmpty,\n string\n} from \"./store-utilities.js\";\nimport type { IntegerReply, StoreCommandClient } from \"./store.js\";\n\nexport type TopKReserveOptions =\n | { width?: never; depth?: never }\n | { width: number; depth: number };\n\nexport interface CountMinMergeOptions {\n weights?: readonly (number | bigint)[];\n}\n\nexport interface TDigestCreateOptions {\n compression?: number;\n}\n\nexport interface TDigestMergeOptions extends TDigestCreateOptions {\n override?: boolean;\n}\n\nexport class BloomFilterStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async reserve(key: string, errorRate: number, capacity: number): Promise<boolean> {\n return okResponse(await this.client.command(\"BF.RESERVE\", key, errorRate, capacity));\n }\n\n async add(key: string, element: unknown): Promise<boolean> {\n return binaryBooleanResponse(await this.client.command(\"BF.ADD\", key, encode(this.client.codec, element)));\n }\n\n madd(key: string, element: unknown, ...elements: unknown[]): Promise<number[]>;\n madd(key: string, ...elements: unknown[]): Promise<number[]> {\n return this.maddMany(key, elements);\n }\n\n async maddMany(key: string, elements: readonly unknown[]): Promise<number[]> {\n const elementCount = elements.length;\n return mapArrayResponse(\n await commandArgs(this.client, encodedArgs([\"BF.MADD\", key], this.client.codec, elements)),\n elementCount,\n \"BF.MADD\",\n binaryInteger\n );\n }\n\n async exists(key: string, element: unknown): Promise<boolean> {\n return binaryBooleanResponse(await this.client.command(\"BF.EXISTS\", key, encode(this.client.codec, element)));\n }\n\n mexists(key: string, element: unknown, ...elements: unknown[]): Promise<number[]>;\n mexists(key: string, ...elements: unknown[]): Promise<number[]> {\n return this.mexistsMany(key, elements);\n }\n\n async mexistsMany(key: string, elements: readonly unknown[]): Promise<number[]> {\n const elementCount = elements.length;\n return mapArrayResponse(\n await commandArgs(this.client, encodedArgs([\"BF.MEXISTS\", key], this.client.codec, elements)),\n elementCount,\n \"BF.MEXISTS\",\n binaryInteger\n );\n }\n\n async card(key: string): Promise<IntegerReply> {\n return integerReply(await this.client.command(\"BF.CARD\", key));\n }\n\n async info(key: string): Promise<unknown[]> {\n return denseArray(await this.client.command(\"BF.INFO\", key), \"BF.INFO\");\n }\n}\n\nexport class CuckooFilterStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async reserve(key: string, capacity: number): Promise<boolean> {\n return okResponse(await this.client.command(\"CF.RESERVE\", key, capacity));\n }\n\n async add(key: string, element: unknown): Promise<boolean> {\n return binaryBooleanResponse(await this.client.command(\"CF.ADD\", key, encode(this.client.codec, element)));\n }\n\n async addnx(key: string, element: unknown): Promise<boolean> {\n return binaryBooleanResponse(await this.client.command(\"CF.ADDNX\", key, encode(this.client.codec, element)));\n }\n\n async del(key: string, element: unknown): Promise<boolean> {\n return binaryBooleanResponse(await this.client.command(\"CF.DEL\", key, encode(this.client.codec, element)));\n }\n\n async exists(key: string, element: unknown): Promise<boolean> {\n return binaryBooleanResponse(await this.client.command(\"CF.EXISTS\", key, encode(this.client.codec, element)));\n }\n\n mexists(key: string, element: unknown, ...elements: unknown[]): Promise<number[]>;\n mexists(key: string, ...elements: unknown[]): Promise<number[]> {\n return this.mexistsMany(key, elements);\n }\n\n async mexistsMany(key: string, elements: readonly unknown[]): Promise<number[]> {\n const elementCount = elements.length;\n return mapArrayResponse(\n await commandArgs(this.client, encodedArgs([\"CF.MEXISTS\", key], this.client.codec, elements)),\n elementCount,\n \"CF.MEXISTS\",\n binaryInteger\n );\n }\n\n async count(key: string, element: unknown): Promise<IntegerReply> {\n return integerReply(await this.client.command(\"CF.COUNT\", key, encode(this.client.codec, element)));\n }\n\n async info(key: string): Promise<unknown[]> {\n return denseArray(await this.client.command(\"CF.INFO\", key), \"CF.INFO\");\n }\n}\n\nexport class CountMinSketchStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async initByDim(key: string, width: number, depth: number): Promise<boolean> {\n return okResponse(await this.client.command(\"CMS.INITBYDIM\", key, width, depth));\n }\n\n async initByProb(key: string, error: number, probability: number): Promise<boolean> {\n return okResponse(await this.client.command(\"CMS.INITBYPROB\", key, error, probability));\n }\n\n async incrBy(key: string, entries: [unknown, number | bigint][]): Promise<IntegerReply[]> {\n const entryCount = entries.length;\n return mapArrayResponse(\n await commandArgs(this.client, encodedEntryArgs([\"CMS.INCRBY\", key], this.client.codec, entries)),\n entryCount,\n \"CMS.INCRBY\",\n integerReply\n );\n }\n\n query(key: string, item: unknown, ...items: unknown[]): Promise<IntegerReply[]>;\n query(key: string, ...items: unknown[]): Promise<IntegerReply[]> {\n return this.queryMany(key, items);\n }\n\n async queryMany(key: string, items: readonly unknown[]): Promise<IntegerReply[]> {\n const itemCount = items.length;\n return mapArrayResponse(\n await commandArgs(this.client, encodedArgs([\"CMS.QUERY\", key], this.client.codec, items)),\n itemCount,\n \"CMS.QUERY\",\n integerReply\n );\n }\n\n async merge(destination: string, sources: readonly string[], options: CountMinMergeOptions = {}): Promise<boolean> {\n if (sources.length === 0) throw new TypeError(\"CMS.MERGE requires at least one source\");\n const weights = ownOption(options, \"weights\");\n if (weights != null && weights.length !== sources.length) {\n throw new TypeError(\"CMS.MERGE weights must match the source count\");\n }\n const args = weights == null\n ? concatArgs([\"CMS.MERGE\", destination, sources.length], sources)\n : concatArgs([\"CMS.MERGE\", destination, sources.length], sources, [\"WEIGHTS\"], weights);\n return okResponse(await commandArgs(this.client, args));\n }\n\n async info(key: string): Promise<unknown[]> {\n return denseArray(await this.client.command(\"CMS.INFO\", key), \"CMS.INFO\");\n }\n}\n\nexport class TopKStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async reserve(key: string, k: number, options: TopKReserveOptions = {}): Promise<boolean> {\n const args: CommandArgument[] = [\"TOPK.RESERVE\", key, k];\n const width = ownOption(options, \"width\");\n const depth = ownOption(options, \"depth\");\n const decay = ownOption(options as TopKReserveOptions & { decay?: unknown }, \"decay\");\n if (decay != null || Object.hasOwn(options, \"decay\")) {\n throw new TypeError(\"TOPK.RESERVE decay is not supported by FerricStore 0.8\");\n }\n const tuningCount = [width, depth]\n .filter((value) => value != null)\n .length;\n if (tuningCount !== 0 && tuningCount !== 2) {\n throw new TypeError(\"TOPK.RESERVE width and depth must be provided together\");\n }\n if (tuningCount === 2) {\n args.push(width, depth);\n }\n return okResponse(await commandArgs(this.client, args));\n }\n\n add<T = unknown>(key: string, element: unknown, ...elements: unknown[]): Promise<(T | null)[]>;\n add<T = unknown>(key: string, ...elements: unknown[]): Promise<(T | null)[]> {\n return this.addMany<T>(key, elements);\n }\n\n async addMany<T = unknown>(key: string, elements: readonly unknown[]): Promise<(T | null)[]> {\n const elementCount = elements.length;\n return mapArrayResponse(\n await commandArgs(this.client, encodedArgs([\"TOPK.ADD\", key], this.client.codec, elements)),\n elementCount,\n \"TOPK.ADD\",\n (item) => decode<T>(this.client.codec, item)\n );\n }\n\n async incrBy<T = unknown>(key: string, entries: [unknown, number | bigint][]): Promise<(T | null)[]> {\n const entryCount = entries.length;\n return mapArrayResponse(\n await commandArgs(this.client, encodedEntryArgs([\"TOPK.INCRBY\", key], this.client.codec, entries)),\n entryCount,\n \"TOPK.INCRBY\",\n (item) => decode<T>(this.client.codec, item)\n );\n }\n\n query(key: string, element: unknown, ...elements: unknown[]): Promise<number[]>;\n query(key: string, ...elements: unknown[]): Promise<number[]> {\n return this.queryMany(key, elements);\n }\n\n async queryMany(key: string, elements: readonly unknown[]): Promise<number[]> {\n const elementCount = elements.length;\n return mapArrayResponse(\n await commandArgs(this.client, encodedArgs([\"TOPK.QUERY\", key], this.client.codec, elements)),\n elementCount,\n \"TOPK.QUERY\",\n binaryInteger\n );\n }\n\n count(key: string, element: unknown, ...elements: unknown[]): Promise<IntegerReply[]>;\n count(key: string, ...elements: unknown[]): Promise<IntegerReply[]> {\n return this.countMany(key, elements);\n }\n\n async countMany(key: string, elements: readonly unknown[]): Promise<IntegerReply[]> {\n const elementCount = elements.length;\n return mapArrayResponse(\n await commandArgs(this.client, encodedArgs([\"TOPK.COUNT\", key], this.client.codec, elements)),\n elementCount,\n \"TOPK.COUNT\",\n integerReply\n );\n }\n\n async list<T = unknown>(key: string, options: { withCount?: boolean } = {}): Promise<(T | IntegerReply | null)[]> {\n const withCount = ownOption(options, \"withCount\") === true;\n const items = array(await this.client.command(\"TOPK.LIST\", key, ...(withCount ? [\"WITHCOUNT\"] : [])));\n if (withCount && items.length % 2 !== 0) {\n throw new TypeError(\"TOPK.LIST WITHCOUNT must return item/count pairs\");\n }\n return mapArray(items, \"TOPK.LIST\", (item, index) =>\n withCount && index % 2 === 1 ? integerReply(item) : decode<T>(this.client.codec, item)\n );\n }\n\n async info(key: string): Promise<unknown[]> {\n return denseArray(await this.client.command(\"TOPK.INFO\", key), \"TOPK.INFO\");\n }\n}\n\nexport class TDigestStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async create(key: string, options: TDigestCreateOptions = {}): Promise<boolean> {\n return okResponse(await this.client.command(\"TDIGEST.CREATE\", key, ...compressionOptions(options)));\n }\n\n add(key: string, values: readonly number[]): Promise<boolean>;\n add(key: string, value: number, ...values: number[]): Promise<boolean>;\n async add(key: string, ...valuesOrArray: (number | readonly number[])[]): Promise<boolean> {\n const values = requireNonEmpty(arrayOrRest<number>(valuesOrArray), \"TDIGEST.ADD\", \"value\");\n return okResponse(await commandArgs(this.client, concatArgs(\n [\"TDIGEST.ADD\", key],\n values\n )));\n }\n\n async reset(key: string): Promise<boolean> {\n return okResponse(await this.client.command(\"TDIGEST.RESET\", key));\n }\n\n quantile(key: string, quantiles: readonly number[]): Promise<string[]>;\n quantile(key: string, quantile: number, ...quantiles: number[]): Promise<string[]>;\n async quantile(key: string, ...quantilesOrArray: (number | readonly number[])[]): Promise<string[]> {\n const quantiles = requireNonEmpty(arrayOrRest<number>(quantilesOrArray), \"TDIGEST.QUANTILE\", \"quantile\");\n const quantileCount = quantiles.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs([\"TDIGEST.QUANTILE\", key], quantiles)),\n quantileCount,\n \"TDIGEST.QUANTILE\",\n string\n );\n }\n\n cdf(key: string, values: readonly number[]): Promise<string[]>;\n cdf(key: string, value: number, ...values: number[]): Promise<string[]>;\n async cdf(key: string, ...valuesOrArray: (number | readonly number[])[]): Promise<string[]> {\n const values = requireNonEmpty(arrayOrRest<number>(valuesOrArray), \"TDIGEST.CDF\", \"value\");\n const valueCount = values.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs([\"TDIGEST.CDF\", key], values)),\n valueCount,\n \"TDIGEST.CDF\",\n string\n );\n }\n\n rank(key: string, values: readonly number[]): Promise<IntegerReply[]>;\n rank(key: string, value: number, ...values: number[]): Promise<IntegerReply[]>;\n async rank(key: string, ...valuesOrArray: (number | readonly number[])[]): Promise<IntegerReply[]> {\n const values = requireNonEmpty(arrayOrRest<number>(valuesOrArray), \"TDIGEST.RANK\", \"value\");\n const valueCount = values.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs([\"TDIGEST.RANK\", key], values)),\n valueCount,\n \"TDIGEST.RANK\",\n integerReply\n );\n }\n\n revrank(key: string, values: readonly number[]): Promise<IntegerReply[]>;\n revrank(key: string, value: number, ...values: number[]): Promise<IntegerReply[]>;\n async revrank(key: string, ...valuesOrArray: (number | readonly number[])[]): Promise<IntegerReply[]> {\n const values = requireNonEmpty(arrayOrRest<number>(valuesOrArray), \"TDIGEST.REVRANK\", \"value\");\n const valueCount = values.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs([\"TDIGEST.REVRANK\", key], values)),\n valueCount,\n \"TDIGEST.REVRANK\",\n integerReply\n );\n }\n\n byrank(key: string, ranks: readonly number[]): Promise<string[]>;\n byrank(key: string, rank: number, ...ranks: number[]): Promise<string[]>;\n async byrank(key: string, ...ranksOrArray: (number | readonly number[])[]): Promise<string[]> {\n const ranks = requireNonEmpty(arrayOrRest<number>(ranksOrArray), \"TDIGEST.BYRANK\", \"rank\");\n const rankCount = ranks.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs([\"TDIGEST.BYRANK\", key], ranks)),\n rankCount,\n \"TDIGEST.BYRANK\",\n string\n );\n }\n\n byrevrank(key: string, ranks: readonly number[]): Promise<string[]>;\n byrevrank(key: string, rank: number, ...ranks: number[]): Promise<string[]>;\n async byrevrank(key: string, ...ranksOrArray: (number | readonly number[])[]): Promise<string[]> {\n const ranks = requireNonEmpty(arrayOrRest<number>(ranksOrArray), \"TDIGEST.BYREVRANK\", \"rank\");\n const rankCount = ranks.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs([\"TDIGEST.BYREVRANK\", key], ranks)),\n rankCount,\n \"TDIGEST.BYREVRANK\",\n string\n );\n }\n\n async trimmedMean(key: string, low: number, high: number): Promise<string> {\n return string(await this.client.command(\"TDIGEST.TRIMMED_MEAN\", key, low, high));\n }\n\n async min(key: string): Promise<string> {\n return string(await this.client.command(\"TDIGEST.MIN\", key));\n }\n\n async max(key: string): Promise<string> {\n return string(await this.client.command(\"TDIGEST.MAX\", key));\n }\n\n async info(key: string): Promise<unknown[]> {\n return denseArray(await this.client.command(\"TDIGEST.INFO\", key), \"TDIGEST.INFO\");\n }\n\n async merge(destination: string, sources: string[], options: TDigestMergeOptions = {}): Promise<boolean> {\n requireNonEmpty(sources, \"TDIGEST.MERGE\", \"source\");\n const override = ownOption(options, \"override\") === true;\n return okResponse(\n await commandArgs(this.client, concatArgs(\n [\"TDIGEST.MERGE\", destination, sources.length],\n sources,\n compressionOptions(options),\n override ? [\"OVERRIDE\"] : []\n ))\n );\n }\n}\n\nfunction compressionOptions(options: TDigestCreateOptions): CommandArgument[] {\n const compression = ownOption(options, \"compression\");\n return compression == null ? [] : [\"COMPRESSION\", compression];\n}\n","import type { Codec } from \"./codecs.js\";\nimport { setOwnValue, textResponse, type CommandArgument } from \"./internal.js\";\nimport { array, decode, mapArray } from \"./store-utilities.js\";\n\nexport function decodeHashRecord<T>(codec: Codec, value: unknown): Record<string, T | null> {\n const result: Record<string, T | null> = {};\n for (const [field, item] of hashPairs(value)) {\n setOwnValue(result, textToken(field), decode<T>(codec, item));\n }\n return result;\n}\n\nexport function decodeHashFlatPairs<T = unknown>(codec: Codec, value: unknown): (string | T | null)[] {\n const result: (string | T | null)[] = [];\n for (const [field, item] of hashPairs(value)) {\n result.push(textToken(field), decode<T>(codec, item));\n }\n return result;\n}\n\nfunction hashPairs(value: unknown): [unknown, unknown][] {\n if (value instanceof Map) return [...value.entries()];\n if (plainResponseObject(value)) return Object.entries(value);\n const items = array(value);\n if (items.every((item) => Array.isArray(item))) {\n return mapArray(items, \"hash pair\", (item) => {\n const pair = item as unknown[];\n if (pair.length !== 2 || !Object.hasOwn(pair, 0) || !Object.hasOwn(pair, 1)) {\n throw new TypeError(\"server returned an invalid hash pair response\");\n }\n return [pair[0], pair[1]];\n });\n }\n if (items.length % 2 !== 0) {\n throw new TypeError(\"server returned an invalid hash pair response\");\n }\n const pairs: [unknown, unknown][] = [];\n for (let index = 0; index < items.length; index += 2) {\n if (!Object.hasOwn(items, index) || !Object.hasOwn(items, index + 1)) {\n throw new TypeError(\"server returned an invalid hash pair response\");\n }\n pairs.push([items[index], items[index + 1]]);\n }\n return pairs;\n}\n\nexport function decodeScanTuple<T>(value: unknown, decodeItems: (items: unknown) => T): [string, T] {\n const tuple = requiredPair(value, \"server returned an invalid scan response\");\n return [textToken(tuple[0]), decodeItems(tuple[1])];\n}\n\nexport function decodeBlockingListPop(codec: Codec, value: unknown): [string, unknown] | null {\n if (value == null) return null;\n const pair = requiredPair(value, \"server returned an invalid blocking list pop response\");\n return [textToken(pair[0]), decode(codec, pair[1])];\n}\n\nexport function decodeBlockingListMPop(codec: Codec, value: unknown): [string, unknown[]] | null {\n if (value == null) return null;\n const pair = requiredPair(value, \"server returned an invalid BLMPOP response\");\n return [textToken(pair[0]), mapArray(pair[1], \"BLMPOP\", (item) => decode(codec, item))];\n}\n\nexport function decodeSortedSetMembers<T = unknown>(\n codec: Codec,\n value: unknown,\n withScores: boolean\n): (T | null | string)[] {\n const items = array(value);\n if (!withScores) {\n const result = new Array<T | null>(items.length);\n for (let index = 0; index < items.length; index += 1) {\n if (!Object.hasOwn(items, index)) {\n throw new TypeError(\"server returned an invalid sorted-set member response\");\n }\n result[index] = decode<T>(codec, items[index]);\n }\n return result;\n }\n let nestedPairs: boolean | undefined;\n for (let index = 0; index < items.length; index += 1) {\n if (!Object.hasOwn(items, index)) {\n throw new TypeError(\"server returned an invalid sorted-set member/score response\");\n }\n const item = items[index];\n const nested = Array.isArray(item);\n if (nestedPairs != null && nestedPairs !== nested) {\n throw new TypeError(\"server returned an invalid sorted-set member/score response\");\n }\n nestedPairs = nested;\n if (nested && (\n item.length !== 2\n || !Object.hasOwn(item, 0)\n || !Object.hasOwn(item, 1)\n )) {\n throw new TypeError(\"server returned an invalid sorted-set member/score response\");\n }\n }\n if (nestedPairs === true) {\n const result: (T | null | string)[] = [];\n for (const item of items) {\n const pair = item as unknown[];\n result.push(decode<T>(codec, pair[0]), textToken(pair[1]));\n }\n return result;\n }\n if (items.length % 2 !== 0) {\n throw new TypeError(\"server returned an invalid sorted-set member/score response\");\n }\n return items.map((item, index) => index % 2 === 0 ? decode<T>(codec, item) : textToken(item));\n}\n\nexport function decodeStreamEntries(codec: Codec, value: unknown): unknown[] {\n const entries = value instanceof Map ? [...value.entries()] : array(value);\n return mapArray(entries, \"stream entry\", (entry) => {\n const pair = array(entry);\n if (pair.length < 2 || !Object.hasOwn(pair, 0)) {\n throw new TypeError(\"server returned an invalid stream entry\");\n }\n let fields: unknown;\n if (pair.length === 2) {\n if (!Object.hasOwn(pair, 1)) throw new TypeError(\"server returned an invalid stream entry\");\n fields = pair[1];\n } else {\n for (let index = 1; index < pair.length; index += 1) {\n if (!Object.hasOwn(pair, index)) throw new TypeError(\"server returned an invalid stream entry\");\n }\n fields = pair.slice(1);\n }\n return [textToken(pair[0]), decodeStreamFieldValues(codec, fields)];\n });\n}\n\nexport function decodeStreamReads(codec: Codec, value: unknown): unknown {\n if (value == null) return null;\n const streams = value instanceof Map ? [...value.entries()] : array(value);\n return mapArray(streams, \"stream read\", (stream) => {\n const pair = requiredPair(stream, \"server returned an invalid stream read response\");\n return [textToken(pair[0]), decodeStreamEntries(codec, pair[1])];\n });\n}\n\nfunction requiredPair(value: unknown, message: string): unknown[] {\n const pair = array(value);\n if (pair.length !== 2 || !Object.hasOwn(pair, 0) || !Object.hasOwn(pair, 1)) {\n throw new TypeError(message);\n }\n return pair;\n}\n\nfunction decodeStreamFieldValues(codec: Codec, value: unknown): unknown[] {\n const result: unknown[] = [];\n for (const [field, item] of hashPairs(value)) result.push(textToken(field), decode(codec, item));\n return result;\n}\n\nconst geoSearchMetadataTokens = new Set([\"WITHCOORD\", \"WITHDIST\", \"WITHHASH\"]);\n\nexport function geoSearchMetadataCount(args: readonly CommandArgument[]): number {\n let index = 0;\n let count = 0;\n while (index < args.length) {\n const token = commandToken(args[index]);\n if (geoSearchMetadataTokens.has(token)) {\n count += 1;\n index += 1;\n } else if (token === \"FROMMEMBER\" || token === \"COUNT\") index += 2;\n else if (token === \"FROMLONLAT\" || token === \"BYRADIUS\") index += 3;\n else if (token === \"BYBOX\") index += 4;\n else index += 1;\n }\n return count;\n}\n\nexport function encodeGeoSearchArgs(codec: Codec, args: readonly CommandArgument[]): CommandArgument[] {\n const encoded = new Array<CommandArgument>(args.length);\n for (let index = 0; index < args.length; index += 1) {\n if (!Object.hasOwn(args, index)) {\n throw new TypeError(\"GEOSEARCH arguments must be dense\");\n }\n encoded[index] = args[index];\n }\n for (let index = 0; index < encoded.length - 1; index += 1) {\n if (commandToken(encoded[index]) !== \"FROMMEMBER\") continue;\n const member = encoded[index + 1];\n if (!Buffer.isBuffer(member) && !(member instanceof Uint8Array)) encoded[index + 1] = codec.encode(member);\n index += 1;\n }\n return encoded;\n}\n\nexport function decodeGeoSearchMembers(codec: Codec, value: unknown, metadataCount: number): unknown[] {\n const items = array(value);\n if (metadataCount === 0) return mapArray(items, \"GEOSEARCH\", (item) => decode(codec, item));\n return mapArray(items, \"GEOSEARCH\", (item) => {\n const result = array(item);\n if (result.length !== metadataCount + 1) throw new TypeError(\"server returned an invalid GEOSEARCH result\");\n return mapArray(result, \"GEOSEARCH\", (part, index) =>\n index === 0 ? decode(codec, part) : normalizeGeoMetadata(part)\n );\n });\n}\n\nfunction normalizeGeoMetadata(value: unknown): unknown {\n if (Array.isArray(value)) return mapArray(value, \"GEOSEARCH\", normalizeGeoMetadata);\n if (typeof value === \"string\" || Buffer.isBuffer(value) || value instanceof Uint8Array) return textToken(value);\n return value;\n}\n\nfunction commandToken(value: CommandArgument | undefined): string {\n if (typeof value === \"string\") return value.toUpperCase();\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) {\n return Buffer.from(value).toString(\"utf8\").toUpperCase();\n }\n return \"\";\n}\n\nexport function textToken(value: unknown): string {\n if (typeof value === \"number\" || typeof value === \"bigint\") return String(value);\n return textResponse(value);\n}\n\nfunction plainResponseObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value != null && !Array.isArray(value) &&\n !Buffer.isBuffer(value) && !(value instanceof Uint8Array) && !(value instanceof Map);\n}\n","import { binaryBooleanResponse, integerReply, okResponse, textResponse } from \"./internal.js\";\nimport { decodeScanTuple } from \"./store-decoders.js\";\nimport {\n arrayOrRest,\n commandArgs,\n concatArgs,\n decode,\n denseArray,\n denseArrayResponse,\n encode,\n getexOptions,\n keyValueArgs,\n mapArray,\n mapArrayResponse,\n number,\n requireNonEmpty,\n scanOptions,\n setOptions,\n string\n} from \"./store-utilities.js\";\nimport type {\n ExpiryCondition,\n GetExOptions,\n IntegerReply,\n ScanOptions,\n SetOptions,\n StoreCommandClient\n} from \"./store.js\";\nimport { assertKeyValueCommandSharesSlot } from \"./key-slot-validation.js\";\n\nexport class KeyValueStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async get<T = unknown>(key: string): Promise<T | null> {\n return decode<T>(this.client.codec, await this.client.command(\"GET\", key));\n }\n\n async set(key: string, value: unknown, options: SetOptions = {}): Promise<unknown> {\n const serializedOptions = setOptions(options);\n const get = serializedOptions.includes(\"GET\");\n const response = await this.client.command(\"SET\", key, encode(this.client.codec, value), ...serializedOptions);\n return get ? decode(this.client.codec, response) : response;\n }\n\n del(keys: readonly string[]): Promise<number>;\n del(key: string, ...keys: string[]): Promise<number>;\n async del(...keysOrArray: (string | readonly string[])[]): Promise<number> {\n const keys = requireNonEmpty(arrayOrRest<string>(keysOrArray), \"DEL\", \"key\");\n return number(await commandArgs(this.client, concatArgs([\"DEL\"], keys)));\n }\n\n exists(keys: readonly string[]): Promise<number>;\n exists(key: string, ...keys: string[]): Promise<number>;\n async exists(...keysOrArray: (string | readonly string[])[]): Promise<number> {\n const keys = requireNonEmpty(arrayOrRest<string>(keysOrArray), \"EXISTS\", \"key\");\n return number(await commandArgs(this.client, concatArgs([\"EXISTS\"], keys)));\n }\n\n async mget<T = unknown>(keys: string[]): Promise<(T | null)[]> {\n requireNonEmpty(keys, \"MGET\", \"key\");\n const keyCount = keys.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs([\"MGET\"], keys)),\n keyCount,\n \"MGET\",\n (item) => decode<T>(this.client.codec, item)\n );\n }\n\n async mset(entries: Record<string, unknown> | [string, unknown][]): Promise<boolean> {\n const args = keyValueArgs([\"MSET\"], this.client.codec, entries);\n assertKeyValueCommandSharesSlot(args, \"MSET\");\n return okResponse(await commandArgs(this.client, args));\n }\n\n async msetnx(entries: Record<string, unknown> | [string, unknown][]): Promise<boolean> {\n const args = keyValueArgs([\"MSETNX\"], this.client.codec, entries);\n assertKeyValueCommandSharesSlot(args, \"MSETNX\");\n return binaryBooleanResponse(await commandArgs(this.client, args));\n }\n\n async incr(key: string): Promise<IntegerReply> {\n return integerReply(await this.client.command(\"INCR\", key));\n }\n\n async decr(key: string): Promise<IntegerReply> {\n return integerReply(await this.client.command(\"DECR\", key));\n }\n\n async incrby(key: string, increment: number | bigint): Promise<IntegerReply> {\n return integerReply(await this.client.command(\"INCRBY\", key, increment));\n }\n\n async decrby(key: string, decrement: number | bigint): Promise<IntegerReply> {\n return integerReply(await this.client.command(\"DECRBY\", key, decrement));\n }\n\n async incrbyfloat(key: string, increment: number): Promise<string> {\n return string(await this.client.command(\"INCRBYFLOAT\", key, increment));\n }\n\n async append(key: string, value: unknown): Promise<number> {\n return number(await this.client.command(\"APPEND\", key, encode(this.client.codec, value)));\n }\n\n async strlen(key: string): Promise<number> {\n return number(await this.client.command(\"STRLEN\", key));\n }\n\n async getset<T = unknown>(key: string, value: unknown): Promise<T | null> {\n return decode<T>(this.client.codec, await this.client.command(\"GETSET\", key, encode(this.client.codec, value)));\n }\n\n async getdel<T = unknown>(key: string): Promise<T | null> {\n return decode<T>(this.client.codec, await this.client.command(\"GETDEL\", key));\n }\n\n async getex<T = unknown>(key: string, options: GetExOptions = {}): Promise<T | null> {\n return decode<T>(this.client.codec, await this.client.command(\"GETEX\", key, ...getexOptions(options)));\n }\n\n async setnx(key: string, value: unknown): Promise<boolean> {\n return binaryBooleanResponse(await this.client.command(\"SETNX\", key, encode(this.client.codec, value)));\n }\n\n async setex(key: string, seconds: number, value: unknown): Promise<boolean> {\n return okResponse(await this.client.command(\"SETEX\", key, seconds, encode(this.client.codec, value)));\n }\n\n async psetex(key: string, milliseconds: number, value: unknown): Promise<boolean> {\n return okResponse(await this.client.command(\"PSETEX\", key, milliseconds, encode(this.client.codec, value)));\n }\n\n async getrange(key: string, start: number, end: number): Promise<Buffer | string | unknown> {\n return await this.client.command(\"GETRANGE\", key, start, end);\n }\n\n async setrange(key: string, offset: number, value: unknown): Promise<number> {\n return number(await this.client.command(\"SETRANGE\", key, offset, encode(this.client.codec, value)));\n }\n\n async expire(key: string, seconds: number, condition?: ExpiryCondition): Promise<boolean> {\n return binaryBooleanResponse(\n await this.client.command(\"EXPIRE\", key, seconds, ...(condition == null ? [] : [condition]))\n );\n }\n\n async pexpire(key: string, milliseconds: number, condition?: ExpiryCondition): Promise<boolean> {\n return binaryBooleanResponse(\n await this.client.command(\"PEXPIRE\", key, milliseconds, ...(condition == null ? [] : [condition]))\n );\n }\n\n async expireat(key: string, unixSeconds: number, condition?: ExpiryCondition): Promise<boolean> {\n return binaryBooleanResponse(\n await this.client.command(\"EXPIREAT\", key, unixSeconds, ...(condition == null ? [] : [condition]))\n );\n }\n\n async pexpireat(key: string, unixMilliseconds: number, condition?: ExpiryCondition): Promise<boolean> {\n return binaryBooleanResponse(\n await this.client.command(\"PEXPIREAT\", key, unixMilliseconds, ...(condition == null ? [] : [condition]))\n );\n }\n\n async ttl(key: string): Promise<IntegerReply> {\n return integerReply(await this.client.command(\"TTL\", key));\n }\n\n async pttl(key: string): Promise<IntegerReply> {\n return integerReply(await this.client.command(\"PTTL\", key));\n }\n\n async persist(key: string): Promise<boolean> {\n return binaryBooleanResponse(await this.client.command(\"PERSIST\", key));\n }\n\n async expiretime(key: string): Promise<IntegerReply> {\n return integerReply(await this.client.command(\"EXPIRETIME\", key));\n }\n\n async pexpiretime(key: string): Promise<IntegerReply> {\n return integerReply(await this.client.command(\"PEXPIRETIME\", key));\n }\n\n async type(key: string): Promise<string> {\n return string(await this.client.command(\"TYPE\", key));\n }\n\n unlink(keys: readonly string[]): Promise<number>;\n unlink(key: string, ...keys: string[]): Promise<number>;\n async unlink(...keysOrArray: (string | readonly string[])[]): Promise<number> {\n const keys = requireNonEmpty(arrayOrRest<string>(keysOrArray), \"UNLINK\", \"key\");\n return number(await commandArgs(this.client, concatArgs([\"UNLINK\"], keys)));\n }\n\n async rename(key: string, newKey: string): Promise<boolean> {\n return okResponse(await this.client.command(\"RENAME\", key, newKey));\n }\n\n async renamenx(key: string, newKey: string): Promise<boolean> {\n return binaryBooleanResponse(await this.client.command(\"RENAMENX\", key, newKey));\n }\n\n async copy(source: string, destination: string, options: { replace?: boolean } = {}): Promise<boolean> {\n const replace = Object.hasOwn(options, \"replace\") && options.replace === true;\n return binaryBooleanResponse(\n await this.client.command(\"COPY\", source, destination, ...(replace ? [\"REPLACE\"] : []))\n );\n }\n\n async randomkey(): Promise<string | null> {\n const response = await this.client.command(\"RANDOMKEY\");\n return response == null ? null : string(response);\n }\n\n async keys(pattern: string): Promise<string[]> {\n return mapArray(\n await this.client.command(\"KEYS\", pattern),\n \"KEYS\",\n (key) => textResponse(key, \"KEYS\")\n );\n }\n\n async scan(cursor: string | number, options: ScanOptions = {}): Promise<[string, string[]]> {\n return decodeScanTuple(\n await this.client.command(\"SCAN\", cursor, ...scanOptions(options)),\n (items) => mapArray(items, \"SCAN\", (key) => textResponse(key, \"SCAN\"))\n );\n }\n\n async dbsize(): Promise<number> {\n return number(await this.client.command(\"DBSIZE\"));\n }\n\n async flushdb(mode?: \"ASYNC\" | \"SYNC\"): Promise<boolean> {\n return okResponse(await this.client.command(\"FLUSHDB\", ...(mode == null ? [] : [mode])));\n }\n\n async flushall(mode?: \"ASYNC\" | \"SYNC\"): Promise<boolean> {\n return okResponse(await this.client.command(\"FLUSHALL\", ...(mode == null ? [] : [mode])));\n }\n\n async objectEncoding(key: string): Promise<string | null> {\n const response = await this.client.command(\"OBJECT\", \"ENCODING\", key);\n return response == null ? null : string(response);\n }\n\n async objectHelp(): Promise<unknown[]> {\n return denseArray(await this.client.command(\"OBJECT\", \"HELP\"), \"OBJECT HELP\");\n }\n\n async objectFreq(key: string): Promise<number> {\n return number(await this.client.command(\"OBJECT\", \"FREQ\", key));\n }\n\n async objectIdleTime(key: string): Promise<number> {\n return number(await this.client.command(\"OBJECT\", \"IDLETIME\", key));\n }\n\n async objectRefcount(key: string): Promise<number> {\n return number(await this.client.command(\"OBJECT\", \"REFCOUNT\", key));\n }\n\n async wait(numReplicas: number, timeoutMs: number): Promise<number> {\n return number(await this.client.command(\"WAIT\", numReplicas, timeoutMs));\n }\n\n async waitAof(\n numLocal: number,\n numReplicas: number,\n timeoutMs: number\n ): Promise<[IntegerReply, IntegerReply]> {\n const response = denseArrayResponse(\n await this.client.command(\"WAITAOF\", numLocal, numReplicas, timeoutMs),\n 2,\n \"WAITAOF\"\n );\n return [integerReply(response[0]), integerReply(response[1])];\n }\n\n async memoryUsage(key: string): Promise<number | null> {\n const response = await this.client.command(\"MEMORY\", \"USAGE\", key);\n return response == null ? null : number(response);\n }\n}\n","import type { CommandArgument } from \"./internal.js\";\nimport { decodeGeoSearchMembers, encodeGeoSearchArgs, geoSearchMetadataCount } from \"./store-decoders.js\";\nimport {\n commandArgs,\n concatArgs,\n denseArrayResponse,\n encode,\n encodedArgs,\n geoAddOptions,\n mapArrayResponse,\n number,\n requireNonEmpty,\n string\n} from \"./store-utilities.js\";\nimport type { GeoAddOptions, GeoMember, StoreCommandClient } from \"./store.js\";\n\nexport class GeoStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async geoadd(key: string, members: GeoMember[], options: GeoAddOptions = {}): Promise<number> {\n requireNonEmpty(members, \"GEOADD\", \"member\");\n const args: CommandArgument[] = [\"GEOADD\", key, ...geoAddOptions(options)];\n for (let index = 0; index < members.length; index += 1) {\n if (!Object.hasOwn(members, index)) throw new TypeError(\"GEOADD members must be dense\");\n const item = members[index];\n if (item == null) throw new TypeError(\"GEOADD members must contain member objects\");\n if (\n !Object.hasOwn(item, \"longitude\") ||\n !Object.hasOwn(item, \"latitude\") ||\n !Object.hasOwn(item, \"member\")\n ) throw new TypeError(\"GEOADD members require own longitude, latitude, and member fields\");\n args.push(item.longitude, item.latitude, encode(this.client.codec, item.member));\n }\n return number(await commandArgs(this.client, args));\n }\n\n geopos(key: string, member: unknown, ...members: unknown[]): Promise<([string, string] | null)[]>;\n geopos(key: string, ...members: unknown[]): Promise<([string, string] | null)[]> {\n return this.geoposMany(key, members);\n }\n\n async geoposMany(key: string, members: readonly unknown[]): Promise<([string, string] | null)[]> {\n const memberCount = members.length;\n return mapArrayResponse(\n await commandArgs(this.client, encodedArgs([\"GEOPOS\", key], this.client.codec, members)),\n memberCount,\n \"GEOPOS\",\n (position) => {\n if (position == null) return null;\n const coordinates = denseArrayResponse(position, 2, \"GEOPOS\");\n return [string(coordinates[0]), string(coordinates[1])];\n }\n );\n }\n\n async geodist(key: string, member1: unknown, member2: unknown, unit?: \"m\" | \"km\" | \"mi\" | \"ft\"): Promise<string | null> {\n const response = await this.client.command(\"GEODIST\", key, encode(this.client.codec, member1), encode(this.client.codec, member2), ...(unit == null ? [] : [unit]));\n return response == null ? null : string(response);\n }\n\n geohash(key: string, member: unknown, ...members: unknown[]): Promise<(string | null)[]>;\n geohash(key: string, ...members: unknown[]): Promise<(string | null)[]> {\n return this.geohashMany(key, members);\n }\n\n async geohashMany(key: string, members: readonly unknown[]): Promise<(string | null)[]> {\n const memberCount = members.length;\n return mapArrayResponse(\n await commandArgs(this.client, encodedArgs([\"GEOHASH\", key], this.client.codec, members)),\n memberCount,\n \"GEOHASH\",\n (hash) => hash == null ? null : string(hash)\n );\n }\n\n async geosearch(key: string, args: CommandArgument[]): Promise<unknown[]> {\n requireNonEmpty(args, \"GEOSEARCH\");\n const metadataCount = geoSearchMetadataCount(args);\n const encodedSearchArgs = encodeGeoSearchArgs(this.client.codec, args);\n return decodeGeoSearchMembers(\n this.client.codec,\n await commandArgs(this.client, concatArgs([\"GEOSEARCH\", key], encodedSearchArgs)),\n metadataCount\n );\n }\n\n async geosearchstore(destination: string, source: string, args: CommandArgument[]): Promise<number> {\n requireNonEmpty(args, \"GEOSEARCHSTORE\");\n return number(\n await commandArgs(\n this.client,\n concatArgs([\"GEOSEARCHSTORE\", destination, source], encodeGeoSearchArgs(this.client.codec, args))\n )\n );\n }\n}\n","import { okResponse, type CommandArgument } from \"./internal.js\";\nimport { decodeBlockingListMPop, decodeBlockingListPop } from \"./store-decoders.js\";\nimport type { StoreCommandClient } from \"./store.js\";\nimport {\n commandArgs,\n concatArgs,\n decode,\n encode,\n encodedArgs,\n mapArray,\n number,\n ownOption,\n requireNonEmpty\n} from \"./store-utilities.js\";\n\nexport class ListStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n lpush(key: string, element: unknown, ...elements: unknown[]): Promise<number>;\n lpush(key: string, ...elements: unknown[]): Promise<number> {\n return this.lpushMany(key, elements);\n }\n\n async lpushMany(key: string, elements: readonly unknown[]): Promise<number> {\n return number(await commandArgs(this.client, encodedArgs([\"LPUSH\", key], this.client.codec, elements)));\n }\n\n rpush(key: string, element: unknown, ...elements: unknown[]): Promise<number>;\n rpush(key: string, ...elements: unknown[]): Promise<number> {\n return this.rpushMany(key, elements);\n }\n\n async rpushMany(key: string, elements: readonly unknown[]): Promise<number> {\n return number(await commandArgs(this.client, encodedArgs([\"RPUSH\", key], this.client.codec, elements)));\n }\n\n async lpop<T = unknown>(key: string, count?: number): Promise<T | (T | null)[] | null> {\n const response = await this.client.command(\"LPOP\", key, ...(count == null ? [] : [count]));\n return Array.isArray(response)\n ? mapArray(response, \"LPOP\", (item) => decode<T>(this.client.codec, item))\n : decode<T>(this.client.codec, response);\n }\n\n async rpop<T = unknown>(key: string, count?: number): Promise<T | (T | null)[] | null> {\n const response = await this.client.command(\"RPOP\", key, ...(count == null ? [] : [count]));\n return Array.isArray(response)\n ? mapArray(response, \"RPOP\", (item) => decode<T>(this.client.codec, item))\n : decode<T>(this.client.codec, response);\n }\n\n async lrange<T = unknown>(key: string, start: number, stop: number): Promise<(T | null)[]> {\n return mapArray(\n await this.client.command(\"LRANGE\", key, start, stop),\n \"LRANGE\",\n (item) => decode<T>(this.client.codec, item)\n );\n }\n\n async llen(key: string): Promise<number> {\n return number(await this.client.command(\"LLEN\", key));\n }\n\n async lindex<T = unknown>(key: string, index: number): Promise<T | null> {\n return decode<T>(this.client.codec, await this.client.command(\"LINDEX\", key, index));\n }\n\n async lset(key: string, index: number, element: unknown): Promise<boolean> {\n return okResponse(await this.client.command(\"LSET\", key, index, encode(this.client.codec, element)));\n }\n\n async lrem(key: string, count: number, element: unknown): Promise<number> {\n return number(await this.client.command(\"LREM\", key, count, encode(this.client.codec, element)));\n }\n\n async ltrim(key: string, start: number, stop: number): Promise<boolean> {\n return okResponse(await this.client.command(\"LTRIM\", key, start, stop));\n }\n\n async lpos(\n key: string,\n element: unknown,\n options: { rank?: number; count?: number; maxlen?: number } = {}\n ): Promise<number | number[] | null> {\n const args: CommandArgument[] = [\"LPOS\", key, encode(this.client.codec, element)];\n const rank = ownOption(options, \"rank\");\n const count = ownOption(options, \"count\");\n const maxlen = ownOption(options, \"maxlen\");\n if (rank != null) args.push(\"RANK\", rank);\n if (count != null) args.push(\"COUNT\", count);\n if (maxlen != null) args.push(\"MAXLEN\", maxlen);\n const response = await commandArgs(this.client, args);\n return count == null\n ? response == null ? null : number(response)\n : mapArray(response, \"LPOS\", number);\n }\n\n async linsert(\n key: string,\n where: \"BEFORE\" | \"AFTER\",\n pivot: unknown,\n element: unknown\n ): Promise<number> {\n return number(await this.client.command(\n \"LINSERT\",\n key,\n where,\n encode(this.client.codec, pivot),\n encode(this.client.codec, element)\n ));\n }\n\n async lmove<T = unknown>(\n source: string,\n destination: string,\n from: \"LEFT\" | \"RIGHT\",\n to: \"LEFT\" | \"RIGHT\"\n ): Promise<T | null> {\n return decode<T>(this.client.codec, await this.client.command(\"LMOVE\", source, destination, from, to));\n }\n\n async rpoplpush<T = unknown>(source: string, destination: string): Promise<T | null> {\n return decode<T>(this.client.codec, await this.client.command(\"RPOPLPUSH\", source, destination));\n }\n\n lpushx(key: string, element: unknown, ...elements: unknown[]): Promise<number>;\n lpushx(key: string, ...elements: unknown[]): Promise<number> {\n return this.lpushxMany(key, elements);\n }\n\n async lpushxMany(key: string, elements: readonly unknown[]): Promise<number> {\n return number(await commandArgs(this.client, encodedArgs([\"LPUSHX\", key], this.client.codec, elements)));\n }\n\n rpushx(key: string, element: unknown, ...elements: unknown[]): Promise<number>;\n rpushx(key: string, ...elements: unknown[]): Promise<number> {\n return this.rpushxMany(key, elements);\n }\n\n async rpushxMany(key: string, elements: readonly unknown[]): Promise<number> {\n return number(await commandArgs(this.client, encodedArgs([\"RPUSHX\", key], this.client.codec, elements)));\n }\n\n async blpop(keys: string[], timeoutSeconds: number): Promise<unknown> {\n requireNonEmpty(keys, \"BLPOP\", \"key\");\n return decodeBlockingListPop(\n this.client.codec,\n await commandArgs(this.client, concatArgs([\"BLPOP\"], keys, [timeoutSeconds]))\n );\n }\n\n async brpop(keys: string[], timeoutSeconds: number): Promise<unknown> {\n requireNonEmpty(keys, \"BRPOP\", \"key\");\n return decodeBlockingListPop(\n this.client.codec,\n await commandArgs(this.client, concatArgs([\"BRPOP\"], keys, [timeoutSeconds]))\n );\n }\n\n async blmove<T = unknown>(\n source: string,\n destination: string,\n from: \"LEFT\" | \"RIGHT\",\n to: \"LEFT\" | \"RIGHT\",\n timeoutSeconds: number\n ): Promise<T | null> {\n return decode<T>(\n this.client.codec,\n await this.client.command(\"BLMOVE\", source, destination, from, to, timeoutSeconds)\n );\n }\n\n async blmpop(\n timeoutSeconds: number,\n keys: string[],\n from: \"LEFT\" | \"RIGHT\",\n options: { count?: number } = {}\n ): Promise<unknown> {\n requireNonEmpty(keys, \"BLMPOP\", \"key\");\n const count = ownOption(options, \"count\");\n return decodeBlockingListMPop(\n this.client.codec,\n await commandArgs(this.client, concatArgs(\n [\"BLMPOP\", timeoutSeconds, keys.length],\n keys,\n [from],\n count == null ? [] : [\"COUNT\", count]\n ))\n );\n }\n}\n","import { integerReply, okResponse, type CommandArgument } from \"./internal.js\";\nimport {\n decodeScanTuple,\n decodeSortedSetMembers,\n decodeStreamEntries,\n decodeStreamReads\n} from \"./store-decoders.js\";\nimport {\n appendXReadStreams,\n arrayOrRest,\n commandArgs,\n concatArgs,\n decode,\n encode,\n encodedArgs,\n keyValueArgs,\n mapArray,\n mapArrayResponse,\n number,\n ownOption,\n rangeScoreOptions,\n requireNonEmpty,\n scanOptions,\n string,\n zaddOptions\n} from \"./store-utilities.js\";\nimport type {\n IntegerReply,\n RangeLimit,\n CollectionScanOptions,\n SortedSetScanResult,\n StoreCommandClient,\n XReadStream,\n ZAddMember,\n ZAddOptions\n} from \"./store.js\";\n\nexport class SortedSetStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async zadd(key: string, members: ZAddMember[], options: ZAddOptions = {}): Promise<number> {\n requireNonEmpty(members, \"ZADD\", \"member\");\n const args: CommandArgument[] = [\"ZADD\", key, ...zaddOptions(options)];\n for (let index = 0; index < members.length; index += 1) {\n if (!Object.hasOwn(members, index)) throw new TypeError(\"ZADD members must be dense\");\n const member = members[index];\n if (member == null) throw new TypeError(\"ZADD members must contain member objects\");\n if (!Object.hasOwn(member, \"score\") || !Object.hasOwn(member, \"member\")) {\n throw new TypeError(\"ZADD members require own score and member fields\");\n }\n args.push(member.score, encode(this.client.codec, member.member));\n }\n return number(await commandArgs(this.client, args));\n }\n\n async zscore(key: string, member: unknown): Promise<string | null> {\n const response = await this.client.command(\"ZSCORE\", key, encode(this.client.codec, member));\n return response == null ? null : string(response);\n }\n\n async zrank(key: string, member: unknown): Promise<number | null> {\n const response = await this.client.command(\"ZRANK\", key, encode(this.client.codec, member));\n return response == null ? null : number(response);\n }\n\n async zrevrank(key: string, member: unknown): Promise<number | null> {\n const response = await this.client.command(\"ZREVRANK\", key, encode(this.client.codec, member));\n return response == null ? null : number(response);\n }\n\n async zrange(key: string, start: number, stop: number, options: { withScores?: boolean } = {}): Promise<unknown[]> {\n const withScores = ownOption(options, \"withScores\") === true;\n return decodeSortedSetMembers(\n this.client.codec,\n await this.client.command(\"ZRANGE\", key, start, stop, ...(withScores ? [\"WITHSCORES\"] : [])),\n withScores\n );\n }\n\n async zrevrange(key: string, start: number, stop: number, options: { withScores?: boolean } = {}): Promise<unknown[]> {\n const withScores = ownOption(options, \"withScores\") === true;\n return decodeSortedSetMembers(\n this.client.codec,\n await this.client.command(\"ZREVRANGE\", key, start, stop, ...(withScores ? [\"WITHSCORES\"] : [])),\n withScores\n );\n }\n\n async zcard(key: string): Promise<number> {\n return number(await this.client.command(\"ZCARD\", key));\n }\n\n zrem(key: string, member: unknown, ...members: unknown[]): Promise<number>;\n zrem(key: string, ...members: unknown[]): Promise<number> {\n return this.zremMany(key, members);\n }\n\n async zremMany(key: string, members: readonly unknown[]): Promise<number> {\n return number(await commandArgs(this.client, encodedArgs([\"ZREM\", key], this.client.codec, members)));\n }\n\n async zincrby(key: string, increment: number, member: unknown): Promise<string> {\n return string(await this.client.command(\"ZINCRBY\", key, increment, encode(this.client.codec, member)));\n }\n\n async zcount(key: string, min: string | number, max: string | number): Promise<number> {\n return number(await this.client.command(\"ZCOUNT\", key, min, max));\n }\n\n async zpopmin(key: string, count?: number): Promise<unknown[]> {\n return decodeSortedSetMembers(this.client.codec, await this.client.command(\"ZPOPMIN\", key, ...(count == null ? [] : [count])), true);\n }\n\n async zpopmax(key: string, count?: number): Promise<unknown[]> {\n return decodeSortedSetMembers(this.client.codec, await this.client.command(\"ZPOPMAX\", key, ...(count == null ? [] : [count])), true);\n }\n\n zrandmember<T = unknown>(key: string): Promise<T | null>;\n zrandmember<T = unknown>(key: string, count: number, withScores?: false): Promise<(T | null)[]>;\n zrandmember(key: string, count: number, withScores: boolean): Promise<unknown[]>;\n async zrandmember(key: string, count?: number, withScores = false): Promise<unknown> {\n if (withScores && count == null) throw new TypeError(\"ZRANDMEMBER WITHSCORES requires a count\");\n const args: CommandArgument[] = [\"ZRANDMEMBER\", key];\n if (count != null) args.push(count);\n if (withScores) args.push(\"WITHSCORES\");\n const response = await commandArgs(this.client, args);\n if (count == null) return decode(this.client.codec, response);\n if (withScores) return decodeSortedSetMembers(this.client.codec, response, true);\n return mapArray(response, \"ZRANDMEMBER\", (item) => decode(this.client.codec, item));\n }\n\n async zmscore(key: string, members: unknown[]): Promise<(string | null)[]> {\n const memberCount = members.length;\n return mapArrayResponse(\n await commandArgs(this.client, encodedArgs([\"ZMSCORE\", key], this.client.codec, members)),\n memberCount,\n \"ZMSCORE\",\n (score) => score == null ? null : string(score)\n );\n }\n\n async zrangebyscore(\n key: string,\n min: string | number,\n max: string | number,\n options: { withScores?: boolean; limit?: RangeLimit } = {}\n ): Promise<unknown[]> {\n const withScores = ownOption(options, \"withScores\") === true;\n return decodeSortedSetMembers(\n this.client.codec,\n await this.client.command(\"ZRANGEBYSCORE\", key, min, max, ...rangeScoreOptions(options, withScores)),\n withScores\n );\n }\n\n async zrevrangebyscore(\n key: string,\n max: string | number,\n min: string | number,\n options: { withScores?: boolean; limit?: RangeLimit } = {}\n ): Promise<unknown[]> {\n const withScores = ownOption(options, \"withScores\") === true;\n return decodeSortedSetMembers(\n this.client.codec,\n await this.client.command(\"ZREVRANGEBYSCORE\", key, max, min, ...rangeScoreOptions(options, withScores)),\n withScores\n );\n }\n\n async zscan<T = unknown>(\n key: string,\n cursor: string | number,\n options: CollectionScanOptions = {}\n ): Promise<SortedSetScanResult<T>> {\n return decodeScanTuple(\n await this.client.command(\"ZSCAN\", key, cursor, ...scanOptions(options, \"ZSCAN\")),\n (items) => decodeSortedSetMembers<T>(this.client.codec, items, true)\n );\n }\n}\n\nexport class StreamStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async xadd(key: string, id: string, fields: Record<string, unknown> | [string, unknown][]): Promise<unknown> {\n return await commandArgs(this.client, keyValueArgs([\"XADD\", key, id], this.client.codec, fields));\n }\n\n async xlen(key: string): Promise<number> {\n return number(await this.client.command(\"XLEN\", key));\n }\n\n async xrange(key: string, start = \"-\", end = \"+\", count?: number): Promise<unknown[]> {\n return decodeStreamEntries(this.client.codec, await this.client.command(\"XRANGE\", key, start, end, ...(count == null ? [] : [\"COUNT\", count])));\n }\n\n async xrevrange(key: string, end = \"+\", start = \"-\", count?: number): Promise<unknown[]> {\n return decodeStreamEntries(this.client.codec, await this.client.command(\"XREVRANGE\", key, end, start, ...(count == null ? [] : [\"COUNT\", count])));\n }\n\n async xread(streams: XReadStream[], options: { count?: number; blockMs?: number } = {}): Promise<unknown> {\n const args: CommandArgument[] = [\"XREAD\"];\n const count = ownOption(options, \"count\");\n const blockMs = ownOption(options, \"blockMs\");\n if (count != null) args.push(\"COUNT\", count);\n if (blockMs != null) args.push(\"BLOCK\", blockMs);\n appendXReadStreams(args, streams);\n return decodeStreamReads(this.client.codec, await commandArgs(this.client, args));\n }\n\n async xtrim(key: string, strategy: \"MAXLEN\" | \"MINID\", threshold: string | number, approximate = false): Promise<number> {\n return number(await this.client.command(\"XTRIM\", key, strategy, ...(approximate ? [\"~\"] : []), threshold));\n }\n\n xdel(key: string, ids: readonly string[]): Promise<number>;\n xdel(key: string, id: string, ...ids: string[]): Promise<number>;\n async xdel(key: string, ...idsOrArray: (string | readonly string[])[]): Promise<number> {\n const ids = requireNonEmpty(arrayOrRest<string>(idsOrArray), \"XDEL\", \"id\");\n return number(await commandArgs(this.client, concatArgs([\"XDEL\", key], ids)));\n }\n\n async xinfoStream(key: string): Promise<unknown> {\n return await this.client.command(\"XINFO\", \"STREAM\", key);\n }\n\n async xgroupCreate(key: string, group: string, id: string, mkstream = false): Promise<boolean> {\n return okResponse(await this.client.command(\"XGROUP\", \"CREATE\", key, group, id, ...(mkstream ? [\"MKSTREAM\"] : [])));\n }\n\n async xreadgroup(group: string, consumer: string, streams: XReadStream[], options: { count?: number; blockMs?: number; noack?: boolean } = {}): Promise<unknown> {\n const args: CommandArgument[] = [\"XREADGROUP\", \"GROUP\", group, consumer];\n const count = ownOption(options, \"count\");\n const blockMs = ownOption(options, \"blockMs\");\n const noack = ownOption(options, \"noack\");\n if (count != null) args.push(\"COUNT\", count);\n if (blockMs != null) args.push(\"BLOCK\", blockMs);\n if (noack === true) args.push(\"NOACK\");\n appendXReadStreams(args, streams);\n return decodeStreamReads(this.client.codec, await commandArgs(this.client, args));\n }\n\n xack(key: string, group: string, ids: readonly string[]): Promise<number>;\n xack(key: string, group: string, id: string, ...ids: string[]): Promise<number>;\n async xack(key: string, group: string, ...idsOrArray: (string | readonly string[])[]): Promise<number> {\n const ids = requireNonEmpty(arrayOrRest<string>(idsOrArray), \"XACK\", \"id\");\n return number(await commandArgs(this.client, concatArgs([\"XACK\", key, group], ids)));\n }\n}\n\nexport class BitmapStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async setbit(key: string, offset: number, value: 0 | 1): Promise<number> {\n return number(await this.client.command(\"SETBIT\", key, offset, value));\n }\n\n async getbit(key: string, offset: number): Promise<number> {\n return number(await this.client.command(\"GETBIT\", key, offset));\n }\n\n bitcount(key: string): Promise<number>;\n bitcount(key: string, start: number, end: number, unit?: \"BYTE\" | \"BIT\"): Promise<number>;\n async bitcount(key: string, start?: number, end?: number, unit?: \"BYTE\" | \"BIT\"): Promise<number> {\n if (start == null) {\n if (unit != null) throw new TypeError(\"BITCOUNT unit requires start and end\");\n if (end != null) throw new TypeError(\"BITCOUNT end requires start\");\n return number(await this.client.command(\"BITCOUNT\", key));\n }\n if (end == null) {\n if (unit != null) throw new TypeError(\"BITCOUNT unit requires start and end\");\n throw new TypeError(\"BITCOUNT start requires end\");\n }\n return number(await this.client.command(\"BITCOUNT\", key, start, end, ...(unit == null ? [] : [unit])));\n }\n\n bitpos(key: string, bit: 0 | 1): Promise<number>;\n // Kept separate so callers cannot supply positional holes through optional parameters.\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n bitpos(key: string, bit: 0 | 1, start: number): Promise<number>;\n // eslint-disable-next-line @typescript-eslint/unified-signatures\n bitpos(key: string, bit: 0 | 1, start: number, end: number, unit?: \"BYTE\" | \"BIT\"): Promise<number>;\n async bitpos(key: string, bit: 0 | 1, start?: number, end?: number, unit?: \"BYTE\" | \"BIT\"): Promise<number> {\n if (start == null) {\n if (unit != null) throw new TypeError(\"BITPOS unit requires start and end\");\n if (end != null) throw new TypeError(\"BITPOS end requires start\");\n return number(await this.client.command(\"BITPOS\", key, bit));\n }\n if (end == null) {\n if (unit != null) throw new TypeError(\"BITPOS unit requires start and end\");\n return number(await this.client.command(\"BITPOS\", key, bit, start));\n }\n return number(await this.client.command(\"BITPOS\", key, bit, start, end, ...(unit == null ? [] : [unit])));\n }\n\n bitop(operation: \"AND\" | \"OR\" | \"XOR\" | \"NOT\", destination: string, keys: readonly string[]): Promise<number>;\n bitop(operation: \"AND\" | \"OR\" | \"XOR\" | \"NOT\", destination: string, ...keys: string[]): Promise<number>;\n async bitop(operation: \"AND\" | \"OR\" | \"XOR\" | \"NOT\", destination: string, ...keysOrArray: (string | readonly string[])[]): Promise<number> {\n const keys = arrayOrRest<string>(keysOrArray);\n if (keys.length === 0) throw new TypeError(\"BITOP requires at least one source key\");\n if (operation === \"NOT\" && keys.length !== 1) {\n throw new TypeError(\"BITOP NOT requires exactly one source key\");\n }\n return number(await commandArgs(this.client, concatArgs(\n [\"BITOP\", operation, destination],\n keys\n )));\n }\n}\n\nexport class HyperLogLogStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n pfadd(key: string, ...elements: unknown[]): Promise<number> {\n return this.pfaddMany(key, elements);\n }\n\n async pfaddMany(key: string, elements: readonly unknown[]): Promise<number> {\n return number(await commandArgs(this.client, encodedArgs([\"PFADD\", key], this.client.codec, elements, true)));\n }\n\n pfcount(keys: readonly string[]): Promise<IntegerReply>;\n pfcount(key: string, ...keys: string[]): Promise<IntegerReply>;\n async pfcount(...keysOrArray: (string | readonly string[])[]): Promise<IntegerReply> {\n const keys = requireNonEmpty(arrayOrRest<string>(keysOrArray), \"PFCOUNT\", \"key\");\n return integerReply(await commandArgs(this.client, concatArgs([\"PFCOUNT\"], keys)));\n }\n\n pfmerge(destination: string, sources: readonly string[]): Promise<boolean>;\n pfmerge(destination: string, source: string, ...sources: string[]): Promise<boolean>;\n async pfmerge(destination: string, ...sourcesOrArray: (string | readonly string[])[]): Promise<boolean> {\n const sources = requireNonEmpty(arrayOrRest<string>(sourcesOrArray), \"PFMERGE\", \"source\");\n return okResponse(await commandArgs(this.client, concatArgs(\n [\"PFMERGE\", destination],\n sources\n )));\n }\n}\n","import { binaryBooleanResponse, booleanResponse } from \"./internal.js\";\nimport { decodeScanTuple } from \"./store-decoders.js\";\nimport type { CollectionScanOptions, SetScanResult, StoreCommandClient } from \"./store.js\";\nimport {\n binaryInteger,\n commandArgs,\n concatArgs,\n decode,\n encode,\n encodedArgs,\n mapArray,\n mapArrayResponse,\n number,\n requireNonEmpty,\n scanOptions\n} from \"./store-utilities.js\";\n\nexport class SetStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n sadd(key: string, member: unknown, ...members: unknown[]): Promise<number>;\n sadd(key: string, ...members: unknown[]): Promise<number> {\n return this.saddMany(key, members);\n }\n\n async saddMany(key: string, members: readonly unknown[]): Promise<number> {\n return number(await commandArgs(this.client, encodedArgs([\"SADD\", key], this.client.codec, members)));\n }\n\n srem(key: string, member: unknown, ...members: unknown[]): Promise<number>;\n srem(key: string, ...members: unknown[]): Promise<number> {\n return this.sremMany(key, members);\n }\n\n async sremMany(key: string, members: readonly unknown[]): Promise<number> {\n return number(await commandArgs(this.client, encodedArgs([\"SREM\", key], this.client.codec, members)));\n }\n\n async smembers<T = unknown>(key: string): Promise<(T | null)[]> {\n return mapArray(\n await this.client.command(\"SMEMBERS\", key),\n \"SMEMBERS\",\n (item) => decode<T>(this.client.codec, item)\n );\n }\n\n async sismember(key: string, member: unknown): Promise<boolean> {\n const response = await this.client.command(\"SISMEMBER\", key, encode(this.client.codec, member));\n if (response == null) throw new TypeError(\"SISMEMBER returned an invalid boolean response\");\n return booleanResponse(response);\n }\n\n async smismember(key: string, members: unknown[]): Promise<number[]> {\n const memberCount = members.length;\n return mapArrayResponse(\n await commandArgs(this.client, encodedArgs([\"SMISMEMBER\", key], this.client.codec, members)),\n memberCount,\n \"SMISMEMBER\",\n binaryInteger\n );\n }\n\n async scard(key: string): Promise<number> {\n return number(await this.client.command(\"SCARD\", key));\n }\n\n async srandmember<T = unknown>(key: string, count?: number): Promise<T | (T | null)[] | null> {\n const response = await this.client.command(\"SRANDMEMBER\", key, ...(count == null ? [] : [count]));\n return Array.isArray(response)\n ? mapArray(response, \"SRANDMEMBER\", (item) => decode<T>(this.client.codec, item))\n : decode<T>(this.client.codec, response);\n }\n\n async spop<T = unknown>(key: string, count?: number): Promise<T | (T | null)[] | null> {\n const response = await this.client.command(\"SPOP\", key, ...(count == null ? [] : [count]));\n return Array.isArray(response)\n ? mapArray(response, \"SPOP\", (item) => decode<T>(this.client.codec, item))\n : decode<T>(this.client.codec, response);\n }\n\n async sdiff<T = unknown>(keys: string[]): Promise<(T | null)[]> {\n requireNonEmpty(keys, \"SDIFF\", \"key\");\n return mapArray(\n await commandArgs(this.client, concatArgs([\"SDIFF\"], keys)),\n \"SDIFF\",\n (item) => decode<T>(this.client.codec, item)\n );\n }\n\n async sinter<T = unknown>(keys: string[]): Promise<(T | null)[]> {\n requireNonEmpty(keys, \"SINTER\", \"key\");\n return mapArray(\n await commandArgs(this.client, concatArgs([\"SINTER\"], keys)),\n \"SINTER\",\n (item) => decode<T>(this.client.codec, item)\n );\n }\n\n async sunion<T = unknown>(keys: string[]): Promise<(T | null)[]> {\n requireNonEmpty(keys, \"SUNION\", \"key\");\n return mapArray(\n await commandArgs(this.client, concatArgs([\"SUNION\"], keys)),\n \"SUNION\",\n (item) => decode<T>(this.client.codec, item)\n );\n }\n\n async sdiffstore(destination: string, keys: string[]): Promise<number> {\n requireNonEmpty(keys, \"SDIFFSTORE\", \"key\");\n return number(await commandArgs(this.client, concatArgs([\"SDIFFSTORE\", destination], keys)));\n }\n\n async sinterstore(destination: string, keys: string[]): Promise<number> {\n requireNonEmpty(keys, \"SINTERSTORE\", \"key\");\n return number(await commandArgs(this.client, concatArgs([\"SINTERSTORE\", destination], keys)));\n }\n\n async sunionstore(destination: string, keys: string[]): Promise<number> {\n requireNonEmpty(keys, \"SUNIONSTORE\", \"key\");\n return number(await commandArgs(this.client, concatArgs([\"SUNIONSTORE\", destination], keys)));\n }\n\n async sintercard(keys: string[], limit?: number): Promise<number> {\n requireNonEmpty(keys, \"SINTERCARD\", \"key\");\n return number(await commandArgs(this.client, concatArgs(\n [\"SINTERCARD\", keys.length],\n keys,\n limit == null ? [] : [\"LIMIT\", limit]\n )));\n }\n\n async smove(source: string, destination: string, member: unknown): Promise<boolean> {\n return binaryBooleanResponse(\n await this.client.command(\"SMOVE\", source, destination, encode(this.client.codec, member))\n );\n }\n\n async sscan<T = unknown>(\n key: string,\n cursor: string | number,\n options: CollectionScanOptions = {}\n ): Promise<SetScanResult<T>> {\n return decodeScanTuple(\n await this.client.command(\"SSCAN\", key, cursor, ...scanOptions(options, \"SSCAN\")),\n (items) => mapArray(items, \"SSCAN\", (item) => decode<T>(this.client.codec, item))\n );\n }\n}\n","import type { Codec } from \"./codecs.js\";\nimport { binaryBooleanResponse, integerReply, type CommandArgument } from \"./internal.js\";\nimport {\n decodeHashFlatPairs,\n decodeHashRecord,\n decodeScanTuple,\n textToken\n} from \"./store-decoders.js\";\nimport {\n arrayOrRest,\n commandArgs,\n concatArgs,\n decode,\n encode,\n getexOptions,\n keyValueArgs,\n mapArray,\n mapArrayResponse,\n number,\n requireNonEmpty,\n scanOptions,\n string\n} from \"./store-utilities.js\";\n\nexport { KeyValueStore } from \"./store-key-value.js\";\nexport { GeoStore } from \"./store-geo.js\";\nexport { ListStore } from \"./store-list.js\";\nexport { BitmapStore, HyperLogLogStore, SortedSetStore, StreamStore } from \"./store-extra-collections.js\";\nexport { SetStore } from \"./store-set.js\";\n\nexport interface StoreCommandClient {\n readonly codec: Codec;\n command(...args: CommandArgument[]): Promise<unknown>;\n commandArgs?(args: readonly CommandArgument[]): Promise<unknown>;\n}\n\n/** An exact integer reply: safe values are numbers and larger int64 values are bigints. */\nexport type IntegerReply = number | bigint;\n\n/** Flat field/value pairs returned with a scan cursor. */\nexport type HashScanResult<T = unknown> = [cursor: string, entries: (string | T | null)[]];\n\n/** Decoded set members returned with a scan cursor. */\nexport type SetScanResult<T = unknown> = [cursor: string, members: (T | null)[]];\n\n/** Flat member/score pairs returned with a scan cursor. */\nexport type SortedSetScanResult<T = unknown> = [cursor: string, entries: (T | null | string)[]];\n\n/** SET accepts one condition and at most one expiry mode. */\nexport type SetOptions = {\n get?: boolean;\n} & (\n | { nx?: boolean; xx?: false }\n | { nx?: false; xx?: boolean }\n) & (\n | { ex?: never; px?: never; exat?: never; pxat?: never; keepTtl?: boolean }\n | { ex?: number; px?: never; exat?: never; pxat?: never; keepTtl?: false }\n | { ex?: never; px?: number; exat?: never; pxat?: never; keepTtl?: false }\n | { ex?: never; px?: never; exat?: number; pxat?: never; keepTtl?: false }\n | { ex?: never; px?: never; exat?: never; pxat?: number; keepTtl?: false }\n);\n\n/** GETEX/HGETEX accept at most one expiry mutation. */\nexport type GetExOptions =\n | { ex?: never; px?: never; exat?: never; pxat?: never; persist?: false }\n | { ex: number; px?: never; exat?: never; pxat?: never; persist?: false }\n | { ex?: never; px: number; exat?: never; pxat?: never; persist?: false }\n | { ex?: never; px?: never; exat: number; pxat?: never; persist?: false }\n | { ex?: never; px?: never; exat?: never; pxat: number; persist?: false }\n | { ex?: never; px?: never; exat?: never; pxat?: never; persist: true };\n\nexport interface ScanOptions {\n match?: string;\n count?: number;\n /** Filter keys by the server-reported data type. */\n type?: string;\n}\n\n/** MATCH/COUNT options supported by collection-specific scan commands. */\nexport type CollectionScanOptions = Omit<ScanOptions, \"type\">;\n\nexport type ExpiryCondition = \"NX\" | \"XX\" | \"GT\" | \"LT\";\n\nexport interface ZAddMember {\n score: number;\n member: unknown;\n}\n\n/** ZADD condition and comparison flags must form a valid server grammar. */\nexport type ZAddOptions = {\n ch?: boolean;\n} & (\n | { nx?: boolean; xx?: false; gt?: false; lt?: false }\n | ({ nx?: false; xx?: boolean } & (\n | { gt?: boolean; lt?: false }\n | { gt?: false; lt?: boolean }\n ))\n);\n\nexport interface RangeLimit {\n offset: number;\n count: number;\n}\n\nexport interface XReadStream {\n key: string;\n id: string;\n}\n\nexport interface GeoMember {\n longitude: number;\n latitude: number;\n member: unknown;\n}\n\n/** GEOADD NX and XX are mutually exclusive. */\nexport type GeoAddOptions = {\n ch?: boolean;\n} & (\n | { nx?: boolean; xx?: false }\n | { nx?: false; xx?: boolean }\n);\n\nexport class HashStore {\n constructor(private readonly client: StoreCommandClient) {}\n\n async hset(key: string, entries: Record<string, unknown> | [string, unknown][]): Promise<number> {\n return number(await commandArgs(this.client, keyValueArgs([\"HSET\", key], this.client.codec, entries)));\n }\n\n async hget<T = unknown>(key: string, field: string): Promise<T | null> {\n return decode<T>(this.client.codec, await this.client.command(\"HGET\", key, field));\n }\n\n hdel(key: string, fields: readonly string[]): Promise<number>;\n hdel(key: string, field: string, ...fields: string[]): Promise<number>;\n async hdel(key: string, ...fieldsOrArray: (string | readonly string[])[]): Promise<number> {\n const fields = requireNonEmpty(arrayOrRest<string>(fieldsOrArray), \"HDEL\", \"field\");\n return number(await commandArgs(this.client, concatArgs([\"HDEL\", key], fields)));\n }\n\n async hmget<T = unknown>(key: string, fields: string[]): Promise<(T | null)[]> {\n requireNonEmpty(fields, \"HMGET\", \"field\");\n const fieldCount = fields.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs([\"HMGET\", key], fields)),\n fieldCount,\n \"HMGET\",\n (item) => decode<T>(this.client.codec, item)\n );\n }\n\n async hgetall<T = unknown>(key: string): Promise<Record<string, T | null>> {\n return decodeHashRecord<T>(this.client.codec, await this.client.command(\"HGETALL\", key));\n }\n\n async hexists(key: string, field: string): Promise<boolean> {\n return binaryBooleanResponse(await this.client.command(\"HEXISTS\", key, field));\n }\n\n async hkeys(key: string): Promise<string[]> {\n return mapArray(await this.client.command(\"HKEYS\", key), \"HKEYS\", textToken);\n }\n\n async hvals<T = unknown>(key: string): Promise<(T | null)[]> {\n return mapArray(\n await this.client.command(\"HVALS\", key),\n \"HVALS\",\n (item) => decode<T>(this.client.codec, item)\n );\n }\n\n async hlen(key: string): Promise<number> {\n return number(await this.client.command(\"HLEN\", key));\n }\n\n async hincrby(key: string, field: string, increment: number | bigint): Promise<IntegerReply> {\n return integerReply(await this.client.command(\"HINCRBY\", key, field, increment));\n }\n\n async hincrbyfloat(key: string, field: string, increment: number): Promise<string> {\n return string(await this.client.command(\"HINCRBYFLOAT\", key, field, increment));\n }\n\n async hsetnx(key: string, field: string, value: unknown): Promise<boolean> {\n return binaryBooleanResponse(await this.client.command(\"HSETNX\", key, field, encode(this.client.codec, value)));\n }\n\n async hstrlen(key: string, field: string): Promise<number> {\n return number(await this.client.command(\"HSTRLEN\", key, field));\n }\n\n hrandfield(key: string): Promise<string | null>;\n hrandfield(key: string, count: number, withValues?: false): Promise<string[]>;\n hrandfield<T = unknown>(\n key: string,\n count: number,\n withValues: true\n ): Promise<(string | T | null)[]>;\n hrandfield<T = unknown>(\n key: string,\n count: number,\n withValues: boolean\n ): Promise<string[] | (string | T | null)[]>;\n async hrandfield(key: string, count?: number, withValues = false): Promise<unknown> {\n if (withValues && count == null) {\n throw new TypeError(\"HRANDFIELD WITHVALUES requires a count\");\n }\n const args: CommandArgument[] = [\"HRANDFIELD\", key];\n if (count != null) args.push(count);\n if (withValues) args.push(\"WITHVALUES\");\n const response = await commandArgs(this.client, args);\n if (count == null) return response == null ? null : textToken(response);\n if (withValues) return decodeHashFlatPairs(this.client.codec, response);\n return mapArray(response, \"HRANDFIELD\", textToken);\n }\n\n async hscan<T = unknown>(\n key: string,\n cursor: string | number,\n options: CollectionScanOptions = {}\n ): Promise<HashScanResult<T>> {\n return decodeScanTuple(\n await this.client.command(\"HSCAN\", key, cursor, ...scanOptions(options, \"HSCAN\")),\n (items) => decodeHashFlatPairs<T>(this.client.codec, items)\n );\n }\n\n async hexpire(key: string, seconds: number, fields: string[]): Promise<number[]> {\n requireNonEmpty(fields, \"HEXPIRE\", \"field\");\n const fieldCount = fields.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs([\"HEXPIRE\", key, seconds, \"FIELDS\", fieldCount], fields)),\n fieldCount,\n \"HEXPIRE\",\n number\n );\n }\n\n async httl(key: string, fields: string[]): Promise<IntegerReply[]> {\n requireNonEmpty(fields, \"HTTL\", \"field\");\n const fieldCount = fields.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs([\"HTTL\", key, \"FIELDS\", fieldCount], fields)),\n fieldCount,\n \"HTTL\",\n integerReply\n );\n }\n\n async hpersist(key: string, fields: string[]): Promise<number[]> {\n requireNonEmpty(fields, \"HPERSIST\", \"field\");\n const fieldCount = fields.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs([\"HPERSIST\", key, \"FIELDS\", fieldCount], fields)),\n fieldCount,\n \"HPERSIST\",\n number\n );\n }\n\n async hpexpire(key: string, milliseconds: number, fields: string[]): Promise<number[]> {\n requireNonEmpty(fields, \"HPEXPIRE\", \"field\");\n const fieldCount = fields.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs([\"HPEXPIRE\", key, milliseconds, \"FIELDS\", fieldCount], fields)),\n fieldCount,\n \"HPEXPIRE\",\n number\n );\n }\n\n async hpttl(key: string, fields: string[]): Promise<IntegerReply[]> {\n requireNonEmpty(fields, \"HPTTL\", \"field\");\n const fieldCount = fields.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs([\"HPTTL\", key, \"FIELDS\", fieldCount], fields)),\n fieldCount,\n \"HPTTL\",\n integerReply\n );\n }\n\n async hexpiretime(key: string, fields: string[]): Promise<IntegerReply[]> {\n requireNonEmpty(fields, \"HEXPIRETIME\", \"field\");\n const fieldCount = fields.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs([\"HEXPIRETIME\", key, \"FIELDS\", fieldCount], fields)),\n fieldCount,\n \"HEXPIRETIME\",\n integerReply\n );\n }\n\n async hgetdel<T = unknown>(key: string, fields: string[]): Promise<(T | null)[]> {\n requireNonEmpty(fields, \"HGETDEL\", \"field\");\n const fieldCount = fields.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs([\"HGETDEL\", key, \"FIELDS\", fieldCount], fields)),\n fieldCount,\n \"HGETDEL\",\n (item) => decode<T>(this.client.codec, item)\n );\n }\n\n async hgetex<T = unknown>(key: string, fields: string[], options: GetExOptions = {}): Promise<(T | null)[]> {\n requireNonEmpty(fields, \"HGETEX\", \"field\");\n const fieldCount = fields.length;\n return mapArrayResponse(\n await commandArgs(this.client, concatArgs(\n [\"HGETEX\", key],\n getexOptions(options),\n [\"FIELDS\", fieldCount],\n fields\n )),\n fieldCount,\n \"HGETEX\",\n (item) => decode<T>(this.client.codec, item)\n );\n }\n\n async hsetex(key: string, seconds: number, entries: Record<string, unknown> | [string, unknown][]): Promise<number> {\n return number(await commandArgs(this.client, keyValueArgs([\"HSETEX\", key, seconds], this.client.codec, entries)));\n }\n}\n","import {\n append,\n appendBool,\n integer,\n type CommandArgument\n} from \"./internal.js\";\nimport type {\n AdminListOptions,\n ApprovalListOptions,\n ApprovalRequestOptions,\n AttributeQueryOptions,\n BudgetCommitOptions,\n BudgetReserveOptions,\n CircuitOpenOptions,\n EffectCompensateOptions,\n EffectConfirmOptions,\n EffectFailOptions,\n EffectReserveOptions,\n EffectStatusOptions,\n FlowAdminRecord,\n FlowStatsOptions,\n GovernanceLedgerOptions,\n LimitAmountOptions,\n LimitLeaseOptions,\n LimitListOptions,\n LimitReleaseOptions,\n ScheduleFireDueOptions,\n ScheduleListOptions,\n ScheduleOptions\n} from \"./client-options.js\";\nimport {\n adminListArgs,\n adminRecordList,\n adminRecordResponse,\n appendAttributeQueryOptions,\n appendAttributes,\n approvalListArgs,\n okLike,\n optionalAdminRecord\n} from \"./client-helpers.js\";\nimport { FerricStoreClientCore } from \"./client-core.js\";\nimport { snapshotOwnStringArray } from \"./string-array-snapshot.js\";\n\n/** @internal Administrative and governance commands kept off the primary Flow client surface. */\nexport class FerricStoreManagementClient extends FerricStoreClientCore {\n async stats(type: string, options: FlowStatsOptions = {}): Promise<FlowAdminRecord> {\n const args: CommandArgument[] = [\"FLOW.STATS\", type];\n append(args, \"STATE\", options.state);\n append(args, \"COUNT\", options.count);\n append(args, \"PARTITION\", options.partitionKey);\n appendAttributes(args, options.attributes);\n appendBool(args, \"CONSISTENT_PROJECTION\", options.consistentProjection);\n return adminRecordResponse(await this.commandArgs(args), \"FLOW.STATS\");\n }\n\n async countByState(\n type: string,\n state: string,\n options: Omit<FlowStatsOptions, \"state\" | \"count\"> = {}\n ): Promise<number> {\n const stats = await this.stats(type, { ...options, state });\n if (!(\"count\" in stats)) throw new TypeError(\"FLOW.STATS response missing count\");\n return integer(stats.count);\n }\n\n async attributes(type: string, options: AttributeQueryOptions = {}): Promise<FlowAdminRecord[]> {\n const args: CommandArgument[] = [\"FLOW.ATTRIBUTES\", type];\n appendAttributeQueryOptions(args, options);\n return adminRecordList(await this.commandArgs(args), \"FLOW.ATTRIBUTES\");\n }\n\n async attributeValues(\n type: string,\n attribute: string,\n options: AttributeQueryOptions = {}\n ): Promise<FlowAdminRecord[]> {\n const args: CommandArgument[] = [\"FLOW.ATTRIBUTE_VALUES\", type, attribute];\n appendAttributeQueryOptions(args, options);\n return adminRecordList(await this.commandArgs(args), \"FLOW.ATTRIBUTE_VALUES\");\n }\n\n async scheduleCreate(id: string, options: ScheduleOptions): Promise<FlowAdminRecord> {\n const args: CommandArgument[] = [\"FLOW.SCHEDULE.CREATE\", id];\n append(args, \"KIND\", options.kind);\n append(args, \"AT_MS\", options.atMs);\n append(args, \"DELAY_MS\", options.delayMs);\n append(args, \"START_AT_MS\", options.startAtMs);\n append(args, \"EVERY_MS\", options.everyMs);\n append(args, \"CRON\", options.cron);\n append(args, \"TIMEZONE\", options.timezone);\n append(args, \"TARGET\", options.target);\n append(args, \"OVERLAP_POLICY\", options.overlapPolicy);\n append(args, \"OVERLAP_RETRY_MS\", options.overlapRetryMs);\n append(args, \"MAX_FIRES\", options.maxFires);\n append(args, \"END_AT_MS\", options.endAtMs);\n appendBool(args, \"OVERWRITE\", options.overwrite);\n append(args, \"NOW\", options.nowMs);\n for (const [name, value] of Object.entries(options.extraOptions ?? {})) {\n args.push(name.toUpperCase(), value);\n }\n return adminRecordResponse(await this.commandArgs(args), \"FLOW.SCHEDULE.CREATE\");\n }\n\n async scheduleGet(id: string, options: { nowMs?: number } = {}): Promise<FlowAdminRecord | null> {\n const args: CommandArgument[] = [\"FLOW.SCHEDULE.GET\", id];\n append(args, \"NOW\", options.nowMs);\n return optionalAdminRecord(await this.commandArgs(args), \"FLOW.SCHEDULE.GET\");\n }\n\n async scheduleFire(id: string, options: { nowMs?: number } = {}): Promise<FlowAdminRecord> {\n return await this.scheduleStatus(\"FLOW.SCHEDULE.FIRE\", id, options.nowMs);\n }\n\n async schedulePause(id: string, options: { nowMs?: number } = {}): Promise<FlowAdminRecord> {\n return await this.scheduleStatus(\"FLOW.SCHEDULE.PAUSE\", id, options.nowMs);\n }\n\n async scheduleResume(id: string, options: { nowMs?: number } = {}): Promise<FlowAdminRecord> {\n return await this.scheduleStatus(\"FLOW.SCHEDULE.RESUME\", id, options.nowMs);\n }\n\n async scheduleDelete(id: string, options: { nowMs?: number } = {}): Promise<FlowAdminRecord> {\n return await this.scheduleStatus(\"FLOW.SCHEDULE.DELETE\", id, options.nowMs);\n }\n\n async scheduleFireDue(options: ScheduleFireDueOptions = {}): Promise<FlowAdminRecord> {\n const args: CommandArgument[] = [\"FLOW.SCHEDULE.FIRE_DUE\"];\n append(args, \"NOW\", options.nowMs);\n append(args, \"WORKER\", options.worker);\n append(args, \"BLOCK\", options.blockMs);\n append(args, \"LIMIT\", options.limit);\n return adminRecordResponse(await this.commandArgs(args), \"FLOW.SCHEDULE.FIRE_DUE\");\n }\n\n async scheduleList(options: ScheduleListOptions = {}): Promise<FlowAdminRecord[]> {\n const args: CommandArgument[] = [\"FLOW.SCHEDULE.LIST\"];\n append(args, \"KIND\", options.kind);\n append(args, \"STATE\", options.state);\n append(args, \"TIMEZONE\", options.timezone);\n append(args, \"TARGET_TYPE\", options.targetType);\n append(args, \"FROM_MS\", options.fromMs);\n append(args, \"TO_MS\", options.toMs);\n append(args, \"COUNT\", options.count);\n appendBool(args, \"REV\", options.rev);\n return adminRecordList(await this.commandArgs(args), \"FLOW.SCHEDULE.LIST\");\n }\n\n private async scheduleStatus(command: string, id: string, now: number | undefined): Promise<FlowAdminRecord> {\n const args: CommandArgument[] = [command, id];\n append(args, \"NOW\", now);\n const response = await this.commandArgs(args);\n if (okLike(response)) return { id, status: \"deleted\" };\n return adminRecordResponse(response, command);\n }\n\n async effectReserve(\n id: string,\n effectKey: string,\n effectType: string,\n options: EffectReserveOptions\n ): Promise<FlowAdminRecord> {\n const args: CommandArgument[] = [\n \"FLOW.EFFECT.RESERVE\", id, \"EFFECT_KEY\", effectKey, \"EFFECT_TYPE\", effectType\n ];\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"LEASE_TOKEN\", options.leaseToken);\n append(args, \"FENCING\", options.fencingToken);\n append(args, \"OPERATION_DIGEST\", options.operationDigest);\n append(args, \"IDEMPOTENCY_KEY\", options.idempotencyKey);\n append(args, \"GOVERNANCE_SCOPE\", options.governanceScope);\n append(args, \"NOW\", options.nowMs);\n return adminRecordResponse(await this.commandArgs(args), \"FLOW.EFFECT.RESERVE\");\n }\n\n async effectConfirm(id: string, effectKey: string, options: EffectConfirmOptions = {}): Promise<FlowAdminRecord> {\n return await this.effectStatus(\"FLOW.EFFECT.CONFIRM\", id, effectKey, options);\n }\n\n async effectFail(id: string, effectKey: string, options: EffectFailOptions = {}): Promise<FlowAdminRecord> {\n return await this.effectStatus(\"FLOW.EFFECT.FAIL\", id, effectKey, options);\n }\n\n async effectCompensate(\n id: string,\n effectKey: string,\n options: EffectCompensateOptions = {}\n ): Promise<FlowAdminRecord> {\n return await this.effectStatus(\"FLOW.EFFECT.COMPENSATE\", id, effectKey, options);\n }\n\n async effectGet(\n id: string,\n effectKey: string,\n options: { partitionKey?: string } = {}\n ): Promise<FlowAdminRecord | null> {\n const args: CommandArgument[] = [\"FLOW.EFFECT.GET\", id, \"EFFECT_KEY\", effectKey];\n append(args, \"PARTITION\", options.partitionKey);\n return optionalAdminRecord(await this.commandArgs(args), \"FLOW.EFFECT.GET\");\n }\n\n private async effectStatus(\n command: string,\n id: string,\n effectKey: string,\n options: EffectStatusOptions & {\n externalId?: string;\n error?: string;\n reason?: string;\n latencyMs?: number;\n }\n ): Promise<FlowAdminRecord> {\n const args: CommandArgument[] = [command, id, \"EFFECT_KEY\", effectKey];\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"LEASE_TOKEN\", options.leaseToken);\n append(args, \"FENCING\", options.fencingToken);\n append(args, \"EXTERNAL_ID\", options.externalId);\n append(args, \"ERROR\", options.error);\n append(args, \"REASON\", options.reason);\n append(args, \"LATENCY_MS\", options.latencyMs);\n append(args, \"NOW\", options.nowMs);\n return adminRecordResponse(await this.commandArgs(args), command);\n }\n\n async approvalRequest(id: string, options: ApprovalRequestOptions): Promise<FlowAdminRecord> {\n const args: CommandArgument[] = [\n \"FLOW.APPROVAL.REQUEST\", id, \"FLOW_ID\", options.flowId, \"SCOPE\", options.scope\n ];\n append(args, \"REASON\", options.reason);\n append(args, \"REQUESTED_BY\", options.requestedBy);\n append(args, \"ASSIGNEES\", options.assignees);\n append(args, \"POLICY_HASH\", options.policyHash);\n append(args, \"POLICY_VERSION\", options.policyVersion);\n append(args, \"TIMEOUT_MS\", options.timeoutMs);\n append(args, \"EXPIRES_AT_MS\", options.expiresAtMs);\n append(args, \"NOW\", options.nowMs);\n return adminRecordResponse(await this.commandArgs(args), \"FLOW.APPROVAL.REQUEST\");\n }\n\n async approvalApprove(\n id: string,\n options: { approver: string; reason?: string; nowMs?: number }\n ): Promise<FlowAdminRecord> {\n return await this.approvalStatus(\"FLOW.APPROVAL.APPROVE\", id, options);\n }\n\n async approvalReject(\n id: string,\n options: { approver: string; reason?: string; nowMs?: number }\n ): Promise<FlowAdminRecord> {\n return await this.approvalStatus(\"FLOW.APPROVAL.REJECT\", id, options);\n }\n\n private async approvalStatus(\n command: string,\n id: string,\n options: { approver: string; reason?: string; nowMs?: number }\n ): Promise<FlowAdminRecord> {\n const args: CommandArgument[] = [command, id, \"APPROVER\", options.approver];\n append(args, \"REASON\", options.reason);\n append(args, \"NOW\", options.nowMs);\n return adminRecordResponse(await this.commandArgs(args), command);\n }\n\n async approvalGet(id: string): Promise<FlowAdminRecord | null> {\n return optionalAdminRecord(await this.command(\"FLOW.APPROVAL.GET\", id), \"FLOW.APPROVAL.GET\");\n }\n\n async approvalList(options: ApprovalListOptions = {}): Promise<FlowAdminRecord[]> {\n const args = approvalListArgs(\"FLOW.APPROVAL.LIST\", options);\n return adminRecordList(await this.commandArgs(args), \"FLOW.APPROVAL.LIST\");\n }\n\n async governanceOverview(options: ApprovalListOptions = {}): Promise<FlowAdminRecord> {\n const args = approvalListArgs(\"FLOW.GOVERNANCE.OVERVIEW\", options);\n return adminRecordResponse(await this.commandArgs(args), \"FLOW.GOVERNANCE.OVERVIEW\");\n }\n\n async circuitOpen(scope: string, options: CircuitOpenOptions = {}): Promise<FlowAdminRecord> {\n const args: CommandArgument[] = [\"FLOW.CIRCUIT.OPEN\", scope];\n append(args, \"OPEN_MS\", options.openMs);\n append(args, \"FAILURE_THRESHOLD\", options.failureThreshold);\n append(args, \"NOW\", options.nowMs);\n return adminRecordResponse(await this.commandArgs(args), \"FLOW.CIRCUIT.OPEN\");\n }\n\n async circuitClose(scope: string, options: { nowMs?: number } = {}): Promise<FlowAdminRecord> {\n const args: CommandArgument[] = [\"FLOW.CIRCUIT.CLOSE\", scope];\n append(args, \"NOW\", options.nowMs);\n return adminRecordResponse(await this.commandArgs(args), \"FLOW.CIRCUIT.CLOSE\");\n }\n\n async circuitGet(scope: string): Promise<FlowAdminRecord | null> {\n return optionalAdminRecord(await this.command(\"FLOW.CIRCUIT.GET\", scope), \"FLOW.CIRCUIT.GET\");\n }\n\n async budgetReserve(\n scope: string,\n amount: number,\n options: BudgetReserveOptions = {}\n ): Promise<FlowAdminRecord> {\n const args: CommandArgument[] = [\"FLOW.BUDGET.RESERVE\", scope, \"AMOUNT\", amount];\n append(args, \"LIMIT\", options.limit);\n append(args, \"WINDOW_MS\", options.windowMs);\n append(args, \"RESERVATION_ID\", options.reservationId);\n append(args, \"NOW\", options.nowMs);\n return adminRecordResponse(await this.commandArgs(args), \"FLOW.BUDGET.RESERVE\");\n }\n\n async budgetCommit(\n scope: string,\n reservationId: string,\n actualAmount: number,\n options: BudgetCommitOptions = {}\n ): Promise<FlowAdminRecord> {\n const args: CommandArgument[] = [\n \"FLOW.BUDGET.COMMIT\", scope, \"RESERVATION_ID\", reservationId, \"ACTUAL_AMOUNT\", actualAmount\n ];\n append(args, \"USAGE\", options.usage);\n append(args, \"NOW\", options.nowMs);\n return adminRecordResponse(await this.commandArgs(args), \"FLOW.BUDGET.COMMIT\");\n }\n\n async budgetRelease(\n scope: string,\n reservationId: string,\n options: { nowMs?: number } = {}\n ): Promise<FlowAdminRecord> {\n const args: CommandArgument[] = [\"FLOW.BUDGET.RELEASE\", scope, \"RESERVATION_ID\", reservationId];\n append(args, \"NOW\", options.nowMs);\n return adminRecordResponse(await this.commandArgs(args), \"FLOW.BUDGET.RELEASE\");\n }\n\n async budgetGet(scope: string): Promise<FlowAdminRecord | null> {\n return optionalAdminRecord(await this.command(\"FLOW.BUDGET.GET\", scope), \"FLOW.BUDGET.GET\");\n }\n\n async budgetList(options: AdminListOptions = {}): Promise<FlowAdminRecord[]> {\n const args = adminListArgs(\"FLOW.BUDGET.LIST\", options);\n return adminRecordList(await this.commandArgs(args), \"FLOW.BUDGET.LIST\");\n }\n\n async limitLease(scope: string, options: LimitLeaseOptions): Promise<FlowAdminRecord> {\n const args: CommandArgument[] = [\n \"FLOW.LIMIT.LEASE\", scope,\n \"SHARD_ID\", options.shardId,\n \"AMOUNT\", options.amount,\n \"TTL_MS\", options.ttlMs\n ];\n append(args, \"LIMIT\", options.limit);\n append(args, \"NOW\", options.nowMs);\n return adminRecordResponse(await this.commandArgs(args), \"FLOW.LIMIT.LEASE\");\n }\n\n async limitSpend(scope: string, options: LimitAmountOptions): Promise<FlowAdminRecord> {\n const args: CommandArgument[] = [\n \"FLOW.LIMIT.SPEND\", scope, \"SHARD_ID\", options.shardId, \"AMOUNT\", options.amount\n ];\n append(args, \"NOW\", options.nowMs);\n return adminRecordResponse(await this.commandArgs(args), \"FLOW.LIMIT.SPEND\");\n }\n\n async limitRelease(\n scope: string,\n options: LimitReleaseOptions\n ): Promise<FlowAdminRecord> {\n const reservationIds = snapshotOwnStringArray(\n options.reservationIds,\n \"limitRelease reservationIds\"\n );\n const seenReservationIds = new Set<string>();\n for (const reservationId of reservationIds) {\n if (\n typeof reservationId !== \"string\" ||\n reservationId.length === 0 ||\n seenReservationIds.has(reservationId)\n ) {\n throw new TypeError(\"limitRelease reservationIds must contain one unique non-empty id per credit\");\n }\n seenReservationIds.add(reservationId);\n }\n if (reservationIds.length === 0) {\n throw new TypeError(\"limitRelease reservationIds must contain one unique non-empty id per credit\");\n }\n if (\n options.amount != null &&\n (!Number.isSafeInteger(options.amount) || options.amount <= 0 || options.amount !== reservationIds.length)\n ) {\n throw new TypeError(\"limitRelease amount must match reservationIds.length\");\n }\n const args: CommandArgument[] = [\n \"FLOW.LIMIT.RELEASE\", scope, \"SHARD_ID\", options.shardId\n ];\n append(args, \"AMOUNT\", options.amount);\n args.push(\"RESERVATION_IDS\", reservationIds.length);\n for (const reservationId of reservationIds) args.push(reservationId);\n return adminRecordResponse(await this.commandArgs(args), \"FLOW.LIMIT.RELEASE\");\n }\n\n async limitGet(scope: string, options: { nowMs?: number } = {}): Promise<FlowAdminRecord | null> {\n const args: CommandArgument[] = [\"FLOW.LIMIT.GET\", scope];\n append(args, \"NOW\", options.nowMs);\n return optionalAdminRecord(await this.commandArgs(args), \"FLOW.LIMIT.GET\");\n }\n\n async limitList(options: LimitListOptions = {}): Promise<FlowAdminRecord[]> {\n const args = adminListArgs(\"FLOW.LIMIT.LIST\", options);\n return adminRecordList(await this.commandArgs(args), \"FLOW.LIMIT.LIST\");\n }\n\n async governanceLedger(id: string, options: GovernanceLedgerOptions = {}): Promise<FlowAdminRecord[]> {\n const args: CommandArgument[] = [\"FLOW.GOVERNANCE.LEDGER\", id];\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"LIMIT\", options.limit);\n append(args, \"FROM_MS\", options.fromMs);\n append(args, \"TO_MS\", options.toMs);\n appendBool(args, \"REV\", options.rev);\n return adminRecordList(await this.commandArgs(args), \"FLOW.GOVERNANCE.LEDGER\");\n }\n}\n","import { FerricStoreError, OverloadedError } from \"./errors.js\";\nimport { sleep } from \"./internal.js\";\nimport type { BackpressurePolicy } from \"./types.js\";\n\nexport async function executeProducerWriteWithBackpressure(\n execute: () => Promise<unknown>,\n policy: Required<BackpressurePolicy>,\n signal: AbortSignal\n): Promise<unknown> {\n for (let attempt = 0; ; attempt += 1) {\n throwIfClosed(signal);\n try {\n return await execute();\n } catch (error) {\n if (\n !(error instanceof OverloadedError) ||\n error.retryable !== true ||\n error.safeToRetry !== true ||\n attempt >= policy.maxRetries\n ) throw error;\n const exponential = Math.min(policy.maxDelayMs, policy.baseDelayMs * 2 ** attempt);\n const base = Math.min(policy.maxDelayMs, error.retryAfterMs ?? exponential);\n const jitter = base * (policy.jitterPct / 100) * Math.random();\n await sleep(Math.min(policy.maxDelayMs, base + jitter), signal);\n }\n }\n}\n\nfunction throwIfClosed(signal: AbortSignal): void {\n if (!signal.aborted) return;\n if (signal.reason instanceof Error) throw signal.reason;\n throw new FerricStoreError(\"FerricStore client is closed\", { raw: signal.reason });\n}\n","import { Buffer } from \"node:buffer\";\nimport type { Codec } from \"./codecs.js\";\nimport { snapshotFlowValue } from \"./flow-value-snapshot.js\";\nimport type { CommandArgument } from \"./internal.js\";\nimport {\n CLAIMED_ITEM_WIRE,\n type ClaimedItem,\n type ClaimedItemWire,\n type CreateItem,\n type FencedItem,\n type StateMeta\n} from \"./types.js\";\n\ninterface FlowManySnapshotOptions {\n attributes?: Record<string, CommandArgument>;\n attributesDelete?: string[];\n attributesMerge?: Record<string, CommandArgument>;\n dropValues?: string[];\n error?: unknown;\n overrideValues?: string[];\n payload?: unknown;\n reason?: unknown;\n result?: unknown;\n stateMeta?: StateMeta;\n valueRefs?: Record<string, string>;\n values?: Record<string, unknown>;\n}\n\nconst encodedOptionFields = [\"error\", \"payload\", \"reason\", \"result\"] as const;\n\n/** Capture fields consumed by a later independent chunk at admission. */\nexport function snapshotCreateItem(item: CreateItem, codec: Codec): CreateItem {\n const snapshot: CreateItem = {\n ...item,\n payload: snapshotFlowValue(codec, item.payload)\n };\n if (item.attributes != null) snapshot.attributes = snapshotCommandRecord(item.attributes);\n if (item.stateMeta != null) snapshot.stateMeta = snapshotStateMeta(item.stateMeta);\n if (item.valueRefs != null) snapshot.valueRefs = snapshotRecord(item.valueRefs, (value) => value);\n if (item.values != null) {\n snapshot.values = snapshotRecord(item.values, (value) => snapshotFlowValue(codec, value));\n }\n return Object.freeze(snapshot);\n}\n\n/** Capture shared mutation/create options once so every later chunk sees one wire plan. */\nexport function snapshotFlowManyOptions<T extends FlowManySnapshotOptions>(\n options: T,\n codec: Codec\n): T {\n const snapshot = { ...options };\n const mutable = snapshot as FlowManySnapshotOptions;\n for (const field of encodedOptionFields) {\n const value = options[field];\n if (value != null) mutable[field] = snapshotFlowValue(codec, value);\n }\n if (options.attributes != null) mutable.attributes = snapshotCommandRecord(options.attributes);\n if (options.attributesMerge != null) {\n mutable.attributesMerge = snapshotCommandRecord(options.attributesMerge);\n }\n if (options.attributesDelete != null) mutable.attributesDelete = snapshotArray(options.attributesDelete);\n if (options.dropValues != null) mutable.dropValues = snapshotArray(options.dropValues);\n if (options.overrideValues != null) mutable.overrideValues = snapshotArray(options.overrideValues);\n if (options.stateMeta != null) mutable.stateMeta = snapshotStateMeta(options.stateMeta);\n if (options.valueRefs != null) {\n mutable.valueRefs = snapshotRecord(options.valueRefs, (value) => value);\n }\n if (options.values != null) {\n mutable.values = snapshotRecord(options.values, (value) => snapshotFlowValue(codec, value));\n }\n return Object.freeze(snapshot);\n}\n\n/** Capture lease authority before an earlier independent chunk can yield. */\nexport function snapshotClaimedItem(item: ClaimedItem): ClaimedItem {\n const wire = item[CLAIMED_ITEM_WIRE];\n const leaseToken = Buffer.from(wire?.leaseToken ?? item.leaseToken);\n const snapshot: ClaimedItem = {\n ...item,\n fencingToken: wire?.fencingToken ?? item.fencingToken,\n leaseToken\n };\n if (wire != null) {\n Object.defineProperty(snapshot, CLAIMED_ITEM_WIRE, {\n enumerable: false,\n value: snapshotClaimedItemWire(wire, leaseToken)\n });\n }\n return Object.freeze(snapshot);\n}\n\n/** Capture transition/cancellation authority before a later chunk is built. */\nexport function snapshotFencedItem(item: FencedItem): FencedItem {\n return Object.freeze({\n ...item,\n ...(item.leaseToken == null ? {} : { leaseToken: Buffer.from(item.leaseToken) })\n });\n}\n\nfunction snapshotClaimedItemWire(wire: ClaimedItemWire, leaseToken: Buffer): ClaimedItemWire {\n return Object.freeze({\n fencingToken: wire.fencingToken,\n id: Buffer.from(wire.id),\n leaseToken,\n partitionKey: wire.partitionKey == null ? wire.partitionKey : Buffer.from(wire.partitionKey)\n });\n}\n\nfunction snapshotArray<T>(values: readonly T[]): T[] {\n const snapshot = new Array<T>(values.length);\n for (let index = 0; index < values.length; index += 1) {\n if (Object.hasOwn(values, index)) snapshot[index] = values[index] as T;\n }\n return Object.freeze(snapshot) as T[];\n}\n\nfunction snapshotStateMeta(stateMeta: StateMeta): StateMeta {\n return snapshotRecord(stateMeta, (value) => Buffer.isBuffer(value) ? Buffer.from(value) : value);\n}\n\nfunction snapshotCommandRecord(\n values: Record<string, CommandArgument>\n): Record<string, CommandArgument> {\n const seen = new WeakMap<object, CommandArgument>();\n return snapshotRecord(values, (value) => snapshotCommandArgument(value, seen));\n}\n\nfunction snapshotRecord<T, U>(values: Record<string, T>, capture: (value: T) => U): Record<string, U> {\n const snapshot: Record<string, U> = {};\n for (const [name, value] of Object.entries(values)) {\n Object.defineProperty(snapshot, name, {\n enumerable: true,\n value: capture(value)\n });\n }\n return Object.freeze(snapshot);\n}\n\nfunction snapshotCommandArgument(\n value: CommandArgument,\n seen: WeakMap<object, CommandArgument>\n): CommandArgument {\n if (typeof value !== \"object\" || value == null) return value;\n if (Buffer.isBuffer(value) || value instanceof Uint8Array) return Buffer.from(value);\n const objectValue: object = value;\n const existing = seen.get(objectValue);\n if (existing != null) return existing;\n if (Array.isArray(objectValue)) {\n const values: readonly unknown[] = objectValue;\n const snapshot = new Array<CommandArgument>(values.length);\n seen.set(objectValue, snapshot);\n for (let index = 0; index < values.length; index += 1) {\n if (Object.hasOwn(values, index)) {\n snapshot[index] = snapshotCommandArgument(values[index] as CommandArgument, seen);\n }\n }\n return Object.freeze(snapshot);\n }\n const snapshot: Record<string, unknown> = {};\n seen.set(objectValue, snapshot);\n for (const [name, nested] of Object.entries(objectValue)) {\n Object.defineProperty(snapshot, name, {\n enumerable: true,\n value: snapshotCommandArgument(nested as CommandArgument, seen)\n });\n }\n return Object.freeze(snapshot);\n}\n","import {\n append,\n appendBool,\n appendEncoded,\n appendNamedValues,\n nowMs,\n type CommandArgument\n} from \"./internal.js\";\nimport type {\n CancelOptions,\n CompleteManyOptions,\n CompleteOptions,\n FailOptions,\n RetryOptions,\n TransitionOptions\n} from \"./client-options.js\";\nimport {\n appendAttributeMutations,\n appendClaimedItems,\n appendFencedItems,\n appendStateMeta,\n assertManyPartitionMatches\n} from \"./client-helpers.js\";\nimport { FerricStoreFlowSupportClient } from \"./client-flow-support.js\";\nimport {\n snapshotClaimedItem,\n snapshotFencedItem,\n snapshotFlowManyOptions\n} from \"./flow-many-snapshot.js\";\nimport type { ClaimedItem, FencedItem, FlowRecord, StateMeta } from \"./types.js\";\n\nexport class FerricStoreMutationClient extends FerricStoreFlowSupportClient {\n async transition(id: string, options: TransitionOptions): Promise<FlowRecord | Buffer | unknown> {\n const currentNowMs = options.nowMs ?? nowMs();\n const partitionKey = options.partitionKey;\n const returnRecord = options.returnRecord === true;\n const args: CommandArgument[] = [\n \"FLOW.TRANSITION\",\n id,\n options.fromState,\n options.toState,\n \"LEASE_TOKEN\",\n options.leaseToken,\n \"FENCING\",\n options.fencingToken,\n \"NOW\",\n currentNowMs\n ];\n append(args, \"PARTITION\", partitionKey);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"RUN_AT\", options.runAtMs ?? currentNowMs);\n append(args, \"PRIORITY\", options.priority);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n appendAttributeMutations(args, options);\n const response = await this.commandArgs(args);\n if (returnRecord) {\n return await this.recordOrGet(response, id, partitionKey);\n }\n return response;\n }\n\n async complete(id: string, options: CompleteOptions): Promise<FlowRecord | Buffer | unknown> {\n const partitionKey = options.partitionKey;\n const returnRecord = options.returnRecord === true;\n const args: CommandArgument[] = [\n \"FLOW.COMPLETE\",\n id,\n options.leaseToken,\n \"FENCING\",\n options.fencingToken,\n \"NOW\",\n options.nowMs ?? nowMs()\n ];\n append(args, \"PARTITION\", partitionKey);\n appendEncoded(args, \"RESULT\", this.codec, options.result);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"TTL\", options.ttlMs);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n appendAttributeMutations(args, options);\n const response = await this.commandArgs(args);\n if (returnRecord) {\n return await this.recordOrGet(response, id, partitionKey);\n }\n return response;\n }\n\n async completeMany(\n partitionKey: string | undefined,\n items: ClaimedItem[],\n options: CompleteManyOptions = {}\n ): Promise<unknown[] | unknown> {\n if (items.length === 0) return [];\n assertManyPartitionMatches(partitionKey, items, \"FLOW.COMPLETE_MANY\");\n if (items.length > this.flowManyBatchLimit) {\n if (options.independent !== true) throw this.flowManyLimitError(\"completeMany\");\n const currentNowMs = options.nowMs ?? nowMs();\n const capturedOptions = snapshotFlowManyOptions(\n { ...options, nowMs: currentNowMs },\n this.codec\n );\n return await this.executeIndependentManyChunks(\"completeMany\", items, snapshotClaimedItem, async (batchItems) => await this.completeMany(\n partitionKey,\n batchItems,\n capturedOptions\n ));\n }\n return this.recordsOrResponse(await this.commandArgs(this.completeManyRequest(partitionKey, items, options)));\n }\n\n protected completeManyRequest(\n partitionKey: string | undefined,\n items: ClaimedItem[],\n options: CompleteManyOptions\n ): CommandArgument[] {\n const args: CommandArgument[] = [\"FLOW.COMPLETE_MANY\", partitionKey ?? \"MIXED\"];\n appendEncoded(args, \"RESULT\", this.codec, options.result);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"TTL\", options.ttlMs);\n append(args, \"NOW\", options.nowMs ?? nowMs());\n appendBool(args, \"INDEPENDENT\", options.independent);\n if (options.returnOkOnSuccess === true) args.push(\"RETURN\", \"OK_ON_SUCCESS\");\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n appendAttributeMutations(args, options);\n appendClaimedItems(args, partitionKey, items, \"FLOW.COMPLETE_MANY\");\n return args;\n }\n\n async completeJobs(jobs: ClaimedItem[], options: CompleteManyOptions = {}): Promise<unknown[] | unknown> {\n if (jobs.length === 0) return [];\n const firstPartition = jobs[0]?.partitionKey;\n const partitionKey = firstPartition != null && jobs.every((job) => job.partitionKey === firstPartition)\n ? firstPartition\n : undefined;\n return await this.completeMany(partitionKey, jobs, {\n ...options,\n independent: options.independent ?? true,\n returnOkOnSuccess: options.returnOkOnSuccess ?? true\n });\n }\n\n async retry(id: string, options: RetryOptions): Promise<FlowRecord | Buffer | unknown> {\n const partitionKey = options.partitionKey;\n const returnRecord = options.returnRecord === true;\n const args: CommandArgument[] = [\n \"FLOW.RETRY\",\n id,\n options.leaseToken,\n \"FENCING\",\n options.fencingToken,\n \"NOW\",\n options.nowMs ?? nowMs()\n ];\n append(args, \"PARTITION\", partitionKey);\n appendEncoded(args, \"ERROR\", this.codec, options.error);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"RUN_AT\", options.runAtMs);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n appendAttributeMutations(args, options);\n const response = await this.commandArgs(args);\n if (returnRecord) return await this.recordOrGet(response, id, partitionKey);\n return response;\n }\n\n async retryMany(partitionKey: string | undefined, items: ClaimedItem[], options: {\n error?: unknown;\n payload?: unknown;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n dropValues?: string[];\n overrideValues?: string[];\n attributesMerge?: Record<string, CommandArgument>;\n attributesDelete?: string[];\n stateMeta?: StateMeta;\n runAtMs?: number;\n nowMs?: number;\n independent?: boolean;\n returnOkOnSuccess?: boolean;\n } = {}): Promise<unknown[] | unknown> {\n if (items.length === 0) return [];\n assertManyPartitionMatches(partitionKey, items, \"FLOW.RETRY_MANY\");\n if (items.length > this.flowManyBatchLimit) {\n if (options.independent !== true) throw this.flowManyLimitError(\"retryMany\");\n const currentNowMs = options.nowMs ?? nowMs();\n const capturedOptions = snapshotFlowManyOptions(\n { ...options, nowMs: currentNowMs },\n this.codec\n );\n return await this.executeIndependentManyChunks(\"retryMany\", items, snapshotClaimedItem, async (batchItems) => await this.retryMany(\n partitionKey,\n batchItems,\n capturedOptions\n ));\n }\n const args: CommandArgument[] = [\"FLOW.RETRY_MANY\", partitionKey ?? \"MIXED\"];\n appendEncoded(args, \"ERROR\", this.codec, options.error);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"RUN_AT\", options.runAtMs);\n append(args, \"NOW\", options.nowMs ?? nowMs());\n appendBool(args, \"INDEPENDENT\", options.independent);\n if (options.returnOkOnSuccess === true) args.push(\"RETURN\", \"OK_ON_SUCCESS\");\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n appendAttributeMutations(args, options);\n appendClaimedItems(args, partitionKey, items, \"FLOW.RETRY_MANY\");\n return this.recordsOrResponse(await this.commandArgs(args));\n }\n\n async fail(id: string, options: FailOptions): Promise<FlowRecord | Buffer | unknown> {\n const partitionKey = options.partitionKey;\n const returnRecord = options.returnRecord === true;\n const args: CommandArgument[] = [\n \"FLOW.FAIL\",\n id,\n options.leaseToken,\n \"FENCING\",\n options.fencingToken,\n \"NOW\",\n options.nowMs ?? nowMs()\n ];\n append(args, \"PARTITION\", partitionKey);\n appendEncoded(args, \"ERROR\", this.codec, options.error);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"TTL\", options.ttlMs);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n appendAttributeMutations(args, options);\n const response = await this.commandArgs(args);\n if (returnRecord) return await this.recordOrGet(response, id, partitionKey);\n return response;\n }\n\n async failMany(partitionKey: string | undefined, items: ClaimedItem[], options: {\n error?: unknown;\n payload?: unknown;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n dropValues?: string[];\n overrideValues?: string[];\n attributesMerge?: Record<string, CommandArgument>;\n attributesDelete?: string[];\n stateMeta?: StateMeta;\n ttlMs?: number;\n nowMs?: number;\n independent?: boolean;\n returnOkOnSuccess?: boolean;\n } = {}): Promise<unknown[] | unknown> {\n if (items.length === 0) return [];\n assertManyPartitionMatches(partitionKey, items, \"FLOW.FAIL_MANY\");\n if (items.length > this.flowManyBatchLimit) {\n if (options.independent !== true) throw this.flowManyLimitError(\"failMany\");\n const currentNowMs = options.nowMs ?? nowMs();\n const capturedOptions = snapshotFlowManyOptions(\n { ...options, nowMs: currentNowMs },\n this.codec\n );\n return await this.executeIndependentManyChunks(\"failMany\", items, snapshotClaimedItem, async (batchItems) => await this.failMany(\n partitionKey,\n batchItems,\n capturedOptions\n ));\n }\n const args: CommandArgument[] = [\"FLOW.FAIL_MANY\", partitionKey ?? \"MIXED\"];\n appendEncoded(args, \"ERROR\", this.codec, options.error);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"TTL\", options.ttlMs);\n append(args, \"NOW\", options.nowMs ?? nowMs());\n appendBool(args, \"INDEPENDENT\", options.independent);\n if (options.returnOkOnSuccess === true) args.push(\"RETURN\", \"OK_ON_SUCCESS\");\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n appendAttributeMutations(args, options);\n appendClaimedItems(args, partitionKey, items, \"FLOW.FAIL_MANY\");\n return this.recordsOrResponse(await this.commandArgs(args));\n }\n\n async cancel(id: string, options: CancelOptions): Promise<FlowRecord | Buffer | unknown> {\n const partitionKey = options.partitionKey;\n const returnRecord = options.returnRecord === true;\n const args: CommandArgument[] = [\"FLOW.CANCEL\", id, \"FENCING\", options.fencingToken, \"NOW\", options.nowMs ?? nowMs()];\n append(args, \"LEASE_TOKEN\", options.leaseToken);\n append(args, \"PARTITION\", partitionKey);\n appendEncoded(args, \"REASON\", this.codec, options.reason);\n append(args, \"TTL\", options.ttlMs);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n appendAttributeMutations(args, options);\n const response = await this.commandArgs(args);\n if (returnRecord) return await this.recordOrGet(response, id, partitionKey);\n return response;\n }\n\n async cancelMany(partitionKey: string | undefined, items: FencedItem[], options: {\n reason?: unknown;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n dropValues?: string[];\n overrideValues?: string[];\n attributesMerge?: Record<string, CommandArgument>;\n attributesDelete?: string[];\n stateMeta?: StateMeta;\n ttlMs?: number;\n nowMs?: number;\n independent?: boolean;\n } = {}): Promise<unknown[] | unknown> {\n if (items.length === 0) return [];\n assertManyPartitionMatches(partitionKey, items, \"FLOW.CANCEL_MANY\");\n if (items.length > this.flowManyBatchLimit) {\n if (options.independent !== true) throw this.flowManyLimitError(\"cancelMany\");\n const currentNowMs = options.nowMs ?? nowMs();\n const capturedOptions = snapshotFlowManyOptions(\n { ...options, nowMs: currentNowMs },\n this.codec\n );\n return await this.executeIndependentManyChunks(\"cancelMany\", items, snapshotFencedItem, async (batchItems) => await this.cancelMany(\n partitionKey,\n batchItems,\n capturedOptions\n ));\n }\n const args: CommandArgument[] = [\"FLOW.CANCEL_MANY\", partitionKey ?? \"MIXED\"];\n appendEncoded(args, \"REASON\", this.codec, options.reason);\n append(args, \"TTL\", options.ttlMs);\n append(args, \"NOW\", options.nowMs ?? nowMs());\n appendBool(args, \"INDEPENDENT\", options.independent);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n appendAttributeMutations(args, options);\n appendFencedItems(args, partitionKey, items, \"FLOW.CANCEL_MANY\", false);\n return this.recordsOrResponse(await this.commandArgs(args));\n }\n}\n","import { FerricStoreError, InvalidCommandError } from \"./errors.js\";\nimport {\n append,\n appendBool,\n appendValueReturn,\n nowMs,\n okResponse,\n type CommandArgument\n} from \"./internal.js\";\nimport type {\n ClaimDueOptions,\n CompleteJobsAndClaimJobsResult,\n CompleteManyOptions,\n ExtendLeaseOptions,\n ReclaimOptions\n} from \"./client-options.js\";\nimport {\n appendPayloadRead,\n claimDataRequested,\n compactClaimReturnMode,\n completeJobsResultError,\n errorFromUnknown,\n isCompactClaimTuple,\n requiredArrayResponse\n} from \"./client-helpers.js\";\nimport {\n claimFailure,\n hydrateClaimedRecords,\n snapshotClaimOptions\n} from \"./client-claim-hydration.js\";\nimport { validatePipelineResponse } from \"./adapters.js\";\nimport { FerricStoreMutationClient } from \"./client-mutations.js\";\nimport { claimedItemFromResp, type ClaimedItem, type FlowRecord } from \"./types.js\";\n\ntype ClaimHydrationOptions = Pick<\n ClaimDueOptions,\n \"partitionKey\" | \"payload\" | \"payloadMaxBytes\" | \"valueMaxBytes\" | \"values\"\n>;\n\nexport class FerricStoreClaimClient extends FerricStoreMutationClient {\n async claimDue(type: string, options: ClaimDueOptions): Promise<(FlowRecord | ClaimedItem)[]> {\n const request = this.claimDueRequest(type, options);\n return await this.claimDueResponse(\n await this.commandArgs(request.args),\n type,\n request.options,\n request.jobOnly\n );\n }\n\n private claimDueRequest(\n type: string,\n options: ClaimDueOptions,\n reusableAfterAwait = false\n ): { readonly args: CommandArgument[]; readonly jobOnly: boolean; readonly options: ClaimDueOptions } {\n const captured = snapshotClaimOptions(options, reusableAfterAwait);\n if (captured.state != null && captured.states != null) {\n throw new Error(\"state and states are mutually exclusive\");\n }\n const jobOnly = captured.jobOnly === true && !claimDataRequested(captured);\n const args: CommandArgument[] = [\"FLOW.CLAIM_DUE\", type];\n if (captured.states != null) {\n if (captured.states.length === 0) {\n throw new Error(\"states must be non-empty\");\n }\n if (jobOnly) args.push(\"STATES\", captured.states.length);\n for (let index = 0; index < captured.states.length; index += 1) {\n const state = captured.states[index];\n if (!Object.hasOwn(captured.states, index) || typeof state !== \"string\") {\n throw new TypeError(\"states must be a dense array of strings\");\n }\n if (jobOnly) args.push(state);\n else args.push(\"STATE\", state);\n }\n } else {\n append(args, \"STATE\", captured.state);\n }\n\n args.push(\"WORKER\", captured.worker, \"LEASE_MS\", captured.leaseMs ?? 30_000, \"LIMIT\", captured.limit ?? 1);\n append(args, \"NOW\", captured.nowMs);\n this.appendPartitionOptions(args, captured);\n append(args, \"PRIORITY\", captured.priority);\n if (captured.includeState === true && captured.jobOnly !== true) {\n throw new Error(\"includeState requires jobOnly=true\");\n }\n if (jobOnly) {\n append(args, \"RETURN\", compactClaimReturnMode(captured.includeState === true, captured.includeAttributes === true));\n }\n append(args, \"BLOCK\", captured.blockMs);\n appendPayloadRead(args, captured.payload, captured.payloadMaxBytes);\n appendValueReturn(args, { values: captured.values, valueMaxBytes: captured.valueMaxBytes });\n appendBool(args, \"RECLAIM_EXPIRED\", captured.reclaimExpired);\n append(args, \"RECLAIM_RATIO\", captured.reclaimRatio);\n\n return { args, jobOnly, options: captured };\n }\n\n private async claimDueResponse(\n response: unknown,\n type: string,\n options: ClaimHydrationOptions,\n jobOnly: boolean,\n command = \"FLOW.CLAIM_DUE\"\n ): Promise<(FlowRecord | ClaimedItem)[]> {\n const items = requiredArrayResponse(response, command);\n if (jobOnly) {\n return this.claimedItems(items, type, command);\n }\n if (items.length > 0 && isCompactClaimTuple(items[0])) {\n const claimed = this.claimedItems(items, type, command);\n return await hydrateClaimedRecords(\n claimed,\n this.legacyClaimHydrationConcurrency,\n async (job) => {\n const record = await this.get(job.id, {\n full: options.payload ?? true,\n partitionKey: job.partitionKey,\n payload: options.payload,\n payloadMaxBytes: options.payloadMaxBytes,\n valueMaxBytes: options.valueMaxBytes,\n values: options.values\n });\n if (record == null) {\n throw new Error(`Claimed Flow ${job.id} could not be hydrated`);\n }\n return record;\n }\n );\n }\n return this.records(items);\n }\n\n async claimJobs(type: string, options: Omit<ClaimDueOptions, \"jobOnly\">): Promise<ClaimedItem[]> {\n return (await this.claimDue(type, {\n ...options,\n includeState: options.includeState ?? false,\n jobOnly: true,\n limit: options.limit ?? 100\n }));\n }\n\n async reclaim(type: string, options: ReclaimOptions): Promise<(FlowRecord | ClaimedItem)[]> {\n const captured = snapshotClaimOptions(options);\n if (captured.state != null && captured.state !== \"running\") {\n throw new Error(\"FLOW.RECLAIM only supports running state\");\n }\n const jobOnly = captured.jobOnly === true && !claimDataRequested(captured);\n const args: CommandArgument[] = [\n \"FLOW.RECLAIM\",\n type,\n \"WORKER\",\n captured.worker,\n \"LEASE_MS\",\n captured.leaseMs ?? 30_000,\n \"LIMIT\",\n captured.limit ?? 1,\n \"NOW\",\n captured.nowMs ?? nowMs()\n ];\n this.appendPartitionOptions(args, captured);\n append(args, \"PRIORITY\", captured.priority);\n if (jobOnly) {\n append(args, \"RETURN\", compactClaimReturnMode(false, captured.includeAttributes === true));\n }\n appendPayloadRead(args, captured.payload, captured.payloadMaxBytes);\n appendValueReturn(args, { values: captured.values, valueMaxBytes: captured.valueMaxBytes });\n const response = await this.commandArgs(args);\n return await this.claimDueResponse(response, type, captured, jobOnly, \"FLOW.RECLAIM\");\n }\n\n private claimedItems(items: unknown[], type: string, command: string): ClaimedItem[] {\n const claimed = new Array<ClaimedItem>(items.length);\n for (let index = 0; index < items.length; index += 1) {\n if (!Object.hasOwn(items, index)) {\n throw new FerricStoreError(`${command} response item ${index} is missing`, { raw: items });\n }\n claimed[index] = claimedItemFromResp(items[index], this.codec, { type });\n }\n return claimed;\n }\n\n async extendLease(\n id: string,\n options: ExtendLeaseOptions & { readonly returnOkOnSuccess: true }\n ): Promise<boolean>;\n async extendLease(\n id: string,\n options: ExtendLeaseOptions & { readonly returnOkOnSuccess?: false }\n ): Promise<FlowRecord>;\n async extendLease(id: string, options: ExtendLeaseOptions): Promise<FlowRecord | boolean>;\n async extendLease(id: string, options: ExtendLeaseOptions): Promise<FlowRecord | boolean> {\n const partitionKey = options.partitionKey;\n const args: CommandArgument[] = [\n \"FLOW.EXTEND_LEASE\",\n id,\n options.leaseToken,\n \"FENCING\",\n options.fencingToken,\n \"LEASE_MS\",\n options.leaseMs,\n \"NOW\",\n options.nowMs ?? nowMs()\n ];\n append(args, \"PARTITION\", partitionKey);\n const wantsOkResponse = options.returnOkOnSuccess === true;\n const ownsOkResponseProbe = wantsOkResponse && this.extendLeaseOkResponseSupport == null;\n const requestOkResponse = wantsOkResponse && this.extendLeaseOkResponseSupport !== false\n && this.extendLeaseOkResponseSupport !== \"probing\";\n if (ownsOkResponseProbe) this.extendLeaseOkResponseSupport = \"probing\";\n if (requestOkResponse) {\n args.push(\"RETURN\", \"OK_ON_SUCCESS\");\n }\n let legacyResponse = !requestOkResponse;\n let response: unknown;\n try {\n response = await this.commandArgs(args);\n } catch (error) {\n if (!requestOkResponse || !(error instanceof InvalidCommandError)) {\n if (ownsOkResponseProbe && this.extendLeaseOkResponseSupport === \"probing\") {\n this.extendLeaseOkResponseSupport = undefined;\n }\n throw error;\n }\n\n // RETURN was added after FLOW.EXTEND_LEASE. A syntax rejection cannot\n // have mutated the lease, so retry the legacy form once and remember the\n // capability to keep subsequent renewals on the single-request path.\n this.extendLeaseOkResponseSupport = false;\n legacyResponse = true;\n response = await this.commandArgs(args.slice(0, -2));\n }\n if (wantsOkResponse) {\n if (!legacyResponse) {\n let ok: boolean;\n try {\n ok = okResponse(response);\n } catch (error) {\n if (ownsOkResponseProbe && this.extendLeaseOkResponseSupport === \"probing\") {\n this.extendLeaseOkResponseSupport = undefined;\n }\n throw error;\n }\n if (this.extendLeaseOkResponseSupport !== false) {\n this.extendLeaseOkResponseSupport = true;\n }\n return ok;\n }\n await this.recordOrGet(response, id, partitionKey);\n return true;\n }\n return await this.recordOrGet(response, id, partitionKey);\n }\n\n /**\n * Complete leased jobs and claim replacements through one ordered pipeline\n * when both commands can use the same route. Item errors are returned beside\n * any newly leased jobs so callers cannot accidentally discard those leases.\n */\n async completeJobsAndClaimJobs(\n jobs: ClaimedItem[],\n type: string,\n claimOptions: ClaimDueOptions,\n completeOptions: Omit<CompleteManyOptions, \"returnOkOnSuccess\"> = {}\n ): Promise<CompleteJobsAndClaimJobsResult> {\n const claimRequest = this.claimDueRequest(type, claimOptions, true);\n const jobCount = jobs.length;\n if (jobCount === 0) {\n try {\n return {\n claimed: await this.claimDue(type, claimRequest.options),\n completion: [],\n fused: false\n };\n } catch (error) {\n const failure = claimFailure(error);\n return {\n ...failure,\n completion: [],\n fused: false\n };\n }\n }\n\n const capturedCompleteOptions = { ...completeOptions };\n const normalizedCompleteOptions: CompleteManyOptions = {\n ...capturedCompleteOptions,\n independent: capturedCompleteOptions.independent ?? true,\n returnOkOnSuccess: true\n };\n const claimPartition = claimRequest.options.partitionKey;\n const firstJobPartition = jobs[0]?.partitionKey;\n const sharedJobPartition = firstJobPartition != null\n && jobs.every((job) => job.partitionKey === firstJobPartition)\n ? firstJobPartition\n : undefined;\n const completionPartition = claimPartition ?? sharedJobPartition;\n const canShareRoute = claimRequest.options.partitionKeys == null && (\n claimPartition == null || jobs.every((job) => job.partitionKey == null || job.partitionKey === claimPartition)\n );\n\n let preparedCompletionRequest: CommandArgument[] | undefined;\n if (\n jobCount <= this.flowManyBatchLimit &&\n canShareRoute &&\n this.executor.executeFusedPipeline != null\n ) {\n preparedCompletionRequest = this.completeManyRequest(\n completionPartition,\n jobs,\n normalizedCompleteOptions\n );\n const rawResponses = await this.executor.executeFusedPipeline([\n preparedCompletionRequest,\n claimRequest.args\n ], { ordered: true, throwOnItemError: false });\n const responses = rawResponses == null\n ? undefined\n : validatePipelineResponse(rawResponses, 2, \"complete-and-claim pipeline\");\n\n if (responses != null) {\n const completion = responses[0];\n const completionError = completeJobsResultError(completion, jobCount);\n const claimResponse = responses[1];\n if (claimResponse instanceof Error) {\n const failure = claimFailure(claimResponse);\n return {\n ...failure,\n completion,\n ...(completionError == null ? {} : { completionError }),\n fused: true\n };\n }\n try {\n return {\n claimed: await this.claimDueResponse(\n claimResponse,\n type,\n claimRequest.options,\n claimRequest.jobOnly\n ),\n completion,\n ...(completionError == null ? {} : { completionError }),\n fused: true\n };\n } catch (error) {\n const failure = claimFailure(error);\n return {\n ...failure,\n completion,\n ...(completionError == null ? {} : { completionError }),\n fused: true\n };\n }\n }\n }\n\n let completion: unknown;\n try {\n completion = preparedCompletionRequest == null\n ? await this.completeJobs(jobs, normalizedCompleteOptions)\n : this.recordsOrResponse(await this.commandArgs(preparedCompletionRequest));\n } catch (error) {\n const completionError = errorFromUnknown(error);\n return { claimed: [], completion: completionError, completionError, fused: false };\n }\n const completionError = completeJobsResultError(completion, jobCount);\n if (completionError != null) {\n return { claimed: [], completion, completionError, fused: false };\n }\n try {\n return {\n claimed: await this.claimDue(type, claimRequest.options),\n completion,\n fused: false\n };\n } catch (error) {\n const failure = claimFailure(error);\n return {\n ...failure,\n completion,\n fused: false\n };\n }\n }\n\n async completeFlowsAndClaimFlows(\n jobs: ClaimedItem[],\n type: string,\n claimOptions: ClaimDueOptions,\n completeOptions: Omit<CompleteManyOptions, \"returnOkOnSuccess\"> = {}\n ): Promise<CompleteJobsAndClaimJobsResult> {\n return await this.completeJobsAndClaimJobs(jobs, type, claimOptions, completeOptions);\n }\n\n}\n","import { finitePositiveInteger } from \"./auto-batch.js\";\nimport { FerricStoreClaimClient } from \"./client-claims.js\";\nimport { confirmedFlowBatchItems, FlowBatchError } from \"./client-errors.js\";\nimport { assertDenseCreateItems, groupAutoPartitionItems } from \"./client-grouping.js\";\nimport { snapshotCreateItem, snapshotFlowManyOptions } from \"./flow-many-snapshot.js\";\nimport { encodeFlowValue } from \"./flow-value-snapshot.js\";\nimport {\n appendAttributes,\n appendNamedCounts,\n appendStateMeta,\n sharedCreateManyAttributes,\n sharedCreateManyStateMeta\n} from \"./client-helpers.js\";\nimport type { CreateManyOptions, CreateOptions } from \"./client-options.js\";\nimport {\n append,\n appendBool,\n appendEncoded,\n appendNamedValues,\n expandManyResponse,\n nowMs,\n type CommandArgument\n} from \"./internal.js\";\nimport type { CreateItem, FlowRecord } from \"./types.js\";\n\n/** Producer-oriented Flow commands, separated from mutation and claim APIs. */\nexport class FerricStoreProducerClient extends FerricStoreClaimClient {\n async create(id: string, options: CreateOptions): Promise<FlowRecord | Buffer | unknown> {\n const currentNowMs = options.nowMs ?? nowMs();\n const partitionKey = options.partitionKey;\n const returnRecord = options.returnRecord === true;\n const args: CommandArgument[] = [\n \"FLOW.CREATE\",\n id,\n \"TYPE\",\n options.type,\n \"STATE\",\n options.state ?? \"queued\",\n \"NOW\",\n currentNowMs\n ];\n append(args, \"PARTITION\", partitionKey);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"PARENT_FLOW_ID\", options.parentFlowId);\n append(args, \"ROOT_FLOW_ID\", options.rootFlowId);\n append(args, \"CORRELATION_ID\", options.correlationId);\n append(args, \"RUN_AT\", options.runAtMs ?? currentNowMs);\n append(args, \"PRIORITY\", options.priority);\n appendBool(args, \"IDEMPOTENT\", options.idempotent);\n append(args, \"RETENTION_TTL_MS\", options.retentionTtlMs);\n append(args, \"MAX_ACTIVE_MS\", options.maxActiveMs);\n appendAttributes(args, options.attributes);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n\n const response = await this.executeProducerWrite(args);\n return returnRecord\n ? await this.recordOrGet(response, id, partitionKey)\n : response;\n }\n\n async enqueue(\n id: string,\n options: Omit<CreateOptions, \"state\"> & { state?: string }\n ): Promise<FlowRecord | Buffer | unknown> {\n return await this.create(id, { ...options, state: options.state ?? \"queued\" });\n }\n\n async enqueueMany(items: CreateItem[], options: CreateManyOptions): Promise<unknown[] | unknown> {\n if (items.length === 0) return [];\n\n if (options.independent === false) {\n assertDenseCreateItems(items, \"enqueueMany\");\n if (items.length > this.flowManyBatchLimit) {\n throw new Error(\n `independent=false enqueueMany accepts at most ${this.flowManyBatchLimit.toLocaleString(\"en-US\")} items because splitting would weaken batch semantics`\n );\n }\n return await this.createMany(options.partitionKey, items, {\n ...options,\n independent: false,\n state: options.state ?? \"queued\"\n });\n }\n\n if (options.partitionKey != null || items.some((item) => item?.partitionKey != null)) {\n assertDenseCreateItems(items, \"enqueueMany\");\n const partitionKey = options.partitionKey;\n const createOptions = snapshotFlowManyOptions({\n ...options,\n independent: options.independent ?? true,\n state: options.state ?? \"queued\"\n }, this.codec);\n if (items.length <= this.flowManyBatchLimit) {\n return await this.createMany(partitionKey, items, createOptions);\n }\n return await this.executeIndependentManyChunks(\n \"enqueueMany\",\n items,\n (item) => snapshotCreateItem(item, this.codec),\n async (batchItems) => await this.createMany(partitionKey, batchItems, createOptions)\n );\n }\n\n const capturedItems = items.map((item) => snapshotCreateItem(item, this.codec));\n const groups = groupAutoPartitionItems(capturedItems);\n const groupedOptions = snapshotFlowManyOptions({\n ...options,\n independent: options.independent ?? true,\n state: options.state ?? \"queued\"\n }, this.codec);\n const results = Array<unknown>(items.length);\n const batchSize = Math.min(\n this.flowManyBatchLimit,\n finitePositiveInteger(options.autoPartitionBatchSize, this.flowManyBatchLimit)\n );\n const concurrency = Math.min(\n groups.length,\n finitePositiveInteger(options.autoPartitionConcurrency, 8)\n );\n let cursor = 0;\n let failure: { readonly error: unknown } | undefined;\n\n const dispatch = async (): Promise<void> => {\n while (failure == null) {\n const groupIndex = cursor;\n cursor += 1;\n const group = groups[groupIndex];\n if (group == null) return;\n try {\n for (let start = 0; start < group.items.length; start += batchSize) {\n if (failure != null) return;\n const batchItems = group.items.slice(start, start + batchSize);\n const response = await this.createMany(group.bucket, batchItems, groupedOptions);\n const expanded = expandManyResponse(response, batchItems.length);\n for (let resultIndex = 0; resultIndex < expanded.length; resultIndex += 1) {\n const originalIndex = group.indices[start + resultIndex];\n if (originalIndex != null) results[originalIndex] = expanded[resultIndex];\n }\n }\n } catch (error) {\n failure ??= { error };\n }\n }\n };\n\n await Promise.all(Array.from({ length: concurrency }, dispatch));\n if (failure != null) {\n throw new FlowBatchError(\"enqueueMany\", failure.error, confirmedFlowBatchItems(results));\n }\n return results;\n }\n\n async createMany(\n partitionKey: string | undefined,\n items: CreateItem[],\n options: CreateManyOptions\n ): Promise<unknown[] | unknown> {\n if (items.length === 0) return [];\n assertDenseCreateItems(items, \"createMany\");\n\n if (partitionKey != null) {\n for (const item of items) {\n if (item.partitionKey != null && item.partitionKey !== partitionKey) {\n throw new Error(\"createMany item partitionKey does not match batch partitionKey\");\n }\n }\n }\n const currentNowMs = options.nowMs ?? nowMs();\n const attributes = sharedCreateManyAttributes(items, options.attributes);\n const stateMeta = sharedCreateManyStateMeta(items, options.stateMeta);\n if (items.length > this.flowManyBatchLimit) {\n if (options.independent !== true) throw this.flowManyLimitError(\"createMany\");\n const capturedOptions = snapshotFlowManyOptions(\n { ...options, attributes, nowMs: currentNowMs, stateMeta },\n this.codec\n );\n return await this.executeIndependentManyChunks(\n \"createMany\",\n items,\n (item) => snapshotCreateItem(item, this.codec),\n async (batchItems) => await this.createMany(\n partitionKey,\n batchItems,\n capturedOptions\n )\n );\n }\n const mixed = partitionKey == null && items.some((item) => item.partitionKey != null);\n if (mixed && items.some((item) => item.partitionKey == null)) {\n throw new Error(\"mixed createMany items require partitionKey\");\n }\n const auto = partitionKey == null && !mixed;\n const wirePartition = mixed ? \"MIXED\" : auto ? \"AUTO\" : partitionKey;\n const args: CommandArgument[] = [\n \"FLOW.CREATE_MANY\",\n wirePartition,\n \"TYPE\",\n options.type,\n \"STATE\",\n options.state ?? \"queued\",\n \"NOW\",\n currentNowMs\n ];\n append(args, \"RUN_AT\", options.runAtMs ?? currentNowMs);\n append(args, \"PRIORITY\", options.priority);\n appendBool(args, \"IDEMPOTENT\", options.idempotent);\n appendBool(args, \"INDEPENDENT\", options.independent);\n append(args, \"RETENTION_TTL_MS\", options.retentionTtlMs);\n append(args, \"MAX_ACTIVE_MS\", options.maxActiveMs);\n appendAttributes(args, attributes);\n appendStateMeta(args, stateMeta);\n\n const extendedItems = items.some((item) => item.values != null || item.valueRefs != null);\n if (extendedItems) {\n args.push(\"ITEMS_EXT\", items.length);\n for (const item of items) {\n const itemValues = { ...(options.values ?? {}), ...(item.values ?? {}) };\n const itemRefs = { ...(options.valueRefs ?? {}), ...(item.valueRefs ?? {}) };\n args.push(item.id, mixed ? item.partitionKey ?? \"-\" : \"-\", encodeFlowValue(this.codec, item.payload));\n appendNamedCounts(args, this.codec, itemValues, itemRefs);\n }\n } else {\n appendNamedValues(args, this.codec, options);\n args.push(\"ITEMS\");\n for (const item of items) {\n if (mixed) {\n if (item.partitionKey == null) throw new Error(\"mixed createMany items require partitionKey\");\n args.push(item.id, item.partitionKey, encodeFlowValue(this.codec, item.payload));\n } else {\n args.push(item.id, encodeFlowValue(this.codec, item.payload));\n }\n }\n }\n\n return this.recordsOrResponse(await this.executeProducerWrite(args));\n }\n}\n","import {\n append,\n appendBool,\n appendEncoded,\n appendNamedValues,\n nowMs,\n type CommandArgument\n} from \"./internal.js\";\nimport { NativeAdapter } from \"./adapters.js\";\nimport { ReconnectingExecutor } from \"./reconnecting-executor.js\";\nimport { TopologyNativeAdapterPool } from \"./topology.js\";\nimport {\n claimedItemFromResp,\n type ClaimedItem,\n type FencedItem,\n type FlowRecord,\n type StateMeta\n} from \"./types.js\";\n\nimport type {\n FerricStoreClientFromUrlOptions,\n StartAndClaimOptions,\n StepContinueOptions,\n RunStepsItem,\n RunStepsManyOptions\n} from \"./client-options.js\";\nexport type {\n FlowBatchCompletedItem,\n ClaimHydrationItem,\n AutoBatchOptions,\n FerricStoreClientOptions,\n FerricStoreClientFromUrlOptions,\n CreateOptions,\n CreateManyOptions,\n StartAndClaimOptions,\n ClaimDueOptions,\n CompleteManyOptions,\n CompleteJobsAndClaimJobsResult,\n ReclaimOptions,\n FlowStateMode,\n FlowStatePolicy,\n FlowStatePolicyLike,\n FlowPolicyOptions,\n RequestContext,\n RequestContextOptions,\n InvocationCreateOptions,\n MutateOptions,\n LeaseMutationOptions,\n ExtendLeaseOptions,\n TransitionOptions,\n StepContinueOptions,\n RunStepsItem,\n RunStepsManyOptions,\n FlowAdminRecord,\n FlowStatsOptions,\n AttributeQueryOptions,\n ScheduleOptions,\n ScheduleListOptions,\n ScheduleFireDueOptions,\n EffectReserveOptions,\n EffectStatusOptions,\n EffectConfirmOptions,\n EffectFailOptions,\n EffectCompensateOptions,\n ApprovalRequestOptions,\n ApprovalListOptions,\n CircuitOpenOptions,\n BudgetReserveOptions,\n BudgetCommitOptions,\n AdminListOptions,\n LimitListOptions,\n LimitLeaseOptions,\n LimitAmountOptions,\n LimitReleaseOptions,\n GovernanceLedgerOptions,\n CompleteOptions,\n RetryOptions,\n FailOptions,\n CancelOptions,\n ReadOptions,\n HistoryOptions,\n SearchStateMeta,\n SearchOptions,\n ManagementPairs\n} from \"./client-options.js\";\n\nimport {\n appendStateMeta,\n appendAttributes,\n appendAttributeMutations,\n appendFencedItems,\n assertManyPartitionMatches\n} from \"./client-helpers.js\";\nexport { completeJobsResultError } from \"./client-helpers.js\";\nexport { ClaimHydrationError, FlowBatchError } from \"./client-errors.js\";\nexport { groupAutoPartitionItems } from \"./client-grouping.js\";\nimport { valueMGetEntries } from \"./client-values.js\";\nexport { valueMGetEntries } from \"./client-values.js\";\nimport {\n nativeAdapterOptions,\n snapshotFerricUrls,\n snapshotNativeClientOptions,\n topologyNativeOptions\n} from \"./client-native-options.js\";\nimport { FerricStoreProducerClient } from \"./client-producer.js\";\nimport { snapshotClientOptions } from \"./client-config.js\";\nimport { snapshotFencedItem, snapshotFlowManyOptions } from \"./flow-many-snapshot.js\";\n\nexport class FerricStoreClient extends FerricStoreProducerClient {\n static async fromUrl(url: string, options: FerricStoreClientFromUrlOptions = {}): Promise<FerricStoreClient> {\n const clientOptions = snapshotClientOptions(options);\n const nativeOptions = snapshotNativeClientOptions(clientOptions.nativeOptions ?? {});\n const reconnectOptions = clientOptions.reconnect ?? nativeOptions.autoReconnect ?? true;\n const seeds = nativeOptions.seeds ?? [];\n const useTopology = nativeOptions.haRouting === true || seeds.length > 0 ||\n nativeOptions.endpointPolicy != null || nativeOptions.endpointValidator != null ||\n nativeOptions.topologyConcurrency != null || nativeOptions.trustedHosts != null ||\n nativeOptions.warmConnections != null;\n const createExecutor = async (signal?: AbortSignal) => {\n const bootstrapOptions = nativeOptionsForBootstrap(nativeOptions, signal);\n return (\n useTopology\n ? await TopologyNativeAdapterPool.fromUrls([url, ...seeds], topologyNativeOptions(bootstrapOptions))\n : await NativeAdapter.fromUrl(url, nativeAdapterOptions(bootstrapOptions))\n );\n };\n const executor = reconnectOptions === false\n ? await createExecutor()\n : new ReconnectingExecutor(createExecutor, reconnectOptions === true ? {} : reconnectOptions);\n if (executor instanceof ReconnectingExecutor) {\n await executor.ready();\n }\n return new FerricStoreClient(executor, clientOptions);\n }\n\n static async fromUrls(urls: readonly string[], options: FerricStoreClientFromUrlOptions = {}): Promise<FerricStoreClient> {\n const clientOptions = snapshotClientOptions(options);\n if (urls.length === 0) {\n throw new Error(\"FerricStoreClient.fromUrls requires at least one URL\");\n }\n const seedUrls = snapshotFerricUrls(urls);\n const nativeOptions = snapshotNativeClientOptions(clientOptions.nativeOptions ?? {});\n const reconnectOptions = clientOptions.reconnect ?? nativeOptions.autoReconnect ?? true;\n const createExecutor = async (signal?: AbortSignal) => await TopologyNativeAdapterPool.fromUrls(\n seedUrls,\n topologyNativeOptions(nativeOptionsForBootstrap(nativeOptions, signal))\n );\n const executor = reconnectOptions === false\n ? await createExecutor()\n : new ReconnectingExecutor(createExecutor, reconnectOptions === true ? {} : reconnectOptions);\n if (executor instanceof ReconnectingExecutor) {\n await executor.ready();\n }\n return new FerricStoreClient(executor, clientOptions);\n }\n\n async valuePut(\n value: unknown,\n options: {\n partitionKey?: string;\n ownerFlowId?: string;\n name?: string;\n override?: boolean;\n ttlMs?: number;\n nowMs?: number;\n } = {}\n ): Promise<unknown> {\n if (options.ownerFlowId != null && options.name != null && options.ttlMs != null) {\n throw new TypeError(\"named Flow values cannot have a TTL\");\n }\n const args: CommandArgument[] = [\"FLOW.VALUE.PUT\", this.codec.encode(value), \"NOW\", options.nowMs ?? nowMs()];\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"OWNER_FLOW_ID\", options.ownerFlowId);\n append(args, \"NAME\", options.name);\n appendBool(args, \"OVERRIDE\", options.override);\n append(args, \"TTL\", options.ttlMs);\n return await this.commandArgs(args);\n }\n\n async valueMGet(refs: string[], options: { maxBytes?: number } = {}): Promise<unknown[]> {\n return (await valueMGetEntries(this, refs, options)).map((entry) =>\n entry.found ? entry.value : null\n );\n }\n\n async signal(id: string, options: {\n signal: string;\n partitionKey?: string;\n idempotencyKey?: string;\n ifState?: string | string[];\n transitionTo?: string;\n runAtMs?: number;\n nowMs?: number;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n dropValues?: string[];\n overrideValues?: string[];\n }): Promise<unknown> {\n const args: CommandArgument[] = [\"FLOW.SIGNAL\", id, \"SIGNAL\", options.signal];\n append(args, \"PARTITION\", options.partitionKey);\n append(args, \"IDEMPOTENCY\", options.idempotencyKey);\n if (Array.isArray(options.ifState)) {\n for (let index = 0; index < options.ifState.length; index += 1) {\n const state = options.ifState[index];\n if (!Object.hasOwn(options.ifState, index) || typeof state !== \"string\") {\n throw new TypeError(\"ifState must be a dense array of strings\");\n }\n append(args, \"IF_STATE\", state);\n }\n } else {\n append(args, \"IF_STATE\", options.ifState);\n }\n append(args, \"TRANSITION_TO\", options.transitionTo);\n append(args, \"RUN_AT\", options.runAtMs);\n append(args, \"NOW\", options.nowMs ?? nowMs());\n appendNamedValues(args, this.codec, options);\n return await this.commandArgs(args);\n }\n\n async flowSignal(id: string, options: Parameters<FerricStoreClient[\"signal\"]>[1]): Promise<unknown> {\n return await this.signal(id, options);\n }\n\n async startAndClaim(id: string, options: StartAndClaimOptions): Promise<FlowRecord> {\n const partitionKey = options.partitionKey;\n const args: CommandArgument[] = [\n \"FLOW.START_AND_CLAIM\",\n id,\n \"TYPE\",\n options.type,\n \"INITIAL_STATE\",\n options.initialState,\n \"WORKER\",\n options.worker,\n \"LEASE_MS\",\n options.leaseMs ?? 30_000,\n \"NOW\",\n options.nowMs ?? nowMs()\n ];\n append(args, \"PARTITION\", partitionKey);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"PARENT_FLOW_ID\", options.parentFlowId);\n append(args, \"ROOT_FLOW_ID\", options.rootFlowId);\n append(args, \"CORRELATION_ID\", options.correlationId);\n append(args, \"PRIORITY\", options.priority);\n append(args, \"RETENTION_TTL_MS\", options.retentionTtlMs);\n append(args, \"MAX_ACTIVE_MS\", options.maxActiveMs);\n appendAttributes(args, options.attributes);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n return await this.recordOrGet(await this.commandArgs(args), id, partitionKey);\n }\n\n async stepContinue(id: string, options: StepContinueOptions): Promise<FlowRecord | ClaimedItem> {\n const partitionKey = options.partitionKey;\n const returnJob = options.returnJob === true;\n const type = options.type;\n const args: CommandArgument[] = [\n \"FLOW.STEP_CONTINUE\",\n id,\n options.leaseToken,\n options.fromState,\n options.toState,\n \"FENCING\",\n options.fencingToken,\n \"LEASE_MS\",\n options.leaseMs ?? 30_000,\n \"NOW\",\n options.nowMs ?? nowMs()\n ];\n append(args, \"PARTITION\", partitionKey);\n append(args, \"WORKER\", options.worker);\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n if (returnJob) args.push(\"RETURN\", \"JOBS_COMPACT\");\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n appendAttributeMutations(args, options);\n const response = await this.commandArgs(args);\n return returnJob\n ? claimedItemFromResp(response, this.codec, { type })\n : await this.recordOrGet(response, id, partitionKey);\n }\n\n async runStepsMany(\n items: readonly (string | RunStepsItem)[],\n options: RunStepsManyOptions\n ): Promise<unknown> {\n if (items.length === 0) return Buffer.from(\"OK\");\n const hasStates = options.states != null;\n const hasSteps = options.steps != null;\n if (hasStates === hasSteps) {\n throw new Error(\"runStepsMany requires exactly one of states or steps\");\n }\n let states: string[] | undefined;\n if (options.states != null) {\n if (options.states.length === 0) throw new Error(\"runStepsMany states must be non-empty\");\n states = new Array<string>(options.states.length);\n for (let index = 0; index < options.states.length; index += 1) {\n const state = options.states[index];\n if (!Object.hasOwn(options.states, index) || typeof state !== \"string\" || state.length === 0) {\n throw new TypeError(\"runStepsMany states must be a dense array of non-empty strings\");\n }\n states[index] = state;\n }\n }\n if (options.steps != null && (!Number.isSafeInteger(options.steps) || options.steps <= 0)) {\n throw new Error(\"runStepsMany steps must be a positive safe integer\");\n }\n const normalizedItems = new Array<{ id: string; partition_key?: string }>(items.length);\n for (let index = 0; index < items.length; index += 1) {\n const item = items[index];\n if (!Object.hasOwn(items, index) || item === undefined) {\n throw new TypeError(\"runStepsMany items must be dense\");\n }\n const value = typeof item === \"string\" ? { id: item } : item;\n if (value.id.length === 0) throw new Error(\"runStepsMany item id must be non-empty\");\n const partitionKey = value.partitionKey ?? options.partitionKey;\n normalizedItems[index] = partitionKey == null\n ? { id: value.id }\n : { id: value.id, partition_key: partitionKey };\n }\n const args: CommandArgument[] = [\"FLOW.RUN_STEPS_MANY\", \"TYPE\", options.type];\n if (states != null) {\n args.push(\"STATES\", states);\n } else {\n args.push(\"STEPS\", options.steps);\n }\n args.push(\n \"WORKER\", options.worker,\n \"LEASE_MS\", options.leaseMs ?? 30_000,\n \"NOW\", options.nowMs ?? nowMs()\n );\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n appendEncoded(args, \"RESULT\", this.codec, options.result);\n append(args, \"RETENTION_TTL_MS\", options.retentionTtlMs);\n args.push(\"ITEMS\", normalizedItems);\n return await this.commandArgs(args);\n }\n\n async transitionMany(partitionKey: string | undefined, options: {\n fromState: string;\n toState: string;\n items: FencedItem[];\n payload?: unknown;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n dropValues?: string[];\n overrideValues?: string[];\n attributesMerge?: Record<string, CommandArgument>;\n attributesDelete?: string[];\n stateMeta?: StateMeta;\n runAtMs?: number;\n nowMs?: number;\n priority?: number;\n independent?: boolean;\n }): Promise<unknown[] | unknown> {\n if (options.items.length === 0) {\n return [];\n }\n assertManyPartitionMatches(partitionKey, options.items, \"FLOW.TRANSITION_MANY\");\n if (options.items.length > this.flowManyBatchLimit) {\n if (options.independent !== true) {\n throw this.flowManyLimitError(\"transitionMany\");\n }\n const currentNowMs = options.nowMs ?? nowMs();\n const capturedOptions = snapshotFlowManyOptions(\n { ...options, nowMs: currentNowMs },\n this.codec\n );\n return await this.executeIndependentManyChunks(\"transitionMany\", options.items, snapshotFencedItem, async (batchItems) => await this.transitionMany(\n partitionKey,\n { ...capturedOptions, items: batchItems }\n ));\n }\n const args: CommandArgument[] = [\"FLOW.TRANSITION_MANY\", partitionKey ?? \"MIXED\", options.fromState, options.toState];\n appendEncoded(args, \"PAYLOAD\", this.codec, options.payload);\n append(args, \"RUN_AT\", options.runAtMs);\n append(args, \"PRIORITY\", options.priority);\n append(args, \"NOW\", options.nowMs ?? nowMs());\n appendBool(args, \"INDEPENDENT\", options.independent);\n appendStateMeta(args, options.stateMeta);\n appendNamedValues(args, this.codec, options);\n appendAttributeMutations(args, options);\n appendFencedItems(args, partitionKey, options.items, \"FLOW.TRANSITION_MANY\", true);\n return this.recordsOrResponse(await this.commandArgs(args));\n }\n\n}\n\nfunction nativeOptionsForBootstrap(\n options: ReturnType<typeof snapshotNativeClientOptions>,\n signal: AbortSignal | undefined\n): ReturnType<typeof snapshotNativeClientOptions> {\n if (signal == null) return options;\n return {\n ...options,\n signal: options.signal == null ? signal : AbortSignal.any([options.signal, signal])\n };\n}\n","import type { StateMeta } from \"./types.js\";\nimport type { CommandArgument } from \"./internal.js\";\n\nconst OUTCOME_BRAND = Symbol(\"ferricstore.outcome\");\n\nexport type Outcome = TransitionOutcome | CompleteOutcome | RetryOutcome | FailOutcome;\n\nexport interface NamedValueMutation {\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n dropValues?: string[];\n overrideValues?: string[];\n attributesMerge?: Record<string, CommandArgument>;\n attributesDelete?: string[];\n stateMeta?: StateMeta;\n}\n\nexport interface TransitionOutcome extends NamedValueMutation {\n readonly kind: \"transition\";\n readonly toState: string;\n readonly payload?: unknown;\n readonly priority?: number;\n readonly runAtMs?: number;\n}\n\nexport interface CompleteOutcome extends NamedValueMutation {\n readonly kind: \"complete\";\n readonly payload?: unknown;\n readonly result?: unknown;\n readonly ttlMs?: number;\n}\n\nexport interface RetryOutcome extends NamedValueMutation {\n readonly kind: \"retry\";\n readonly error?: unknown;\n readonly payload?: unknown;\n readonly runAtMs?: number;\n}\n\nexport interface FailOutcome extends NamedValueMutation {\n readonly kind: \"fail\";\n readonly error?: unknown;\n readonly payload?: unknown;\n readonly ttlMs?: number;\n}\n\nexport function transition(\n toState: string,\n options: Omit<TransitionOutcome, \"kind\" | \"toState\"> = {}\n): TransitionOutcome {\n return brandOutcome({ ...options, kind: \"transition\", toState });\n}\n\nexport function complete(options: Omit<CompleteOutcome, \"kind\"> = {}): CompleteOutcome {\n return brandOutcome({ ...options, kind: \"complete\" });\n}\n\nexport function retry(options: Omit<RetryOutcome, \"kind\"> = {}): RetryOutcome {\n return brandOutcome({ ...options, kind: \"retry\" });\n}\n\nexport function fail(options: Omit<FailOutcome, \"kind\"> = {}): FailOutcome {\n return brandOutcome({ ...options, kind: \"fail\" });\n}\n\nexport function isOutcome(value: unknown): value is Outcome {\n if (\n typeof value !== \"object\" ||\n value == null ||\n !Object.hasOwn(value, OUTCOME_BRAND) ||\n (value as Record<PropertyKey, unknown>)[OUTCOME_BRAND] !== true\n ) {\n return false;\n }\n const outcome = value as Partial<Outcome>;\n if (outcome.kind === \"transition\") {\n return typeof outcome.toState === \"string\";\n }\n return outcome.kind === \"complete\" || outcome.kind === \"retry\" || outcome.kind === \"fail\";\n}\n\nfunction brandOutcome<T extends Outcome>(outcome: T): T {\n Object.defineProperty(outcome, \"kind\", {\n configurable: false,\n enumerable: true,\n value: outcome.kind,\n writable: false\n });\n if (outcome.kind === \"transition\") {\n Object.defineProperty(outcome, \"toState\", {\n configurable: false,\n enumerable: true,\n value: outcome.toState,\n writable: false\n });\n }\n Object.defineProperty(outcome, OUTCOME_BRAND, {\n configurable: false,\n enumerable: false,\n value: true,\n writable: false\n });\n return outcome;\n}\n","import type { WorkerConfig } from \"./types.js\";\nimport { snapshotOwnStringArray } from \"./string-array-snapshot.js\";\n\ntype WorkflowWorkerConfig = WorkerConfig & { states?: string[] };\n\n/** Captures the complete mutable worker input once, before asynchronous work begins. */\nexport function snapshotWorkerConfig<T extends WorkflowWorkerConfig>(options: T): T {\n const snapshot = { ...options };\n if (snapshot.partitionKeys != null) {\n snapshot.partitionKeys = snapshotOwnStringArray(snapshot.partitionKeys, \"partitionKeys\") as string[];\n }\n if (snapshot.claimValues != null) {\n snapshot.claimValues = snapshotOwnStringArray(snapshot.claimValues, \"claimValues\") as string[];\n }\n if (snapshot.states != null) {\n snapshot.states = snapshotOwnStringArray(snapshot.states, \"states\") as string[];\n }\n return Object.freeze(snapshot);\n}\n","import type { FerricStoreClient } from \"./client.js\";\nimport { RawCodec, type Codec } from \"./codecs.js\";\nimport {\n CLAIMED_ITEM_WIRE,\n normalizeExceptionPolicy,\n type ClaimedItem,\n type FlowRecord,\n type WorkerConfig\n} from \"./types.js\";\nimport { setLongInterval, setLongTimeout, sleep, type LongTimer } from \"./internal.js\";\nimport { snapshotWorkerConfig } from \"./worker-config.js\";\n\ntype LeasedJob = FlowRecord | ClaimedItem;\nconst DEFAULT_FLOW_MANY_BATCH_LIMIT = 1_000;\n\n/** Raised when a worker loses the ability to renew a claimed job's lease. */\nexport class LeaseRenewalError extends Error {\n constructor(cause: unknown) {\n super(\"FerricStore lease renewal failed\", { cause });\n this.name = \"LeaseRenewalError\";\n }\n}\n\nexport class LeaseRenewalGuard {\n private error?: LeaseRenewalError;\n private inFlight?: Promise<void>;\n readonly job: ClaimedItem;\n private timer?: LongTimer;\n\n constructor(\n private readonly client: FerricStoreClient,\n leasedJob: LeasedJob,\n private readonly leaseMs: number,\n options: WorkerConfig\n ) {\n this.job = snapshotLeasedJob(leasedJob);\n if (options.leaseRenewal === false) {\n return;\n }\n const intervalMs = positiveInteger(options.leaseRenewIntervalMs, Math.max(1, Math.trunc(leaseMs / 2)));\n this.timer = setLongInterval(() => this.renew(), intervalMs);\n this.timer.unref();\n }\n\n assertActive(): void {\n if (this.error != null) {\n throw this.error;\n }\n }\n\n async stop(): Promise<void> {\n if (this.timer != null) {\n this.timer.cancel();\n this.timer = undefined;\n }\n await this.inFlight;\n this.assertActive();\n }\n\n private renew(): void {\n if (this.error != null || this.inFlight != null) {\n return;\n }\n const renewal = this.client.extendLease(this.job.id, {\n fencingToken: this.job.fencingToken,\n leaseMs: this.leaseMs,\n leaseToken: this.job.leaseToken,\n partitionKey: this.job.partitionKey,\n returnOkOnSuccess: true\n }).then(\n () => undefined,\n (error: unknown) => {\n this.error = new LeaseRenewalError(error);\n if (this.timer != null) {\n this.timer.cancel();\n this.timer = undefined;\n }\n }\n );\n this.inFlight = renewal;\n void renewal.finally(() => {\n if (this.inFlight === renewal) {\n this.inFlight = undefined;\n }\n });\n }\n}\n\nfunction snapshotLeasedJob(job: LeasedJob): ClaimedItem {\n const leaseToken = Buffer.from(job.leaseToken);\n const snapshot: ClaimedItem = {\n fencingToken: job.fencingToken,\n id: job.id,\n leaseToken,\n partitionKey: job.partitionKey,\n runState: job.runState,\n state: job.state,\n type: job.type\n };\n const wire = (job as ClaimedItem)[CLAIMED_ITEM_WIRE];\n if (wire != null) {\n Object.defineProperty(snapshot, CLAIMED_ITEM_WIRE, {\n enumerable: false,\n value: { ...wire, leaseToken }\n });\n }\n return snapshot;\n}\n\nexport function workerConcurrency(options: WorkerConfig): number {\n return positiveInteger(options.concurrency ?? options.workers, 1);\n}\n\nexport function workerRefillStrategy(options: WorkerConfig): \"continuous\" | \"wave\" {\n return options.refillStrategy === \"wave\" ? \"wave\" : \"continuous\";\n}\n\nexport function workerSignalAborted(signal?: AbortSignal): boolean {\n return signal?.aborted === true;\n}\n\nexport function workerErrorPayload(error: unknown, options: WorkerConfig, codec: Codec): unknown {\n const payload = error instanceof Error ? {\n message: error.message,\n name: error.name,\n ...(options.includeErrorStack === true && error.stack != null ? { stack: error.stack } : {})\n } : error;\n if (!(codec instanceof RawCodec)) return payload;\n if (\n payload == null ||\n typeof payload === \"string\" ||\n Buffer.isBuffer(payload) ||\n payload instanceof Uint8Array\n ) {\n return payload;\n }\n try {\n const encoded = JSON.stringify(payload);\n if (encoded != null) return encoded;\n } catch {\n // Fall through to a safe textual representation for circular values and BigInts.\n }\n switch (typeof payload) {\n case \"bigint\":\n case \"boolean\":\n case \"number\":\n return String(payload);\n case \"symbol\":\n return payload.description ?? \"Worker handler threw a Symbol\";\n case \"function\":\n return payload.name === \"\" ? \"Worker handler threw a function\" : payload.name;\n case \"string\":\n return payload;\n case \"object\":\n return \"Unserializable worker error\";\n case \"undefined\":\n return \"Worker handler threw undefined\";\n }\n return \"Unknown worker error\";\n}\n\nexport function workerBatchSize(\n options: WorkerConfig,\n flowManyBatchLimit = DEFAULT_FLOW_MANY_BATCH_LIMIT\n): number {\n return Math.min(\n positiveInteger(options.batchSize, 10),\n positiveInteger(flowManyBatchLimit, DEFAULT_FLOW_MANY_BATCH_LIMIT)\n );\n}\n\nexport function workerClaimLimit(\n options: WorkerConfig,\n flowManyBatchLimit = DEFAULT_FLOW_MANY_BATCH_LIMIT\n): number {\n return Math.min(workerBatchSize(options, flowManyBatchLimit), workerConcurrency(options));\n}\n\nexport function workerDrainBatches(options: WorkerConfig): number {\n return positiveInteger(options.claimDrainBatches, 1);\n}\n\nexport function workerLeaseMs(options: WorkerConfig, fallback = 30_000): number {\n return positiveInteger(options.leaseMs, positiveInteger(fallback, 30_000));\n}\n\nexport function workerIdleSleepMs(options: WorkerConfig): number {\n return nonNegativeDuration(options.idleSleepMs, 250);\n}\n\n/**\n * A native blocking claim cannot be abandoned safely: it may lease work just\n * before its late response arrives. Bound each server wait instead, so abort\n * is observed at a response boundary without losing a claimed job.\n */\nexport function workerClaimBlockMs(options: WorkerConfig, useBlocking: boolean): number | undefined {\n if (!useBlocking || options.blockMs == null) {\n return undefined;\n }\n if (options.signal == null || !Number.isFinite(options.blockMs) || options.blockMs < 0) {\n return options.blockMs;\n }\n const abortPollMs = positiveInteger(options.abortPollMs, 1_000);\n return options.blockMs === 0 ? abortPollMs : Math.min(Math.trunc(options.blockMs), abortPollMs);\n}\n\nexport function workerMaxIdleSleepMs(options: WorkerConfig, idleSleepMs = workerIdleSleepMs(options)): number {\n return Math.max(idleSleepMs, nonNegativeDuration(options.maxIdleSleepMs, 5_000));\n}\n\n/** Advance exponential idle backoff without trapping a zero initial delay at zero. */\nexport function nextWorkerIdleSleepMs(currentIdleSleepMs: number, maxIdleSleepMs: number): number {\n if (maxIdleSleepMs === 0) return 0;\n return Math.min(maxIdleSleepMs, Math.max(1, currentIdleSleepMs * 2));\n}\n\ninterface ContinuousWorkerPoolOptions<T> {\n claim: (limit: number, useBlocking: boolean) => Promise<readonly T[]>;\n concurrency: number;\n handle: (item: T) => Promise<void | ContinuousWorkerHandleResult<T>>;\n idleSleepMs?: number;\n maxClaimSize: number;\n maxIdleSleepMs?: number;\n onFailure?: () => void;\n refillPartialClaims?: boolean;\n refillDelayMs?: number;\n signal?: AbortSignal;\n}\n\nexport interface ContinuousWorkerHandleResult<T> {\n readonly error?: unknown;\n readonly items?: readonly T[];\n}\n\n/** @internal */\nexport async function runContinuousWorkerPool<T>(options: ContinuousWorkerPoolOptions<T>): Promise<void> {\n const concurrency = positiveInteger(options.concurrency, 1);\n const maxClaimSize = positiveInteger(options.maxClaimSize, concurrency);\n const initialIdleSleepMs = nonNegativeDuration(options.idleSleepMs, 250);\n const maxIdleSleepMs = Math.max(\n initialIdleSleepMs,\n nonNegativeDuration(options.maxIdleSleepMs, 5_000)\n );\n const refillDelayMs = nonNegativeInteger(options.refillDelayMs, 0);\n const active = new Set<Promise<void>>();\n const pending: T[] = [];\n let pendingIndex = 0;\n const notifier = new WorkerNotifier();\n let failure: { error: unknown } | undefined;\n let currentIdleSleepMs = initialIdleSleepMs;\n let coalesceBeforeClaim = false;\n\n const recordFailure = (error: unknown): void => {\n if (failure == null) {\n failure = { error };\n try {\n options.onFailure?.();\n } catch {\n // Failure notification is advisory; preserve the originating error.\n }\n }\n notifier.notify();\n };\n const start = (item: T): void => {\n const task = Promise.resolve()\n .then(async () => {\n const result = await options.handle(item);\n if (result != null) {\n enqueue(result.items ?? []);\n if (Object.hasOwn(result, \"error\")) {\n recordFailure(result.error);\n }\n }\n })\n .catch(recordFailure)\n .finally(() => {\n active.delete(task);\n notifier.notify();\n });\n active.add(task);\n };\n const enqueue = (items: readonly T[]): void => {\n for (const item of items) pending.push(item);\n };\n const startAvailable = (): void => {\n while (active.size < concurrency && pendingIndex < pending.length) {\n const item = pending[pendingIndex] as T;\n pendingIndex += 1;\n start(item);\n }\n if (pendingIndex === pending.length) {\n pending.length = 0;\n pendingIndex = 0;\n }\n };\n const onAbort = (): void => notifier.notify();\n options.signal?.addEventListener(\"abort\", onAbort);\n\n try {\n while (!workerSignalAborted(options.signal) && failure == null) {\n startAvailable();\n if (active.size >= concurrency) {\n await notifier.wait();\n coalesceBeforeClaim = true;\n continue;\n }\n\n if (coalesceBeforeClaim && active.size > 0) {\n await waitForRefillWindow(refillDelayMs, options.signal);\n coalesceBeforeClaim = false;\n if (workerSignalAborted(options.signal) || failure != null) {\n continue;\n }\n }\n\n const limit = Math.min(maxClaimSize, concurrency - active.size);\n let items: readonly T[];\n try {\n items = await options.claim(limit, active.size === 0);\n } catch (error) {\n recordFailure(error);\n break;\n }\n\n // A server may over-return. Retain every leased job, but never exceed handler concurrency.\n enqueue(items);\n startAvailable();\n if (items.length > 0) {\n currentIdleSleepMs = initialIdleSleepMs;\n }\n if (workerSignalAborted(options.signal) || failure != null) {\n break;\n }\n if (\n items.length >= limit ||\n (items.length > 0 && options.refillPartialClaims === true)\n ) {\n continue;\n }\n\n const waitResult = await notifier.wait(\n active.size >= concurrency ? undefined : currentIdleSleepMs\n );\n if (waitResult === \"timeout\") {\n currentIdleSleepMs = nextWorkerIdleSleepMs(currentIdleSleepMs, maxIdleSleepMs);\n } else {\n coalesceBeforeClaim = true;\n }\n }\n } catch (error) {\n recordFailure(error);\n } finally {\n options.signal?.removeEventListener(\"abort\", onAbort);\n // Claims already received must still be finalized after shutdown or another\n // handler failure. An active handler may return replacement leases while\n // this drain is already in progress, so wait for the pool to become fully\n // quiescent instead of taking a one-time snapshot of pending work.\n while (true) {\n startAvailable();\n if (pendingIndex >= pending.length && active.size === 0) break;\n await notifier.wait();\n }\n }\n\n if (failure != null) {\n throw failure.error;\n }\n}\n\nexport function normalizeWorkflowWorkerConfig<T extends WorkerConfig & { states?: string[] }>(options: T): T {\n const captured = snapshotWorkerConfig(options);\n if (captured.exceptionPolicy != null) normalizeExceptionPolicy(captured.exceptionPolicy);\n if (captured.profile !== \"throughput\") return captured;\n return Object.freeze({\n batchSize: 500,\n claimPayload: false,\n ...captured\n });\n}\n\nfunction positiveInteger(value: number | undefined, fallback: number): number {\n return value == null || !Number.isFinite(value) ? fallback : Math.max(1, Math.trunc(value));\n}\n\nfunction nonNegativeInteger(value: number | undefined, fallback: number): number {\n return value == null || !Number.isFinite(value) ? fallback : Math.max(0, Math.trunc(value));\n}\n\nfunction nonNegativeDuration(value: number | undefined, fallback: number): number {\n return value == null || !Number.isFinite(value) || value < 0\n ? fallback\n : Math.trunc(value);\n}\n\nclass WorkerNotifier {\n private readonly listeners = new Set<() => void>();\n\n notify(): void {\n const listeners = [...this.listeners];\n this.listeners.clear();\n for (const listener of listeners) {\n listener();\n }\n }\n\n async wait(timeoutMs?: number): Promise<\"notified\" | \"timeout\"> {\n return await new Promise((resolve) => {\n let timer: LongTimer | undefined;\n const listener = (): void => {\n timer?.cancel();\n resolve(\"notified\");\n };\n this.listeners.add(listener);\n if (timeoutMs != null) {\n timer = setLongTimeout(() => {\n this.listeners.delete(listener);\n resolve(\"timeout\");\n }, timeoutMs);\n }\n });\n }\n}\n\nasync function waitForRefillWindow(delayMs: number, signal?: AbortSignal): Promise<void> {\n if (workerSignalAborted(signal)) {\n return;\n }\n if (delayMs === 0) {\n await new Promise<void>((resolve) => setImmediate(resolve));\n return;\n }\n try {\n await sleep(delayMs, signal);\n } catch (error) {\n if (!workerSignalAborted(signal)) {\n throw error;\n }\n }\n}\n","import { randomUUID } from \"node:crypto\";\nimport type { FerricStoreClient } from \"./client.js\";\nimport {\n type ClaimedItem,\n type CreateItem,\n type FlowRecord,\n type MaxActiveMs,\n type StateMeta,\n type WorkerConfig\n} from \"./types.js\";\nimport { type CommandArgument } from \"./internal.js\";\nimport { QueueWorker } from \"./queue-worker.js\";\nimport { snapshotFlowClientOptions } from \"./flow-client-options.js\";\nexport { QueueWorker } from \"./queue-worker.js\";\nexport { QueueCompletionError } from \"./queue-completion-error.js\";\n\nexport type QueueJob = FlowRecord | ClaimedItem;\nexport type QueueHandler = (job: QueueJob) => Promise<unknown> | unknown;\nexport type QueueBatchHandler = (jobs: QueueJob[]) => Promise<unknown> | unknown;\n\nexport interface QueueOptions {\n type: string;\n state?: string;\n worker?: string;\n}\n\nexport interface QueueWorkerResult {\n claimed: number;\n completed: number;\n retried: number;\n failed: number;\n}\n\nexport class QueueClient {\n readonly flow: FerricStoreClient;\n\n constructor(flow: FerricStoreClient) {\n this.flow = flow;\n }\n\n queue(options: QueueOptions | string): Queue {\n return new Queue(this.flow, typeof options === \"string\" ? { type: options } : options);\n }\n}\n\nexport class Queue {\n readonly client: FerricStoreClient;\n readonly type: string;\n readonly state: string;\n readonly defaultWorker: string;\n\n constructor(client: FerricStoreClient, options: QueueOptions) {\n const captured = snapshotFlowClientOptions(options, \"Queue\");\n this.client = client;\n this.type = captured.type;\n this.state = captured.state ?? \"queued\";\n this.defaultWorker = captured.worker ?? `${this.type}-${randomUUID()}`;\n }\n\n async enqueue(id: string, options: {\n attributes?: Record<string, CommandArgument>;\n payload?: unknown;\n partitionKey?: string;\n runAtMs?: number;\n nowMs?: number;\n priority?: number;\n idempotent?: boolean;\n retentionTtlMs?: number;\n maxActiveMs?: MaxActiveMs;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n stateMeta?: StateMeta;\n returnRecord?: boolean;\n } = {}): Promise<FlowRecord | Buffer | unknown> {\n return await this.client.enqueue(id, {\n ...options,\n state: this.state,\n type: this.type\n });\n }\n\n async enqueueMany(items: CreateItem[], options: {\n attributes?: Record<string, CommandArgument>;\n partitionKey?: string;\n autoPartitionBatchSize?: number;\n autoPartitionConcurrency?: number;\n runAtMs?: number;\n nowMs?: number;\n priority?: number;\n idempotent?: boolean;\n independent?: boolean;\n retentionTtlMs?: number;\n maxActiveMs?: MaxActiveMs;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n stateMeta?: StateMeta;\n } = {}): Promise<unknown[] | unknown> {\n return await this.client.enqueueMany(items, {\n ...options,\n state: this.state,\n type: this.type\n });\n }\n\n worker(options: WorkerConfig = {}): QueueWorker {\n return new QueueWorker(this, options);\n }\n}\n","import { completeJobsResultError, type ClaimDueOptions } from \"./client.js\";\nimport type { Queue, QueueJob } from \"./queue.js\";\nimport type { WorkerConfig } from \"./types.js\";\nimport {\n LeaseRenewalGuard,\n type ContinuousWorkerHandleResult,\n workerBatchSize,\n workerClaimBlockMs,\n workerLeaseMs,\n workerSignalAborted\n} from \"./worker-internal.js\";\n\ninterface ContinuousQueueCompletion {\n guard: LeaseRenewalGuard;\n job: QueueJob;\n reject: (error: unknown) => void;\n resolve: (result?: ContinuousWorkerHandleResult<QueueJob>) => void;\n}\n\nexport function queueClaimOptions(\n queue: Queue,\n options: WorkerConfig,\n overrides: {\n readonly limit?: number;\n readonly partitionKey?: string;\n readonly partitionKeys?: string[];\n readonly useBlocking?: boolean;\n } = {}\n): ClaimDueOptions {\n const compact = options.claimPayload === false;\n return {\n blockMs: workerClaimBlockMs(options, overrides.useBlocking !== false),\n includeState: false,\n includeAttributes: options.claimAttributes,\n jobOnly: compact,\n leaseMs: workerLeaseMs(options),\n limit: overrides.limit ?? workerBatchSize(options, queue.client.flowManyBatchLimit),\n nowMs: options.nowMs,\n partitionKey: overrides.partitionKey ?? options.partitionKey,\n partitionKeys: overrides.partitionKeys ?? options.partitionKeys,\n payload: compact ? false : true,\n priority: options.priority,\n reclaimExpired: options.reclaimExpired,\n reclaimRatio: options.reclaimRatio,\n state: queue.state,\n valueMaxBytes: options.valueMaxBytes,\n values: options.claimValues,\n worker: options.worker ?? queue.defaultWorker\n };\n}\n\nexport class QueueCompletionBatcher {\n private readonly batchSize: number;\n private readonly maxDepth: number;\n private readonly inFlight = new Set<Promise<void>>();\n private readonly pending: ContinuousQueueCompletion[] = [];\n private closed = false;\n private refillEnabled: boolean;\n private scheduled?: NodeJS.Immediate;\n\n constructor(\n private readonly queue: Queue,\n private readonly options: WorkerConfig\n ) {\n this.batchSize = workerBatchSize(options, queue.client.flowManyBatchLimit);\n this.maxDepth = finitePositiveInteger(options.completeAsyncDepth ?? 1, 1);\n this.refillEnabled = options.fuseCompleteClaim !== false;\n }\n\n async complete(\n job: QueueJob,\n guard: LeaseRenewalGuard\n ): Promise<void | ContinuousWorkerHandleResult<QueueJob>> {\n if (this.closed) throw new Error(\"Queue completion batcher is closed\");\n const completion = new Promise<void | ContinuousWorkerHandleResult<QueueJob>>((resolve, reject) => {\n this.pending.push({ guard, job, reject, resolve });\n });\n this.pump(false);\n this.schedulePartialFlush();\n return await completion;\n }\n\n disableRefill(): void {\n this.refillEnabled = false;\n }\n\n async close(): Promise<void> {\n this.closed = true;\n if (this.scheduled != null) {\n clearImmediate(this.scheduled);\n this.scheduled = undefined;\n }\n while (this.pending.length > 0 || this.inFlight.size > 0) {\n this.pump(true);\n await Promise.all([...this.inFlight]);\n }\n }\n\n private schedulePartialFlush(): void {\n if (this.closed || this.pending.length === 0 || this.scheduled != null) return;\n this.scheduled = setImmediate(() => {\n this.scheduled = undefined;\n this.pump(true);\n });\n }\n\n private pump(forcePartial: boolean): void {\n while (\n this.inFlight.size < this.maxDepth &&\n this.pending.length > 0 &&\n (forcePartial || this.pending.length >= this.batchSize)\n ) {\n const entries = this.pending.splice(0, this.batchSize);\n const operation = this.flushBatch(entries).finally(() => {\n this.inFlight.delete(operation);\n this.pump(false);\n this.schedulePartialFlush();\n });\n this.inFlight.add(operation);\n }\n }\n\n private async flushBatch(entries: ContinuousQueueCompletion[]): Promise<void> {\n const stopped = await Promise.allSettled(entries.map(async (entry) => await entry.guard.stop()));\n const ready: ContinuousQueueCompletion[] = [];\n for (let index = 0; index < entries.length; index += 1) {\n const entry = entries[index];\n const result = stopped[index];\n if (entry == null || result == null) continue;\n if (result.status === \"rejected\") entry.reject(result.reason);\n else ready.push(entry);\n }\n if (ready.length === 0) return;\n\n let claimed: QueueJob[] = [];\n let operationError: Error | undefined;\n try {\n if (this.refillEnabled && !this.closed && !workerSignalAborted(this.options.signal)) {\n const result = await this.queue.client.completeJobsAndClaimJobs(\n ready.map((entry) => entry.job),\n this.queue.type,\n queueClaimOptions(this.queue, this.options, { limit: ready.length, useBlocking: false }),\n { independent: this.options.completeIndependent ?? true }\n );\n claimed = result.claimed;\n operationError = result.completionError ?? result.claimError;\n } else {\n const response = await this.queue.client.completeJobs(ready.map((entry) => entry.job), {\n independent: this.options.completeIndependent ?? true,\n returnOkOnSuccess: true\n });\n operationError = completeJobsResultError(response, ready.length);\n }\n } catch (error) {\n this.disableRefill();\n for (const entry of ready) entry.reject(error);\n return;\n }\n\n if (operationError != null) this.disableRefill();\n for (let index = 0; index < ready.length; index += 1) {\n const entry = ready[index];\n if (entry == null) continue;\n if (index === 0 && (claimed.length > 0 || operationError != null)) {\n entry.resolve({\n ...(claimed.length === 0 ? {} : { items: claimed }),\n ...(operationError == null ? {} : { error: operationError })\n });\n } else if (operationError != null) entry.resolve({ error: operationError });\n else entry.resolve();\n }\n }\n}\n\nfunction finitePositiveInteger(value: number, fallback: number): number {\n return Number.isFinite(value) ? Math.max(1, Math.trunc(value)) : fallback;\n}\n","/** Async terminal-write failure with the number of durable successes drained first. */\nexport class QueueCompletionError extends Error {\n readonly completed: number;\n\n constructor(cause: unknown, completed: number) {\n const detail = cause instanceof Error\n ? cause.message\n : typeof cause === \"string\"\n ? cause\n : \"Queue completion failed\";\n super(\n completed === 0 ? detail : `${detail} after ${completed} successful completion(s)`,\n { cause }\n );\n this.name = \"QueueCompletionError\";\n this.completed = completed;\n }\n}\n","import { FerricStoreError } from \"./errors.js\";\nimport { completeJobsResultError } from \"./client.js\";\nimport type { CompleteOutcome, FailOutcome, RetryOutcome } from \"./outcomes.js\";\nimport { normalizeExceptionPolicy, type WorkerConfig } from \"./types.js\";\nimport { unwrapPipelineResponse } from \"./protocol.js\";\nimport { LeaseRenewalGuard } from \"./worker-internal.js\";\nimport { snapshotWorkerConfig } from \"./worker-config.js\";\nimport type { QueueJob } from \"./queue.js\";\n\nexport async function stopQueueBatchGuards(\n jobs: readonly QueueJob[],\n guards: readonly LeaseRenewalGuard[]\n): Promise<{ readonly error?: Error; readonly jobs: QueueJob[] }> {\n const stopped = await Promise.allSettled(guards.map(async (guard) => await guard.stop()));\n const ready: QueueJob[] = [];\n let firstFailure: { readonly error: Error } | undefined;\n for (let index = 0; index < stopped.length; index += 1) {\n const result = stopped[index];\n const job = jobs[index];\n if (result == null || job == null) continue;\n if (result.status === \"rejected\") {\n firstFailure ??= {\n error: result.reason instanceof Error\n ? result.reason\n : new Error(\"Queue lease guard failed\", { cause: result.reason })\n };\n } else {\n ready.push(job);\n }\n }\n return firstFailure == null ? { jobs: ready } : { error: firstFailure.error, jobs: ready };\n}\n\nexport function commonQueuePartition(jobs: readonly QueueJob[]): string | undefined {\n const first = jobs[0]?.partitionKey;\n return first != null && jobs.every((job) => job.partitionKey === first) ? first : undefined;\n}\n\nexport function assertQueueManyMutationSuccess(response: unknown, expectedCount: number, command: string): void {\n if (response instanceof Error) throw response;\n if (queueOkLike(response)) return;\n let results: unknown[];\n try {\n results = unwrapPipelineResponse(response, { throwOnItemError: false }, expectedCount);\n } catch (error) {\n throw new FerricStoreError(`${command} returned an unexpected response`, {\n cause: error,\n raw: response\n });\n }\n for (const result of results) {\n if (result instanceof Error) throw result;\n if (!queueOkLike(result)) {\n throw new FerricStoreError(`${command} returned an unexpected per-item result`, {\n raw: result\n });\n }\n }\n}\n\nfunction queueOkLike(value: unknown): boolean {\n if (value === true || value === 1) return true;\n if (typeof value === \"string\") return value.toUpperCase() === \"OK\";\n return (Buffer.isBuffer(value) || value instanceof Uint8Array) &&\n Buffer.from(value).toString(\"utf8\").toUpperCase() === \"OK\";\n}\n\nexport function assertQueueCompletionSuccess(response: unknown, expectedCount: number): void {\n const error = completeJobsResultError(response, expectedCount);\n if (error != null) throw error;\n}\n\nexport function isBatchableComplete(outcome: CompleteOutcome | RetryOutcome | FailOutcome): outcome is CompleteOutcome {\n return (\n outcome.kind === \"complete\" &&\n outcome.payload === undefined &&\n outcome.result === undefined &&\n outcome.ttlMs === undefined &&\n outcome.values === undefined &&\n outcome.valueRefs === undefined &&\n outcome.dropValues === undefined &&\n outcome.overrideValues === undefined &&\n outcome.attributesMerge === undefined &&\n outcome.attributesDelete === undefined &&\n outcome.stateMeta === undefined\n );\n}\n\nexport function normalizeWorkerConfig(options: WorkerConfig): WorkerConfig {\n const captured = snapshotWorkerConfig(options);\n if (captured.exceptionPolicy != null) normalizeExceptionPolicy(captured.exceptionPolicy);\n if (captured.profile !== \"throughput\") return captured;\n return Object.freeze({\n batchSize: 500,\n claimPayload: false,\n completeAsyncDepth: 8,\n completeIndependent: true,\n ...captured\n });\n}\n\nexport function finiteNonNegativeInteger(value: number | undefined, fallback: number): number {\n return value == null || !Number.isFinite(value) ? fallback : Math.max(0, Math.trunc(value));\n}\n","import type { Queue, QueueWorkerResult } from \"./queue.js\";\nimport { QueueCompletionError } from \"./queue-completion-error.js\";\nimport type { QueuePendingCompletions } from \"./queue-pending-completions.js\";\nimport { assertQueueCompletionSuccess, finiteNonNegativeInteger } from \"./queue-worker-utilities.js\";\nimport type { ClaimedItem, WorkerConfig } from \"./types.js\";\nimport { workerBatchSize } from \"./worker-internal.js\";\n\nexport async function flushQueueCompletions(\n queue: Queue,\n options: WorkerConfig,\n pending: QueuePendingCompletions,\n jobs: ClaimedItem[],\n result: QueueWorkerResult\n): Promise<void> {\n if (jobs.length === 0) return;\n const depth = finiteNonNegativeInteger(options.completeAsyncDepth, 0);\n const batchSize = Math.min(workerBatchSize(options, queue.client.flowManyBatchLimit), jobs.length);\n if (depth > 0) {\n let completed = 0;\n let firstFailure: { readonly error: unknown } | undefined;\n const drainPending = async (all: boolean): Promise<void> => {\n try {\n const count = all ? await pending.drain(true) : await pending.drainOne();\n completed += count;\n result.completed += count;\n } catch (error) {\n if (error instanceof QueueCompletionError) {\n completed += error.completed;\n result.completed += error.completed;\n firstFailure ??= { error: error.cause ?? error };\n } else {\n firstFailure ??= { error };\n }\n }\n };\n for (let index = 0; index < jobs.length; index += batchSize) {\n while (pending.size >= depth) await drainPending(false);\n pending.enqueue(jobs.slice(index, index + batchSize));\n }\n if (firstFailure != null) {\n await drainPending(true);\n throw new QueueCompletionError(firstFailure.error, completed);\n }\n return;\n }\n\n if (jobs.length <= batchSize) {\n const response = await queue.client.completeJobs(jobs, {\n independent: options.completeIndependent ?? true,\n returnOkOnSuccess: true\n });\n assertQueueCompletionSuccess(response, jobs.length);\n result.completed += jobs.length;\n return;\n }\n\n let completed = 0;\n let firstFailure: { readonly error: unknown } | undefined;\n for (let index = 0; index < jobs.length; index += batchSize) {\n const batch = jobs.slice(index, index + batchSize);\n try {\n const response = await queue.client.completeJobs(batch, {\n independent: options.completeIndependent ?? true,\n returnOkOnSuccess: true\n });\n assertQueueCompletionSuccess(response, batch.length);\n result.completed += batch.length;\n completed += batch.length;\n } catch (error) {\n firstFailure ??= { error };\n }\n }\n if (firstFailure != null) throw new QueueCompletionError(firstFailure.error, completed);\n}\n","import { fail, retry, type CompleteOutcome, type FailOutcome, type RetryOutcome } from \"./outcomes.js\";\nimport type { Queue, QueueJob } from \"./queue.js\";\nimport { normalizeExceptionPolicy, type WorkerConfig } from \"./types.js\";\nimport {\n assertQueueCompletionSuccess,\n assertQueueManyMutationSuccess,\n commonQueuePartition\n} from \"./queue-worker-utilities.js\";\nimport { workerBatchSize, workerErrorPayload } from \"./worker-internal.js\";\n\ntype QueueOutcome = CompleteOutcome | RetryOutcome | FailOutcome;\n\nexport async function applyQueueOutcome(queue: Queue, job: QueueJob, outcome: QueueOutcome): Promise<void> {\n if (outcome.kind === \"retry\") {\n await queue.client.retry(job.id, {\n attributesDelete: outcome.attributesDelete,\n attributesMerge: outcome.attributesMerge,\n dropValues: outcome.dropValues,\n error: outcome.error,\n fencingToken: job.fencingToken,\n leaseToken: job.leaseToken,\n overrideValues: outcome.overrideValues,\n partitionKey: job.partitionKey,\n payload: outcome.payload,\n runAtMs: outcome.runAtMs,\n stateMeta: outcome.stateMeta,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n return;\n }\n if (outcome.kind === \"fail\") {\n await queue.client.fail(job.id, {\n attributesDelete: outcome.attributesDelete,\n attributesMerge: outcome.attributesMerge,\n dropValues: outcome.dropValues,\n error: outcome.error,\n fencingToken: job.fencingToken,\n leaseToken: job.leaseToken,\n overrideValues: outcome.overrideValues,\n partitionKey: job.partitionKey,\n payload: outcome.payload,\n stateMeta: outcome.stateMeta,\n ttlMs: outcome.ttlMs,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n return;\n }\n await queue.client.complete(job.id, {\n attributesDelete: outcome.attributesDelete,\n attributesMerge: outcome.attributesMerge,\n dropValues: outcome.dropValues,\n fencingToken: job.fencingToken,\n leaseToken: job.leaseToken,\n overrideValues: outcome.overrideValues,\n partitionKey: job.partitionKey,\n payload: outcome.payload,\n result: outcome.result,\n stateMeta: outcome.stateMeta,\n ttlMs: outcome.ttlMs,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n}\n\nexport async function applyQueueBatchOutcome(\n queue: Queue,\n options: WorkerConfig,\n jobs: QueueJob[],\n outcome: QueueOutcome\n): Promise<void> {\n if (jobs.length === 0) return;\n const independent = options.completeIndependent ?? true;\n const batchSize = Math.min(workerBatchSize(options, queue.client.flowManyBatchLimit), jobs.length);\n let firstFailure: { readonly error: unknown } | undefined;\n for (let index = 0; index < jobs.length; index += batchSize) {\n const batch = jobs.slice(index, index + batchSize);\n try {\n if (outcome.kind === \"retry\") {\n const response = await queue.client.retryMany(commonQueuePartition(batch), batch, {\n attributesDelete: outcome.attributesDelete,\n attributesMerge: outcome.attributesMerge,\n dropValues: outcome.dropValues,\n error: outcome.error,\n independent,\n overrideValues: outcome.overrideValues,\n payload: outcome.payload,\n returnOkOnSuccess: true,\n runAtMs: outcome.runAtMs,\n stateMeta: outcome.stateMeta,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n assertQueueManyMutationSuccess(response, batch.length, \"FLOW.RETRY_MANY\");\n } else if (outcome.kind === \"fail\") {\n const response = await queue.client.failMany(commonQueuePartition(batch), batch, {\n attributesDelete: outcome.attributesDelete,\n attributesMerge: outcome.attributesMerge,\n dropValues: outcome.dropValues,\n error: outcome.error,\n independent,\n overrideValues: outcome.overrideValues,\n payload: outcome.payload,\n returnOkOnSuccess: true,\n stateMeta: outcome.stateMeta,\n ttlMs: outcome.ttlMs,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n assertQueueManyMutationSuccess(response, batch.length, \"FLOW.FAIL_MANY\");\n } else {\n const response = await queue.client.completeJobs(batch, {\n attributesDelete: outcome.attributesDelete,\n attributesMerge: outcome.attributesMerge,\n dropValues: outcome.dropValues,\n independent,\n overrideValues: outcome.overrideValues,\n payload: outcome.payload,\n result: outcome.result,\n returnOkOnSuccess: true,\n stateMeta: outcome.stateMeta,\n ttlMs: outcome.ttlMs,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n assertQueueCompletionSuccess(response, batch.length);\n }\n } catch (error) {\n firstFailure ??= { error };\n }\n }\n if (firstFailure != null) throw firstFailure.error;\n}\n\nexport async function applyQueueException(\n queue: Queue,\n options: WorkerConfig,\n job: QueueJob,\n error: unknown\n): Promise<void> {\n const policy = normalizeExceptionPolicy(options.exceptionPolicy);\n if (policy === \"raise\") throw error;\n const payload = workerErrorPayload(error, options, queue.client.codec);\n await applyQueueOutcome(queue, job, policy === \"fail\" ? fail({ error: payload }) : retry({ error: payload }));\n}\n","import type { Queue } from \"./queue.js\";\nimport { QueueCompletionError } from \"./queue-completion-error.js\";\nimport { assertQueueCompletionSuccess } from \"./queue-worker-utilities.js\";\nimport type { ClaimedItem, WorkerConfig } from \"./types.js\";\n\ninterface PendingCompletion {\n done: boolean;\n error?: unknown;\n failed: boolean;\n promise: Promise<number>;\n value: number;\n}\n\nexport class QueuePendingCompletions {\n private readonly pending: PendingCompletion[] = [];\n private readonly settledWaiters = new Set<() => void>();\n\n constructor(\n private readonly queue: Queue,\n private readonly options: WorkerConfig\n ) {}\n\n get size(): number {\n return this.pending.length;\n }\n\n enqueue(jobs: ClaimedItem[]): void {\n const pending: PendingCompletion = {\n done: false,\n failed: false,\n promise: Promise.resolve(0),\n value: 0\n };\n pending.promise = this.queue.client.completeJobs(jobs, {\n independent: this.options.completeIndependent ?? true,\n returnOkOnSuccess: true\n }).then(\n (response) => {\n try {\n assertQueueCompletionSuccess(response, jobs.length);\n pending.done = true;\n pending.value = jobs.length;\n return jobs.length;\n } catch (error) {\n pending.done = true;\n pending.error = error;\n pending.failed = true;\n return 0;\n }\n },\n (error: unknown) => {\n pending.done = true;\n pending.error = error;\n pending.failed = true;\n return 0;\n }\n ).finally(() => this.notifySettled());\n this.pending.push(pending);\n }\n\n async drain(block: boolean): Promise<number> {\n if (block && this.pending.length > 0) {\n await Promise.all(this.pending.map((pending) => pending.promise));\n }\n return this.collectSettled();\n }\n\n async drainOne(): Promise<number> {\n const initialSize = this.pending.length;\n const completed = this.collectSettled();\n if (this.pending.length < initialSize || this.pending.length === 0) return completed;\n await new Promise<void>((resolve) => this.settledWaiters.add(resolve));\n return this.collectSettled();\n }\n\n private collectSettled(): number {\n let completed = 0;\n let firstFailure: { readonly error: unknown } | undefined;\n let remaining = 0;\n for (const pending of this.pending) {\n if (!pending.done) {\n this.pending[remaining] = pending;\n remaining += 1;\n continue;\n }\n if (pending.failed) firstFailure ??= { error: pending.error };\n else completed += pending.value;\n }\n this.pending.length = remaining;\n if (firstFailure != null) throw new QueueCompletionError(firstFailure.error, completed);\n return completed;\n }\n\n private notifySettled(): void {\n const waiters = [...this.settledWaiters];\n this.settledWaiters.clear();\n for (const resolve of waiters) resolve();\n }\n}\n","import { sleep } from \"./internal.js\";\nimport type { QueueHandler, QueueWorkerResult } from \"./queue.js\";\nimport type { WorkerConfig } from \"./types.js\";\nimport {\n nextWorkerIdleSleepMs,\n workerIdleSleepMs,\n workerMaxIdleSleepMs,\n workerSignalAborted\n} from \"./worker-internal.js\";\n\ninterface WaveWorker {\n flush(): Promise<number>;\n runOnce(handler: QueueHandler): Promise<QueueWorkerResult>;\n}\n\n/** Run claim waves with bounded idle backoff until cancellation. */\nexport async function runQueueWorkerInWaves(\n worker: WaveWorker,\n handler: QueueHandler,\n options: WorkerConfig\n): Promise<void> {\n const idleSleepMs = workerIdleSleepMs(options);\n let currentIdleSleepMs = idleSleepMs;\n const maxIdleSleepMs = workerMaxIdleSleepMs(options, idleSleepMs);\n\n try {\n while (!workerSignalAborted(options.signal)) {\n const result = await worker.runOnce(handler);\n if (result.claimed === 0) {\n if (workerSignalAborted(options.signal)) break;\n try {\n await sleep(currentIdleSleepMs, options.signal);\n } catch (error) {\n if (!workerSignalAborted(options.signal)) throw error;\n break;\n }\n currentIdleSleepMs = nextWorkerIdleSleepMs(currentIdleSleepMs, maxIdleSleepMs);\n } else {\n currentIdleSleepMs = idleSleepMs;\n }\n }\n } finally {\n await worker.flush();\n }\n}\n","import { complete, fail, isOutcome, retry, type CompleteOutcome, type FailOutcome, type Outcome, type RetryOutcome } from \"./outcomes.js\";\nimport { normalizeExceptionPolicy, type ClaimedItem, type WorkerConfig } from \"./types.js\";\nimport { QueueCompletionBatcher, queueClaimOptions } from \"./queue-completion-batcher.js\";\nimport { flushQueueCompletions } from \"./queue-completion-flush.js\";\nimport type { Queue, QueueBatchHandler, QueueHandler, QueueJob, QueueWorkerResult } from \"./queue.js\";\nimport {\n finiteNonNegativeInteger,\n isBatchableComplete,\n normalizeWorkerConfig,\n stopQueueBatchGuards\n} from \"./queue-worker-utilities.js\";\nimport {\n LeaseRenewalGuard,\n runContinuousWorkerPool,\n type ContinuousWorkerHandleResult,\n workerBatchSize,\n workerClaimLimit,\n workerConcurrency,\n workerDrainBatches,\n workerErrorPayload,\n workerLeaseMs,\n workerRefillStrategy\n} from \"./worker-internal.js\";\nimport { applyQueueBatchOutcome, applyQueueException, applyQueueOutcome } from \"./queue-worker-outcomes.js\";\nimport { QueuePendingCompletions } from \"./queue-pending-completions.js\";\nimport { runQueueWorkerInWaves } from \"./queue-worker-run-loop.js\";\n\ninterface GuardedQueueJob {\n readonly guard: LeaseRenewalGuard;\n readonly job: QueueJob;\n}\n\nexport class QueueWorker {\n readonly queue: Queue;\n readonly options: WorkerConfig;\n private readonly pendingCompletions: QueuePendingCompletions;\n\n constructor(queue: Queue, options: WorkerConfig) {\n this.queue = queue;\n this.options = normalizeWorkerConfig(options);\n this.pendingCompletions = new QueuePendingCompletions(queue, this.options);\n }\n\n async runOnce(handler: QueueHandler): Promise<QueueWorkerResult> {\n const result: QueueWorkerResult = {\n claimed: 0,\n completed: await this.pendingCompletions.drain(false),\n failed: 0,\n retried: 0\n };\n for (let batch = 0; batch < workerDrainBatches(this.options); batch += 1) {\n const next = await this.runHandlerClaimOnce(handler, batch === 0);\n result.claimed += next.claimed;\n result.completed += next.completed;\n result.failed += next.failed;\n result.retried += next.retried;\n if (next.claimed === 0) {\n break;\n }\n }\n return result;\n }\n\n private async runHandlerClaimOnce(handler: QueueHandler, useBlocking: boolean): Promise<QueueWorkerResult> {\n const leaseMs = workerLeaseMs(this.options);\n const jobs = await this.claimJobs({\n limit: workerClaimLimit(this.options, this.queue.client.flowManyBatchLimit),\n useBlocking\n });\n const result: QueueWorkerResult = { claimed: jobs.length, completed: 0, failed: 0, retried: 0 };\n if (jobs.length === 0) {\n return result;\n }\n const completions: LeaseRenewalGuard[] = [];\n const concurrency = workerConcurrency(this.options);\n const guards = new Map(\n jobs.map((job) => [job, new LeaseRenewalGuard(this.queue.client, job, leaseMs, this.options)] as const)\n );\n const activeGuards = new Set(guards.values());\n let cursor = 0;\n\n const runNext = async (): Promise<void> => {\n while (cursor < jobs.length) {\n const job = jobs[cursor];\n cursor += 1;\n if (job == null) continue;\n const guard = guards.get(job);\n if (guard == null) continue;\n const awaitsBatchCompletion = await this.applyJob(job, handler, result, completions, guard);\n if (!awaitsBatchCompletion) {\n activeGuards.delete(guard);\n await guard.stop();\n }\n }\n };\n\n try {\n const handlers = await Promise.allSettled(\n Array.from({ length: Math.min(concurrency, jobs.length) }, () => runNext())\n );\n const completionJobs: ClaimedItem[] = [];\n const completionGuards: LeaseRenewalGuard[] = [];\n for (const guard of completions) {\n activeGuards.delete(guard);\n completionJobs.push(guard.job);\n completionGuards.push(guard);\n }\n const stopped = await stopQueueBatchGuards(completionJobs, completionGuards);\n await this.flushCompletions(stopped.jobs, result);\n const failed = handlers.find((handler): handler is PromiseRejectedResult => handler.status === \"rejected\");\n if (failed != null) {\n throw failed.reason;\n }\n if (stopped.error != null) throw stopped.error;\n return result;\n } finally {\n await Promise.all([...activeGuards].map(async (guard) => await guard.stop()));\n }\n }\n\n async runBatchOnce(handler: QueueBatchHandler): Promise<QueueWorkerResult> {\n return await this.runBatchOnceWithClaim(handler);\n }\n\n async runBatchOnceForPartitionKeys(\n handler: QueueBatchHandler,\n partitionKeys: readonly string[],\n options: { readonly claimCredit?: number } = {}\n ): Promise<QueueWorkerResult> {\n const claimCredit = options.claimCredit == null\n ? undefined\n : finiteNonNegativeInteger(options.claimCredit, 0);\n if (partitionKeys.length === 0 || claimCredit === 0) {\n return { claimed: 0, completed: await this.pendingCompletions.drain(false), failed: 0, retried: 0 };\n }\n return await this.runBatchOnceWithClaim(handler, {\n limit: claimCredit == null\n ? undefined\n : Math.min(workerBatchSize(this.options, this.queue.client.flowManyBatchLimit), claimCredit),\n partitionKey: partitionKeys.length === 1 ? partitionKeys[0] : undefined,\n partitionKeys: partitionKeys.length === 1 ? undefined : [...partitionKeys]\n });\n }\n\n async flush(): Promise<number> {\n return await this.pendingCompletions.drain(true);\n }\n\n private async runBatchOnceWithClaim(\n handler: QueueBatchHandler,\n claimOptions: {\n readonly limit?: number;\n readonly partitionKey?: string;\n readonly partitionKeys?: string[];\n } = {}\n ): Promise<QueueWorkerResult> {\n const completed = await this.pendingCompletions.drain(false);\n const jobs = await this.claimJobs(claimOptions);\n const result: QueueWorkerResult = { claimed: jobs.length, completed, failed: 0, retried: 0 };\n if (jobs.length === 0) {\n return result;\n }\n const leaseMs = workerLeaseMs(this.options);\n const guards = jobs.map((job) => new LeaseRenewalGuard(this.queue.client, job, leaseMs, this.options));\n\n try {\n let batchComplete = false;\n let outcome: CompleteOutcome | RetryOutcome | FailOutcome | undefined;\n let handlerError: unknown;\n let handlerFailed = false;\n try {\n const value = await handler([...jobs]);\n if (value === undefined) {\n batchComplete = true;\n } else {\n const nextOutcome: Outcome = isOutcome(value) ? value : complete({ result: value });\n if (nextOutcome.kind === \"transition\") {\n throw new Error(\"Queue batch handlers cannot return transition(); use Workflow for state transitions\");\n }\n if (isBatchableComplete(nextOutcome)) {\n batchComplete = true;\n } else {\n outcome = nextOutcome;\n }\n }\n } catch (error) {\n handlerFailed = true;\n handlerError = error;\n const policy = normalizeExceptionPolicy(this.options.exceptionPolicy);\n if (policy !== \"raise\") {\n const payload = workerErrorPayload(error, this.options, this.queue.client.codec);\n outcome = policy === \"fail\" ? fail({ error: payload }) : retry({ error: payload });\n }\n }\n\n const stopped = await stopQueueBatchGuards(guards.map((guard) => guard.job), guards);\n if (handlerFailed && normalizeExceptionPolicy(this.options.exceptionPolicy) === \"raise\") {\n throw handlerError;\n }\n if (batchComplete) {\n await this.flushCompletions(stopped.jobs, result);\n } else {\n if (outcome == null) {\n throw new Error(\"Queue batch handler did not produce a valid outcome\");\n }\n await applyQueueBatchOutcome(this.queue, this.options, stopped.jobs, outcome);\n if (outcome.kind === \"retry\") {\n result.retried += stopped.jobs.length;\n } else if (outcome.kind === \"fail\") {\n result.failed += stopped.jobs.length;\n } else {\n result.completed += stopped.jobs.length;\n }\n }\n if (stopped.error != null) throw stopped.error;\n return result;\n } finally {\n await Promise.allSettled(guards.map(async (guard) => await guard.stop()));\n }\n }\n\n async run(handler: QueueHandler): Promise<void> {\n if (workerRefillStrategy(this.options) === \"continuous\") {\n await this.runContinuously(handler);\n return;\n }\n\n await runQueueWorkerInWaves(this, handler, this.options);\n }\n\n private async runContinuously(handler: QueueHandler): Promise<void> {\n await this.flush();\n const completionBatcher = new QueueCompletionBatcher(this.queue, this.options);\n try {\n await runContinuousWorkerPool<GuardedQueueJob>({\n claim: async (limit, useBlocking) => (await this.claimJobs({ limit, useBlocking }))\n .map((job) => this.guardContinuousJob(job)),\n concurrency: workerConcurrency(this.options),\n handle: async ({ guard, job }) => {\n const result = await this.applyContinuousJob(job, guard, handler, completionBatcher);\n if (result == null) return;\n return {\n ...(Object.hasOwn(result, \"error\") ? { error: result.error } : {}),\n ...(result.items == null\n ? {}\n : { items: result.items.map((item) => this.guardContinuousJob(item)) })\n };\n },\n idleSleepMs: this.options.idleSleepMs,\n maxClaimSize: workerBatchSize(this.options, this.queue.client.flowManyBatchLimit),\n maxIdleSleepMs: this.options.maxIdleSleepMs,\n onFailure: () => completionBatcher.disableRefill(),\n refillDelayMs: this.options.refillDelayMs,\n signal: this.options.signal\n });\n } finally {\n await completionBatcher.close();\n await this.flush();\n }\n }\n\n private async claimJobs(\n options: {\n readonly useBlocking?: boolean;\n readonly limit?: number;\n readonly partitionKey?: string;\n readonly partitionKeys?: string[];\n } = {}\n ): Promise<QueueJob[]> {\n return await this.queue.client.claimDue(\n this.queue.type,\n queueClaimOptions(this.queue, this.options, {\n limit: options.limit,\n partitionKey: options.partitionKey,\n partitionKeys: options.partitionKeys,\n useBlocking: options.useBlocking\n })\n );\n }\n\n private async applyJob(\n job: QueueJob,\n handler: QueueHandler,\n result: QueueWorkerResult,\n completions: LeaseRenewalGuard[],\n guard: LeaseRenewalGuard\n ): Promise<boolean> {\n let batchComplete = false;\n let outcome: CompleteOutcome | RetryOutcome | FailOutcome | undefined;\n guard.assertActive();\n try {\n const value = await handler(job);\n if (value === undefined) {\n batchComplete = true;\n } else {\n const nextOutcome: Outcome = isOutcome(value) ? value : complete({ result: value });\n if (nextOutcome.kind === \"transition\") {\n throw new Error(\"Queue handlers cannot return transition(); use Workflow for state transitions\");\n }\n if (isBatchableComplete(nextOutcome)) {\n batchComplete = true;\n } else {\n outcome = nextOutcome;\n }\n }\n } catch (error) {\n await guard.stop();\n await applyQueueException(this.queue, this.options, guard.job, error);\n if (normalizeExceptionPolicy(this.options.exceptionPolicy) === \"fail\") {\n result.failed += 1;\n } else {\n result.retried += 1;\n }\n return false;\n }\n\n if (batchComplete) {\n completions.push(guard);\n return true;\n }\n if (outcome == null) {\n throw new Error(\"Queue handler did not produce a valid outcome\");\n }\n\n await guard.stop();\n await applyQueueOutcome(this.queue, guard.job, outcome);\n if (outcome.kind === \"retry\") {\n result.retried += 1;\n } else if (outcome.kind === \"fail\") {\n result.failed += 1;\n } else {\n result.completed += 1;\n }\n return false;\n }\n\n private async applyContinuousJob(\n job: QueueJob,\n guard: LeaseRenewalGuard,\n handler: QueueHandler,\n completionBatcher: QueueCompletionBatcher\n ): Promise<void | ContinuousWorkerHandleResult<QueueJob>> {\n let guardOwned = true;\n const stopGuard = async (): Promise<void> => {\n guardOwned = false;\n await guard.stop();\n };\n\n try {\n let batchComplete = false;\n let outcome: CompleteOutcome | RetryOutcome | FailOutcome | undefined;\n guard.assertActive();\n try {\n const value = await handler(job);\n if (value === undefined) {\n batchComplete = true;\n } else {\n const nextOutcome: Outcome = isOutcome(value) ? value : complete({ result: value });\n if (nextOutcome.kind === \"transition\") {\n throw new Error(\"Queue handlers cannot return transition(); use Workflow for state transitions\");\n }\n if (isBatchableComplete(nextOutcome)) {\n batchComplete = true;\n } else {\n outcome = nextOutcome;\n }\n }\n } catch (error) {\n await stopGuard();\n await applyQueueException(this.queue, this.options, guard.job, error);\n return;\n }\n\n if (batchComplete) {\n guardOwned = false;\n return await completionBatcher.complete(guard.job, guard);\n }\n if (outcome == null) {\n throw new Error(\"Queue handler did not produce a valid outcome\");\n }\n\n await stopGuard();\n await applyQueueOutcome(this.queue, guard.job, outcome);\n } finally {\n if (guardOwned) {\n await guard.stop();\n }\n }\n }\n\n private guardContinuousJob(job: QueueJob): GuardedQueueJob {\n return {\n guard: new LeaseRenewalGuard(\n this.queue.client,\n job,\n workerLeaseMs(this.options),\n this.options\n ),\n job\n };\n }\n\n private async flushCompletions(jobs: ClaimedItem[], result: QueueWorkerResult): Promise<void> {\n await flushQueueCompletions(this.queue, this.options, this.pendingCompletions, jobs, result);\n }\n\n}\n","import type { ValueConfig } from \"./types.js\";\n\ninterface FlowClientOptions {\n readonly type: string;\n readonly valueConfig?: ValueConfig;\n}\n\n/** Capture constructor configuration without accepting prototype-provided settings. */\nexport function snapshotFlowClientOptions<T extends FlowClientOptions>(\n options: T,\n context: string\n): T {\n const own = { ...options };\n if (typeof own.type !== \"string\" || own.type.length === 0) {\n throw new TypeError(`${context} type must be an own non-empty string`);\n }\n const valueConfig = own.valueConfig;\n return Object.freeze({\n ...own,\n ...(valueConfig == null ? {} : { valueConfig: Object.freeze({ ...valueConfig }) })\n });\n}\n","import { randomUUID } from \"node:crypto\";\nimport {\n type FerricStoreClient,\n type FlowPolicyOptions,\n type FlowStatePolicyLike,\n type RunStepsItem,\n type RunStepsManyOptions,\n type StartAndClaimOptions\n} from \"./client.js\";\nimport type { Outcome } from \"./outcomes.js\";\nimport { complete, fail, isOutcome, retry } from \"./outcomes.js\";\nimport {\n type ClaimedItem,\n type FlowRecord,\n type MaxActiveMs,\n type StateMeta,\n type ValueConfig,\n type WorkerConfig\n} from \"./types.js\";\nimport { setOwnValue, sleep, type CommandArgument } from \"./internal.js\";\nimport {\n LeaseRenewalGuard,\n nextWorkerIdleSleepMs,\n normalizeWorkflowWorkerConfig,\n runContinuousWorkerPool,\n workerBatchSize,\n workerClaimBlockMs,\n workerClaimLimit,\n workerConcurrency,\n workerDrainBatches,\n workerErrorPayload,\n workerIdleSleepMs,\n workerLeaseMs,\n workerMaxIdleSleepMs,\n workerRefillStrategy,\n workerSignalAborted\n} from \"./worker-internal.js\";\nimport { WorkflowContext } from \"./workflow-context.js\";\nimport { applyWorkflowOutcome } from \"./workflow-outcome-application.js\";\nimport { createWorkflowStateRegistration } from \"./workflow-registration.js\";\nimport { snapshotFlowClientOptions } from \"./flow-client-options.js\";\nexport { WorkflowContext, WorkflowFlowCommands } from \"./workflow-context.js\";\nimport { resolveWorkflowStates, type ResolvedWorkflowState } from \"./workflow-utilities.js\";\nimport type {\n ContinuousWorkflowJob,\n StateOptions,\n StateRegistration,\n WorkflowHandler,\n WorkflowOptions,\n WorkflowWorkerResult\n} from \"./workflow-types.js\";\n\ntype GuardedContinuousWorkflowJob = ContinuousWorkflowJob & {\n readonly guard: LeaseRenewalGuard;\n};\nexport type {\n StateOptions,\n StateRegistration,\n WorkflowHandler,\n WorkflowOptions,\n WorkflowWorkerResult\n} from \"./workflow-types.js\";\n\nexport class WorkflowClient {\n readonly flow: FerricStoreClient;\n\n constructor(flow: FerricStoreClient) {\n this.flow = flow;\n }\n\n workflow(options: WorkflowOptions): Workflow {\n return new Workflow(this.flow, options);\n }\n}\n\nexport class Workflow {\n readonly client: FerricStoreClient;\n readonly type: string;\n readonly initialState: string;\n readonly valueConfig: ValueConfig & { localCache: boolean };\n readonly defaultWorker: string;\n private readonly states = new Map<string, StateRegistration>();\n\n constructor(client: FerricStoreClient, options: WorkflowOptions) {\n const captured = snapshotFlowClientOptions(options, \"Workflow\");\n this.client = client;\n this.type = captured.type;\n this.initialState = captured.initialState ?? \"queued\";\n this.valueConfig = {\n localCache: captured.valueConfig?.localCache ?? false,\n valueMaxBytes: captured.valueConfig?.valueMaxBytes\n };\n this.defaultWorker = captured.worker ?? `${this.type}-${randomUUID()}`;\n }\n\n state(name: string, handler: WorkflowHandler, options: StateOptions = {}): this {\n this.states.set(name, createWorkflowStateRegistration(\n name,\n handler,\n options,\n this.valueConfig.valueMaxBytes\n ));\n return this;\n }\n\n async start(id: string, options: {\n attributes?: Record<string, CommandArgument>;\n payload?: unknown;\n state?: string;\n partitionKey?: string;\n parentFlowId?: string;\n rootFlowId?: string;\n correlationId?: string;\n runAtMs?: number;\n nowMs?: number;\n priority?: number;\n idempotent?: boolean;\n retentionTtlMs?: number;\n maxActiveMs?: MaxActiveMs;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n stateMeta?: StateMeta;\n returnRecord?: boolean;\n } = {}): Promise<FlowRecord | Buffer | unknown> {\n return await this.client.create(id, {\n ...options,\n state: options.state ?? this.initialState,\n type: this.type\n });\n }\n\n async startAndClaim(\n id: string,\n options: Omit<StartAndClaimOptions, \"type\" | \"initialState\"> & { initialState?: string }\n ): Promise<FlowRecord> {\n return await this.client.startAndClaim(id, {\n ...options,\n initialState: options.initialState ?? this.initialState,\n type: this.type\n });\n }\n\n async runStepsMany(\n items: readonly (string | RunStepsItem)[],\n options: Omit<RunStepsManyOptions, \"type\">\n ): Promise<unknown> {\n return await this.client.runStepsMany(items, { ...options, type: this.type });\n }\n\n async startMany(items: {\n id: string;\n payload?: unknown;\n partitionKey?: string;\n attributes?: Record<string, CommandArgument>;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n stateMeta?: StateMeta;\n }[], options: {\n attributes?: Record<string, CommandArgument>;\n state?: string;\n partitionKey?: string;\n runAtMs?: number;\n nowMs?: number;\n priority?: number;\n idempotent?: boolean;\n independent?: boolean;\n retentionTtlMs?: number;\n maxActiveMs?: MaxActiveMs;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n stateMeta?: StateMeta;\n } = {}): Promise<unknown[] | unknown> {\n return await this.client.createMany(options.partitionKey, items, {\n ...options,\n state: options.state ?? this.initialState,\n type: this.type\n });\n }\n\n async signal(id: string, options: Parameters<FerricStoreClient[\"signal\"]>[1]): Promise<unknown> {\n return await this.client.signal(id, options);\n }\n\n async get(id: string, options: Parameters<FerricStoreClient[\"get\"]>[1] = {}): Promise<FlowRecord | undefined> {\n return await this.client.get(id, options);\n }\n\n async history(id: string, options: Parameters<FerricStoreClient[\"history\"]>[1] = {}): Promise<unknown[]> {\n return await this.client.history(id, options);\n }\n\n worker(options: WorkerConfig & { states?: string[] } = {}): WorkflowWorker {\n return new WorkflowWorker(this, options);\n }\n\n async installPolicy(options: Omit<FlowPolicyOptions, \"mode\" | \"state\" | \"states\"> = {}): Promise<unknown> {\n const states: Record<string, FlowStatePolicyLike> = {};\n for (const registration of this.states.values()) {\n if (registration.mode != null || registration.retryPolicy != null) {\n setOwnValue(states, registration.name, {\n ...(registration.mode == null ? {} : { mode: registration.mode }),\n ...(registration.retryPolicy == null ? {} : { retry: { ...registration.retryPolicy } })\n });\n }\n }\n return await this.client.installPolicy(this.type, {\n ...options,\n states\n });\n }\n\n stateNames(): string[] {\n return [...this.states.keys()];\n }\n\n stateRegistration(name: string): StateRegistration | undefined {\n return this.states.get(name);\n }\n}\n\nexport class WorkflowWorker {\n readonly workflow: Workflow;\n readonly options: WorkerConfig & { states?: string[] };\n\n constructor(workflow: Workflow, options: WorkerConfig & { states?: string[] }) {\n this.workflow = workflow;\n this.options = normalizeWorkflowWorkerConfig(options);\n }\n\n async runOnce(): Promise<WorkflowWorkerResult> {\n const states = this.resolveStates();\n let claimed = 0;\n let applied = 0;\n let claimCalls = 0;\n let emptyClaims = 0;\n\n for (const { registration, stateName } of states) {\n const leaseMs = workerLeaseMs(this.options, registration.leaseMs);\n const concurrency = workerConcurrency(this.options);\n for (let batch = 0; batch < workerDrainBatches(this.options); batch += 1) {\n claimCalls += 1;\n const jobs = await this.claimState(\n stateName,\n registration,\n workerClaimLimit(this.options, this.workflow.client.flowManyBatchLimit),\n batch === 0 && states.length === 1\n );\n\n if (jobs.length === 0) {\n emptyClaims += 1;\n break;\n }\n\n claimed += jobs.length;\n const guards = jobs.map((job) => new LeaseRenewalGuard(this.workflow.client, job, leaseMs, this.options));\n let cursor = 0;\n const runNext = async (): Promise<void> => {\n while (cursor < jobs.length) {\n const index = cursor;\n cursor += 1;\n const job = jobs[index];\n const guard = guards[index];\n if (job == null || guard == null) continue;\n try {\n await this.applyJob(job, registration, guard);\n applied += 1;\n } finally {\n await guard.stop();\n }\n }\n };\n try {\n const handlers = await Promise.allSettled(\n Array.from({ length: Math.min(concurrency, jobs.length) }, () => runNext())\n );\n const failed = handlers.find((handler): handler is PromiseRejectedResult => handler.status === \"rejected\");\n if (failed != null) {\n throw failed.reason;\n }\n } finally {\n // A non-conforming server or custom executor can return more jobs than\n // requested. Runners stop after a failure, so explicitly release only\n // the guards that were never assigned; assigned guards stop in runNext.\n await Promise.allSettled(\n guards.slice(cursor).map(async (guard) => await guard.stop())\n );\n }\n }\n }\n\n return { applied, claimCalls, claimed, emptyClaims };\n }\n\n async run(): Promise<void> {\n const states = this.resolveStates();\n if (workerRefillStrategy(this.options) === \"continuous\") {\n await this.runContinuously(states);\n return;\n }\n\n await this.runInWaves();\n }\n\n private async runInWaves(): Promise<void> {\n const idleSleepMs = workerIdleSleepMs(this.options);\n let currentIdleSleepMs = idleSleepMs;\n const maxIdleSleepMs = workerMaxIdleSleepMs(this.options, idleSleepMs);\n\n while (!workerSignalAborted(this.options.signal)) {\n const result = await this.runOnce();\n if (result.claimed === 0) {\n if (workerSignalAborted(this.options.signal)) break;\n try {\n await sleep(currentIdleSleepMs, this.options.signal);\n } catch (error) {\n if (!workerSignalAborted(this.options.signal)) throw error;\n break;\n }\n currentIdleSleepMs = nextWorkerIdleSleepMs(currentIdleSleepMs, maxIdleSleepMs);\n } else {\n currentIdleSleepMs = idleSleepMs;\n }\n }\n }\n\n private async runContinuously(registrations: readonly ResolvedWorkflowState[]): Promise<void> {\n let stateCursor = 0;\n\n await runContinuousWorkerPool<GuardedContinuousWorkflowJob>({\n claim: async (limit, useBlocking) => {\n let remainingStates = registrations.length;\n while (remainingStates > 0) {\n remainingStates -= 1;\n const selected = registrations[stateCursor];\n stateCursor = registrations.length === 0 ? 0 : (stateCursor + 1) % registrations.length;\n if (selected == null) break;\n const leaseMs = workerLeaseMs(this.options, selected.registration.leaseMs);\n const jobs = await this.claimState(\n selected.stateName,\n selected.registration,\n limit,\n useBlocking && registrations.length === 1\n );\n if (jobs.length > 0) {\n return jobs.map((job) => ({\n guard: new LeaseRenewalGuard(this.workflow.client, job, leaseMs, this.options),\n job,\n leaseMs,\n registration: selected.registration\n }));\n }\n }\n return [];\n },\n concurrency: workerConcurrency(this.options),\n handle: async ({ guard, job, registration }) => {\n try {\n await this.applyJob(job, registration, guard);\n } finally {\n await guard.stop();\n }\n },\n idleSleepMs: this.options.idleSleepMs,\n maxClaimSize: workerBatchSize(this.options, this.workflow.client.flowManyBatchLimit),\n maxIdleSleepMs: this.options.maxIdleSleepMs,\n refillPartialClaims: true,\n refillDelayMs: this.options.refillDelayMs,\n signal: this.options.signal\n });\n }\n\n private resolveStates(): ResolvedWorkflowState[] {\n return resolveWorkflowStates(\n this.options.states ?? this.workflow.stateNames(),\n (stateName) => this.workflow.stateRegistration(stateName)\n );\n }\n\n private async claimState(\n stateName: string,\n registration: StateRegistration,\n limit: number,\n useBlocking: boolean\n ): Promise<(FlowRecord | ClaimedItem)[]> {\n const preferCompact = !registration.claimRecord || this.options.profile === \"throughput\";\n return await this.workflow.client.claimDue(this.workflow.type, {\n blockMs: workerClaimBlockMs(this.options, useBlocking),\n includeState: preferCompact,\n includeAttributes: this.options.claimAttributes,\n jobOnly: preferCompact,\n leaseMs: workerLeaseMs(this.options, registration.leaseMs),\n limit,\n nowMs: this.options.nowMs,\n partitionKey: this.options.partitionKey,\n partitionKeys: this.options.partitionKeys,\n payload: this.options.claimPayload ?? registration.claimPayload,\n priority: this.options.priority,\n reclaimExpired: this.options.reclaimExpired,\n reclaimRatio: this.options.reclaimRatio,\n state: stateName,\n valueMaxBytes: this.options.valueMaxBytes ?? registration.valueMaxBytes,\n values: this.options.claimValues ?? registration.claimValues,\n worker: this.options.worker ?? this.workflow.defaultWorker\n });\n }\n\n private async applyJob(\n job: FlowRecord | ClaimedItem,\n registration: StateRegistration,\n guard: LeaseRenewalGuard\n ): Promise<void> {\n guard.assertActive();\n const ctx = new WorkflowContext(this.workflow, job, registration.name, guard.job);\n let outcome: Outcome;\n try {\n const value = await registration.handler(ctx);\n outcome = isOutcome(value) ? value : complete({ result: value });\n } catch (error) {\n await guard.stop();\n await this.applyHandlerError(ctx, registration, error);\n return;\n }\n await guard.stop();\n await applyWorkflowOutcome(this.workflow.client, ctx, outcome, registration.returnRecord);\n }\n\n private async applyHandlerError(ctx: WorkflowContext, registration: StateRegistration, error: unknown): Promise<void> {\n const policy = this.options.exceptionPolicy ?? registration.exceptionPolicy;\n if (policy === \"raise\") {\n throw error;\n }\n if (policy === \"fail\") {\n await applyWorkflowOutcome(\n this.workflow.client,\n ctx,\n fail({ error: workerErrorPayload(error, this.options, this.workflow.client.codec) }),\n registration.returnRecord\n );\n return;\n }\n await applyWorkflowOutcome(\n this.workflow.client,\n ctx,\n retry({ error: workerErrorPayload(error, this.options, this.workflow.client.codec) }),\n registration.returnRecord\n );\n }\n}\n","import type { FlowStateMode } from \"./client.js\";\nimport type { StateRegistration } from \"./workflow-types.js\";\n\nexport interface ResolvedWorkflowState {\n registration: StateRegistration;\n stateName: string;\n}\n\nexport function resolveWorkflowStates(\n configured: readonly string[],\n registrationFor: (stateName: string) => StateRegistration | undefined\n): ResolvedWorkflowState[] {\n const stateNames = [...new Set(configured)];\n if (stateNames.length === 0) throw new Error(\"Workflow worker requires at least one state\");\n return stateNames.map((stateName) => {\n const registration = registrationFor(stateName);\n if (registration == null) {\n throw new Error(`No handler registered for workflow state '${stateName}'`);\n }\n return { registration, stateName };\n });\n}\n\nexport function normalizeStateMode(mode: FlowStateMode): FlowStateMode {\n if (mode === \"fifo\" || mode === \"parallel\") return mode;\n throw new Error(\"state mode must be 'fifo' or 'parallel'\");\n}\n\nexport function valueRefToString(value: unknown): string | undefined {\n if (typeof value === \"string\") return value;\n if (Buffer.isBuffer(value)) return value.toString(\"utf8\");\n if (typeof value === \"object\" && value != null && Object.hasOwn(value, \"ref\")) {\n const ref = (value as { ref?: unknown }).ref;\n return typeof ref === \"string\" ? ref : Buffer.isBuffer(ref) ? ref.toString(\"utf8\") : undefined;\n }\n return undefined;\n}\n","import { valueMGetEntries, type FerricStoreClient, type StepContinueOptions } from \"./client.js\";\nimport { setOwnValue } from \"./internal.js\";\nimport type { ChildSpec, ClaimedItem, FencingToken, FlowRecord } from \"./types.js\";\nimport type { Workflow } from \"./workflow.js\";\nimport { valueRefToString } from \"./workflow-utilities.js\";\n\nconst MISSING_VALUE = Symbol(\"ferricstore.missingValue\");\n\nexport class WorkflowContext {\n readonly workflow: Workflow;\n readonly job: FlowRecord | ClaimedItem;\n readonly stateName: string;\n readonly flow: WorkflowFlowCommands;\n private readonly leaseJob: ClaimedItem;\n private readonly valueCache = new Map<string, unknown>();\n\n constructor(\n workflow: Workflow,\n job: FlowRecord | ClaimedItem,\n stateName: string,\n leaseJob: ClaimedItem = job\n ) {\n this.workflow = workflow;\n this.job = job;\n this.leaseJob = leaseJob;\n this.stateName = stateName;\n this.flow = new WorkflowFlowCommands(this);\n }\n\n get client(): FerricStoreClient {\n return this.workflow.client;\n }\n\n get id(): string {\n return this.leaseJob.id;\n }\n\n get type(): string {\n return this.leaseJob.type ?? this.workflow.type;\n }\n\n get state(): string {\n return this.leaseJob.state;\n }\n\n get logicalState(): string {\n return this.stateName;\n }\n\n get partitionKey(): string | undefined {\n return this.leaseJob.partitionKey;\n }\n\n get payload(): unknown {\n return this.job.payload;\n }\n\n get values(): Record<string, unknown> {\n return \"values\" in this.job && this.job.values != null ? this.job.values : {};\n }\n\n get stateMeta(): Record<string, unknown> {\n return \"stateMeta\" in this.job && this.job.stateMeta != null ? this.job.stateMeta : {};\n }\n\n get indexedStateMeta(): string | undefined {\n return \"indexedStateMeta\" in this.job ? this.job.indexedStateMeta : undefined;\n }\n\n get valueRefs(): Record<string, unknown> {\n return \"valueRefs\" in this.job && this.job.valueRefs != null ? this.job.valueRefs : {};\n }\n\n get leaseToken(): Buffer {\n return Buffer.from(this.leaseJob.leaseToken);\n }\n\n get fencingToken(): FencingToken {\n return this.leaseJob.fencingToken;\n }\n\n get version(): number {\n return \"version\" in this.job ? this.job.version : 0;\n }\n\n get parentFlowId(): string | undefined {\n return \"parentFlowId\" in this.job ? this.job.parentFlowId : undefined;\n }\n\n get rootFlowId(): string | undefined {\n return \"rootFlowId\" in this.job ? this.job.rootFlowId : undefined;\n }\n\n get correlationId(): string | undefined {\n return \"correlationId\" in this.job ? this.job.correlationId : undefined;\n }\n\n async value(name: string, defaultValue?: unknown, options: { localCache?: boolean } = {}): Promise<unknown> {\n const useLocalCache = options.localCache ?? this.workflow.valueConfig.localCache;\n if (useLocalCache && this.valueCache.has(name)) {\n const cached = this.valueCache.get(name);\n return cached === MISSING_VALUE ? defaultValue : cached;\n }\n\n if (Object.hasOwn(this.values, name)) {\n const value = this.values[name];\n if (useLocalCache) {\n this.valueCache.set(name, value);\n }\n return value;\n }\n\n const ref = valueRefToString(Object.hasOwn(this.valueRefs, name) ? this.valueRefs[name] : undefined);\n if (ref == null) {\n if (useLocalCache) this.valueCache.set(name, MISSING_VALUE);\n return defaultValue;\n }\n\n const entries = await valueMGetEntries(this.client, [ref], { maxBytes: this.valueMaxBytes() });\n const entry = entries[0];\n if (entry?.found === true) {\n if (useLocalCache) this.valueCache.set(name, entry.value);\n return entry.value;\n }\n if (useLocalCache) this.valueCache.set(name, MISSING_VALUE);\n return defaultValue;\n }\n\n async valueMany(names: string[], options: { localCache?: boolean } = {}): Promise<Record<string, unknown>> {\n const result: Record<string, unknown> = {};\n const useLocalCache = options.localCache ?? this.workflow.valueConfig.localCache;\n const namesByRef = new Map<string, string[]>();\n const uniqueNames = new Set<string>();\n for (let index = 0; index < names.length; index += 1) {\n const name = names[index];\n if (!Object.hasOwn(names, index) || typeof name !== \"string\") {\n throw new TypeError(\"names must be a dense array of own strings\");\n }\n uniqueNames.add(name);\n }\n\n for (const name of uniqueNames) {\n if (useLocalCache && this.valueCache.has(name)) {\n const cached = this.valueCache.get(name);\n setOwnValue(result, name, cached === MISSING_VALUE ? undefined : cached);\n continue;\n }\n if (Object.hasOwn(this.values, name)) {\n const value = this.values[name];\n setOwnValue(result, name, value);\n if (useLocalCache) this.valueCache.set(name, value);\n continue;\n }\n const ref = valueRefToString(Object.hasOwn(this.valueRefs, name) ? this.valueRefs[name] : undefined);\n if (ref == null) {\n setOwnValue(result, name, undefined);\n if (useLocalCache) this.valueCache.set(name, MISSING_VALUE);\n continue;\n }\n const refNames = namesByRef.get(ref);\n if (refNames == null) {\n namesByRef.set(ref, [name]);\n } else {\n refNames.push(name);\n }\n }\n\n const refs = [...namesByRef.keys()];\n const entries = await valueMGetEntries(this.client, refs, { maxBytes: this.valueMaxBytes() });\n for (let index = 0; index < refs.length; index += 1) {\n const ref = refs[index];\n if (ref == null) continue;\n const entry = entries[index];\n const value = entry?.found === true ? entry.value : undefined;\n for (const name of namesByRef.get(ref) ?? []) {\n setOwnValue(result, name, value);\n if (useLocalCache) this.valueCache.set(name, entry?.found === true ? value : MISSING_VALUE);\n }\n }\n return result;\n }\n\n private valueMaxBytes(): number | undefined {\n return this.workflow.stateRegistration(this.stateName)?.valueMaxBytes;\n }\n}\n\nexport class WorkflowFlowCommands {\n constructor(private readonly ctx: WorkflowContext) {}\n\n async get(id = this.ctx.id, options: { partitionKey?: string; full?: boolean } = {}): Promise<FlowRecord | undefined> {\n return await this.ctx.client.get(id, {\n ...options,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey\n });\n }\n\n async history(id = this.ctx.id, options: Parameters<FerricStoreClient[\"history\"]>[1] = {}): Promise<unknown[]> {\n return await this.ctx.client.history(id, {\n ...options,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey\n });\n }\n\n async create(id: string, options: Omit<Parameters<FerricStoreClient[\"create\"]>[1], \"type\"> & { type?: string } = {}): Promise<FlowRecord | Buffer | unknown> {\n return await this.ctx.client.create(id, {\n ...options,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey,\n state: options.state ?? this.ctx.workflow.initialState,\n type: options.type ?? this.ctx.workflow.type\n });\n }\n\n async transition(toState: string, options: Partial<Omit<Parameters<FerricStoreClient[\"transition\"]>[1], \"toState\" | \"fromState\" | \"leaseToken\" | \"fencingToken\">> & { fromState?: string } = {}): Promise<FlowRecord | Buffer | unknown> {\n return await this.ctx.client.transition(this.ctx.id, {\n ...options,\n fencingToken: this.ctx.fencingToken,\n fromState: options.fromState ?? this.ctx.state,\n leaseToken: this.ctx.leaseToken,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey,\n toState\n });\n }\n\n async stepContinue(\n toState: string,\n options: Partial<Omit<StepContinueOptions, \"toState\" | \"fromState\" | \"leaseToken\" | \"fencingToken\">> & {\n fromState?: string;\n } = {}\n ): Promise<FlowRecord | ClaimedItem> {\n return await this.ctx.client.stepContinue(this.ctx.id, {\n ...options,\n fencingToken: this.ctx.fencingToken,\n fromState: options.fromState ?? this.ctx.state,\n leaseToken: this.ctx.leaseToken,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey,\n type: options.type ?? this.ctx.type,\n toState\n });\n }\n\n async complete(options: Partial<Omit<Parameters<FerricStoreClient[\"complete\"]>[1], \"leaseToken\" | \"fencingToken\">> = {}): Promise<FlowRecord | Buffer | unknown> {\n return await this.ctx.client.complete(this.ctx.id, {\n ...options,\n fencingToken: this.ctx.fencingToken,\n leaseToken: this.ctx.leaseToken,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey\n });\n }\n\n async retry(options: Partial<Omit<Parameters<FerricStoreClient[\"retry\"]>[1], \"leaseToken\" | \"fencingToken\">> = {}): Promise<FlowRecord | Buffer | unknown> {\n return await this.ctx.client.retry(this.ctx.id, {\n ...options,\n fencingToken: this.ctx.fencingToken,\n leaseToken: this.ctx.leaseToken,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey\n });\n }\n\n async fail(options: Partial<Omit<Parameters<FerricStoreClient[\"fail\"]>[1], \"leaseToken\" | \"fencingToken\">> = {}): Promise<FlowRecord | Buffer | unknown> {\n return await this.ctx.client.fail(this.ctx.id, {\n ...options,\n fencingToken: this.ctx.fencingToken,\n leaseToken: this.ctx.leaseToken,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey\n });\n }\n\n async signal(signal: string, options: Omit<Parameters<FerricStoreClient[\"signal\"]>[1], \"signal\"> = {}): Promise<unknown> {\n return await this.ctx.client.signal(this.ctx.id, {\n ...options,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey,\n signal\n });\n }\n\n async putValue(name: string, value: unknown, options: Parameters<FerricStoreClient[\"valuePut\"]>[1] = {}): Promise<unknown> {\n return await this.ctx.client.valuePut(value, {\n ...options,\n name,\n ownerFlowId: options.ownerFlowId ?? this.ctx.id,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey\n });\n }\n\n async value(name: string, defaultValue?: unknown, options: { localCache?: boolean } = {}): Promise<unknown> {\n return await this.ctx.value(name, defaultValue, options);\n }\n\n async values(names: string[], options: { localCache?: boolean } = {}): Promise<Record<string, unknown>> {\n return await this.ctx.valueMany(names, options);\n }\n\n async spawnChildren(children: ChildSpec[], options: Parameters<FerricStoreClient[\"spawnChildren\"]>[2] = {}): Promise<unknown> {\n return await this.ctx.client.spawnChildren(this.ctx.id, children, {\n ...options,\n fencingToken: options.fencingToken ?? this.ctx.fencingToken,\n leaseToken: options.leaseToken ?? this.ctx.leaseToken,\n partitionKey: options.partitionKey ?? this.ctx.partitionKey\n });\n }\n}\n","import type { FerricStoreClient } from \"./client.js\";\nimport type { CompleteOutcome, FailOutcome, Outcome, RetryOutcome, TransitionOutcome } from \"./outcomes.js\";\nimport { WorkflowContext } from \"./workflow-context.js\";\n\nexport async function applyWorkflowOutcome(\n client: FerricStoreClient,\n ctx: WorkflowContext,\n outcome: Outcome,\n returnRecord: boolean\n): Promise<void> {\n switch (outcome.kind) {\n case \"transition\":\n await applyTransition(client, ctx, outcome, returnRecord);\n return;\n case \"complete\":\n await applyComplete(client, ctx, outcome, returnRecord);\n return;\n case \"retry\":\n await applyRetry(client, ctx, outcome, returnRecord);\n return;\n case \"fail\":\n await applyFail(client, ctx, outcome, returnRecord);\n return;\n }\n}\n\nasync function applyTransition(\n client: FerricStoreClient,\n ctx: WorkflowContext,\n outcome: TransitionOutcome,\n returnRecord: boolean\n): Promise<void> {\n const target = ctx.workflow.stateRegistration(outcome.toState);\n if (target?.mode === \"fifo\" && outcome.priority != null) {\n throw new Error(\"priority is not supported for fifo state\");\n }\n await client.transition(ctx.id, {\n attributesDelete: outcome.attributesDelete,\n attributesMerge: outcome.attributesMerge,\n dropValues: outcome.dropValues,\n fencingToken: ctx.fencingToken,\n fromState: ctx.state,\n leaseToken: ctx.leaseToken,\n overrideValues: outcome.overrideValues,\n partitionKey: ctx.partitionKey,\n payload: outcome.payload,\n priority: outcome.priority,\n returnRecord,\n runAtMs: outcome.runAtMs,\n stateMeta: outcome.stateMeta,\n toState: outcome.toState,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n}\n\nasync function applyComplete(\n client: FerricStoreClient,\n ctx: WorkflowContext,\n outcome: CompleteOutcome,\n returnRecord: boolean\n): Promise<void> {\n await client.complete(ctx.id, {\n attributesDelete: outcome.attributesDelete,\n attributesMerge: outcome.attributesMerge,\n dropValues: outcome.dropValues,\n fencingToken: ctx.fencingToken,\n leaseToken: ctx.leaseToken,\n overrideValues: outcome.overrideValues,\n partitionKey: ctx.partitionKey,\n payload: outcome.payload,\n result: outcome.result,\n returnRecord,\n stateMeta: outcome.stateMeta,\n ttlMs: outcome.ttlMs,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n}\n\nasync function applyRetry(\n client: FerricStoreClient,\n ctx: WorkflowContext,\n outcome: RetryOutcome,\n returnRecord: boolean\n): Promise<void> {\n await client.retry(ctx.id, {\n attributesDelete: outcome.attributesDelete,\n attributesMerge: outcome.attributesMerge,\n dropValues: outcome.dropValues,\n error: outcome.error,\n fencingToken: ctx.fencingToken,\n leaseToken: ctx.leaseToken,\n overrideValues: outcome.overrideValues,\n partitionKey: ctx.partitionKey,\n payload: outcome.payload,\n returnRecord,\n runAtMs: outcome.runAtMs,\n stateMeta: outcome.stateMeta,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n}\n\nasync function applyFail(\n client: FerricStoreClient,\n ctx: WorkflowContext,\n outcome: FailOutcome,\n returnRecord: boolean\n): Promise<void> {\n await client.fail(ctx.id, {\n attributesDelete: outcome.attributesDelete,\n attributesMerge: outcome.attributesMerge,\n dropValues: outcome.dropValues,\n error: outcome.error,\n fencingToken: ctx.fencingToken,\n leaseToken: ctx.leaseToken,\n overrideValues: outcome.overrideValues,\n partitionKey: ctx.partitionKey,\n payload: outcome.payload,\n returnRecord,\n stateMeta: outcome.stateMeta,\n ttlMs: outcome.ttlMs,\n valueRefs: outcome.valueRefs,\n values: outcome.values\n });\n}\n","import { normalizeExceptionPolicy } from \"./types.js\";\nimport type {\n StateOptions,\n StateRegistration,\n WorkflowHandler\n} from \"./workflow-types.js\";\nimport { normalizeStateMode } from \"./workflow-utilities.js\";\nimport { snapshotOwnStringArray } from \"./string-array-snapshot.js\";\n\n/** Snapshot state configuration once so workers share a stable registration. */\nexport function createWorkflowStateRegistration(\n name: string,\n handler: WorkflowHandler,\n options: StateOptions,\n defaultValueMaxBytes: number | undefined\n): StateRegistration {\n const own = { ...options };\n const claimValues = own.claimValues == null\n ? undefined\n : snapshotOwnStringArray(own.claimValues, \"claimValues\");\n const retryPolicy = own.retryPolicy == null\n ? undefined\n : Object.freeze({ ...own.retryPolicy });\n return Object.freeze({\n claimPayload: own.claimPayload ?? true,\n claimRecord: own.claimRecord ?? true,\n exceptionPolicy: normalizeExceptionPolicy(own.exceptionPolicy),\n handler,\n leaseMs: own.leaseMs ?? 30_000,\n ...(own.mode == null ? {} : { mode: normalizeStateMode(own.mode) }),\n name,\n returnRecord: own.returnRecord ?? false,\n valueMaxBytes: own.valueMaxBytes ?? defaultValueMaxBytes,\n ...(claimValues == null ? {} : { claimValues }),\n ...(retryPolicy == null ? {} : { retryPolicy })\n });\n}\n","/** TypeScript SDK package version. */\nexport const FERRICSTORE_SDK_VERSION = \"0.2.0\";\n/** Oldest FerricStore server supported by this breaking beta contract. */\nexport const FERRICSTORE_MINIMUM_SERVER_VERSION = \"0.8.0\";\n/** Native framing and opcode ABI version; unchanged by FerricStore 0.8. */\nexport const FERRICSTORE_NATIVE_PROTOCOL_VERSION = 1;\n"],"mappings":"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A,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAA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","names":["import_node_net","import_node_tls","import_node_buffer","retry","text","text","number","import_node_buffer","net","tls","queue","fail","import_node_buffer","import_node_buffer","import_node_buffer","import_node_buffer","import_node_buffer","import_node_buffer","commandToken","commandArgs","text","number","integer","setOwnValue","import_node_buffer","field","setOwnValue","setOwnValue","field","isPlainObject","field","setOwnValue","import_node_buffer","setOwnValue","import_node_buffer","nowMs","import_node_buffer","isPlainObject","setOwnValue","items","payload","import_node_buffer","commandName","import_node_buffer","positiveSafeInteger","field","setOwnValue","import_node_buffer","byteLength","index","bytes","integer","setOwnValue","import_node_buffer","import_node_buffer","isPlainObject","parseFerricUrl","import_node_buffer","import_node_buffer","import_node_buffer","positiveSafeInteger","text","nonNegativeSafeInteger","import_node_buffer","setOwnValue","requireCompactContainer","attrs","read","setOwnValue","errorMessage","commandArgs","import_node_net","import_node_tls","import_node_buffer","executeCommandArgs","results","bytes","import_node_buffer","bytes","completeFrame","import_node_buffer","import_node_buffer","normalizeNonNegativeInteger","import_node_buffer","import_node_buffer","isPlainObject","field","text","bytes","commandName","parseFerricUrl","tls","tls","candidate","commandName","adapter","commandName","commandName","parseFerricUrl","tls","import_node_buffer","import_node_buffer","raw","decodePayload","isPlainObject","requiredInteger","responseBytes","isPlainObject","commandArgs","compactClaimReturnMode","import_node_buffer","import_node_buffer","import_node_buffer","id","finiteNonNegativeInteger","import_node_buffer","import_node_buffer","import_node_buffer","import_node_buffer","import_node_buffer","import_node_buffer","commandName","field","commandToken","field","import_node_buffer","field","snapshot","compactClaimReturnMode","completion","completionError","DEFAULT_FLOW_MANY_BATCH_LIMIT","import_node_crypto","finitePositiveInteger","finiteNonNegativeInteger","finiteNonNegativeInteger","completed","firstFailure","handler","finiteNonNegativeInteger","import_node_crypto"]}
|