@reifydb/client 0.4.1 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -678,6 +678,9 @@ var JsonWsClient = class _JsonWsClient {
|
|
|
678
678
|
if (Array.isArray(body) && body.length > 0 && Array.isArray(body[0])) {
|
|
679
679
|
return body;
|
|
680
680
|
}
|
|
681
|
+
if (Array.isArray(body) && body.length === 0) {
|
|
682
|
+
return [];
|
|
683
|
+
}
|
|
681
684
|
if (Array.isArray(body)) {
|
|
682
685
|
return [body];
|
|
683
686
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ws.ts","../src/types.ts","../src/encoder.ts","../src/json.ts","../src/http.ts","../src/index.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {\n decode,\n Value\n} from \"@reifydb/core\";\nimport type {\n SchemaNode,\n FrameResults,\n} from \"@reifydb/core\";\n\nimport type {\n AdminRequest,\n AdminResponse,\n CommandRequest,\n CommandResponse,\n QueryRequest,\n QueryResponse,\n Column,\n ErrorResponse,\n SubscribeRequest,\n SubscribedResponse,\n UnsubscribeRequest,\n UnsubscribedResponse,\n ChangeMessage,\n SubscriptionCallbacks\n} from \"./types\";\nimport {\n ReifyError\n} from \"./types\";\nimport {encodeParams} from \"./encoder\";\n\nexport interface WsClientOptions {\n url: string;\n timeoutMs?: number;\n token?: string;\n maxReconnectAttempts?: number;\n reconnectDelayMs?: number;\n}\n\ninterface SubscriptionState<T = any> {\n subscriptionId: string;\n query: string;\n params?: any;\n schema?: SchemaNode;\n callbacks: SubscriptionCallbacks<T>;\n}\n\ntype ResponsePayload = ErrorResponse | AdminResponse | CommandResponse | QueryResponse | SubscribedResponse | UnsubscribedResponse;\n\nasync function createWebSocket(url: string): Promise<WebSocket> {\n if (typeof window !== \"undefined\" && typeof window.WebSocket !== \"undefined\") {\n return new WebSocket(url);\n } else {\n //@ts-ignore\n const wsModule = await import(\"ws\");\n return new wsModule.WebSocket(url);\n }\n}\n\n\nexport class WsClient {\n private options: WsClientOptions;\n private nextId: number;\n private socket: WebSocket;\n private pending = new Map<string, (response: ResponsePayload) => void>();\n private reconnectAttempts: number = 0;\n private shouldReconnect: boolean = true;\n private isReconnecting: boolean = false;\n private subscriptions = new Map<string, SubscriptionState>();\n\n private constructor(socket: WebSocket, options: WsClientOptions) {\n this.options = options;\n this.nextId = 1;\n this.socket = socket;\n\n this.setupSocketHandlers();\n }\n\n static async connect(options: WsClientOptions): Promise<WsClient> {\n const socket = await createWebSocket(options.url);\n\n // Wait for connection to open if not already open, with timeout\n if (socket.readyState !== 1) {\n const connectionTimeoutMs = 30000; // 30 second connection timeout\n await new Promise<void>((resolve, reject) => {\n const connectionTimeout = setTimeout(() => {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n socket.close();\n reject(new Error(`WebSocket connection timeout after ${connectionTimeoutMs}ms`));\n }, connectionTimeoutMs);\n\n const onOpen = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n resolve();\n };\n\n const onError = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n reject(new Error(\"WebSocket connection failed\"));\n };\n\n socket.addEventListener(\"open\", onOpen);\n socket.addEventListener(\"error\", onError);\n });\n }\n\n socket.send(\"{\\\"id\\\":\\\"auth-1\\\",\\\"type\\\":\\\"Auth\\\",\\\"payload\\\":{\\\"token\\\":\\\"mysecrettoken\\\"}}\");\n\n return new WsClient(socket, options);\n }\n\n /**\n * Execute admin operation(s) with schemas for each statement for proper type inference.\n * Admin operations support DDL (CREATE TABLE, ALTER, etc.), DML, and queries.\n * @param statements - Single statement or array of RQL statements\n * @param params - Parameters for the statements (use null or {} if no params)\n * @param schemas - Schema for each statement's result\n */\n async admin<const S extends readonly SchemaNode[]>(\n statements: string | string[],\n params: any,\n schemas: S\n ): Promise<FrameResults<S>> {\n const id = `req-${this.nextId++}`;\n\n // Normalize statements to array\n const statementArray = Array.isArray(statements) ? statements : [statements];\n // When multiple array elements, mark each with OUTPUT so all results are returned\n const outputStatements = statementArray.length > 1\n ? statementArray.map(s => s.trim() ? `OUTPUT ${s}` : s)\n : statementArray;\n\n // Encode params without schema assumptions\n const encodedParams = params !== undefined && params !== null\n ? encodeParams(params)\n : undefined;\n\n const result = await this.send({\n id,\n type: \"Admin\",\n payload: {\n statements: outputStatements,\n params: encodedParams\n },\n });\n\n // Transform each frame with its corresponding schema\n const transformedFrames = result.map((frame: any, frameIndex: number) => {\n const frameSchema = schemas[frameIndex];\n if (!frameSchema) {\n return frame; // No schema for this frame, return as-is\n }\n return frame.map((row: any) => this.transformResult(row, frameSchema));\n });\n\n return transformedFrames as FrameResults<S>;\n }\n\n /**\n * Execute command(s) with schemas for each statement for proper type inference\n * @param statements - Single statement or array of RQL commands\n * @param params - Parameters for the commands (use null or {} if no params)\n * @param schemas - Schema for each statement's result\n */\n async command<const S extends readonly SchemaNode[]>(\n statements: string | string[],\n params: any,\n schemas: S\n ): Promise<FrameResults<S>> {\n const id = `req-${this.nextId++}`;\n\n // Normalize statements to array\n const statementArray = Array.isArray(statements) ? statements : [statements];\n // When multiple array elements, mark each with OUTPUT so all results are returned\n const outputStatements = statementArray.length > 1\n ? statementArray.map(s => s.trim() ? `OUTPUT ${s}` : s)\n : statementArray;\n\n // Encode params without schema assumptions\n const encodedParams = params !== undefined && params !== null\n ? encodeParams(params)\n : undefined;\n\n const result = await this.send({\n id,\n type: \"Command\",\n payload: {\n statements: outputStatements,\n params: encodedParams\n },\n });\n\n // Transform each frame with its corresponding schema\n const transformedFrames = result.map((frame: any, frameIndex: number) => {\n const frameSchema = schemas[frameIndex];\n if (!frameSchema) {\n return frame; // No schema for this frame, return as-is\n }\n return frame.map((row: any) => this.transformResult(row, frameSchema));\n });\n\n return transformedFrames as FrameResults<S>;\n }\n\n\n /**\n * Execute query(s) with schemas for each statement for proper type inference\n * @param statements - Single statement or array of RQL queries\n * @param params - Parameters for the queries (use null or {} if no params)\n * @param schemas - Schema for each statement's result\n */\n async query<const S extends readonly SchemaNode[]>(\n statements: string | string[],\n params: any,\n schemas: S\n ): Promise<FrameResults<S>> {\n const id = `req-${this.nextId++}`;\n\n // Normalize statements to array\n const statementArray = Array.isArray(statements) ? statements : [statements];\n // When multiple array elements, mark each with OUTPUT so all results are returned\n const outputStatements = statementArray.length > 1\n ? statementArray.map(s => s.trim() ? `OUTPUT ${s}` : s)\n : statementArray;\n\n // Encode params without schema assumptions\n const encodedParams = params !== undefined && params !== null\n ? encodeParams(params)\n : undefined;\n\n const result = await this.send({\n id,\n type: \"Query\",\n payload: {\n statements: outputStatements,\n params: encodedParams\n },\n });\n\n // Transform each frame with its corresponding schema\n const transformedFrames = result.map((frame: any, frameIndex: number) => {\n const frameSchema = schemas[frameIndex];\n if (!frameSchema) {\n return frame; // No schema for this frame, return as-is\n }\n return frame.map((row: any) => this.transformResult(row, frameSchema));\n });\n\n return transformedFrames as FrameResults<S>;\n }\n\n async subscribe<T = any>(\n query: string,\n params: any,\n schema: SchemaNode | undefined,\n callbacks: SubscriptionCallbacks<T>\n ): Promise<string> {\n const id = `sub-${this.nextId++}`;\n\n const request: SubscribeRequest = {\n id,\n type: \"Subscribe\",\n payload: {query}\n };\n\n return new Promise((resolve, reject) => {\n this.pending.set(id, (response) => {\n if (response.type === \"Err\") {\n reject(new ReifyError(response));\n } else if (response.type === \"Subscribed\") {\n const subscriptionId = response.payload.subscription_id;\n\n // Store subscription state\n this.subscriptions.set(subscriptionId, {\n subscriptionId,\n query,\n params,\n schema,\n callbacks\n });\n\n resolve(subscriptionId);\n } else {\n reject(new Error(\"Unexpected response type\"));\n }\n });\n\n this.socket.send(JSON.stringify(request));\n });\n }\n\n async unsubscribe(subscriptionId: string): Promise<void> {\n const id = `unsub-${this.nextId++}`;\n\n const request: UnsubscribeRequest = {\n id,\n type: \"Unsubscribe\",\n payload: {subscription_id: subscriptionId}\n };\n\n return new Promise((resolve, reject) => {\n this.pending.set(id, (response) => {\n if (response.type === \"Err\") {\n reject(new ReifyError(response));\n } else if (response.type === \"Unsubscribed\") {\n this.subscriptions.delete(subscriptionId);\n resolve();\n } else {\n reject(new Error(\"Unexpected response type\"));\n }\n });\n\n this.socket.send(JSON.stringify(request));\n });\n }\n\n async send(req: AdminRequest | CommandRequest | QueryRequest): Promise<any> {\n const id = req.id;\n\n if (this.socket.readyState !== 1) {\n throw new ReifyError({\n id: \"connection-error\",\n type: \"Err\",\n payload: {\n diagnostic: {\n code: \"CONNECTION_LOST\",\n message: \"Connection lost\",\n notes: []\n }\n }\n });\n }\n\n const response = await new Promise<ResponsePayload>((resolve, reject) => {\n const timeoutMs = this.options.timeoutMs ?? 30_000;\n const timeout = setTimeout(() => {\n this.pending.delete(id);\n reject(new Error(\"ReifyDB query timeout\"));\n }, timeoutMs);\n\n this.pending.set(id, (res) => {\n clearTimeout(timeout);\n resolve(res);\n });\n\n this.socket.send(JSON.stringify(req));\n });\n\n if (response.type === \"Err\") {\n throw new ReifyError(response);\n\n }\n\n if (response.type !== req.type) {\n throw new Error(`Unexpected response type: ${response.type}`);\n }\n\n const frames = response.payload.body?.frames || [];\n return frames.map((frame: any) =>\n columnsToRows(frame.columns)\n );\n }\n\n\n private transformResult(row: any, resultSchema: any): any {\n // Handle object schema with primitive or value properties\n if (resultSchema && resultSchema.kind === 'object' && resultSchema.properties) {\n const transformedRow: any = {};\n for (const [key, value] of Object.entries(row)) {\n const propertySchema = resultSchema.properties[key];\n if (propertySchema && propertySchema.kind === 'primitive') {\n // Convert Value objects to primitives for primitive schema properties\n // Check if it's a Value instance by checking for valueOf method\n if (value && typeof value === 'object' && typeof (value as any).valueOf === 'function') {\n const rawValue = (value as any).valueOf();\n transformedRow[key] = this.coerceToPrimitiveType(rawValue, propertySchema.type);\n } else {\n transformedRow[key] = this.coerceToPrimitiveType(value, propertySchema.type);\n }\n } else if (propertySchema && propertySchema.kind === 'value') {\n // Keep Value objects as-is for value schema properties\n transformedRow[key] = value;\n } else {\n // Recursively transform nested structures\n transformedRow[key] = propertySchema ? this.transformResult(value, propertySchema) : value;\n }\n }\n return transformedRow;\n }\n\n // Handle primitive schema transformation\n if (resultSchema && resultSchema.kind === 'primitive') {\n // Single primitive value - extract from Value object if needed\n // Check if it's a Value instance by checking for valueOf method\n if (row && typeof row === 'object' && typeof row.valueOf === 'function') {\n return this.coerceToPrimitiveType(row.valueOf(), resultSchema.type);\n }\n return this.coerceToPrimitiveType(row, resultSchema.type);\n }\n\n // Handle value schema transformation - keep Value objects as-is\n if (resultSchema && resultSchema.kind === 'value') {\n return row;\n }\n\n // Handle array schema\n if (resultSchema && resultSchema.kind === 'array') {\n if (Array.isArray(row)) {\n return row.map((item: any) => this.transformResult(item, resultSchema.items));\n }\n return row;\n }\n\n // Handle optional schema\n if (resultSchema && resultSchema.kind === 'optional') {\n if (row === undefined || row === null) {\n return undefined;\n }\n return this.transformResult(row, resultSchema.schema);\n }\n\n // Default: return as-is\n return row;\n }\n\n /**\n * Coerce a value to the expected primitive type based on schema.\n * This handles cases where the server returns a smaller integer type\n * but the schema expects a bigint type (Int8, Int16, Uint8, Uint16).\n */\n private coerceToPrimitiveType(value: any, schemaType: string): any {\n if (value === undefined || value === null) {\n return value;\n }\n\n // Bigint types: Int8, Int16, Uint8, Uint16\n const bigintTypes = ['Int8', 'Int16', 'Uint8', 'Uint16'];\n if (bigintTypes.includes(schemaType)) {\n if (typeof value === 'bigint') {\n return value;\n }\n if (typeof value === 'number') {\n return BigInt(Math.trunc(value));\n }\n if (typeof value === 'string') {\n return BigInt(value);\n }\n }\n\n return value;\n }\n\n disconnect() {\n this.shouldReconnect = false;\n this.subscriptions.clear();\n this.socket.close();\n }\n\n private handleDisconnect() {\n this.rejectAllPendingRequests();\n\n if (!this.shouldReconnect || this.isReconnecting) {\n return;\n }\n\n const maxAttempts = this.options.maxReconnectAttempts ?? 5;\n if (this.reconnectAttempts >= maxAttempts) {\n console.error(`Max reconnection attempts (${maxAttempts}) reached`);\n return;\n }\n\n this.attemptReconnect();\n }\n\n private async attemptReconnect() {\n this.isReconnecting = true;\n this.reconnectAttempts++;\n\n const baseDelay = this.options.reconnectDelayMs ?? 1000;\n const delay = baseDelay * Math.pow(2, this.reconnectAttempts - 1);\n\n console.log(`Attempting reconnection in ${delay}ms`);\n\n await new Promise(resolve => setTimeout(resolve, delay));\n\n try {\n const socket = await createWebSocket(this.options.url);\n\n if (socket.readyState !== 1) {\n const connectionTimeoutMs = 30000; // 30 second connection timeout\n await new Promise<void>((resolve, reject) => {\n const connectionTimeout = setTimeout(() => {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n socket.close();\n reject(new Error(`WebSocket reconnection timeout after ${connectionTimeoutMs}ms`));\n }, connectionTimeoutMs);\n\n const onOpen = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n resolve();\n };\n\n const onError = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n reject(new Error(\"WebSocket connection failed\"));\n };\n\n socket.addEventListener(\"open\", onOpen);\n socket.addEventListener(\"error\", onError);\n });\n }\n\n socket.send(\"{\\\"id\\\":\\\"auth-1\\\",\\\"type\\\":\\\"Auth\\\",\\\"payload\\\":{\\\"token\\\":\\\"mysecrettoken\\\"}}\");\n\n this.socket = socket;\n this.setupSocketHandlers();\n this.reconnectAttempts = 0;\n this.isReconnecting = false;\n\n // Re-establish all active subscriptions\n await this.resubscribeAll();\n } catch (error) {\n this.isReconnecting = false;\n this.handleDisconnect();\n }\n }\n\n private async resubscribeAll(): Promise<void> {\n const subscriptionsToReestablish = Array.from(this.subscriptions.values());\n\n // Clear current subscriptions map (will be repopulated)\n this.subscriptions.clear();\n\n for (const state of subscriptionsToReestablish) {\n try {\n // Re-subscribe with same parameters\n // Cast to avoid overload resolution issues in internal call\n await (this.subscribe as any)(state.query, state.params, state.schema, state.callbacks);\n } catch (err) {\n console.error(`Failed to resubscribe to ${state.query}:`, err);\n }\n }\n }\n\n private handleChangeMessage(msg: ChangeMessage): void {\n const {subscription_id, body} = msg.payload;\n const state = this.subscriptions.get(subscription_id);\n\n if (!state) {\n console.error('No state for subscription_id:', subscription_id);\n return;\n }\n\n const frames = body?.frames || [];\n if (frames.length === 0) return;\n const frame = frames[0];\n\n // Extract _op column to determine operation type\n const opColumn = frame.columns.find((c: any) => c.name === \"_op\");\n if (!opColumn || opColumn.data.length === 0) {\n console.error('Missing or empty _op column:', { opColumn, frame });\n return;\n }\n\n // Transform frame to rows using existing transformResult logic\n const rows = this.frameToRows(frame, state.schema);\n\n // Group rows by operation type (defensive - usually all same type)\n // Process in order to maintain sequential execution\n const batches: Array<{ op: 'INSERT' | 'UPDATE' | 'REMOVE'; rows: any[] }> = [];\n\n for (let i = 0; i < rows.length; i++) {\n const opValue = parseInt(opColumn.data[i]);\n const operation: 'INSERT' | 'UPDATE' | 'REMOVE' =\n opValue === 1 ? 'INSERT' :\n opValue === 2 ? 'UPDATE' :\n opValue === 3 ? 'REMOVE' : 'INSERT';\n\n // Remove _op from this row\n const {_op, ...cleanRow} = rows[i];\n\n // Batch consecutive rows of same operation type\n if (batches.length > 0 && batches[batches.length - 1].op === operation) {\n batches[batches.length - 1].rows.push(cleanRow);\n } else {\n batches.push({op: operation, rows: [cleanRow]});\n }\n }\n\n // Execute callbacks sequentially in order\n for (const batch of batches) {\n switch (batch.op) {\n case 'INSERT':\n state.callbacks.onInsert?.(batch.rows);\n break;\n case 'UPDATE':\n state.callbacks.onUpdate?.(batch.rows);\n break;\n case 'REMOVE':\n state.callbacks.onRemove?.(batch.rows);\n break;\n }\n }\n }\n\n private frameToRows(frame: any, schema?: SchemaNode): any[] {\n // Convert frame columns to array of row objects\n if (!frame.columns || frame.columns.length === 0) return [];\n\n const rowCount = frame.columns[0].data.length;\n const rows: any[] = [];\n\n for (let i = 0; i < rowCount; i++) {\n const row: any = {};\n for (const col of frame.columns) {\n row[col.name] = decode({type: col.type, value: col.data[i]});\n }\n rows.push(row);\n }\n\n // Apply schema transformation if provided\n if (schema) {\n return rows.map(row => this.transformResult(row, schema));\n }\n\n return rows;\n }\n\n private setupSocketHandlers() {\n this.socket.onmessage = (event) => {\n const msg = JSON.parse(event.data);\n\n // Handle server-initiated messages (no id)\n if (!msg.id) {\n if (msg.type === \"Change\") {\n this.handleChangeMessage(msg);\n }\n return;\n }\n\n const {id, type, payload} = msg;\n\n const handler = this.pending.get(id);\n if (!handler) {\n return;\n }\n\n this.pending.delete(id);\n handler({id, type, payload});\n };\n\n this.socket.onerror = (err) => {\n console.error(\"WebSocket error\", err);\n };\n\n this.socket.onclose = () => {\n this.handleDisconnect();\n };\n }\n\n private rejectAllPendingRequests() {\n const error: ErrorResponse = {\n id: \"connection-error\",\n type: \"Err\",\n payload: {\n diagnostic: {\n code: \"CONNECTION_LOST\",\n message: \"Connection lost\",\n notes: []\n }\n }\n };\n\n for (const handler of this.pending.values()) {\n handler(error);\n }\n this.pending.clear();\n }\n}\n\n\nfunction columnsToRows(columns: Column[]): Record<string, Value>[] {\n const rowCount = columns[0]?.data.length ?? 0;\n return Array.from({length: rowCount}, (_, i) => {\n const row: Record<string, Value> = {};\n for (const col of columns) {\n row[col.name] = decode({type: col.type, value: col.data[i]});\n }\n return row;\n });\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport type { Params, Frame, Column, ErrorResponse } from \"@reifydb/core\";\nimport { ReifyError } from \"@reifydb/core\";\n\n// Re-export types that are actually available in flow\nexport type { Params, Frame, Column, ErrorResponse } from \"@reifydb/core\";\nexport { ReifyError } from \"@reifydb/core\";\n\nexport interface AdminRequest {\n id: string;\n type: \"Admin\";\n payload: {\n statements: string[];\n params?: Params;\n format?: string;\n unwrap?: boolean;\n }\n}\n\nexport interface AdminResponse {\n id: string;\n type: \"Admin\";\n payload: {\n content_type: string;\n body: any;\n };\n}\n\nexport interface CommandRequest {\n id: string;\n type: \"Command\";\n payload: {\n statements: string[];\n params?: Params;\n format?: string;\n unwrap?: boolean;\n }\n}\n\nexport interface CommandResponse {\n id: string;\n type: \"Command\";\n payload: {\n content_type: string;\n body: any;\n };\n}\n\nexport interface QueryRequest {\n id: string;\n type: \"Query\";\n payload: {\n statements: string[];\n params?: Params;\n format?: string;\n unwrap?: boolean;\n }\n}\n\nexport interface QueryResponse {\n id: string;\n type: \"Query\";\n payload: {\n content_type: string;\n body: any;\n };\n}\n\nexport interface SubscribeRequest {\n id: string;\n type: \"Subscribe\";\n payload: {\n query: string;\n };\n}\n\nexport interface SubscribedResponse {\n id: string;\n type: \"Subscribed\";\n payload: {\n subscription_id: string;\n };\n}\n\nexport interface UnsubscribeRequest {\n id: string;\n type: \"Unsubscribe\";\n payload: {\n subscription_id: string;\n };\n}\n\nexport interface UnsubscribedResponse {\n id: string;\n type: \"Unsubscribed\";\n payload: {\n subscription_id: string;\n };\n}\n\nexport interface ChangeMessage {\n // No id field - server-initiated\n type: \"Change\";\n payload: {\n subscription_id: string;\n content_type: string;\n body: any;\n };\n}\n\nexport type SubscriptionOperation = 'INSERT' | 'UPDATE' | 'REMOVE';\n\nexport interface SubscriptionCallbacks<T = any> {\n onInsert?: (rows: T[]) => void;\n onUpdate?: (rows: T[]) => void;\n onRemove?: (rows: T[]) => void;\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {NONE_VALUE, TypeValuePair} from \"@reifydb/core\";\n\nexport function encodeValue(value: any): TypeValuePair {\n\n if (value === null || value === undefined) {\n return { type: 'None', value: NONE_VALUE };\n }\n\n if (value && typeof value === 'object' && 'encode' in value && typeof value.encode === 'function') {\n return value.encode();\n }\n\n if (typeof value === 'boolean') {\n return { type: 'Boolean', value: value.toString() };\n }\n\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n // Choose appropriate integer type based on value range\n if (value >= -128 && value <= 127) {\n return { type: 'Int1', value: value.toString() };\n } else if (value >= -32768 && value <= 32767) {\n return { type: 'Int2', value: value.toString() };\n } else if (value >= -2147483648 && value <= 2147483647) {\n return { type: 'Int4', value: value.toString() };\n } else {\n return { type: 'Int8', value: value.toString() };\n }\n } else {\n // Floating point number\n return { type: 'Float8', value: value.toString() };\n }\n }\n\n if (typeof value === 'string') {\n if (/^[0-9a-f]{8}-[0-9a-f]{4}-[47][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)) {\n const version = value[14];\n if (version === '4') {\n return { type: 'Uuid4', value: value };\n } else if (version === '7') {\n return { type: 'Uuid7', value: value };\n }\n }\n return { type: 'Utf8', value: value };\n }\n\n if (typeof value === 'bigint') {\n if (value >= BigInt(0)) {\n if (value <= BigInt(255)) {\n return { type: 'Uint1', value: value.toString() };\n } else if (value <= BigInt(65535)) {\n return { type: 'Uint2', value: value.toString() };\n } else if (value <= BigInt(4294967295)) {\n return { type: 'Uint4', value: value.toString() };\n } else if (value <= BigInt('18446744073709551615')) {\n return { type: 'Uint8', value: value.toString() };\n } else {\n return { type: 'Uint16', value: value.toString() };\n }\n } else {\n if (value >= BigInt('-9223372036854775808')) {\n return { type: 'Int8', value: value.toString() };\n } else {\n return { type: 'Int16', value: value.toString() };\n }\n }\n }\n\n if (value instanceof Date) {\n return { type: 'DateTime', value: value.toISOString() };\n }\n\n\n if (value instanceof Uint8Array) {\n const hex = Array.from(value)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n return { type: 'Blob', value: '0x' + hex };\n }\n\n if (value instanceof ArrayBuffer) {\n const uint8Array = new Uint8Array(value);\n const hex = Array.from(uint8Array)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n return { type: 'Blob', value: '0x' + hex };\n }\n\n throw new Error(`Cannot encode value of type ${typeof value}: ${value}`);\n}\n\nexport function encodeParams(params: any): TypeValuePair[] | Record<string, TypeValuePair> {\n if (params === undefined || params === null) {\n return [];\n }\n\n if (Array.isArray(params)) {\n return params.map(param => encodeValue(param));\n } else if (typeof params === 'object') {\n const encoded: Record<string, TypeValuePair> = {};\n for (const [key, value] of Object.entries(params)) {\n encoded[key] = encodeValue(value);\n }\n return encoded;\n }\n\n throw new Error(`Invalid parameters type: expected array or object, got ${typeof params}`);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport type {Params} from \"@reifydb/core\";\nimport type {\n AdminRequest,\n CommandRequest,\n QueryRequest,\n ErrorResponse,\n} from \"./types\";\nimport {ReifyError} from \"./types\";\nimport {encodeParams} from \"./encoder\";\n\nexport interface JsonWsClientOptions {\n url: string;\n timeoutMs?: number;\n token?: string;\n maxReconnectAttempts?: number;\n reconnectDelayMs?: number;\n}\n\ntype ResponsePayload = ErrorResponse | { id: string; type: string; payload: { content_type: string; body: any } };\n\nasync function createWebSocket(url: string): Promise<WebSocket> {\n if (typeof window !== \"undefined\" && typeof window.WebSocket !== \"undefined\") {\n return new WebSocket(url);\n } else {\n //@ts-ignore\n const wsModule = await import(\"ws\");\n return new wsModule.WebSocket(url);\n }\n}\n\nexport class JsonWsClient {\n private options: JsonWsClientOptions;\n private nextId: number;\n private socket: WebSocket;\n private pending = new Map<string, (response: ResponsePayload) => void>();\n private reconnectAttempts: number = 0;\n private shouldReconnect: boolean = true;\n private isReconnecting: boolean = false;\n\n private constructor(socket: WebSocket, options: JsonWsClientOptions) {\n this.options = options;\n this.nextId = 1;\n this.socket = socket;\n this.setupSocketHandlers();\n }\n\n static async connect(options: JsonWsClientOptions): Promise<JsonWsClient> {\n const socket = await createWebSocket(options.url);\n\n if (socket.readyState !== 1) {\n const connectionTimeoutMs = 30000;\n await new Promise<void>((resolve, reject) => {\n const connectionTimeout = setTimeout(() => {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n socket.close();\n reject(new Error(`WebSocket connection timeout after ${connectionTimeoutMs}ms`));\n }, connectionTimeoutMs);\n\n const onOpen = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n resolve();\n };\n\n const onError = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n reject(new Error(\"WebSocket connection failed\"));\n };\n\n socket.addEventListener(\"open\", onOpen);\n socket.addEventListener(\"error\", onError);\n });\n }\n\n socket.send(\"{\\\"id\\\":\\\"auth-1\\\",\\\"type\\\":\\\"Auth\\\",\\\"payload\\\":{\\\"token\\\":\\\"mysecrettoken\\\"}}\");\n\n return new JsonWsClient(socket, options);\n }\n\n async query<T = any>(statements: string | string[], params?: Params): Promise<T[][]> {\n return this.send<T>(\"Query\", statements, params);\n }\n\n async command<T = any>(statements: string | string[], params?: Params): Promise<T[][]> {\n return this.send<T>(\"Command\", statements, params);\n }\n\n async admin<T = any>(statements: string | string[], params?: Params): Promise<T[][]> {\n return this.send<T>(\"Admin\", statements, params);\n }\n\n disconnect() {\n this.shouldReconnect = false;\n this.socket.close();\n }\n\n private async send<T>(type: \"Admin\" | \"Command\" | \"Query\", statements: string | string[], params?: Params): Promise<T[][]> {\n const id = `req-${this.nextId++}`;\n\n const statementArray = Array.isArray(statements) ? statements : [statements];\n const outputStatements = statementArray.length > 1\n ? statementArray.map(s => s.trim() ? `OUTPUT ${s}` : s)\n : statementArray;\n\n const encodedParams = params !== undefined && params !== null\n ? encodeParams(params)\n : undefined;\n\n if (this.socket.readyState !== 1) {\n throw new ReifyError({\n id: \"connection-error\",\n type: \"Err\",\n payload: {\n diagnostic: {\n code: \"CONNECTION_LOST\",\n message: \"Connection lost\",\n notes: []\n }\n }\n });\n }\n\n const response = await new Promise<ResponsePayload>((resolve, reject) => {\n const timeoutMs = this.options.timeoutMs ?? 30_000;\n const timeout = setTimeout(() => {\n this.pending.delete(id);\n reject(new Error(\"ReifyDB query timeout\"));\n }, timeoutMs);\n\n this.pending.set(id, (res) => {\n clearTimeout(timeout);\n resolve(res);\n });\n\n this.socket.send(JSON.stringify({\n id,\n type,\n payload: {\n statements: outputStatements,\n params: encodedParams,\n format: \"json\",\n },\n }));\n });\n\n if (response.type === \"Err\") {\n throw new ReifyError(response as ErrorResponse);\n }\n\n if (response.type !== type) {\n throw new Error(`Unexpected response type: ${response.type}`);\n }\n\n const body = (response as any).payload.body;\n\n // body is an array of arrays (one per frame/statement)\n if (Array.isArray(body) && body.length > 0 && Array.isArray(body[0])) {\n return body as T[][];\n }\n\n // body is a single array of objects (single frame)\n if (Array.isArray(body)) {\n return [body] as T[][];\n }\n\n // body is a single unwrapped object\n if (body && typeof body === 'object') {\n return [[body]] as T[][];\n }\n\n return [] as T[][];\n }\n\n private handleDisconnect() {\n this.rejectAllPendingRequests();\n\n if (!this.shouldReconnect || this.isReconnecting) {\n return;\n }\n\n const maxAttempts = this.options.maxReconnectAttempts ?? 5;\n if (this.reconnectAttempts >= maxAttempts) {\n return;\n }\n\n this.attemptReconnect();\n }\n\n private async attemptReconnect() {\n this.isReconnecting = true;\n this.reconnectAttempts++;\n\n const baseDelay = this.options.reconnectDelayMs ?? 1000;\n const delay = baseDelay * Math.pow(2, this.reconnectAttempts - 1);\n\n await new Promise(resolve => setTimeout(resolve, delay));\n\n try {\n const socket = await createWebSocket(this.options.url);\n\n if (socket.readyState !== 1) {\n const connectionTimeoutMs = 30000;\n await new Promise<void>((resolve, reject) => {\n const connectionTimeout = setTimeout(() => {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n socket.close();\n reject(new Error(`WebSocket reconnection timeout after ${connectionTimeoutMs}ms`));\n }, connectionTimeoutMs);\n\n const onOpen = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n resolve();\n };\n\n const onError = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n reject(new Error(\"WebSocket connection failed\"));\n };\n\n socket.addEventListener(\"open\", onOpen);\n socket.addEventListener(\"error\", onError);\n });\n }\n\n socket.send(\"{\\\"id\\\":\\\"auth-1\\\",\\\"type\\\":\\\"Auth\\\",\\\"payload\\\":{\\\"token\\\":\\\"mysecrettoken\\\"}}\");\n\n this.socket = socket;\n this.setupSocketHandlers();\n this.reconnectAttempts = 0;\n this.isReconnecting = false;\n } catch (error) {\n this.isReconnecting = false;\n this.handleDisconnect();\n }\n }\n\n private setupSocketHandlers() {\n this.socket.onmessage = (event) => {\n const msg = JSON.parse(event.data);\n\n if (!msg.id) {\n return;\n }\n\n const {id} = msg;\n const handler = this.pending.get(id);\n if (!handler) {\n return;\n }\n\n this.pending.delete(id);\n handler(msg);\n };\n\n this.socket.onerror = () => {};\n\n this.socket.onclose = () => {\n this.handleDisconnect();\n };\n }\n\n private rejectAllPendingRequests() {\n const error: ErrorResponse = {\n id: \"connection-error\",\n type: \"Err\",\n payload: {\n diagnostic: {\n code: \"CONNECTION_LOST\",\n message: \"Connection lost\",\n notes: []\n }\n }\n };\n\n for (const handler of this.pending.values()) {\n handler(error);\n }\n this.pending.clear();\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport type {Params} from \"@reifydb/core\";\nimport {ReifyError} from \"./types\";\nimport {encodeParams} from \"./encoder\";\n\nexport interface JsonHttpClientOptions {\n url: string;\n token?: string;\n apiKey?: string;\n timeoutMs?: number;\n}\n\nexport class JsonHttpClient {\n private options: JsonHttpClientOptions;\n\n private constructor(options: JsonHttpClientOptions) {\n this.options = options;\n }\n\n static connect(options: JsonHttpClientOptions): JsonHttpClient {\n return new JsonHttpClient(options);\n }\n\n async query<T = any>(statements: string | string[], params?: Params): Promise<T[][]> {\n return this.send<T>(\"query\", statements, params);\n }\n\n async command<T = any>(statements: string | string[], params?: Params): Promise<T[][]> {\n return this.send<T>(\"command\", statements, params);\n }\n\n async admin<T = any>(statements: string | string[], params?: Params): Promise<T[][]> {\n return this.send<T>(\"admin\", statements, params);\n }\n\n private async send<T>(endpoint: \"query\" | \"command\" | \"admin\", statements: string | string[], params?: Params): Promise<T[][]> {\n const statementArray = Array.isArray(statements) ? statements : [statements];\n const outputStatements = statementArray.length > 1\n ? statementArray.map(s => s.trim() ? `OUTPUT ${s}` : s)\n : statementArray;\n\n const encodedParams = params !== undefined && params !== null\n ? encodeParams(params)\n : undefined;\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (this.options.token) {\n headers[\"Authorization\"] = `Bearer ${this.options.token}`;\n } else if (this.options.apiKey) {\n headers[\"X-Api-Key\"] = this.options.apiKey;\n }\n\n const baseUrl = this.options.url.replace(/\\/+$/, \"\");\n const timeoutMs = this.options.timeoutMs ?? 30_000;\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n let response: Response;\n try {\n response = await fetch(`${baseUrl}/v1/${endpoint}?format=json`, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n statements: outputStatements,\n params: encodedParams,\n }),\n signal: controller.signal,\n });\n } catch (err: any) {\n if (err.name === \"AbortError\") {\n throw new Error(\"ReifyDB query timeout\");\n }\n throw err;\n } finally {\n clearTimeout(timeout);\n }\n\n const body = await response.json();\n\n if (!response.ok) {\n if (body.diagnostic) {\n throw new ReifyError({\n id: \"\",\n type: \"Err\",\n payload: {diagnostic: body.diagnostic},\n });\n }\n if (body.error) {\n throw new ReifyError({\n id: \"\",\n type: \"Err\",\n payload: {\n diagnostic: {\n code: body.code ?? \"HTTP_ERROR\",\n message: body.error,\n notes: [],\n },\n },\n });\n }\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Normalize response body to T[][]\n if (Array.isArray(body) && body.length > 0 && Array.isArray(body[0])) {\n return body as T[][];\n }\n\n if (Array.isArray(body)) {\n return [body] as T[][];\n }\n\n if (body && typeof body === \"object\") {\n return [[body]] as T[][];\n }\n\n return [] as T[][];\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {WsClient, WsClientOptions} from \"./ws\";\nimport {JsonWsClient, JsonWsClientOptions} from \"./json\";\nimport {JsonHttpClient, JsonHttpClientOptions} from \"./http\";\n\nexport class Client {\n /**\n * Connect to ReifyDB via WebSocket\n * @param url WebSocket URL\n * @param options Optional configuration\n * @returns Connected WebSocket client\n */\n static async connect_ws(url: string, options: Omit<WsClientOptions, 'url'> = {}): Promise<WsClient> {\n return WsClient.connect({url, ...options});\n }\n\n /**\n * Connect to ReifyDB via WebSocket with JSON format responses\n * @param url WebSocket URL\n * @param options Optional configuration\n * @returns Connected JSON WebSocket client\n */\n static async connect_json_ws(url: string, options: Omit<JsonWsClientOptions, 'url'> = {}): Promise<JsonWsClient> {\n return JsonWsClient.connect({url, ...options});\n }\n\n /**\n * Connect to ReifyDB via HTTP with JSON format responses\n * @param url Base HTTP URL\n * @param options Optional configuration\n * @returns JSON HTTP client\n */\n static connect_json_http(url: string, options: Omit<JsonHttpClientOptions, 'url'> = {}): JsonHttpClient {\n return JsonHttpClient.connect({url, ...options});\n }\n}\n\nexport {ReifyError, asFrameResults} from \"@reifydb/core\";\nexport type {FrameResults, SingleFrameResult, Diagnostic, Fragment, DiagnosticColumn} from \"@reifydb/core\";\nexport {WsClient} from \"./ws\";\nexport type {WsClientOptions} from \"./ws\";\nexport {JsonWsClient} from \"./json\";\nexport type {JsonWsClientOptions} from \"./json\";\nexport {JsonHttpClient} from \"./http\";\nexport type {JsonHttpClientOptions} from \"./http\";\nexport type {\n SubscribeRequest,\n SubscribedResponse,\n UnsubscribeRequest,\n UnsubscribedResponse,\n ChangeMessage,\n SubscriptionCallbacks,\n SubscriptionOperation\n} from './types';"],"mappings":"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","names":["createWebSocket","ReifyError"]}
|
|
1
|
+
{"version":3,"sources":["../src/ws.ts","../src/types.ts","../src/encoder.ts","../src/json.ts","../src/http.ts","../src/index.ts"],"sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {\n decode,\n Value\n} from \"@reifydb/core\";\nimport type {\n SchemaNode,\n FrameResults,\n} from \"@reifydb/core\";\n\nimport type {\n AdminRequest,\n AdminResponse,\n CommandRequest,\n CommandResponse,\n QueryRequest,\n QueryResponse,\n Column,\n ErrorResponse,\n SubscribeRequest,\n SubscribedResponse,\n UnsubscribeRequest,\n UnsubscribedResponse,\n ChangeMessage,\n SubscriptionCallbacks\n} from \"./types\";\nimport {\n ReifyError\n} from \"./types\";\nimport {encodeParams} from \"./encoder\";\n\nexport interface WsClientOptions {\n url: string;\n timeoutMs?: number;\n token?: string;\n maxReconnectAttempts?: number;\n reconnectDelayMs?: number;\n}\n\ninterface SubscriptionState<T = any> {\n subscriptionId: string;\n query: string;\n params?: any;\n schema?: SchemaNode;\n callbacks: SubscriptionCallbacks<T>;\n}\n\ntype ResponsePayload = ErrorResponse | AdminResponse | CommandResponse | QueryResponse | SubscribedResponse | UnsubscribedResponse;\n\nasync function createWebSocket(url: string): Promise<WebSocket> {\n if (typeof window !== \"undefined\" && typeof window.WebSocket !== \"undefined\") {\n return new WebSocket(url);\n } else {\n //@ts-ignore\n const wsModule = await import(\"ws\");\n return new wsModule.WebSocket(url);\n }\n}\n\n\nexport class WsClient {\n private options: WsClientOptions;\n private nextId: number;\n private socket: WebSocket;\n private pending = new Map<string, (response: ResponsePayload) => void>();\n private reconnectAttempts: number = 0;\n private shouldReconnect: boolean = true;\n private isReconnecting: boolean = false;\n private subscriptions = new Map<string, SubscriptionState>();\n\n private constructor(socket: WebSocket, options: WsClientOptions) {\n this.options = options;\n this.nextId = 1;\n this.socket = socket;\n\n this.setupSocketHandlers();\n }\n\n static async connect(options: WsClientOptions): Promise<WsClient> {\n const socket = await createWebSocket(options.url);\n\n // Wait for connection to open if not already open, with timeout\n if (socket.readyState !== 1) {\n const connectionTimeoutMs = 30000; // 30 second connection timeout\n await new Promise<void>((resolve, reject) => {\n const connectionTimeout = setTimeout(() => {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n socket.close();\n reject(new Error(`WebSocket connection timeout after ${connectionTimeoutMs}ms`));\n }, connectionTimeoutMs);\n\n const onOpen = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n resolve();\n };\n\n const onError = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n reject(new Error(\"WebSocket connection failed\"));\n };\n\n socket.addEventListener(\"open\", onOpen);\n socket.addEventListener(\"error\", onError);\n });\n }\n\n socket.send(\"{\\\"id\\\":\\\"auth-1\\\",\\\"type\\\":\\\"Auth\\\",\\\"payload\\\":{\\\"token\\\":\\\"mysecrettoken\\\"}}\");\n\n return new WsClient(socket, options);\n }\n\n /**\n * Execute admin operation(s) with schemas for each statement for proper type inference.\n * Admin operations support DDL (CREATE TABLE, ALTER, etc.), DML, and queries.\n * @param statements - Single statement or array of RQL statements\n * @param params - Parameters for the statements (use null or {} if no params)\n * @param schemas - Schema for each statement's result\n */\n async admin<const S extends readonly SchemaNode[]>(\n statements: string | string[],\n params: any,\n schemas: S\n ): Promise<FrameResults<S>> {\n const id = `req-${this.nextId++}`;\n\n // Normalize statements to array\n const statementArray = Array.isArray(statements) ? statements : [statements];\n // When multiple array elements, mark each with OUTPUT so all results are returned\n const outputStatements = statementArray.length > 1\n ? statementArray.map(s => s.trim() ? `OUTPUT ${s}` : s)\n : statementArray;\n\n // Encode params without schema assumptions\n const encodedParams = params !== undefined && params !== null\n ? encodeParams(params)\n : undefined;\n\n const result = await this.send({\n id,\n type: \"Admin\",\n payload: {\n statements: outputStatements,\n params: encodedParams\n },\n });\n\n // Transform each frame with its corresponding schema\n const transformedFrames = result.map((frame: any, frameIndex: number) => {\n const frameSchema = schemas[frameIndex];\n if (!frameSchema) {\n return frame; // No schema for this frame, return as-is\n }\n return frame.map((row: any) => this.transformResult(row, frameSchema));\n });\n\n return transformedFrames as FrameResults<S>;\n }\n\n /**\n * Execute command(s) with schemas for each statement for proper type inference\n * @param statements - Single statement or array of RQL commands\n * @param params - Parameters for the commands (use null or {} if no params)\n * @param schemas - Schema for each statement's result\n */\n async command<const S extends readonly SchemaNode[]>(\n statements: string | string[],\n params: any,\n schemas: S\n ): Promise<FrameResults<S>> {\n const id = `req-${this.nextId++}`;\n\n // Normalize statements to array\n const statementArray = Array.isArray(statements) ? statements : [statements];\n // When multiple array elements, mark each with OUTPUT so all results are returned\n const outputStatements = statementArray.length > 1\n ? statementArray.map(s => s.trim() ? `OUTPUT ${s}` : s)\n : statementArray;\n\n // Encode params without schema assumptions\n const encodedParams = params !== undefined && params !== null\n ? encodeParams(params)\n : undefined;\n\n const result = await this.send({\n id,\n type: \"Command\",\n payload: {\n statements: outputStatements,\n params: encodedParams\n },\n });\n\n // Transform each frame with its corresponding schema\n const transformedFrames = result.map((frame: any, frameIndex: number) => {\n const frameSchema = schemas[frameIndex];\n if (!frameSchema) {\n return frame; // No schema for this frame, return as-is\n }\n return frame.map((row: any) => this.transformResult(row, frameSchema));\n });\n\n return transformedFrames as FrameResults<S>;\n }\n\n\n /**\n * Execute query(s) with schemas for each statement for proper type inference\n * @param statements - Single statement or array of RQL queries\n * @param params - Parameters for the queries (use null or {} if no params)\n * @param schemas - Schema for each statement's result\n */\n async query<const S extends readonly SchemaNode[]>(\n statements: string | string[],\n params: any,\n schemas: S\n ): Promise<FrameResults<S>> {\n const id = `req-${this.nextId++}`;\n\n // Normalize statements to array\n const statementArray = Array.isArray(statements) ? statements : [statements];\n // When multiple array elements, mark each with OUTPUT so all results are returned\n const outputStatements = statementArray.length > 1\n ? statementArray.map(s => s.trim() ? `OUTPUT ${s}` : s)\n : statementArray;\n\n // Encode params without schema assumptions\n const encodedParams = params !== undefined && params !== null\n ? encodeParams(params)\n : undefined;\n\n const result = await this.send({\n id,\n type: \"Query\",\n payload: {\n statements: outputStatements,\n params: encodedParams\n },\n });\n\n // Transform each frame with its corresponding schema\n const transformedFrames = result.map((frame: any, frameIndex: number) => {\n const frameSchema = schemas[frameIndex];\n if (!frameSchema) {\n return frame; // No schema for this frame, return as-is\n }\n return frame.map((row: any) => this.transformResult(row, frameSchema));\n });\n\n return transformedFrames as FrameResults<S>;\n }\n\n async subscribe<T = any>(\n query: string,\n params: any,\n schema: SchemaNode | undefined,\n callbacks: SubscriptionCallbacks<T>\n ): Promise<string> {\n const id = `sub-${this.nextId++}`;\n\n const request: SubscribeRequest = {\n id,\n type: \"Subscribe\",\n payload: {query}\n };\n\n return new Promise((resolve, reject) => {\n this.pending.set(id, (response) => {\n if (response.type === \"Err\") {\n reject(new ReifyError(response));\n } else if (response.type === \"Subscribed\") {\n const subscriptionId = response.payload.subscription_id;\n\n // Store subscription state\n this.subscriptions.set(subscriptionId, {\n subscriptionId,\n query,\n params,\n schema,\n callbacks\n });\n\n resolve(subscriptionId);\n } else {\n reject(new Error(\"Unexpected response type\"));\n }\n });\n\n this.socket.send(JSON.stringify(request));\n });\n }\n\n async unsubscribe(subscriptionId: string): Promise<void> {\n const id = `unsub-${this.nextId++}`;\n\n const request: UnsubscribeRequest = {\n id,\n type: \"Unsubscribe\",\n payload: {subscription_id: subscriptionId}\n };\n\n return new Promise((resolve, reject) => {\n this.pending.set(id, (response) => {\n if (response.type === \"Err\") {\n reject(new ReifyError(response));\n } else if (response.type === \"Unsubscribed\") {\n this.subscriptions.delete(subscriptionId);\n resolve();\n } else {\n reject(new Error(\"Unexpected response type\"));\n }\n });\n\n this.socket.send(JSON.stringify(request));\n });\n }\n\n async send(req: AdminRequest | CommandRequest | QueryRequest): Promise<any> {\n const id = req.id;\n\n if (this.socket.readyState !== 1) {\n throw new ReifyError({\n id: \"connection-error\",\n type: \"Err\",\n payload: {\n diagnostic: {\n code: \"CONNECTION_LOST\",\n message: \"Connection lost\",\n notes: []\n }\n }\n });\n }\n\n const response = await new Promise<ResponsePayload>((resolve, reject) => {\n const timeoutMs = this.options.timeoutMs ?? 30_000;\n const timeout = setTimeout(() => {\n this.pending.delete(id);\n reject(new Error(\"ReifyDB query timeout\"));\n }, timeoutMs);\n\n this.pending.set(id, (res) => {\n clearTimeout(timeout);\n resolve(res);\n });\n\n this.socket.send(JSON.stringify(req));\n });\n\n if (response.type === \"Err\") {\n throw new ReifyError(response);\n\n }\n\n if (response.type !== req.type) {\n throw new Error(`Unexpected response type: ${response.type}`);\n }\n\n const frames = response.payload.body?.frames || [];\n return frames.map((frame: any) =>\n columnsToRows(frame.columns)\n );\n }\n\n\n private transformResult(row: any, resultSchema: any): any {\n // Handle object schema with primitive or value properties\n if (resultSchema && resultSchema.kind === 'object' && resultSchema.properties) {\n const transformedRow: any = {};\n for (const [key, value] of Object.entries(row)) {\n const propertySchema = resultSchema.properties[key];\n if (propertySchema && propertySchema.kind === 'primitive') {\n // Convert Value objects to primitives for primitive schema properties\n // Check if it's a Value instance by checking for valueOf method\n if (value && typeof value === 'object' && typeof (value as any).valueOf === 'function') {\n const rawValue = (value as any).valueOf();\n transformedRow[key] = this.coerceToPrimitiveType(rawValue, propertySchema.type);\n } else {\n transformedRow[key] = this.coerceToPrimitiveType(value, propertySchema.type);\n }\n } else if (propertySchema && propertySchema.kind === 'value') {\n // Keep Value objects as-is for value schema properties\n transformedRow[key] = value;\n } else {\n // Recursively transform nested structures\n transformedRow[key] = propertySchema ? this.transformResult(value, propertySchema) : value;\n }\n }\n return transformedRow;\n }\n\n // Handle primitive schema transformation\n if (resultSchema && resultSchema.kind === 'primitive') {\n // Single primitive value - extract from Value object if needed\n // Check if it's a Value instance by checking for valueOf method\n if (row && typeof row === 'object' && typeof row.valueOf === 'function') {\n return this.coerceToPrimitiveType(row.valueOf(), resultSchema.type);\n }\n return this.coerceToPrimitiveType(row, resultSchema.type);\n }\n\n // Handle value schema transformation - keep Value objects as-is\n if (resultSchema && resultSchema.kind === 'value') {\n return row;\n }\n\n // Handle array schema\n if (resultSchema && resultSchema.kind === 'array') {\n if (Array.isArray(row)) {\n return row.map((item: any) => this.transformResult(item, resultSchema.items));\n }\n return row;\n }\n\n // Handle optional schema\n if (resultSchema && resultSchema.kind === 'optional') {\n if (row === undefined || row === null) {\n return undefined;\n }\n return this.transformResult(row, resultSchema.schema);\n }\n\n // Default: return as-is\n return row;\n }\n\n /**\n * Coerce a value to the expected primitive type based on schema.\n * This handles cases where the server returns a smaller integer type\n * but the schema expects a bigint type (Int8, Int16, Uint8, Uint16).\n */\n private coerceToPrimitiveType(value: any, schemaType: string): any {\n if (value === undefined || value === null) {\n return value;\n }\n\n // Bigint types: Int8, Int16, Uint8, Uint16\n const bigintTypes = ['Int8', 'Int16', 'Uint8', 'Uint16'];\n if (bigintTypes.includes(schemaType)) {\n if (typeof value === 'bigint') {\n return value;\n }\n if (typeof value === 'number') {\n return BigInt(Math.trunc(value));\n }\n if (typeof value === 'string') {\n return BigInt(value);\n }\n }\n\n return value;\n }\n\n disconnect() {\n this.shouldReconnect = false;\n this.subscriptions.clear();\n this.socket.close();\n }\n\n private handleDisconnect() {\n this.rejectAllPendingRequests();\n\n if (!this.shouldReconnect || this.isReconnecting) {\n return;\n }\n\n const maxAttempts = this.options.maxReconnectAttempts ?? 5;\n if (this.reconnectAttempts >= maxAttempts) {\n console.error(`Max reconnection attempts (${maxAttempts}) reached`);\n return;\n }\n\n this.attemptReconnect();\n }\n\n private async attemptReconnect() {\n this.isReconnecting = true;\n this.reconnectAttempts++;\n\n const baseDelay = this.options.reconnectDelayMs ?? 1000;\n const delay = baseDelay * Math.pow(2, this.reconnectAttempts - 1);\n\n console.log(`Attempting reconnection in ${delay}ms`);\n\n await new Promise(resolve => setTimeout(resolve, delay));\n\n try {\n const socket = await createWebSocket(this.options.url);\n\n if (socket.readyState !== 1) {\n const connectionTimeoutMs = 30000; // 30 second connection timeout\n await new Promise<void>((resolve, reject) => {\n const connectionTimeout = setTimeout(() => {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n socket.close();\n reject(new Error(`WebSocket reconnection timeout after ${connectionTimeoutMs}ms`));\n }, connectionTimeoutMs);\n\n const onOpen = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n resolve();\n };\n\n const onError = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n reject(new Error(\"WebSocket connection failed\"));\n };\n\n socket.addEventListener(\"open\", onOpen);\n socket.addEventListener(\"error\", onError);\n });\n }\n\n socket.send(\"{\\\"id\\\":\\\"auth-1\\\",\\\"type\\\":\\\"Auth\\\",\\\"payload\\\":{\\\"token\\\":\\\"mysecrettoken\\\"}}\");\n\n this.socket = socket;\n this.setupSocketHandlers();\n this.reconnectAttempts = 0;\n this.isReconnecting = false;\n\n // Re-establish all active subscriptions\n await this.resubscribeAll();\n } catch (error) {\n this.isReconnecting = false;\n this.handleDisconnect();\n }\n }\n\n private async resubscribeAll(): Promise<void> {\n const subscriptionsToReestablish = Array.from(this.subscriptions.values());\n\n // Clear current subscriptions map (will be repopulated)\n this.subscriptions.clear();\n\n for (const state of subscriptionsToReestablish) {\n try {\n // Re-subscribe with same parameters\n // Cast to avoid overload resolution issues in internal call\n await (this.subscribe as any)(state.query, state.params, state.schema, state.callbacks);\n } catch (err) {\n console.error(`Failed to resubscribe to ${state.query}:`, err);\n }\n }\n }\n\n private handleChangeMessage(msg: ChangeMessage): void {\n const {subscription_id, body} = msg.payload;\n const state = this.subscriptions.get(subscription_id);\n\n if (!state) {\n console.error('No state for subscription_id:', subscription_id);\n return;\n }\n\n const frames = body?.frames || [];\n if (frames.length === 0) return;\n const frame = frames[0];\n\n // Extract _op column to determine operation type\n const opColumn = frame.columns.find((c: any) => c.name === \"_op\");\n if (!opColumn || opColumn.data.length === 0) {\n console.error('Missing or empty _op column:', { opColumn, frame });\n return;\n }\n\n // Transform frame to rows using existing transformResult logic\n const rows = this.frameToRows(frame, state.schema);\n\n // Group rows by operation type (defensive - usually all same type)\n // Process in order to maintain sequential execution\n const batches: Array<{ op: 'INSERT' | 'UPDATE' | 'REMOVE'; rows: any[] }> = [];\n\n for (let i = 0; i < rows.length; i++) {\n const opValue = parseInt(opColumn.data[i]);\n const operation: 'INSERT' | 'UPDATE' | 'REMOVE' =\n opValue === 1 ? 'INSERT' :\n opValue === 2 ? 'UPDATE' :\n opValue === 3 ? 'REMOVE' : 'INSERT';\n\n // Remove _op from this row\n const {_op, ...cleanRow} = rows[i];\n\n // Batch consecutive rows of same operation type\n if (batches.length > 0 && batches[batches.length - 1].op === operation) {\n batches[batches.length - 1].rows.push(cleanRow);\n } else {\n batches.push({op: operation, rows: [cleanRow]});\n }\n }\n\n // Execute callbacks sequentially in order\n for (const batch of batches) {\n switch (batch.op) {\n case 'INSERT':\n state.callbacks.onInsert?.(batch.rows);\n break;\n case 'UPDATE':\n state.callbacks.onUpdate?.(batch.rows);\n break;\n case 'REMOVE':\n state.callbacks.onRemove?.(batch.rows);\n break;\n }\n }\n }\n\n private frameToRows(frame: any, schema?: SchemaNode): any[] {\n // Convert frame columns to array of row objects\n if (!frame.columns || frame.columns.length === 0) return [];\n\n const rowCount = frame.columns[0].data.length;\n const rows: any[] = [];\n\n for (let i = 0; i < rowCount; i++) {\n const row: any = {};\n for (const col of frame.columns) {\n row[col.name] = decode({type: col.type, value: col.data[i]});\n }\n rows.push(row);\n }\n\n // Apply schema transformation if provided\n if (schema) {\n return rows.map(row => this.transformResult(row, schema));\n }\n\n return rows;\n }\n\n private setupSocketHandlers() {\n this.socket.onmessage = (event) => {\n const msg = JSON.parse(event.data);\n\n // Handle server-initiated messages (no id)\n if (!msg.id) {\n if (msg.type === \"Change\") {\n this.handleChangeMessage(msg);\n }\n return;\n }\n\n const {id, type, payload} = msg;\n\n const handler = this.pending.get(id);\n if (!handler) {\n return;\n }\n\n this.pending.delete(id);\n handler({id, type, payload});\n };\n\n this.socket.onerror = (err) => {\n console.error(\"WebSocket error\", err);\n };\n\n this.socket.onclose = () => {\n this.handleDisconnect();\n };\n }\n\n private rejectAllPendingRequests() {\n const error: ErrorResponse = {\n id: \"connection-error\",\n type: \"Err\",\n payload: {\n diagnostic: {\n code: \"CONNECTION_LOST\",\n message: \"Connection lost\",\n notes: []\n }\n }\n };\n\n for (const handler of this.pending.values()) {\n handler(error);\n }\n this.pending.clear();\n }\n}\n\n\nfunction columnsToRows(columns: Column[]): Record<string, Value>[] {\n const rowCount = columns[0]?.data.length ?? 0;\n return Array.from({length: rowCount}, (_, i) => {\n const row: Record<string, Value> = {};\n for (const col of columns) {\n row[col.name] = decode({type: col.type, value: col.data[i]});\n }\n return row;\n });\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport type { Params, Frame, Column, ErrorResponse } from \"@reifydb/core\";\nimport { ReifyError } from \"@reifydb/core\";\n\n// Re-export types that are actually available in flow\nexport type { Params, Frame, Column, ErrorResponse } from \"@reifydb/core\";\nexport { ReifyError } from \"@reifydb/core\";\n\nexport interface AdminRequest {\n id: string;\n type: \"Admin\";\n payload: {\n statements: string[];\n params?: Params;\n format?: string;\n unwrap?: boolean;\n }\n}\n\nexport interface AdminResponse {\n id: string;\n type: \"Admin\";\n payload: {\n content_type: string;\n body: any;\n };\n}\n\nexport interface CommandRequest {\n id: string;\n type: \"Command\";\n payload: {\n statements: string[];\n params?: Params;\n format?: string;\n unwrap?: boolean;\n }\n}\n\nexport interface CommandResponse {\n id: string;\n type: \"Command\";\n payload: {\n content_type: string;\n body: any;\n };\n}\n\nexport interface QueryRequest {\n id: string;\n type: \"Query\";\n payload: {\n statements: string[];\n params?: Params;\n format?: string;\n unwrap?: boolean;\n }\n}\n\nexport interface QueryResponse {\n id: string;\n type: \"Query\";\n payload: {\n content_type: string;\n body: any;\n };\n}\n\nexport interface SubscribeRequest {\n id: string;\n type: \"Subscribe\";\n payload: {\n query: string;\n };\n}\n\nexport interface SubscribedResponse {\n id: string;\n type: \"Subscribed\";\n payload: {\n subscription_id: string;\n };\n}\n\nexport interface UnsubscribeRequest {\n id: string;\n type: \"Unsubscribe\";\n payload: {\n subscription_id: string;\n };\n}\n\nexport interface UnsubscribedResponse {\n id: string;\n type: \"Unsubscribed\";\n payload: {\n subscription_id: string;\n };\n}\n\nexport interface ChangeMessage {\n // No id field - server-initiated\n type: \"Change\";\n payload: {\n subscription_id: string;\n content_type: string;\n body: any;\n };\n}\n\nexport type SubscriptionOperation = 'INSERT' | 'UPDATE' | 'REMOVE';\n\nexport interface SubscriptionCallbacks<T = any> {\n onInsert?: (rows: T[]) => void;\n onUpdate?: (rows: T[]) => void;\n onRemove?: (rows: T[]) => void;\n}","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {NONE_VALUE, TypeValuePair} from \"@reifydb/core\";\n\nexport function encodeValue(value: any): TypeValuePair {\n\n if (value === null || value === undefined) {\n return { type: 'None', value: NONE_VALUE };\n }\n\n if (value && typeof value === 'object' && 'encode' in value && typeof value.encode === 'function') {\n return value.encode();\n }\n\n if (typeof value === 'boolean') {\n return { type: 'Boolean', value: value.toString() };\n }\n\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n // Choose appropriate integer type based on value range\n if (value >= -128 && value <= 127) {\n return { type: 'Int1', value: value.toString() };\n } else if (value >= -32768 && value <= 32767) {\n return { type: 'Int2', value: value.toString() };\n } else if (value >= -2147483648 && value <= 2147483647) {\n return { type: 'Int4', value: value.toString() };\n } else {\n return { type: 'Int8', value: value.toString() };\n }\n } else {\n // Floating point number\n return { type: 'Float8', value: value.toString() };\n }\n }\n\n if (typeof value === 'string') {\n if (/^[0-9a-f]{8}-[0-9a-f]{4}-[47][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)) {\n const version = value[14];\n if (version === '4') {\n return { type: 'Uuid4', value: value };\n } else if (version === '7') {\n return { type: 'Uuid7', value: value };\n }\n }\n return { type: 'Utf8', value: value };\n }\n\n if (typeof value === 'bigint') {\n if (value >= BigInt(0)) {\n if (value <= BigInt(255)) {\n return { type: 'Uint1', value: value.toString() };\n } else if (value <= BigInt(65535)) {\n return { type: 'Uint2', value: value.toString() };\n } else if (value <= BigInt(4294967295)) {\n return { type: 'Uint4', value: value.toString() };\n } else if (value <= BigInt('18446744073709551615')) {\n return { type: 'Uint8', value: value.toString() };\n } else {\n return { type: 'Uint16', value: value.toString() };\n }\n } else {\n if (value >= BigInt('-9223372036854775808')) {\n return { type: 'Int8', value: value.toString() };\n } else {\n return { type: 'Int16', value: value.toString() };\n }\n }\n }\n\n if (value instanceof Date) {\n return { type: 'DateTime', value: value.toISOString() };\n }\n\n\n if (value instanceof Uint8Array) {\n const hex = Array.from(value)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n return { type: 'Blob', value: '0x' + hex };\n }\n\n if (value instanceof ArrayBuffer) {\n const uint8Array = new Uint8Array(value);\n const hex = Array.from(uint8Array)\n .map(b => b.toString(16).padStart(2, '0'))\n .join('');\n return { type: 'Blob', value: '0x' + hex };\n }\n\n throw new Error(`Cannot encode value of type ${typeof value}: ${value}`);\n}\n\nexport function encodeParams(params: any): TypeValuePair[] | Record<string, TypeValuePair> {\n if (params === undefined || params === null) {\n return [];\n }\n\n if (Array.isArray(params)) {\n return params.map(param => encodeValue(param));\n } else if (typeof params === 'object') {\n const encoded: Record<string, TypeValuePair> = {};\n for (const [key, value] of Object.entries(params)) {\n encoded[key] = encodeValue(value);\n }\n return encoded;\n }\n\n throw new Error(`Invalid parameters type: expected array or object, got ${typeof params}`);\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport type {Params} from \"@reifydb/core\";\nimport type {\n AdminRequest,\n CommandRequest,\n QueryRequest,\n ErrorResponse,\n} from \"./types\";\nimport {ReifyError} from \"./types\";\nimport {encodeParams} from \"./encoder\";\n\nexport interface JsonWsClientOptions {\n url: string;\n timeoutMs?: number;\n token?: string;\n maxReconnectAttempts?: number;\n reconnectDelayMs?: number;\n}\n\ntype ResponsePayload = ErrorResponse | { id: string; type: string; payload: { content_type: string; body: any } };\n\nasync function createWebSocket(url: string): Promise<WebSocket> {\n if (typeof window !== \"undefined\" && typeof window.WebSocket !== \"undefined\") {\n return new WebSocket(url);\n } else {\n //@ts-ignore\n const wsModule = await import(\"ws\");\n return new wsModule.WebSocket(url);\n }\n}\n\nexport class JsonWsClient {\n private options: JsonWsClientOptions;\n private nextId: number;\n private socket: WebSocket;\n private pending = new Map<string, (response: ResponsePayload) => void>();\n private reconnectAttempts: number = 0;\n private shouldReconnect: boolean = true;\n private isReconnecting: boolean = false;\n\n private constructor(socket: WebSocket, options: JsonWsClientOptions) {\n this.options = options;\n this.nextId = 1;\n this.socket = socket;\n this.setupSocketHandlers();\n }\n\n static async connect(options: JsonWsClientOptions): Promise<JsonWsClient> {\n const socket = await createWebSocket(options.url);\n\n if (socket.readyState !== 1) {\n const connectionTimeoutMs = 30000;\n await new Promise<void>((resolve, reject) => {\n const connectionTimeout = setTimeout(() => {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n socket.close();\n reject(new Error(`WebSocket connection timeout after ${connectionTimeoutMs}ms`));\n }, connectionTimeoutMs);\n\n const onOpen = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n resolve();\n };\n\n const onError = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n reject(new Error(\"WebSocket connection failed\"));\n };\n\n socket.addEventListener(\"open\", onOpen);\n socket.addEventListener(\"error\", onError);\n });\n }\n\n socket.send(\"{\\\"id\\\":\\\"auth-1\\\",\\\"type\\\":\\\"Auth\\\",\\\"payload\\\":{\\\"token\\\":\\\"mysecrettoken\\\"}}\");\n\n return new JsonWsClient(socket, options);\n }\n\n async query<T = any>(statements: string | string[], params?: Params): Promise<T[][]> {\n return this.send<T>(\"Query\", statements, params);\n }\n\n async command<T = any>(statements: string | string[], params?: Params): Promise<T[][]> {\n return this.send<T>(\"Command\", statements, params);\n }\n\n async admin<T = any>(statements: string | string[], params?: Params): Promise<T[][]> {\n return this.send<T>(\"Admin\", statements, params);\n }\n\n disconnect() {\n this.shouldReconnect = false;\n this.socket.close();\n }\n\n private async send<T>(type: \"Admin\" | \"Command\" | \"Query\", statements: string | string[], params?: Params): Promise<T[][]> {\n const id = `req-${this.nextId++}`;\n\n const statementArray = Array.isArray(statements) ? statements : [statements];\n const outputStatements = statementArray.length > 1\n ? statementArray.map(s => s.trim() ? `OUTPUT ${s}` : s)\n : statementArray;\n\n const encodedParams = params !== undefined && params !== null\n ? encodeParams(params)\n : undefined;\n\n if (this.socket.readyState !== 1) {\n throw new ReifyError({\n id: \"connection-error\",\n type: \"Err\",\n payload: {\n diagnostic: {\n code: \"CONNECTION_LOST\",\n message: \"Connection lost\",\n notes: []\n }\n }\n });\n }\n\n const response = await new Promise<ResponsePayload>((resolve, reject) => {\n const timeoutMs = this.options.timeoutMs ?? 30_000;\n const timeout = setTimeout(() => {\n this.pending.delete(id);\n reject(new Error(\"ReifyDB query timeout\"));\n }, timeoutMs);\n\n this.pending.set(id, (res) => {\n clearTimeout(timeout);\n resolve(res);\n });\n\n this.socket.send(JSON.stringify({\n id,\n type,\n payload: {\n statements: outputStatements,\n params: encodedParams,\n format: \"json\",\n },\n }));\n });\n\n if (response.type === \"Err\") {\n throw new ReifyError(response as ErrorResponse);\n }\n\n if (response.type !== type) {\n throw new Error(`Unexpected response type: ${response.type}`);\n }\n\n const body = (response as any).payload.body;\n\n // body is an array of arrays (one per frame/statement)\n if (Array.isArray(body) && body.length > 0 && Array.isArray(body[0])) {\n return body as T[][];\n }\n\n // body is empty - no frames\n if (Array.isArray(body) && body.length === 0) {\n return [] as T[][];\n }\n\n // body is a single array of objects (single frame)\n if (Array.isArray(body)) {\n return [body] as T[][];\n }\n\n // body is a single unwrapped object\n if (body && typeof body === 'object') {\n return [[body]] as T[][];\n }\n\n return [] as T[][];\n }\n\n private handleDisconnect() {\n this.rejectAllPendingRequests();\n\n if (!this.shouldReconnect || this.isReconnecting) {\n return;\n }\n\n const maxAttempts = this.options.maxReconnectAttempts ?? 5;\n if (this.reconnectAttempts >= maxAttempts) {\n return;\n }\n\n this.attemptReconnect();\n }\n\n private async attemptReconnect() {\n this.isReconnecting = true;\n this.reconnectAttempts++;\n\n const baseDelay = this.options.reconnectDelayMs ?? 1000;\n const delay = baseDelay * Math.pow(2, this.reconnectAttempts - 1);\n\n await new Promise(resolve => setTimeout(resolve, delay));\n\n try {\n const socket = await createWebSocket(this.options.url);\n\n if (socket.readyState !== 1) {\n const connectionTimeoutMs = 30000;\n await new Promise<void>((resolve, reject) => {\n const connectionTimeout = setTimeout(() => {\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n socket.close();\n reject(new Error(`WebSocket reconnection timeout after ${connectionTimeoutMs}ms`));\n }, connectionTimeoutMs);\n\n const onOpen = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n resolve();\n };\n\n const onError = () => {\n clearTimeout(connectionTimeout);\n socket.removeEventListener(\"open\", onOpen);\n socket.removeEventListener(\"error\", onError);\n reject(new Error(\"WebSocket connection failed\"));\n };\n\n socket.addEventListener(\"open\", onOpen);\n socket.addEventListener(\"error\", onError);\n });\n }\n\n socket.send(\"{\\\"id\\\":\\\"auth-1\\\",\\\"type\\\":\\\"Auth\\\",\\\"payload\\\":{\\\"token\\\":\\\"mysecrettoken\\\"}}\");\n\n this.socket = socket;\n this.setupSocketHandlers();\n this.reconnectAttempts = 0;\n this.isReconnecting = false;\n } catch (error) {\n this.isReconnecting = false;\n this.handleDisconnect();\n }\n }\n\n private setupSocketHandlers() {\n this.socket.onmessage = (event) => {\n const msg = JSON.parse(event.data);\n\n if (!msg.id) {\n return;\n }\n\n const {id} = msg;\n const handler = this.pending.get(id);\n if (!handler) {\n return;\n }\n\n this.pending.delete(id);\n handler(msg);\n };\n\n this.socket.onerror = () => {};\n\n this.socket.onclose = () => {\n this.handleDisconnect();\n };\n }\n\n private rejectAllPendingRequests() {\n const error: ErrorResponse = {\n id: \"connection-error\",\n type: \"Err\",\n payload: {\n diagnostic: {\n code: \"CONNECTION_LOST\",\n message: \"Connection lost\",\n notes: []\n }\n }\n };\n\n for (const handler of this.pending.values()) {\n handler(error);\n }\n this.pending.clear();\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport type {Params} from \"@reifydb/core\";\nimport {ReifyError} from \"./types\";\nimport {encodeParams} from \"./encoder\";\n\nexport interface JsonHttpClientOptions {\n url: string;\n token?: string;\n apiKey?: string;\n timeoutMs?: number;\n}\n\nexport class JsonHttpClient {\n private options: JsonHttpClientOptions;\n\n private constructor(options: JsonHttpClientOptions) {\n this.options = options;\n }\n\n static connect(options: JsonHttpClientOptions): JsonHttpClient {\n return new JsonHttpClient(options);\n }\n\n async query<T = any>(statements: string | string[], params?: Params): Promise<T[][]> {\n return this.send<T>(\"query\", statements, params);\n }\n\n async command<T = any>(statements: string | string[], params?: Params): Promise<T[][]> {\n return this.send<T>(\"command\", statements, params);\n }\n\n async admin<T = any>(statements: string | string[], params?: Params): Promise<T[][]> {\n return this.send<T>(\"admin\", statements, params);\n }\n\n private async send<T>(endpoint: \"query\" | \"command\" | \"admin\", statements: string | string[], params?: Params): Promise<T[][]> {\n const statementArray = Array.isArray(statements) ? statements : [statements];\n const outputStatements = statementArray.length > 1\n ? statementArray.map(s => s.trim() ? `OUTPUT ${s}` : s)\n : statementArray;\n\n const encodedParams = params !== undefined && params !== null\n ? encodeParams(params)\n : undefined;\n\n const headers: Record<string, string> = {\n \"Content-Type\": \"application/json\",\n };\n\n if (this.options.token) {\n headers[\"Authorization\"] = `Bearer ${this.options.token}`;\n } else if (this.options.apiKey) {\n headers[\"X-Api-Key\"] = this.options.apiKey;\n }\n\n const baseUrl = this.options.url.replace(/\\/+$/, \"\");\n const timeoutMs = this.options.timeoutMs ?? 30_000;\n\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), timeoutMs);\n\n let response: Response;\n try {\n response = await fetch(`${baseUrl}/v1/${endpoint}?format=json`, {\n method: \"POST\",\n headers,\n body: JSON.stringify({\n statements: outputStatements,\n params: encodedParams,\n }),\n signal: controller.signal,\n });\n } catch (err: any) {\n if (err.name === \"AbortError\") {\n throw new Error(\"ReifyDB query timeout\");\n }\n throw err;\n } finally {\n clearTimeout(timeout);\n }\n\n const body = await response.json();\n\n if (!response.ok) {\n if (body.diagnostic) {\n throw new ReifyError({\n id: \"\",\n type: \"Err\",\n payload: {diagnostic: body.diagnostic},\n });\n }\n if (body.error) {\n throw new ReifyError({\n id: \"\",\n type: \"Err\",\n payload: {\n diagnostic: {\n code: body.code ?? \"HTTP_ERROR\",\n message: body.error,\n notes: [],\n },\n },\n });\n }\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n // Normalize response body to T[][]\n if (Array.isArray(body) && body.length > 0 && Array.isArray(body[0])) {\n return body as T[][];\n }\n\n if (Array.isArray(body)) {\n return [body] as T[][];\n }\n\n if (body && typeof body === \"object\") {\n return [[body]] as T[][];\n }\n\n return [] as T[][];\n }\n}\n","// SPDX-License-Identifier: Apache-2.0\n// Copyright (c) 2025 ReifyDB\nimport {WsClient, WsClientOptions} from \"./ws\";\nimport {JsonWsClient, JsonWsClientOptions} from \"./json\";\nimport {JsonHttpClient, JsonHttpClientOptions} from \"./http\";\n\nexport class Client {\n /**\n * Connect to ReifyDB via WebSocket\n * @param url WebSocket URL\n * @param options Optional configuration\n * @returns Connected WebSocket client\n */\n static async connect_ws(url: string, options: Omit<WsClientOptions, 'url'> = {}): Promise<WsClient> {\n return WsClient.connect({url, ...options});\n }\n\n /**\n * Connect to ReifyDB via WebSocket with JSON format responses\n * @param url WebSocket URL\n * @param options Optional configuration\n * @returns Connected JSON WebSocket client\n */\n static async connect_json_ws(url: string, options: Omit<JsonWsClientOptions, 'url'> = {}): Promise<JsonWsClient> {\n return JsonWsClient.connect({url, ...options});\n }\n\n /**\n * Connect to ReifyDB via HTTP with JSON format responses\n * @param url Base HTTP URL\n * @param options Optional configuration\n * @returns JSON HTTP client\n */\n static connect_json_http(url: string, options: Omit<JsonHttpClientOptions, 'url'> = {}): JsonHttpClient {\n return JsonHttpClient.connect({url, ...options});\n }\n}\n\nexport {ReifyError, asFrameResults} from \"@reifydb/core\";\nexport type {FrameResults, SingleFrameResult, Diagnostic, Fragment, DiagnosticColumn} from \"@reifydb/core\";\nexport {WsClient} from \"./ws\";\nexport type {WsClientOptions} from \"./ws\";\nexport {JsonWsClient} from \"./json\";\nexport type {JsonWsClientOptions} from \"./json\";\nexport {JsonHttpClient} from \"./http\";\nexport type {JsonHttpClientOptions} from \"./http\";\nexport type {\n SubscribeRequest,\n SubscribedResponse,\n UnsubscribeRequest,\n UnsubscribedResponse,\n ChangeMessage,\n SubscriptionCallbacks,\n SubscriptionOperation\n} from './types';"],"mappings":"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","names":["createWebSocket","ReifyError"]}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@reifydb/client",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"dependencies": {
|
|
8
8
|
"uuid": "^11.1.0",
|
|
9
9
|
"ws": "^8.18.3",
|
|
10
|
-
"@reifydb/core": "0.4.
|
|
10
|
+
"@reifydb/core": "0.4.2"
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
13
|
"@types/node": "^24.0.10",
|