@ferricstore/ferricstore 0.1.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.
Files changed (132) hide show
  1. package/LICENSE +200 -0
  2. package/README.md +250 -0
  3. package/dist/index.d.ts +1270 -0
  4. package/dist/index.js +5065 -0
  5. package/dist/index.js.map +1 -0
  6. package/docs/api/assets/hierarchy.js +1 -0
  7. package/docs/api/assets/highlight.css +99 -0
  8. package/docs/api/assets/icons.js +18 -0
  9. package/docs/api/assets/icons.svg +1 -0
  10. package/docs/api/assets/main.js +60 -0
  11. package/docs/api/assets/navigation.js +1 -0
  12. package/docs/api/assets/search.js +1 -0
  13. package/docs/api/assets/style.css +1633 -0
  14. package/docs/api/classes/BitmapStore.html +7 -0
  15. package/docs/api/classes/BloomFilterStore.html +9 -0
  16. package/docs/api/classes/CountMinSketchStore.html +8 -0
  17. package/docs/api/classes/CuckooFilterStore.html +10 -0
  18. package/docs/api/classes/FerricStoreClient.html +130 -0
  19. package/docs/api/classes/FerricStoreError.html +35 -0
  20. package/docs/api/classes/FlowAlreadyExistsError.html +35 -0
  21. package/docs/api/classes/FlowNotFoundError.html +35 -0
  22. package/docs/api/classes/FlowWrongStateError.html +35 -0
  23. package/docs/api/classes/GeoStore.html +8 -0
  24. package/docs/api/classes/HashStore.html +26 -0
  25. package/docs/api/classes/HyperLogLogStore.html +5 -0
  26. package/docs/api/classes/InvalidCommandError.html +35 -0
  27. package/docs/api/classes/JsonCodec.html +4 -0
  28. package/docs/api/classes/JsonStore.html +15 -0
  29. package/docs/api/classes/KeyValueStore.html +52 -0
  30. package/docs/api/classes/ListStore.html +22 -0
  31. package/docs/api/classes/LockHeldError.html +35 -0
  32. package/docs/api/classes/LockNotOwnedError.html +35 -0
  33. package/docs/api/classes/NativeAdapter.html +5 -0
  34. package/docs/api/classes/OverloadedError.html +37 -0
  35. package/docs/api/classes/Queue.html +9 -0
  36. package/docs/api/classes/QueueClient.html +4 -0
  37. package/docs/api/classes/QueueWorker.html +9 -0
  38. package/docs/api/classes/RawCodec.html +4 -0
  39. package/docs/api/classes/SetStore.html +19 -0
  40. package/docs/api/classes/SortedSetStore.html +19 -0
  41. package/docs/api/classes/StaleLeaseError.html +35 -0
  42. package/docs/api/classes/StreamStore.html +13 -0
  43. package/docs/api/classes/TDigestStore.html +16 -0
  44. package/docs/api/classes/TopKStore.html +8 -0
  45. package/docs/api/classes/Workflow.html +16 -0
  46. package/docs/api/classes/WorkflowClient.html +4 -0
  47. package/docs/api/classes/WorkflowContext.html +23 -0
  48. package/docs/api/classes/WorkflowFlowCommands.html +14 -0
  49. package/docs/api/classes/WorkflowWorker.html +6 -0
  50. package/docs/api/functions/classifyServerError.html +1 -0
  51. package/docs/api/functions/complete.html +1 -0
  52. package/docs/api/functions/fail.html +1 -0
  53. package/docs/api/functions/mapException.html +1 -0
  54. package/docs/api/functions/retry.html +1 -0
  55. package/docs/api/functions/transition.html +1 -0
  56. package/docs/api/hierarchy.html +1 -0
  57. package/docs/api/index.html +105 -0
  58. package/docs/api/interfaces/AutoBatchOptions.html +5 -0
  59. package/docs/api/interfaces/BackpressurePolicy.html +5 -0
  60. package/docs/api/interfaces/CancelOptions.html +8 -0
  61. package/docs/api/interfaces/ChildSpec.html +7 -0
  62. package/docs/api/interfaces/ClaimDueOptions.html +19 -0
  63. package/docs/api/interfaces/ClaimedItem.html +11 -0
  64. package/docs/api/interfaces/Codec.html +3 -0
  65. package/docs/api/interfaces/CommandExecutor.html +4 -0
  66. package/docs/api/interfaces/CompleteOptions.html +13 -0
  67. package/docs/api/interfaces/CompleteOutcome.html +9 -0
  68. package/docs/api/interfaces/CountMinMergeOptions.html +2 -0
  69. package/docs/api/interfaces/CreateItem.html +6 -0
  70. package/docs/api/interfaces/CreateManyOptions.html +15 -0
  71. package/docs/api/interfaces/CreateOptions.html +16 -0
  72. package/docs/api/interfaces/ExecutePipelineOptions.html +2 -0
  73. package/docs/api/interfaces/FailOptions.html +13 -0
  74. package/docs/api/interfaces/FailOutcome.html +9 -0
  75. package/docs/api/interfaces/FencedItem.html +5 -0
  76. package/docs/api/interfaces/FerricStoreClientOptions.html +4 -0
  77. package/docs/api/interfaces/FetchOrComputeResult.html +6 -0
  78. package/docs/api/interfaces/FlowRecord.html +20 -0
  79. package/docs/api/interfaces/GeoAddOptions.html +4 -0
  80. package/docs/api/interfaces/GeoMember.html +4 -0
  81. package/docs/api/interfaces/GetExOptions.html +6 -0
  82. package/docs/api/interfaces/JsonSetOptions.html +3 -0
  83. package/docs/api/interfaces/KeyInfo.html +7 -0
  84. package/docs/api/interfaces/MutateOptions.html +9 -0
  85. package/docs/api/interfaces/NamedValueMutation.html +5 -0
  86. package/docs/api/interfaces/NativeAdapterOptions.html +9 -0
  87. package/docs/api/interfaces/QueueOptions.html +4 -0
  88. package/docs/api/interfaces/QueueWorkerResult.html +5 -0
  89. package/docs/api/interfaces/RangeLimit.html +3 -0
  90. package/docs/api/interfaces/RateLimitResult.html +6 -0
  91. package/docs/api/interfaces/ReadOptions.html +10 -0
  92. package/docs/api/interfaces/ReclaimOptions.html +14 -0
  93. package/docs/api/interfaces/RetryOptions.html +13 -0
  94. package/docs/api/interfaces/RetryOutcome.html +9 -0
  95. package/docs/api/interfaces/RetryPolicy.html +7 -0
  96. package/docs/api/interfaces/ScanOptions.html +3 -0
  97. package/docs/api/interfaces/SetOptions.html +9 -0
  98. package/docs/api/interfaces/StateOptions.html +9 -0
  99. package/docs/api/interfaces/StateRegistration.html +11 -0
  100. package/docs/api/interfaces/StoreCommandClient.html +3 -0
  101. package/docs/api/interfaces/TDigestCreateOptions.html +2 -0
  102. package/docs/api/interfaces/TDigestMergeOptions.html +3 -0
  103. package/docs/api/interfaces/TopKReserveOptions.html +4 -0
  104. package/docs/api/interfaces/TransitionOptions.html +15 -0
  105. package/docs/api/interfaces/TransitionOutcome.html +10 -0
  106. package/docs/api/interfaces/ValueConfig.html +3 -0
  107. package/docs/api/interfaces/WorkerConfig.html +24 -0
  108. package/docs/api/interfaces/WorkflowOptions.html +5 -0
  109. package/docs/api/interfaces/WorkflowWorkerResult.html +5 -0
  110. package/docs/api/interfaces/XReadStream.html +3 -0
  111. package/docs/api/interfaces/ZAddMember.html +3 -0
  112. package/docs/api/interfaces/ZAddOptions.html +6 -0
  113. package/docs/api/media/design.md +59 -0
  114. package/docs/api/media/durable-queue.ts +24 -0
  115. package/docs/api/media/fanout.ts +38 -0
  116. package/docs/api/media/kv-store.ts +26 -0
  117. package/docs/api/media/order-workflow.ts +31 -0
  118. package/docs/api/media/signals.ts +47 -0
  119. package/docs/api/media/value-refs.ts +38 -0
  120. package/docs/api/modules.html +1 -0
  121. package/docs/api/types/BackoffKind.html +1 -0
  122. package/docs/api/types/Command.html +1 -0
  123. package/docs/api/types/CommandArgument.html +1 -0
  124. package/docs/api/types/ExceptionPolicy.html +1 -0
  125. package/docs/api/types/Outcome.html +1 -0
  126. package/docs/api/types/QueueBatchHandler.html +1 -0
  127. package/docs/api/types/QueueHandler.html +1 -0
  128. package/docs/api/types/WorkerProfile.html +1 -0
  129. package/docs/api/types/WorkflowHandler.html +1 -0
  130. package/docs/design.md +59 -0
  131. package/docs/python-parity.md +117 -0
  132. package/package.json +74 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/adapters.ts","../src/errors.ts","../src/protocol.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":["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 {\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 close?(): Promise<void> | void;\n}\n\nexport interface ExecutePipelineOptions {\n throwOnItemError?: boolean;\n}\n\nexport interface NativeAdapterOptions {\n clientName?: string;\n connectTimeoutMs?: number;\n maxChunkBytes?: number;\n protocolLanes?: number;\n timeoutMs?: number;\n username?: string;\n password?: string;\n tlsOptions?: tls.ConnectionOptions;\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 timeoutMs: number;\n\n private constructor(socket: net.Socket | tls.TLSSocket, timeoutMs: number, protocolLanes: number, maxChunkBytes: number) {\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.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 }\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 );\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 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.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 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 reject(reason instanceof Error ? reason : classifyServerError(String(reason), reason));\n },\n resolve: (value: unknown) => {\n clearTimeout(timer);\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 reject(error);\n }\n });\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 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\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.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","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 OPCODES = {\n startup: 0x000c,\n auth: 0x0002,\n ping: 0x0003,\n clientSetName: 0x0004,\n clientInfo: 0x0005,\n commandExec: 0x0100,\n get: 0x0101,\n set: 0x0102,\n del: 0x0103,\n mget: 0x0104,\n mset: 0x0105,\n pipeline: 0x000e,\n flowCreate: 0x0201,\n flowClaimDue: 0x0203,\n flowComplete: 0x0204,\n flowCreateMany: 0x020f,\n flowCompleteMany: 0x0210\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 === \"PING\") {\n return { laneId: 0, opcode: OPCODES.ping, payload: commandArgs.length === 0 ? {} : { message: commandArgs[0] } };\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 === \"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 === \"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\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 return {\n opcode: OPCODES.commandExec,\n payload: {\n args: args.slice(1),\n command: asText(args[0]).toUpperCase()\n }\n };\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 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 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\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","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 | 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 interface CreateItem {\n id: string;\n payload?: unknown;\n partitionKey?: string;\n values?: Record<string, unknown>;\n valueRefs?: Record<string, string>;\n}\n\nexport const CLAIMED_ITEM_WIRE: unique symbol = Symbol(\"ferricstore.claimedItemWire\");\n\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 [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 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 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 okResponse,\n parseKvResponse,\n sleep,\n text,\n type Command,\n type CommandArgument\n} from \"./internal.js\";\nimport { NativeAdapter, type CommandExecutor, type ExecutePipelineOptions, type NativeAdapterOptions } from \"./adapters.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} 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 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 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 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 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 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 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(\n url: string,\n options: FerricStoreClientOptions & { nativeOptions?: NativeAdapterOptions } = {}\n ): Promise<FerricStoreClient> {\n return new FerricStoreClient(await NativeAdapter.fromUrl(url, options.nativeOptions), 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 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 text(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[]): Promise<boolean> {\n return okResponse(await this.command(\"ACL\", \"SETUSER\", username, ...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 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 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 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 priority: options.priority ?? 0,\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 priority: options.priority ?? 0,\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 priority: options.priority ?? 0,\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 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\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 priority: options.priority ?? 0\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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 appendFencedItems(args, partitionKey, items, \"FLOW.CANCEL_MANY\", true);\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 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: { state?: string; retry?: RetryPolicy; retentionTtlMs?: number } = {}): Promise<unknown> {\n const args: CommandArgument[] = [\"FLOW.POLICY.SET\", type];\n append(args, \"STATE\", options.state);\n if (options.retry != null) {\n appendRetryPolicy(args, options.retry);\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 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 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 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 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","export 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}\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 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 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 } = {}): 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 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 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 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 );\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 { FerricStoreClient } 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 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 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 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 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 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: { id: string; payload?: unknown; partitionKey?: string; values?: Record<string, unknown>; valueRefs?: Record<string, string> }[], 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 } = {}): 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 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 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 try {\n const value = await registration.handler(ctx);\n const outcome = isOutcome(value) ? value : complete({ result: value });\n await applyOutcome(this.workflow.client, ctx, outcome, registration.returnRecord);\n } catch (error) {\n await this.applyHandlerError(ctx, registration, error);\n }\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 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 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 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 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 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 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 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":["Buffer","Buffer","Buffer","text","attrs","read","Buffer","bytes","field","pairs","number","encode","array","decode","string","text","randomUUID","randomUUID","value"]}