@rstmdb/client 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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/protocol/crc32c.ts","../src/errors/codes.ts","../src/errors/base.ts","../src/errors/classes.ts","../src/protocol/frame.ts","../src/protocol/operations.ts","../src/protocol/messages.ts","../src/connection.ts","../src/streaming/subscription.ts","../src/streaming/manager.ts","../src/types/config.ts","../src/client.ts"],"names":["ErrorCode","FrameFlags","Operation","EventEmitter","tls","net"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * CRC32C implementation using the Castagnoli polynomial.\n * This is a software fallback - Node.js doesn't have native CRC32C.\n */\n\n// CRC32C lookup table (Castagnoli polynomial: 0x1EDC6F41)\nconst CRC32C_TABLE = new Uint32Array(256);\n\n// Initialize the lookup table\n(function initTable() {\n const POLYNOMIAL = 0x82f63b78; // Reversed Castagnoli polynomial\n\n for (let i = 0; i < 256; i++) {\n let crc = i;\n for (let j = 0; j < 8; j++) {\n if (crc & 1) {\n crc = (crc >>> 1) ^ POLYNOMIAL;\n } else {\n crc = crc >>> 1;\n }\n }\n CRC32C_TABLE[i] = crc >>> 0;\n }\n})();\n\n/**\n * Compute CRC32C checksum of data.\n */\nexport function crc32c(data: Buffer): number {\n let crc = 0xffffffff;\n\n for (let i = 0; i < data.length; i++) {\n const byte = data[i]!;\n const tableIndex = (crc ^ byte) & 0xff;\n crc = (crc >>> 8) ^ CRC32C_TABLE[tableIndex]!;\n }\n\n return (crc ^ 0xffffffff) >>> 0;\n}\n\n/**\n * Verify CRC32C checksum.\n */\nexport function verifyCrc32c(data: Buffer, expected: number): boolean {\n return crc32c(data) === expected;\n}\n","/**\n * Error codes used by the rstmdb client.\n */\nexport enum ErrorCode {\n // Protocol errors\n UNSUPPORTED_PROTOCOL = 'UNSUPPORTED_PROTOCOL',\n BAD_REQUEST = 'BAD_REQUEST',\n\n // Authentication errors\n UNAUTHORIZED = 'UNAUTHORIZED',\n AUTH_FAILED = 'AUTH_FAILED',\n\n // Resource errors\n NOT_FOUND = 'NOT_FOUND',\n MACHINE_NOT_FOUND = 'MACHINE_NOT_FOUND',\n MACHINE_VERSION_EXISTS = 'MACHINE_VERSION_EXISTS',\n INSTANCE_NOT_FOUND = 'INSTANCE_NOT_FOUND',\n INSTANCE_EXISTS = 'INSTANCE_EXISTS',\n\n // State machine errors\n INVALID_TRANSITION = 'INVALID_TRANSITION',\n GUARD_FAILED = 'GUARD_FAILED',\n CONFLICT = 'CONFLICT',\n\n // System errors\n WAL_IO_ERROR = 'WAL_IO_ERROR',\n INTERNAL_ERROR = 'INTERNAL_ERROR',\n RATE_LIMITED = 'RATE_LIMITED',\n\n // Client-side errors\n CONNECTION_FAILED = 'CONNECTION_FAILED',\n CONNECTION_CLOSED = 'CONNECTION_CLOSED',\n TIMEOUT = 'TIMEOUT',\n}\n\n/**\n * Determine if an error code indicates a retryable error.\n */\nexport function isRetryableCode(code: ErrorCode): boolean {\n switch (code) {\n case ErrorCode.CONNECTION_FAILED:\n case ErrorCode.CONNECTION_CLOSED:\n case ErrorCode.TIMEOUT:\n case ErrorCode.RATE_LIMITED:\n case ErrorCode.WAL_IO_ERROR:\n case ErrorCode.INTERNAL_ERROR:\n return true;\n default:\n return false;\n }\n}\n","import { ErrorCode, isRetryableCode } from './codes.js';\n\n/**\n * Base error class for all rstmdb errors.\n */\nexport class RstmdbError extends Error {\n /** Error code */\n readonly code: ErrorCode;\n\n /** Whether the operation can be retried */\n readonly retryable: boolean;\n\n /** Additional error details */\n readonly details?: Record<string, unknown>;\n\n constructor(\n message: string,\n code: ErrorCode,\n options?: {\n retryable?: boolean;\n details?: Record<string, unknown>;\n cause?: Error;\n }\n ) {\n super(message, { cause: options?.cause });\n this.name = 'RstmdbError';\n this.code = code;\n this.retryable = options?.retryable ?? isRetryableCode(code);\n this.details = options?.details;\n\n // Maintain proper prototype chain\n Object.setPrototypeOf(this, new.target.prototype);\n }\n\n /**\n * Create an error from a server response.\n */\n static fromResponse(response: {\n code: string;\n message: string;\n details?: Record<string, unknown>;\n }): RstmdbError {\n const code = (response.code as ErrorCode) || ErrorCode.INTERNAL_ERROR;\n return new RstmdbError(response.message, code, {\n details: response.details,\n });\n }\n}\n","import { ErrorCode } from './codes.js';\nimport { RstmdbError } from './base.js';\n\n/**\n * Connection-related errors.\n */\nexport class ConnectionError extends RstmdbError {\n constructor(message: string, options?: { cause?: Error; details?: Record<string, unknown> }) {\n super(message, ErrorCode.CONNECTION_FAILED, {\n retryable: true,\n ...options,\n });\n this.name = 'ConnectionError';\n }\n}\n\n/**\n * Timeout errors.\n */\nexport class TimeoutError extends RstmdbError {\n constructor(message: string, options?: { cause?: Error; details?: Record<string, unknown> }) {\n super(message, ErrorCode.TIMEOUT, {\n retryable: true,\n ...options,\n });\n this.name = 'TimeoutError';\n }\n}\n\n/**\n * Protocol-level errors.\n */\nexport class ProtocolError extends RstmdbError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.BAD_REQUEST,\n options?: { cause?: Error; details?: Record<string, unknown> }\n ) {\n super(message, code, {\n retryable: false,\n ...options,\n });\n this.name = 'ProtocolError';\n }\n}\n\n/**\n * Server-returned errors.\n */\nexport class ServerError extends RstmdbError {\n constructor(\n message: string,\n code: ErrorCode,\n options?: { retryable?: boolean; details?: Record<string, unknown>; cause?: Error }\n ) {\n super(message, code, options);\n this.name = 'ServerError';\n }\n\n /**\n * Create a ServerError from a server response.\n */\n static fromResponse(response: {\n code: string;\n message: string;\n details?: Record<string, unknown>;\n }): ServerError {\n const code = (response.code as ErrorCode) || ErrorCode.INTERNAL_ERROR;\n const message = response.message || 'Unknown server error';\n\n // Map to specific error classes\n switch (code) {\n case ErrorCode.NOT_FOUND:\n case ErrorCode.MACHINE_NOT_FOUND:\n case ErrorCode.INSTANCE_NOT_FOUND:\n return new NotFoundError(message, code, { details: response.details });\n\n case ErrorCode.CONFLICT:\n case ErrorCode.INSTANCE_EXISTS:\n case ErrorCode.MACHINE_VERSION_EXISTS:\n return new ConflictError(message, code, { details: response.details });\n\n case ErrorCode.UNAUTHORIZED:\n case ErrorCode.AUTH_FAILED:\n return new AuthenticationError(message, code, { details: response.details });\n\n case ErrorCode.INVALID_TRANSITION:\n return new InvalidTransitionError(message, { details: response.details });\n\n case ErrorCode.GUARD_FAILED:\n return new GuardFailedError(message, { details: response.details });\n\n default:\n return new ServerError(message, code, { details: response.details });\n }\n }\n}\n\n/**\n * Resource not found errors.\n */\nexport class NotFoundError extends ServerError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.NOT_FOUND,\n options?: { details?: Record<string, unknown>; cause?: Error }\n ) {\n super(message, code, { retryable: false, ...options });\n this.name = 'NotFoundError';\n }\n}\n\n/**\n * Conflict errors (resource already exists, version mismatch, etc.).\n */\nexport class ConflictError extends ServerError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.CONFLICT,\n options?: { details?: Record<string, unknown>; cause?: Error }\n ) {\n super(message, code, { retryable: false, ...options });\n this.name = 'ConflictError';\n }\n}\n\n/**\n * Authentication errors.\n */\nexport class AuthenticationError extends ServerError {\n constructor(\n message: string,\n code: ErrorCode = ErrorCode.UNAUTHORIZED,\n options?: { details?: Record<string, unknown>; cause?: Error }\n ) {\n super(message, code, { retryable: false, ...options });\n this.name = 'AuthenticationError';\n }\n}\n\n/**\n * Invalid state transition errors.\n */\nexport class InvalidTransitionError extends ServerError {\n constructor(message: string, options?: { details?: Record<string, unknown>; cause?: Error }) {\n super(message, ErrorCode.INVALID_TRANSITION, { retryable: false, ...options });\n this.name = 'InvalidTransitionError';\n }\n}\n\n/**\n * Guard condition failed errors.\n */\nexport class GuardFailedError extends ServerError {\n constructor(message: string, options?: { details?: Record<string, unknown>; cause?: Error }) {\n super(message, ErrorCode.GUARD_FAILED, { retryable: false, ...options });\n this.name = 'GuardFailedError';\n }\n}\n","import { crc32c, verifyCrc32c } from './crc32c.js';\nimport { ProtocolError } from '../errors/classes.js';\nimport { ErrorCode } from '../errors/codes.js';\n\n/**\n * RCP frame magic bytes: \"RCPX\"\n */\nexport const FRAME_MAGIC = 0x52435058; // \"RCPX\"\n\n/**\n * Protocol version.\n */\nexport const PROTOCOL_VERSION = 1;\n\n/**\n * Frame header size in bytes (4 magic + 2 version + 2 flags + 2 header_len + 4 payload_len + 4 crc).\n */\nexport const HEADER_SIZE = 18;\n\n/**\n * Frame flags.\n */\nexport enum FrameFlags {\n NONE = 0,\n CRC_PRESENT = 1 << 0,\n COMPRESSED = 1 << 1,\n STREAM = 1 << 2,\n END_STREAM = 1 << 3,\n}\n\n/**\n * A decoded RCP frame.\n */\nexport interface Frame {\n flags: number;\n payload: Buffer;\n}\n\n/**\n * Encodes a payload into an RCP frame.\n */\nexport class FrameEncoder {\n private readonly useCrc: boolean;\n\n constructor(options?: { useCrc?: boolean }) {\n this.useCrc = options?.useCrc ?? true;\n }\n\n /**\n * Encode an object into an RCP frame.\n */\n encode(payload: object): Buffer {\n const payloadJson = JSON.stringify(payload);\n const payloadBuffer = Buffer.from(payloadJson, 'utf8');\n\n const flags = this.useCrc ? FrameFlags.CRC_PRESENT : FrameFlags.NONE;\n const crcValue = this.useCrc ? crc32c(payloadBuffer) : 0;\n\n return this.encodeRaw(payloadBuffer, flags, crcValue);\n }\n\n /**\n * Encode a stream frame.\n */\n encodeStream(payload: object, endStream: boolean = false): Buffer {\n const payloadJson = JSON.stringify(payload);\n const payloadBuffer = Buffer.from(payloadJson, 'utf8');\n\n let flags = FrameFlags.STREAM;\n if (this.useCrc) flags |= FrameFlags.CRC_PRESENT;\n if (endStream) flags |= FrameFlags.END_STREAM;\n\n const crcValue = this.useCrc ? crc32c(payloadBuffer) : 0;\n\n return this.encodeRaw(payloadBuffer, flags, crcValue);\n }\n\n /**\n * Encode raw payload with specified flags.\n */\n private encodeRaw(payload: Buffer, flags: number, crcValue: number): Buffer {\n const headerExtLen = 0; // No header extension\n const payloadLen = payload.length;\n const frame = Buffer.allocUnsafe(HEADER_SIZE + headerExtLen + payloadLen);\n\n // Write header (18 bytes)\n frame.writeUInt32BE(FRAME_MAGIC, 0); // magic (4 bytes) - \"RCPX\"\n frame.writeUInt16BE(PROTOCOL_VERSION, 4); // version (2 bytes)\n frame.writeUInt16BE(flags, 6); // flags (2 bytes)\n frame.writeUInt16BE(headerExtLen, 8); // header_ext_len (2 bytes) - 0 = no extension\n frame.writeUInt32BE(payloadLen, 10); // payload_len (4 bytes)\n frame.writeUInt32BE(crcValue, 14); // crc32c (4 bytes)\n\n // Copy payload (no header extension)\n payload.copy(frame, HEADER_SIZE);\n\n return frame;\n }\n}\n\n/**\n * Decodes RCP frames from a byte stream.\n */\nexport class FrameDecoder {\n private buffer: Buffer = Buffer.alloc(0);\n private readonly verifyCrc: boolean;\n\n constructor(options?: { verifyCrc?: boolean }) {\n this.verifyCrc = options?.verifyCrc ?? true;\n }\n\n /**\n * Append data to the internal buffer.\n */\n append(data: Buffer): void {\n this.buffer = Buffer.concat([this.buffer, data]);\n }\n\n /**\n * Try to decode a frame from the buffer.\n * Returns null if not enough data is available.\n */\n decode(): Frame | null {\n // Need at least a header\n if (this.buffer.length < HEADER_SIZE) {\n return null;\n }\n\n // Read header fields (18 bytes)\n const magic = this.buffer.readUInt32BE(0);\n if (magic !== FRAME_MAGIC) {\n throw new ProtocolError(\n `Invalid frame magic: expected 0x${FRAME_MAGIC.toString(16)} (RCPX), got 0x${magic.toString(16)}`,\n ErrorCode.BAD_REQUEST\n );\n }\n\n const version = this.buffer.readUInt16BE(4);\n if (version !== PROTOCOL_VERSION) {\n throw new ProtocolError(\n `Unsupported protocol version: ${version}`,\n ErrorCode.UNSUPPORTED_PROTOCOL\n );\n }\n\n const flags = this.buffer.readUInt16BE(6);\n const headerExtLen = this.buffer.readUInt16BE(8);\n const payloadLen = this.buffer.readUInt32BE(10);\n const crcValue = this.buffer.readUInt32BE(14);\n\n // Check if we have the full frame\n const totalLen = HEADER_SIZE + headerExtLen + payloadLen;\n if (this.buffer.length < totalLen) {\n return null;\n }\n\n // Skip header extension (if any)\n const payloadStart = HEADER_SIZE + headerExtLen;\n\n // Extract payload\n const payload = this.buffer.subarray(payloadStart, payloadStart + payloadLen);\n\n // Verify CRC if present\n if (this.verifyCrc && flags & FrameFlags.CRC_PRESENT) {\n if (!verifyCrc32c(payload, crcValue)) {\n throw new ProtocolError('CRC32C checksum mismatch', ErrorCode.BAD_REQUEST);\n }\n }\n\n // Consume the frame from buffer\n this.buffer = this.buffer.subarray(totalLen);\n\n return { flags, payload: Buffer.from(payload) };\n }\n\n /**\n * Reset the decoder state.\n */\n reset(): void {\n this.buffer = Buffer.alloc(0);\n }\n\n /**\n * Get the current buffer length.\n */\n get bufferedLength(): number {\n return this.buffer.length;\n }\n}\n","/**\n * RCP operation types.\n */\nexport enum Operation {\n // System operations\n HELLO = 'HELLO',\n AUTH = 'AUTH',\n PING = 'PING',\n INFO = 'INFO',\n\n // Machine operations\n PUT_MACHINE = 'PUT_MACHINE',\n GET_MACHINE = 'GET_MACHINE',\n LIST_MACHINES = 'LIST_MACHINES',\n\n // Instance operations\n CREATE_INSTANCE = 'CREATE_INSTANCE',\n GET_INSTANCE = 'GET_INSTANCE',\n DELETE_INSTANCE = 'DELETE_INSTANCE',\n\n // Event operations\n APPLY_EVENT = 'APPLY_EVENT',\n BATCH = 'BATCH',\n\n // WAL operations\n WAL_READ = 'WAL_READ',\n SNAPSHOT_INSTANCE = 'SNAPSHOT_INSTANCE',\n COMPACT = 'COMPACT',\n\n // Watch operations\n WATCH_INSTANCE = 'WATCH_INSTANCE',\n WATCH_ALL = 'WATCH_ALL',\n UNWATCH = 'UNWATCH',\n}\n\n/**\n * All supported operations.\n */\nexport const OPERATIONS = Object.values(Operation);\n\n/**\n * Check if a string is a valid operation.\n */\nexport function isValidOperation(op: string): op is Operation {\n return OPERATIONS.includes(op as Operation);\n}\n","import type { Operation } from './operations.js';\n\n/**\n * Base request message.\n */\nexport interface RequestMessage {\n /** Message type - always \"request\" */\n type: 'request';\n\n /** Request ID for correlation */\n id: string;\n\n /** Operation type */\n op: Operation;\n\n /** Operation parameters */\n params?: object;\n}\n\n/**\n * Base response message.\n */\nexport interface ResponseMessage {\n /** Request ID this responds to */\n id: string;\n\n /** Message type */\n type: 'response';\n\n /** Response status */\n status: 'ok' | 'error';\n\n /** Result data (if successful) */\n result?: Record<string, unknown>;\n\n /** Error information (if failed) */\n error?: {\n code: string;\n message: string;\n retryable?: boolean;\n details?: Record<string, unknown>;\n };\n\n /** Response metadata */\n meta?: {\n server_time?: string;\n wal_offset?: number;\n leader?: boolean;\n trace_id?: string;\n };\n}\n\n/**\n * Stream event message (wire format - snake_case from server).\n */\nexport interface StreamEventMessage {\n /** Subscription ID */\n subscription_id: string;\n\n /** Message type */\n type: 'event';\n\n /** Instance ID */\n instance_id: string;\n\n /** Machine name */\n machine: string;\n\n /** Machine version */\n version: number;\n\n /** WAL offset */\n wal_offset: string; // bigint serialized as string\n\n /** Source state */\n from_state: string;\n\n /** Target state */\n to_state: string;\n\n /** Event name */\n event: string;\n\n /** Event payload */\n payload?: Record<string, unknown>;\n\n /** Instance context */\n ctx?: Record<string, unknown>;\n}\n\n/**\n * Stream end message (wire format - snake_case from server).\n */\nexport interface StreamEndMessage {\n /** Subscription ID */\n subscription_id: string;\n\n /** Message type */\n type: 'end';\n\n /** Reason for ending */\n reason?: string;\n}\n\n/**\n * Any message from the server.\n */\nexport type ServerMessage = ResponseMessage | StreamEventMessage | StreamEndMessage;\n\n/**\n * Check if a message is a response.\n */\nexport function isResponseMessage(msg: ServerMessage): msg is ResponseMessage {\n return msg.type === 'response';\n}\n\n/**\n * Check if a message is a stream event.\n */\nexport function isStreamEventMessage(msg: ServerMessage): msg is StreamEventMessage {\n return msg.type === 'event';\n}\n\n/**\n * Check if a message is a stream end.\n */\nexport function isStreamEndMessage(msg: ServerMessage): msg is StreamEndMessage {\n return msg.type === 'end';\n}\n\n/**\n * Parse bigint fields from server response.\n * Server sends bigints as strings.\n */\nexport function parseBigIntFields<T extends Record<string, unknown>>(obj: T, fields: string[]): T {\n const result: Record<string, unknown> = { ...obj };\n for (const field of fields) {\n const value = result[field];\n if (typeof value === 'string') {\n result[field] = BigInt(value);\n }\n }\n return result as T;\n}\n\n/**\n * Serialize bigint fields for requests.\n */\nexport function serializeBigIntFields<T extends Record<string, unknown>>(\n obj: T,\n fields: string[]\n): T {\n const result: Record<string, unknown> = { ...obj };\n for (const field of fields) {\n const value = result[field];\n if (typeof value === 'bigint') {\n result[field] = value.toString();\n }\n }\n return result as T;\n}\n","import * as net from 'net';\nimport * as tls from 'tls';\nimport { EventEmitter } from 'events';\nimport { FrameEncoder, FrameDecoder, type Frame } from './protocol/frame.js';\nimport { Operation } from './protocol/operations.js';\nimport {\n type RequestMessage,\n type ResponseMessage,\n type ServerMessage,\n isResponseMessage,\n isStreamEventMessage,\n isStreamEndMessage,\n} from './protocol/messages.js';\nimport { SubscriptionManager } from './streaming/manager.js';\nimport { ConnectionError, TimeoutError, ProtocolError, ServerError } from './errors/classes.js';\nimport { ErrorCode } from './errors/codes.js';\nimport type { ResolvedConfig } from './types/config.js';\n\n/**\n * Connection states.\n */\nexport enum ConnectionState {\n DISCONNECTED = 'DISCONNECTED',\n CONNECTING = 'CONNECTING',\n HANDSHAKING = 'HANDSHAKING',\n CONNECTED = 'CONNECTED',\n CLOSING = 'CLOSING',\n}\n\n/**\n * Pending request tracker.\n */\ninterface PendingRequest {\n id: string;\n resolve: (response: ResponseMessage) => void;\n reject: (error: Error) => void;\n timeout: ReturnType<typeof setTimeout>;\n}\n\n/**\n * Connection events.\n */\nexport interface ConnectionEvents {\n connect: () => void;\n disconnect: (error?: Error) => void;\n error: (error: Error) => void;\n reconnect: (attempt: number) => void;\n}\n\n/**\n * Manages the TCP/TLS connection to the rstmdb server.\n */\nexport class Connection extends EventEmitter {\n private config: ResolvedConfig;\n private socket: net.Socket | tls.TLSSocket | null = null;\n private state: ConnectionState = ConnectionState.DISCONNECTED;\n\n private encoder: FrameEncoder;\n private decoder: FrameDecoder;\n\n private pending = new Map<string, PendingRequest>();\n private nextId = 1;\n\n private subscriptions: SubscriptionManager;\n\n private reconnectAttempt = 0;\n private reconnectTimer: ReturnType<typeof setTimeout> | null = null;\n private closing = false;\n\n constructor(config: ResolvedConfig, subscriptions: SubscriptionManager) {\n super();\n this.config = config;\n this.subscriptions = subscriptions;\n this.encoder = new FrameEncoder({ useCrc: true });\n this.decoder = new FrameDecoder({ verifyCrc: true });\n }\n\n /**\n * Get the current connection state.\n */\n getState(): ConnectionState {\n return this.state;\n }\n\n /**\n * Check if connected.\n */\n isConnected(): boolean {\n return this.state === ConnectionState.CONNECTED;\n }\n\n /**\n * Connect to the server.\n */\n async connect(): Promise<void> {\n if (this.state !== ConnectionState.DISCONNECTED) {\n throw new ConnectionError('Already connected or connecting');\n }\n\n this.closing = false;\n this.state = ConnectionState.CONNECTING;\n\n try {\n await this.createSocket();\n this.state = ConnectionState.HANDSHAKING;\n await this.handshake();\n this.state = ConnectionState.CONNECTED;\n this.reconnectAttempt = 0;\n this.emit('connect');\n } catch (error) {\n this.state = ConnectionState.DISCONNECTED;\n this.cleanup();\n throw error;\n }\n }\n\n /**\n * Close the connection.\n */\n async close(): Promise<void> {\n this.closing = true;\n\n if (this.reconnectTimer) {\n clearTimeout(this.reconnectTimer);\n this.reconnectTimer = null;\n }\n\n if (this.socket) {\n this.state = ConnectionState.CLOSING;\n\n // Cancel all pending requests\n const error = new ConnectionError('Connection closed');\n for (const pending of this.pending.values()) {\n clearTimeout(pending.timeout);\n pending.reject(error);\n }\n this.pending.clear();\n\n // Close subscriptions\n this.subscriptions.closeAll(error);\n\n // Close socket\n await new Promise<void>((resolve) => {\n if (this.socket) {\n this.socket.once('close', () => resolve());\n this.socket.end();\n // Force close after a short delay\n setTimeout(() => {\n if (this.socket) {\n this.socket.destroy();\n }\n resolve();\n }, 1000);\n } else {\n resolve();\n }\n });\n\n this.cleanup();\n }\n\n this.state = ConnectionState.DISCONNECTED;\n }\n\n /**\n * Send a request and wait for response.\n */\n async request<T>(op: Operation, params?: object): Promise<T> {\n // Allow requests during HANDSHAKING (for HELLO/AUTH) and CONNECTED states\n if (this.state !== ConnectionState.CONNECTED && this.state !== ConnectionState.HANDSHAKING) {\n throw new ConnectionError('Not connected');\n }\n\n const socket = this.socket;\n if (!socket) {\n throw new ConnectionError('Socket not available');\n }\n\n const id = String(this.nextId++);\n const message: RequestMessage = { type: 'request', id, op, params };\n const frame = this.encoder.encode(message);\n\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => {\n this.pending.delete(id);\n reject(new TimeoutError(`Request ${op} timed out after ${this.config.requestTimeout}ms`));\n }, this.config.requestTimeout);\n\n this.pending.set(id, {\n id,\n resolve: (response) => {\n clearTimeout(timeout);\n this.pending.delete(id);\n\n if (response.status !== 'ok') {\n reject(\n ServerError.fromResponse(\n response.error || { code: ErrorCode.INTERNAL_ERROR, message: 'Unknown error' }\n )\n );\n } else {\n resolve(response.result as T);\n }\n },\n reject: (error) => {\n clearTimeout(timeout);\n this.pending.delete(id);\n reject(error);\n },\n timeout,\n });\n\n socket.write(frame, (err) => {\n if (err) {\n const pending = this.pending.get(id);\n if (pending) {\n clearTimeout(pending.timeout);\n this.pending.delete(id);\n reject(new ConnectionError(`Failed to send request: ${err.message}`, { cause: err }));\n }\n }\n });\n });\n }\n\n /**\n * Create the TCP/TLS socket.\n */\n private async createSocket(): Promise<void> {\n return new Promise((resolve, reject) => {\n const connectTimeout = setTimeout(() => {\n if (this.socket) {\n this.socket.destroy();\n this.socket = null;\n }\n reject(new TimeoutError(`Connection timeout after ${this.config.connectTimeout}ms`));\n }, this.config.connectTimeout);\n\n const options = {\n host: this.config.host,\n port: this.config.port,\n };\n\n const onConnect = () => {\n clearTimeout(connectTimeout);\n this.setupSocket();\n resolve();\n };\n\n const onError = (err: Error) => {\n clearTimeout(connectTimeout);\n reject(new ConnectionError(`Failed to connect: ${err.message}`, { cause: err }));\n };\n\n if (this.config.tls) {\n const tlsOptions: tls.ConnectionOptions = {\n ...options,\n ...this.config.tls,\n };\n this.socket = tls.connect(tlsOptions);\n this.socket.once('secureConnect', onConnect);\n } else {\n this.socket = net.connect(options);\n this.socket.once('connect', onConnect);\n }\n\n this.socket.once('error', onError);\n });\n }\n\n /**\n * Set up socket event handlers.\n */\n private setupSocket(): void {\n if (!this.socket) return;\n\n this.socket.on('data', (data: Buffer) => this.handleData(data));\n\n this.socket.on('close', () => {\n const wasConnected = this.state === ConnectionState.CONNECTED;\n this.cleanup();\n this.state = ConnectionState.DISCONNECTED;\n\n if (!this.closing && wasConnected) {\n this.emit('disconnect');\n this.scheduleReconnect();\n }\n });\n\n this.socket.on('error', (err: Error) => {\n this.emit('error', new ConnectionError(err.message, { cause: err }));\n });\n }\n\n /**\n * Handle incoming data.\n */\n private handleData(data: Buffer): void {\n this.decoder.append(data);\n\n let frame: Frame | null;\n try {\n while ((frame = this.decoder.decode()) !== null) {\n this.handleFrame(frame);\n }\n } catch (error) {\n // Protocol error - close connection\n this.emit('error', error as Error);\n this.socket?.destroy();\n }\n }\n\n /**\n * Handle a decoded frame.\n */\n private handleFrame(frame: Frame): void {\n let message: ServerMessage;\n try {\n message = JSON.parse(frame.payload.toString('utf8')) as ServerMessage;\n } catch {\n throw new ProtocolError('Invalid JSON payload');\n }\n\n if (isResponseMessage(message)) {\n const pending = this.pending.get(message.id);\n if (pending) {\n pending.resolve(message);\n }\n } else if (isStreamEventMessage(message)) {\n this.subscriptions.dispatch(message);\n } else if (isStreamEndMessage(message)) {\n this.subscriptions.end(message.subscription_id);\n }\n }\n\n /**\n * Perform the handshake (HELLO + AUTH).\n */\n private async handshake(): Promise<void> {\n // Send HELLO with RCP protocol parameters\n const helloParams: Record<string, unknown> = {\n protocol_version: 1,\n wire_modes: ['binary_json'],\n features: ['idempotency', 'batch'],\n };\n if (this.config.clientName) {\n helloParams['client_name'] = this.config.clientName;\n }\n\n const helloResult = await this.request<{ protocol_version: number; wire_mode: string }>(\n Operation.HELLO,\n helloParams\n );\n\n // Verify protocol version\n if (helloResult.protocol_version !== 1) {\n throw new ProtocolError(\n `Unsupported protocol version: ${helloResult.protocol_version}`,\n ErrorCode.UNSUPPORTED_PROTOCOL\n );\n }\n\n // Send AUTH if token provided\n if (this.config.authToken) {\n await this.request(Operation.AUTH, {\n method: 'bearer',\n token: this.config.authToken,\n });\n }\n }\n\n /**\n * Schedule a reconnection attempt.\n */\n private scheduleReconnect(): void {\n if (this.closing || !this.config.reconnect) {\n return;\n }\n\n if (this.reconnectAttempt >= this.config.reconnectMaxAttempts) {\n this.emit(\n 'error',\n new ConnectionError(\n `Max reconnection attempts (${this.config.reconnectMaxAttempts}) reached`\n )\n );\n return;\n }\n\n this.reconnectAttempt++;\n const delay = this.config.reconnectInterval * Math.min(this.reconnectAttempt, 5);\n\n this.reconnectTimer = setTimeout(() => {\n this.reconnectTimer = null;\n this.emit('reconnect', this.reconnectAttempt);\n\n this.connect().catch(() => {\n // Will trigger another reconnect via the close handler\n });\n }, delay);\n }\n\n /**\n * Clean up resources.\n */\n private cleanup(): void {\n this.decoder.reset();\n\n if (this.socket) {\n this.socket.removeAllListeners();\n this.socket = null;\n }\n }\n}\n","import { EventEmitter } from 'events';\n\n/**\n * A stream event from a watch subscription.\n */\nexport interface StreamEvent {\n /** Subscription ID */\n subscriptionId: string;\n\n /** Instance ID */\n instanceId: string;\n\n /** Machine name */\n machine: string;\n\n /** Machine version */\n version: number;\n\n /** WAL offset */\n walOffset: bigint;\n\n /** Source state */\n fromState: string;\n\n /** Target state */\n toState: string;\n\n /** Event name */\n event: string;\n\n /** Event payload */\n payload?: Record<string, unknown>;\n\n /** Instance context */\n ctx?: Record<string, unknown>;\n}\n\n/**\n * Options for WATCH_INSTANCE operation.\n */\nexport interface WatchOptions {\n /** Include context in events. Default: true */\n includeCtx?: boolean;\n\n /** Replay events from this offset */\n fromOffset?: bigint;\n}\n\n/**\n * Options for WATCH_ALL operation.\n */\nexport interface WatchAllOptions extends WatchOptions {\n /** Filter by machine names */\n machines?: string[];\n\n /** Filter by source states */\n fromStates?: string[];\n\n /** Filter by target states */\n toStates?: string[];\n\n /** Filter by event names */\n events?: string[];\n}\n\n/**\n * A subscription to watch events.\n */\nexport interface Subscription {\n /** Subscription ID */\n readonly subscriptionId: string;\n\n /** AsyncIterator for for-await-of loops */\n [Symbol.asyncIterator](): AsyncIterator<StreamEvent>;\n\n /** Register event listener */\n on(event: 'event', listener: (event: StreamEvent) => void): this;\n on(event: 'error', listener: (error: Error) => void): this;\n on(event: 'end', listener: () => void): this;\n\n /** Remove event listener */\n off(event: 'event', listener: (event: StreamEvent) => void): this;\n off(event: 'error', listener: (error: Error) => void): this;\n off(event: 'end', listener: () => void): this;\n\n /** Cancel the subscription */\n unsubscribe(): Promise<void>;\n}\n\n/**\n * Internal subscription handler implementation.\n */\nexport class SubscriptionHandler extends EventEmitter implements Subscription {\n readonly subscriptionId: string;\n\n private events: StreamEvent[] = [];\n private waiters: Array<{\n resolve: (result: IteratorResult<StreamEvent>) => void;\n reject: (error: Error) => void;\n }> = [];\n private closed = false;\n private closeError?: Error;\n private unsubscribeFn: () => Promise<void>;\n\n constructor(subscriptionId: string, unsubscribeFn: () => Promise<void>) {\n super();\n this.subscriptionId = subscriptionId;\n this.unsubscribeFn = unsubscribeFn;\n }\n\n /**\n * Push an event to the subscription.\n */\n push(event: StreamEvent): void {\n if (this.closed) return;\n\n // If there are waiters, resolve the first one\n const waiter = this.waiters.shift();\n if (waiter) {\n waiter.resolve({ value: event, done: false });\n } else {\n // Otherwise, queue the event\n this.events.push(event);\n }\n\n // Emit for event listener style\n this.emit('event', event);\n }\n\n /**\n * Close the subscription with an optional error.\n */\n close(error?: Error): void {\n if (this.closed) return;\n this.closed = true;\n this.closeError = error;\n\n // Reject or complete all waiters\n for (const waiter of this.waiters) {\n if (error) {\n waiter.reject(error);\n } else {\n waiter.resolve({ value: undefined, done: true });\n }\n }\n this.waiters = [];\n\n // Emit end/error events\n if (error) {\n this.emit('error', error);\n }\n this.emit('end');\n }\n\n /**\n * AsyncIterator implementation.\n */\n async *[Symbol.asyncIterator](): AsyncIterator<StreamEvent> {\n while (true) {\n // Check if closed\n if (this.closed) {\n if (this.closeError) {\n throw this.closeError;\n }\n // Drain remaining events\n while (this.events.length > 0) {\n yield this.events.shift()!;\n }\n return;\n }\n\n // Return queued event if available\n if (this.events.length > 0) {\n yield this.events.shift()!;\n continue;\n }\n\n // Wait for next event\n const result = await new Promise<IteratorResult<StreamEvent>>((resolve, reject) => {\n this.waiters.push({ resolve, reject });\n });\n\n if (result.done) {\n return;\n }\n\n yield result.value;\n }\n }\n\n /**\n * Cancel the subscription.\n */\n async unsubscribe(): Promise<void> {\n if (!this.closed) {\n await this.unsubscribeFn();\n this.close();\n }\n }\n\n /**\n * Check if the subscription is closed.\n */\n get isClosed(): boolean {\n return this.closed;\n }\n}\n","import { SubscriptionHandler, type StreamEvent } from './subscription.js';\nimport type { StreamEventMessage } from '../protocol/messages.js';\n\n/**\n * Manages active subscriptions.\n */\nexport class SubscriptionManager {\n private subscriptions = new Map<string, SubscriptionHandler>();\n\n /**\n * Register a new subscription.\n */\n register(subscriptionId: string, handler: SubscriptionHandler): void {\n this.subscriptions.set(subscriptionId, handler);\n }\n\n /**\n * Unregister a subscription.\n */\n unregister(subscriptionId: string): void {\n const handler = this.subscriptions.get(subscriptionId);\n if (handler) {\n handler.close();\n this.subscriptions.delete(subscriptionId);\n }\n }\n\n /**\n * Get a subscription handler.\n */\n get(subscriptionId: string): SubscriptionHandler | undefined {\n return this.subscriptions.get(subscriptionId);\n }\n\n /**\n * Check if a subscription exists.\n */\n has(subscriptionId: string): boolean {\n return this.subscriptions.has(subscriptionId);\n }\n\n /**\n * Dispatch an event to the appropriate subscription.\n */\n dispatch(message: StreamEventMessage): void {\n const handler = this.subscriptions.get(message.subscription_id);\n if (!handler) {\n return;\n }\n\n const event: StreamEvent = {\n subscriptionId: message.subscription_id,\n instanceId: message.instance_id,\n machine: message.machine,\n version: message.version,\n walOffset: BigInt(message.wal_offset),\n fromState: message.from_state,\n toState: message.to_state,\n event: message.event,\n payload: message.payload,\n ctx: message.ctx,\n };\n\n handler.push(event);\n }\n\n /**\n * End a subscription (e.g., when server sends end message).\n */\n end(subscriptionId: string, error?: Error): void {\n const handler = this.subscriptions.get(subscriptionId);\n if (handler) {\n handler.close(error);\n this.subscriptions.delete(subscriptionId);\n }\n }\n\n /**\n * Close all subscriptions (e.g., on disconnect).\n */\n closeAll(error?: Error): void {\n for (const handler of this.subscriptions.values()) {\n handler.close(error);\n }\n this.subscriptions.clear();\n }\n\n /**\n * Get the number of active subscriptions.\n */\n get size(): number {\n return this.subscriptions.size;\n }\n}\n","/**\n * TLS configuration options for secure connections.\n */\nexport interface TlsConfig {\n /** CA certificate(s) for server verification */\n ca?: string | Buffer | string[];\n\n /** Whether to reject unauthorized certificates. Default: true */\n rejectUnauthorized?: boolean;\n\n /** Client certificate for mTLS */\n cert?: string | Buffer;\n\n /** Client private key for mTLS */\n key?: string | Buffer;\n\n /** Server name for SNI */\n servername?: string;\n}\n\n/**\n * Client configuration options.\n */\nexport interface ClientConfig {\n /** Server hostname */\n host: string;\n\n /** Server port. Default: 7401 */\n port?: number;\n\n /** Connection timeout in milliseconds. Default: 10000 */\n connectTimeout?: number;\n\n /** Request timeout in milliseconds. Default: 30000 */\n requestTimeout?: number;\n\n /** Bearer token for authentication */\n authToken?: string;\n\n /** TLS configuration. true = use TLS with system CA */\n tls?: TlsConfig | boolean;\n\n /** Enable automatic reconnection. Default: true */\n reconnect?: boolean;\n\n /** Reconnection interval in milliseconds. Default: 1000 */\n reconnectInterval?: number;\n\n /** Maximum reconnection attempts. Default: 10 */\n reconnectMaxAttempts?: number;\n\n /** Client name sent in HELLO */\n clientName?: string;\n}\n\n/**\n * Resolved configuration with all defaults applied.\n */\nexport interface ResolvedConfig {\n host: string;\n port: number;\n connectTimeout: number;\n requestTimeout: number;\n authToken?: string;\n tls?: TlsConfig;\n reconnect: boolean;\n reconnectInterval: number;\n reconnectMaxAttempts: number;\n clientName?: string;\n}\n\n/**\n * Default configuration values.\n */\nexport const DEFAULT_CONFIG = {\n port: 7401,\n connectTimeout: 10000,\n requestTimeout: 30000,\n reconnect: true,\n reconnectInterval: 1000,\n reconnectMaxAttempts: 10,\n} as const;\n\n/**\n * Apply defaults to client configuration.\n */\nexport function resolveConfig(config: ClientConfig): ResolvedConfig {\n let tlsConfig: TlsConfig | undefined;\n if (config.tls === true) {\n tlsConfig = { rejectUnauthorized: true };\n } else if (config.tls && typeof config.tls === 'object') {\n tlsConfig = config.tls;\n }\n\n return {\n host: config.host,\n port: config.port ?? DEFAULT_CONFIG.port,\n connectTimeout: config.connectTimeout ?? DEFAULT_CONFIG.connectTimeout,\n requestTimeout: config.requestTimeout ?? DEFAULT_CONFIG.requestTimeout,\n authToken: config.authToken,\n tls: tlsConfig,\n reconnect: config.reconnect ?? DEFAULT_CONFIG.reconnect,\n reconnectInterval: config.reconnectInterval ?? DEFAULT_CONFIG.reconnectInterval,\n reconnectMaxAttempts: config.reconnectMaxAttempts ?? DEFAULT_CONFIG.reconnectMaxAttempts,\n clientName: config.clientName,\n };\n}\n\n/**\n * Builder for creating client configurations with a fluent API.\n *\n * @example\n * ```typescript\n * const config = ClientOptions.create('localhost')\n * .port(7401)\n * .auth('my-token')\n * .tls({ rejectUnauthorized: true })\n * .timeout({ connect: 5000, request: 15000 })\n * .reconnect({ enabled: true, maxAttempts: 5 })\n * .build();\n *\n * const client = new Client(config);\n * ```\n */\nexport class ClientOptions {\n private config: ClientConfig;\n\n private constructor(host: string) {\n this.config = { host };\n }\n\n /**\n * Create a new options builder with the given host.\n */\n static create(host: string): ClientOptions {\n return new ClientOptions(host);\n }\n\n /**\n * Set the server port.\n * @default 7401\n */\n port(port: number): this {\n this.config.port = port;\n return this;\n }\n\n /**\n * Set the authentication token.\n */\n auth(token: string): this {\n this.config.authToken = token;\n return this;\n }\n\n /**\n * Configure TLS settings.\n *\n * @param config - TLS configuration, or `true` to enable with system CA\n *\n * @example\n * ```typescript\n * // Enable TLS with system CA\n * options.tls(true)\n *\n * // Custom CA certificate\n * options.tls({ ca: fs.readFileSync('ca.pem') })\n *\n * // mTLS with client certificate\n * options.tls({\n * ca: fs.readFileSync('ca.pem'),\n * cert: fs.readFileSync('client.pem'),\n * key: fs.readFileSync('client-key.pem'),\n * })\n * ```\n */\n tls(config: TlsConfig | boolean): this {\n this.config.tls = config;\n return this;\n }\n\n /**\n * Set timeout values.\n */\n timeout(options: { connect?: number; request?: number }): this {\n if (options.connect !== undefined) {\n this.config.connectTimeout = options.connect;\n }\n if (options.request !== undefined) {\n this.config.requestTimeout = options.request;\n }\n return this;\n }\n\n /**\n * Configure reconnection behavior.\n */\n reconnect(options: { enabled?: boolean; interval?: number; maxAttempts?: number }): this {\n if (options.enabled !== undefined) {\n this.config.reconnect = options.enabled;\n }\n if (options.interval !== undefined) {\n this.config.reconnectInterval = options.interval;\n }\n if (options.maxAttempts !== undefined) {\n this.config.reconnectMaxAttempts = options.maxAttempts;\n }\n return this;\n }\n\n /**\n * Set the client name (sent in HELLO handshake).\n */\n clientName(name: string): this {\n this.config.clientName = name;\n return this;\n }\n\n /**\n * Build the configuration object.\n */\n build(): ClientConfig {\n return { ...this.config };\n }\n}\n","import { EventEmitter } from 'events';\nimport { Connection, ConnectionState } from './connection.js';\nimport { Operation } from './protocol/operations.js';\nimport { parseBigIntFields } from './protocol/messages.js';\nimport { SubscriptionManager, SubscriptionHandler } from './streaming/index.js';\nimport { ServerError } from './errors/classes.js';\nimport type { Subscription, WatchOptions, WatchAllOptions } from './streaming/subscription.js';\nimport { resolveConfig, type ClientConfig, type TlsConfig } from './types/config.js';\nimport type {\n MachineDefinition,\n PutMachineResult,\n GetMachineResult,\n ListMachinesOptions,\n ListMachinesResult,\n} from './types/machine.js';\nimport type {\n CreateInstanceOptions,\n CreateInstanceResult,\n GetInstanceResult,\n DeleteInstanceOptions,\n} from './types/instance.js';\nimport type {\n ApplyEventOptions,\n ApplyEventResult,\n BatchOperation,\n BatchOptions,\n BatchResult,\n ServerInfo,\n WalReadOptions,\n WalReadResult,\n SnapshotResult,\n CompactOptions,\n CompactResult,\n} from './types/results.js';\n\n/**\n * Client events.\n */\nexport interface ClientEvents {\n connect: () => void;\n disconnect: (error?: Error) => void;\n error: (error: Error) => void;\n reconnect: (attempt: number) => void;\n}\n\n/**\n * The rstmdb client.\n *\n * @example\n * ```typescript\n * // Simple configuration\n * const client = Client.connect('localhost', 7401);\n *\n * // With authentication\n * const client = Client.connect('localhost', 7401, { auth: 'my-token' });\n *\n * // With full configuration object\n * const client = new Client({\n * host: 'localhost',\n * port: 7401,\n * authToken: 'my-token',\n * tls: true,\n * });\n *\n * // With builder pattern\n * const client = new Client(\n * ClientOptions.create('localhost')\n * .port(7401)\n * .auth('my-token')\n * .tls(true)\n * .timeout({ connect: 5000, request: 15000 })\n * .build()\n * );\n * ```\n */\nexport class Client extends EventEmitter {\n private readonly connection: Connection;\n private readonly subscriptions: SubscriptionManager;\n private readonly config: ClientConfig;\n\n constructor(config: ClientConfig) {\n super();\n this.config = config;\n const resolvedConfig = resolveConfig(config);\n this.subscriptions = new SubscriptionManager();\n this.connection = new Connection(resolvedConfig, this.subscriptions);\n\n // Forward connection events\n this.connection.on('connect', () => this.emit('connect'));\n this.connection.on('disconnect', (error) => this.emit('disconnect', error));\n this.connection.on('error', (error) => this.emit('error', error));\n this.connection.on('reconnect', (attempt) => this.emit('reconnect', attempt));\n }\n\n /**\n * Create a client and connect to the server.\n *\n * @param host - Server hostname\n * @param port - Server port (default: 7401)\n * @param options - Additional options\n * @returns Connected client instance\n *\n * @example\n * ```typescript\n * const client = await Client.connect('localhost');\n * const client = await Client.connect('localhost', 7401);\n * const client = await Client.connect('localhost', 7401, { auth: 'token' });\n * ```\n */\n static async connect(\n host: string,\n port: number = 7401,\n options?: {\n auth?: string;\n tls?: TlsConfig | boolean;\n clientName?: string;\n }\n ): Promise<Client> {\n const client = new Client({\n host,\n port,\n authToken: options?.auth,\n tls: options?.tls,\n clientName: options?.clientName,\n });\n await client.connect();\n return client;\n }\n\n /**\n * Get the current configuration.\n */\n getConfig(): Readonly<ClientConfig> {\n return this.config;\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Connection Lifecycle\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Connect to the server.\n */\n async connect(): Promise<void> {\n await this.connection.connect();\n }\n\n /**\n * Close the connection.\n */\n async close(): Promise<void> {\n await this.connection.close();\n }\n\n /**\n * Check if connected to the server.\n */\n isConnected(): boolean {\n return this.connection.getState() === ConnectionState.CONNECTED;\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // System Operations\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Ping the server.\n */\n async ping(): Promise<void> {\n await this.connection.request(Operation.PING);\n }\n\n /**\n * Get server information.\n */\n async info(): Promise<ServerInfo> {\n const result = await this.connection.request<{\n server_name: string;\n server_version: string;\n protocol_version: number;\n max_payload_bytes?: number;\n max_batch_ops?: number;\n wal_segment_size?: number;\n auth_required?: boolean;\n features?: string[];\n }>(Operation.INFO);\n\n return {\n serverName: result.server_name,\n serverVersion: result.server_version,\n protocolVersion: result.protocol_version,\n maxPayloadBytes: result.max_payload_bytes,\n maxBatchOps: result.max_batch_ops,\n walSegmentSize: result.wal_segment_size,\n authRequired: result.auth_required,\n features: result.features,\n };\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Machine Operations\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Create or update a state machine definition.\n */\n async putMachine(\n machine: string,\n version: number,\n definition: MachineDefinition\n ): Promise<PutMachineResult> {\n const result = await this.connection.request<{\n machine: string;\n version: number;\n stored_checksum: string;\n created: boolean;\n }>(Operation.PUT_MACHINE, {\n machine,\n version,\n definition,\n });\n return {\n machine: result.machine,\n version: result.version,\n storedChecksum: result.stored_checksum,\n created: result.created,\n };\n }\n\n /**\n * Get a state machine definition.\n */\n async getMachine(machine: string, version: number): Promise<GetMachineResult> {\n const result = await this.connection.request<GetMachineResult>(Operation.GET_MACHINE, {\n machine,\n version,\n });\n return result;\n }\n\n /**\n * List all state machines.\n */\n async listMachines(options?: ListMachinesOptions): Promise<ListMachinesResult> {\n const result = await this.connection.request<ListMachinesResult>(\n Operation.LIST_MACHINES,\n options\n );\n return result;\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Instance Operations\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Create a new state machine instance.\n */\n async createInstance(\n machine: string,\n version: number,\n options?: CreateInstanceOptions\n ): Promise<CreateInstanceResult> {\n const params: Record<string, unknown> = { machine, version };\n if (options?.instanceId) params['instance_id'] = options.instanceId;\n if (options?.initialCtx) params['initial_ctx'] = options.initialCtx;\n if (options?.idempotencyKey) params['idempotency_key'] = options.idempotencyKey;\n\n const result = await this.connection.request<{\n instance_id: string;\n state: string;\n wal_offset: number;\n }>(Operation.CREATE_INSTANCE, params);\n\n return {\n instanceId: result.instance_id,\n state: result.state,\n walOffset: BigInt(result.wal_offset),\n };\n }\n\n /**\n * Get instance state and context.\n */\n async getInstance(instanceId: string): Promise<GetInstanceResult> {\n const result = await this.connection.request<{\n machine: string;\n version: number;\n state: string;\n ctx: Record<string, unknown>;\n last_event_id?: string;\n last_wal_offset: number;\n }>(Operation.GET_INSTANCE, { instance_id: instanceId });\n\n return {\n machine: result.machine,\n version: result.version,\n state: result.state,\n ctx: result.ctx,\n lastEventId: result.last_event_id,\n lastWalOffset: BigInt(result.last_wal_offset),\n };\n }\n\n /**\n * Delete an instance.\n */\n async deleteInstance(instanceId: string, options?: DeleteInstanceOptions): Promise<void> {\n const params: Record<string, unknown> = { instance_id: instanceId };\n if (options?.idempotencyKey) params['idempotency_key'] = options.idempotencyKey;\n\n await this.connection.request(Operation.DELETE_INSTANCE, params);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Event Operations\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Apply an event to an instance.\n */\n async applyEvent(\n instanceId: string,\n event: string,\n options?: ApplyEventOptions\n ): Promise<ApplyEventResult> {\n const params: Record<string, unknown> = {\n instance_id: instanceId,\n event,\n };\n if (options?.payload) params['payload'] = options.payload;\n if (options?.expectedState) params['expected_state'] = options.expectedState;\n if (options?.expectedWalOffset !== undefined) {\n params['expected_wal_offset'] = Number(options.expectedWalOffset);\n }\n if (options?.eventId) params['event_id'] = options.eventId;\n if (options?.idempotencyKey) params['idempotency_key'] = options.idempotencyKey;\n\n const result = await this.connection.request<{\n from_state: string;\n to_state: string;\n ctx?: Record<string, unknown>;\n wal_offset: number;\n applied: boolean;\n event_id?: string;\n }>(Operation.APPLY_EVENT, params);\n\n return {\n fromState: result.from_state,\n toState: result.to_state,\n ctx: result.ctx,\n walOffset: BigInt(result.wal_offset),\n applied: result.applied,\n eventId: result.event_id,\n };\n }\n\n /**\n * Execute multiple operations in a batch.\n */\n async batch(operations: BatchOperation[], options?: BatchOptions): Promise<BatchResult> {\n // Convert params to snake_case for server\n const serializedOps = operations.map((op) => {\n const params: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(op.params)) {\n // Convert camelCase to snake_case\n const snakeKey = key.replace(/([A-Z])/g, '_$1').toLowerCase();\n params[snakeKey] = value;\n }\n return { op: op.op, params };\n });\n\n const result = await this.connection.request<{\n results: Array<{\n status: 'ok' | 'error';\n result?: Record<string, unknown>;\n error?: { code: string; message: string; details?: Record<string, unknown> };\n }>;\n wal_offset?: string;\n }>(Operation.BATCH, {\n ops: serializedOps,\n ...options,\n });\n\n return {\n results: result.results.map((r) => ({\n status: r.status,\n result: r.result ? parseBigIntFields(r.result, ['wal_offset']) : undefined,\n error: r.error ? ServerError.fromResponse(r.error) : undefined,\n })),\n walOffset: result.wal_offset ? BigInt(result.wal_offset) : undefined,\n };\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // WAL Operations\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Read entries from the write-ahead log.\n */\n async walRead(fromOffset: bigint, options?: WalReadOptions): Promise<WalReadResult> {\n const result = await this.connection.request<{\n entries: Array<{\n offset: string;\n type: string;\n data: Record<string, unknown>;\n timestamp: number;\n }>;\n hasMore: boolean;\n nextOffset?: string;\n }>(Operation.WAL_READ, {\n fromOffset: fromOffset.toString(),\n ...options,\n });\n\n return {\n entries: result.entries.map((e) => ({\n ...e,\n offset: BigInt(e.offset),\n })),\n hasMore: result.hasMore,\n nextOffset: result.nextOffset ? BigInt(result.nextOffset) : undefined,\n };\n }\n\n /**\n * Create a snapshot of an instance.\n */\n async snapshotInstance(instanceId: string): Promise<SnapshotResult> {\n const result = await this.connection.request<{\n snapshot_id: string;\n wal_offset: number;\n }>(Operation.SNAPSHOT_INSTANCE, { instance_id: instanceId });\n\n return {\n instanceId: instanceId,\n walOffset: BigInt(result.wal_offset),\n sizeBytes: 0, // Not provided by server\n };\n }\n\n /**\n * Trigger WAL compaction.\n */\n async compact(options?: CompactOptions): Promise<CompactResult> {\n const params: Record<string, unknown> = {};\n if (options?.force) params['force_snapshot'] = options.force;\n\n const result = await this.connection.request<{\n snapshots_created: number;\n segments_deleted: number;\n bytes_reclaimed: number;\n }>(Operation.COMPACT, params);\n\n return {\n snapshotsCreated: result.snapshots_created,\n segmentsDeleted: result.segments_deleted,\n bytesReclaimed: BigInt(result.bytes_reclaimed),\n };\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Watch/Streaming Operations\n // ─────────────────────────────────────────────────────────────────────────\n\n /**\n * Watch a specific instance for state changes.\n */\n async watchInstance(instanceId: string, options?: WatchOptions): Promise<Subscription> {\n const params: Record<string, unknown> = {\n instance_id: instanceId,\n };\n if (options?.includeCtx !== undefined) params['include_ctx'] = options.includeCtx;\n if (options?.fromOffset !== undefined) params['from_offset'] = Number(options.fromOffset);\n\n const result = await this.connection.request<{ subscription_id: string }>(\n Operation.WATCH_INSTANCE,\n params\n );\n\n const handler = new SubscriptionHandler(result.subscription_id, () =>\n this.unwatch(result.subscription_id)\n );\n this.subscriptions.register(result.subscription_id, handler);\n\n return handler;\n }\n\n /**\n * Watch all instances matching the filter.\n */\n async watchAll(options?: WatchAllOptions): Promise<Subscription> {\n const params: Record<string, unknown> = {};\n if (options?.includeCtx !== undefined) params['include_ctx'] = options.includeCtx;\n if (options?.fromOffset !== undefined) params['from_offset'] = Number(options.fromOffset);\n if (options?.machines) params['machines'] = options.machines;\n if (options?.fromStates) params['from_states'] = options.fromStates;\n if (options?.toStates) params['to_states'] = options.toStates;\n if (options?.events) params['events'] = options.events;\n\n const result = await this.connection.request<{ subscription_id: string }>(\n Operation.WATCH_ALL,\n params\n );\n\n const handler = new SubscriptionHandler(result.subscription_id, () =>\n this.unwatch(result.subscription_id)\n );\n this.subscriptions.register(result.subscription_id, handler);\n\n return handler;\n }\n\n /**\n * Cancel a watch subscription.\n */\n async unwatch(subscriptionId: string): Promise<void> {\n await this.connection.request(Operation.UNWATCH, { subscription_id: subscriptionId });\n this.subscriptions.unregister(subscriptionId);\n }\n\n // ─────────────────────────────────────────────────────────────────────────\n // Event Emitter Overrides (for type safety)\n // ─────────────────────────────────────────────────────────────────────────\n\n override on(event: 'connect', listener: () => void): this;\n override on(event: 'disconnect', listener: (error?: Error) => void): this;\n override on(event: 'error', listener: (error: Error) => void): this;\n override on(event: 'reconnect', listener: (attempt: number) => void): this;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n override on(event: string, listener: (...args: any[]) => void): this {\n return super.on(event, listener);\n }\n\n override once(event: 'connect', listener: () => void): this;\n override once(event: 'disconnect', listener: (error?: Error) => void): this;\n override once(event: 'error', listener: (error: Error) => void): this;\n override once(event: 'reconnect', listener: (attempt: number) => void): this;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n override once(event: string, listener: (...args: any[]) => void): this {\n return super.once(event, listener);\n }\n\n override off(event: 'connect', listener: () => void): this;\n override off(event: 'disconnect', listener: (error?: Error) => void): this;\n override off(event: 'error', listener: (error: Error) => void): this;\n override off(event: 'reconnect', listener: (attempt: number) => void): this;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n override off(event: string, listener: (...args: any[]) => void): this {\n return super.off(event, listener);\n }\n}\n"]}