@query-farm/vgi-rpc 0.3.2 → 0.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/dispatch/stream.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIzD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,IAAI,CAAC,CAsGf"}
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../src/dispatch/stream.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAGpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAIzD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,gBAAgB,EACxB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAAG,IAAI,GACvB,OAAO,CAAC,IAAI,CAAC,CAoHf"}
@@ -1,4 +1,4 @@
1
- import { RecordBatch, type Schema } from "@query-farm/apache-arrow";
1
+ import { type RecordBatch, type Schema } from "@query-farm/apache-arrow";
2
2
  export declare const ARROW_CONTENT_TYPE = "application/vnd.apache.arrow.stream";
3
3
  export declare class HttpRpcError extends Error {
4
4
  readonly statusCode: number;
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/http/common.ts"],"names":[],"mappings":"AAGA,OAAO,EAEL,WAAW,EAGX,KAAK,MAAM,EAEZ,MAAM,0BAA0B,CAAC;AAElC,eAAO,MAAM,kBAAkB,wCAAwC,CAAC;AAExE,qBAAa,YAAa,SAAQ,KAAK;aAGnB,UAAU,EAAE,MAAM;gBADlC,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM;CAKrC;AAyBD,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,UAAU,CAQrF;AAED,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,SAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,CAI9F;AAED,yDAAyD;AACzD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC,CAY3G"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/http/common.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,WAAW,EAGhB,KAAK,MAAM,EACZ,MAAM,0BAA0B,CAAC;AAGlC,eAAO,MAAM,kBAAkB,wCAAwC,CAAC;AAExE,qBAAa,YAAa,SAAQ,KAAK;aAGnB,UAAU,EAAE,MAAM;gBADlC,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM;CAKrC;AAED,6EAA6E;AAC7E,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,UAAU,CAQrF;AAED,yFAAyF;AACzF,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,SAAM,EAAE,YAAY,CAAC,EAAE,OAAO,GAAG,QAAQ,CAI9F;AAED,yDAAyD;AACzD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,WAAW,CAAA;CAAE,CAAC,CAY3G"}
@@ -1 +1 @@
1
- {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/http/dispatch.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAOpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAUlD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,uCAAuC;AACvC,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACtC,QAAQ,EAAE,MAAM,GACf,QAAQ,CAIV;AAED,qCAAqC;AACrC,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,QAAQ,CAAC,CAoBnB;AAED,kEAAkE;AAClE,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,QAAQ,CAAC,CAuEnB;AAED,yFAAyF;AACzF,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,QAAQ,CAAC,CAgHnB"}
1
+ {"version":3,"file":"dispatch.d.ts","sourceRoot":"","sources":["../../src/http/dispatch.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAQpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAUlD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,uCAAuC;AACvC,wBAAgB,oBAAoB,CAClC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACtC,QAAQ,EAAE,MAAM,GACf,QAAQ,CAIV;AAED,qCAAqC;AACrC,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,QAAQ,CAAC,CAoBnB;AAED,kEAAkE;AAClE,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,QAAQ,CAAC,CAuEnB;AAED,yFAAyF;AACzF,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,gBAAgB,EACxB,IAAI,EAAE,UAAU,EAChB,GAAG,EAAE,eAAe,GACnB,OAAO,CAAC,QAAQ,CAAC,CAmHnB"}
package/dist/index.js CHANGED
@@ -67,22 +67,12 @@ var STATE_KEY = "vgi_rpc.stream_state#b64";
67
67
 
68
68
  // src/http/common.ts
69
69
  import {
70
- makeData,
71
- RecordBatch,
72
70
  RecordBatchReader,
73
- RecordBatchStreamWriter,
74
- Struct
71
+ RecordBatchStreamWriter
75
72
  } from "@query-farm/apache-arrow";
76
- var ARROW_CONTENT_TYPE = "application/vnd.apache.arrow.stream";
77
73
 
78
- class HttpRpcError extends Error {
79
- statusCode;
80
- constructor(message, statusCode) {
81
- super(message);
82
- this.statusCode = statusCode;
83
- this.name = "HttpRpcError";
84
- }
85
- }
74
+ // src/util/conform.ts
75
+ import { RecordBatch, Struct, makeData } from "@query-farm/apache-arrow";
86
76
  function conformBatchToSchema(batch, schema) {
87
77
  if (batch.numRows === 0)
88
78
  return batch;
@@ -97,6 +87,18 @@ function conformBatchToSchema(batch, schema) {
97
87
  });
98
88
  return new RecordBatch(schema, data, batch.metadata);
99
89
  }
90
+
91
+ // src/http/common.ts
92
+ var ARROW_CONTENT_TYPE = "application/vnd.apache.arrow.stream";
93
+
94
+ class HttpRpcError extends Error {
95
+ statusCode;
96
+ constructor(message, statusCode) {
97
+ super(message);
98
+ this.statusCode = statusCode;
99
+ this.name = "HttpRpcError";
100
+ }
101
+ }
100
102
  function serializeIpcStream(schema, batches) {
101
103
  const writer = new RecordBatchStreamWriter;
102
104
  writer.reset(undefined, schema);
@@ -1849,9 +1851,10 @@ async function httpDispatchStreamExchange(method, body, ctx) {
1849
1851
  return produceStreamResponse(method, state, outputSchema, inputSchema, ctx, null, null);
1850
1852
  } else {
1851
1853
  const out = new OutputCollector(outputSchema, effectiveProducer, ctx.serverId, null);
1854
+ const conformedBatch = conformBatchToSchema(reqBatch, inputSchema);
1852
1855
  try {
1853
1856
  if (method.exchangeFn) {
1854
- await method.exchangeFn(state, reqBatch, out);
1857
+ await method.exchangeFn(state, conformedBatch, out);
1855
1858
  } else {
1856
1859
  await method.producerFn(state, out);
1857
1860
  }
@@ -2291,11 +2294,19 @@ async function dispatchStream(method, params, writer, reader, serverId, requestI
2291
2294
  return;
2292
2295
  }
2293
2296
  const stream = writer.openStream(outputSchema);
2297
+ const expectedInputSchema = method.inputSchema;
2294
2298
  try {
2295
2299
  while (true) {
2296
- const inputBatch = await reader.readNextBatch();
2300
+ let inputBatch = await reader.readNextBatch();
2297
2301
  if (!inputBatch)
2298
2302
  break;
2303
+ if (expectedInputSchema && !isProducer && inputBatch.schema !== expectedInputSchema) {
2304
+ try {
2305
+ inputBatch = conformBatchToSchema(inputBatch, expectedInputSchema);
2306
+ } catch {
2307
+ throw new TypeError(`Input schema mismatch: expected ${expectedInputSchema}, got ${inputBatch.schema}`);
2308
+ }
2309
+ }
2299
2310
  const out = new OutputCollector(outputSchema, effectiveProducer, serverId, requestId);
2300
2311
  if (isProducer) {
2301
2312
  await method.producerFn(state, out);
@@ -2537,4 +2548,4 @@ export {
2537
2548
  ARROW_CONTENT_TYPE
2538
2549
  };
2539
2550
 
2540
- //# debugId=E5E571F45BA75F8D64756E2164756E21
2551
+ //# debugId=5E36C5DD1C64E65A64756E2164756E21
package/dist/index.js.map CHANGED
@@ -1,10 +1,11 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/util/zstd.ts", "../src/constants.ts", "../src/http/common.ts", "../src/client/introspect.ts", "../src/client/ipc.ts", "../src/errors.ts", "../src/wire/reader.ts", "../src/client/stream.ts", "../src/client/connect.ts", "../src/client/pipe.ts", "../src/http/handler.ts", "../src/types.ts", "../src/wire/response.ts", "../src/http/dispatch.ts", "../src/dispatch/describe.ts", "../src/util/schema.ts", "../src/wire/request.ts", "../src/http/token.ts", "../src/http/types.ts", "../src/protocol.ts", "../src/schema.ts", "../src/server.ts", "../src/dispatch/stream.ts", "../src/dispatch/unary.ts", "../src/wire/writer.ts"],
3
+ "sources": ["../src/util/zstd.ts", "../src/constants.ts", "../src/http/common.ts", "../src/util/conform.ts", "../src/client/introspect.ts", "../src/client/ipc.ts", "../src/errors.ts", "../src/wire/reader.ts", "../src/client/stream.ts", "../src/client/connect.ts", "../src/client/pipe.ts", "../src/http/handler.ts", "../src/types.ts", "../src/wire/response.ts", "../src/http/dispatch.ts", "../src/dispatch/describe.ts", "../src/util/schema.ts", "../src/wire/request.ts", "../src/http/token.ts", "../src/http/types.ts", "../src/protocol.ts", "../src/schema.ts", "../src/server.ts", "../src/dispatch/stream.ts", "../src/dispatch/unary.ts", "../src/wire/writer.ts"],
4
4
  "sourcesContent": [
5
5
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Cross-runtime zstd compression/decompression.\n *\n * Uses Bun.zstd* when running on Bun, otherwise falls back to node:zlib\n * (available on Node.js 22.15+ and Deno 2.6.9+).\n */\n\nimport * as zlib from \"node:zlib\";\n\nconst isBun = typeof globalThis.Bun !== \"undefined\";\n\n/** Compress data with zstd at the given level (1-22). */\nexport function zstdCompress(data: Uint8Array, level: number): Uint8Array<ArrayBuffer> {\n if (isBun) {\n return new Uint8Array(Bun.zstdCompressSync(data, { level }));\n }\n const fn = (zlib as any).zstdCompressSync;\n if (typeof fn !== \"function\") {\n throw new Error(\"zstd is not available in this runtime. \" + \"Requires Bun, Node.js >= 22.15, or Deno >= 2.6.9.\");\n }\n return new Uint8Array(\n fn(data, {\n params: {\n [(zlib.constants as any).ZSTD_c_compressionLevel]: level,\n },\n }),\n );\n}\n\n/** Decompress zstd-compressed data. */\nexport function zstdDecompress(data: Uint8Array): Uint8Array<ArrayBuffer> {\n if (isBun) {\n return new Uint8Array(Bun.zstdDecompressSync(data));\n }\n const fn = (zlib as any).zstdDecompressSync;\n if (typeof fn !== \"function\") {\n throw new Error(\"zstd is not available in this runtime. \" + \"Requires Bun, Node.js >= 22.15, or Deno >= 2.6.9.\");\n }\n return new Uint8Array(fn(data));\n}\n",
6
6
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\n/** Well-known metadata keys matching Python's metadata.py */\n\nexport const RPC_METHOD_KEY = \"vgi_rpc.method\";\nexport const LOG_LEVEL_KEY = \"vgi_rpc.log_level\";\nexport const LOG_MESSAGE_KEY = \"vgi_rpc.log_message\";\nexport const LOG_EXTRA_KEY = \"vgi_rpc.log_extra\";\nexport const REQUEST_VERSION_KEY = \"vgi_rpc.request_version\";\nexport const REQUEST_VERSION = \"1\";\n\nexport const SERVER_ID_KEY = \"vgi_rpc.server_id\";\nexport const REQUEST_ID_KEY = \"vgi_rpc.request_id\";\n\nexport const PROTOCOL_NAME_KEY = \"vgi_rpc.protocol_name\";\nexport const DESCRIBE_VERSION_KEY = \"vgi_rpc.describe_version\";\nexport const DESCRIBE_VERSION = \"2\";\n\nexport const DESCRIBE_METHOD_NAME = \"__describe__\";\n\nexport const STATE_KEY = \"vgi_rpc.stream_state#b64\";\n",
7
- "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n makeData,\n RecordBatch,\n RecordBatchReader,\n RecordBatchStreamWriter,\n type Schema,\n Struct,\n} from \"@query-farm/apache-arrow\";\n\nexport const ARROW_CONTENT_TYPE = \"application/vnd.apache.arrow.stream\";\n\nexport class HttpRpcError extends Error {\n constructor(\n message: string,\n public readonly statusCode: number,\n ) {\n super(message);\n this.name = \"HttpRpcError\";\n }\n}\n\n/**\n * Rebuild a batch's data to match the given schema's field types.\n *\n * Batches deserialized from IPC streams (e.g., from PyArrow) may use generic\n * types (Float) instead of specific ones (Float64). Arrow-JS's\n * RecordBatchStreamWriter silently drops batches whose child Data types don't\n * match the writer's schema. Cloning each child Data with the schema's field\n * type fixes the type metadata while preserving the underlying buffers.\n */\nfunction conformBatchToSchema(batch: RecordBatch, schema: Schema): RecordBatch {\n if (batch.numRows === 0) return batch;\n const children = schema.fields.map((f, i) => batch.data.children[i].clone(f.type));\n const structType = new Struct(schema.fields);\n const data = makeData({\n type: structType,\n length: batch.numRows,\n children,\n nullCount: batch.data.nullCount,\n nullBitmap: batch.data.nullBitmap,\n });\n return new RecordBatch(schema, data, batch.metadata);\n}\n\n/** Serialize a schema + batches into a complete IPC stream as Uint8Array. */\nexport function serializeIpcStream(schema: Schema, batches: RecordBatch[]): Uint8Array {\n const writer = new RecordBatchStreamWriter();\n writer.reset(undefined, schema);\n for (const batch of batches) {\n writer.write(conformBatchToSchema(batch, schema));\n }\n writer.close();\n return writer.toUint8Array(true);\n}\n\n/** Create a Response with Arrow IPC content type. Casts Uint8Array for TS lib compat. */\nexport function arrowResponse(body: Uint8Array, status = 200, extraHeaders?: Headers): Response {\n const headers = extraHeaders ?? new Headers();\n headers.set(\"Content-Type\", ARROW_CONTENT_TYPE);\n return new Response(body as unknown as BodyInit, { status, headers });\n}\n\n/** Read schema + first batch from an IPC stream body. */\nexport async function readRequestFromBody(body: Uint8Array): Promise<{ schema: Schema; batch: RecordBatch }> {\n const reader = await RecordBatchReader.from(body);\n await reader.open();\n const schema = reader.schema;\n if (!schema) {\n throw new HttpRpcError(\"Empty IPC stream: no schema\", 400);\n }\n const batches = reader.readAll();\n if (batches.length === 0) {\n throw new HttpRpcError(\"IPC stream contains no batches\", 400);\n }\n return { schema, batch: batches[0] };\n}\n",
7
+ "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n type RecordBatch,\n RecordBatchReader,\n RecordBatchStreamWriter,\n type Schema,\n} from \"@query-farm/apache-arrow\";\nimport { conformBatchToSchema } from \"../util/conform.js\";\n\nexport const ARROW_CONTENT_TYPE = \"application/vnd.apache.arrow.stream\";\n\nexport class HttpRpcError extends Error {\n constructor(\n message: string,\n public readonly statusCode: number,\n ) {\n super(message);\n this.name = \"HttpRpcError\";\n }\n}\n\n/** Serialize a schema + batches into a complete IPC stream as Uint8Array. */\nexport function serializeIpcStream(schema: Schema, batches: RecordBatch[]): Uint8Array {\n const writer = new RecordBatchStreamWriter();\n writer.reset(undefined, schema);\n for (const batch of batches) {\n writer.write(conformBatchToSchema(batch, schema));\n }\n writer.close();\n return writer.toUint8Array(true);\n}\n\n/** Create a Response with Arrow IPC content type. Casts Uint8Array for TS lib compat. */\nexport function arrowResponse(body: Uint8Array, status = 200, extraHeaders?: Headers): Response {\n const headers = extraHeaders ?? new Headers();\n headers.set(\"Content-Type\", ARROW_CONTENT_TYPE);\n return new Response(body as unknown as BodyInit, { status, headers });\n}\n\n/** Read schema + first batch from an IPC stream body. */\nexport async function readRequestFromBody(body: Uint8Array): Promise<{ schema: Schema; batch: RecordBatch }> {\n const reader = await RecordBatchReader.from(body);\n await reader.open();\n const schema = reader.schema;\n if (!schema) {\n throw new HttpRpcError(\"Empty IPC stream: no schema\", 400);\n }\n const batches = reader.readAll();\n if (batches.length === 0) {\n throw new HttpRpcError(\"IPC stream contains no batches\", 400);\n }\n return { schema, batch: batches[0] };\n}\n",
8
+ "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RecordBatch, Struct, makeData, type Schema } from \"@query-farm/apache-arrow\";\n\n/**\n * Rebuild a batch's data to match the given schema's field types.\n *\n * Batches deserialized from IPC streams (e.g., from PyArrow) may use generic\n * types (Float) instead of specific ones (Float64). Arrow-JS's\n * RecordBatchStreamWriter silently drops batches whose child Data types don't\n * match the writer's schema. Cloning each child Data with the schema's field\n * type fixes the type metadata while preserving the underlying buffers.\n *\n * This is also used to cast compatible input types (e.g., decimal→double,\n * int32→int64) when the input batch schema doesn't exactly match the method's\n * declared input schema.\n */\nexport function conformBatchToSchema(batch: RecordBatch, schema: Schema): RecordBatch {\n if (batch.numRows === 0) return batch;\n const children = schema.fields.map((f, i) => batch.data.children[i].clone(f.type));\n const structType = new Struct(schema.fields);\n const data = makeData({\n type: structType,\n length: batch.numRows,\n children,\n nullCount: batch.data.nullCount,\n nullBitmap: batch.data.nullBitmap,\n });\n return new RecordBatch(schema, data, batch.metadata);\n}\n",
8
9
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Schema as ArrowSchema, type RecordBatch, RecordBatchReader, type Schema } from \"@query-farm/apache-arrow\";\nimport { DESCRIBE_METHOD_NAME, PROTOCOL_NAME_KEY } from \"../constants.js\";\nimport { ARROW_CONTENT_TYPE } from \"../http/common.js\";\nimport { buildRequestIpc, dispatchLogOrError, readResponseBatches } from \"./ipc.js\";\nimport type { LogMessage } from \"./types.js\";\n\nexport interface MethodInfo {\n name: string;\n type: \"unary\" | \"stream\";\n paramsSchema: Schema;\n resultSchema: Schema;\n inputSchema?: Schema;\n outputSchema?: Schema;\n headerSchema?: Schema;\n doc?: string;\n paramTypes?: Record<string, string>;\n defaults?: Record<string, any>;\n}\n\nexport interface ServiceDescription {\n protocolName: string;\n methods: MethodInfo[];\n}\n\n/** Deserialize a schema from IPC bytes (schema message + EOS). */\nasync function deserializeSchema(bytes: Uint8Array): Promise<Schema> {\n const reader = await RecordBatchReader.from(bytes);\n await reader.open();\n return reader.schema!;\n}\n\n/**\n * Parse a __describe__ response from batches into a ServiceDescription.\n * Reusable across transports (HTTP, pipe, subprocess).\n */\nexport async function parseDescribeResponse(\n batches: RecordBatch[],\n onLog?: (msg: LogMessage) => void,\n): Promise<ServiceDescription> {\n // Find the data batch (skip log/error batches)\n let dataBatch = null;\n for (const batch of batches) {\n if (batch.numRows === 0) {\n dispatchLogOrError(batch, onLog);\n continue;\n }\n dataBatch = batch;\n }\n\n if (!dataBatch) {\n throw new Error(\"Empty __describe__ response\");\n }\n\n // Extract metadata from batch\n const meta = dataBatch.metadata;\n const protocolName = meta?.get(PROTOCOL_NAME_KEY) ?? \"\";\n\n const methods: MethodInfo[] = [];\n for (let i = 0; i < dataBatch.numRows; i++) {\n const name = dataBatch.getChildAt(0)!.get(i) as string; // name\n const methodType = dataBatch.getChildAt(1)!.get(i) as string; // method_type\n const doc = dataBatch.getChildAt(2)?.get(i) as string | null; // doc\n const _hasReturn = dataBatch.getChildAt(3)!.get(i) as boolean; // has_return\n const paramsIpc = dataBatch.getChildAt(4)!.get(i) as Uint8Array; // params_schema_ipc\n const resultIpc = dataBatch.getChildAt(5)!.get(i) as Uint8Array; // result_schema_ipc\n const paramTypesJson = dataBatch.getChildAt(6)?.get(i) as string | null; // param_types_json\n const paramDefaultsJson = dataBatch.getChildAt(7)?.get(i) as string | null; // param_defaults_json\n const hasHeader = dataBatch.getChildAt(8)!.get(i) as boolean; // has_header\n const headerIpc = dataBatch.getChildAt(9)?.get(i) as Uint8Array | null; // header_schema_ipc\n\n const paramsSchema = await deserializeSchema(paramsIpc);\n const resultSchema = await deserializeSchema(resultIpc);\n\n let paramTypes: Record<string, string> | undefined;\n if (paramTypesJson) {\n try {\n paramTypes = JSON.parse(paramTypesJson);\n } catch {}\n }\n\n let defaults: Record<string, any> | undefined;\n if (paramDefaultsJson) {\n try {\n defaults = JSON.parse(paramDefaultsJson);\n } catch {}\n }\n\n const info: MethodInfo = {\n name,\n type: methodType as \"unary\" | \"stream\",\n paramsSchema,\n resultSchema,\n doc: doc ?? undefined,\n paramTypes,\n defaults,\n };\n\n // For stream methods, result_schema_ipc actually holds the output schema\n if (methodType === \"stream\") {\n info.outputSchema = resultSchema;\n }\n\n if (hasHeader && headerIpc) {\n info.headerSchema = await deserializeSchema(headerIpc);\n }\n\n methods.push(info);\n }\n\n return { protocolName, methods };\n}\n\n/**\n * Send a __describe__ request and return a ServiceDescription.\n */\nexport async function httpIntrospect(baseUrl: string, options?: { prefix?: string }): Promise<ServiceDescription> {\n const prefix = options?.prefix ?? \"/vgi\";\n const emptySchema = new ArrowSchema([]);\n const body = buildRequestIpc(emptySchema, {}, DESCRIBE_METHOD_NAME);\n\n const response = await fetch(`${baseUrl}${prefix}/${DESCRIBE_METHOD_NAME}`, {\n method: \"POST\",\n headers: { \"Content-Type\": ARROW_CONTENT_TYPE },\n body: body as unknown as BodyInit,\n });\n\n const responseBody = new Uint8Array(await response.arrayBuffer());\n const { batches } = await readResponseBatches(responseBody);\n\n return parseDescribeResponse(batches);\n}\n",
9
10
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n Binary,\n Bool,\n DataType,\n Float64,\n Int64,\n makeData,\n RecordBatch,\n RecordBatchReader,\n type Schema,\n Struct,\n Utf8,\n vectorFromArray,\n} from \"@query-farm/apache-arrow\";\nimport {\n LOG_EXTRA_KEY,\n LOG_LEVEL_KEY,\n LOG_MESSAGE_KEY,\n REQUEST_VERSION,\n REQUEST_VERSION_KEY,\n RPC_METHOD_KEY,\n} from \"../constants.js\";\nimport { RpcError } from \"../errors.js\";\nimport { serializeIpcStream } from \"../http/common.js\";\nimport { IpcStreamReader } from \"../wire/reader.js\";\nimport type { LogMessage } from \"./types.js\";\n\n/** Infer an Arrow DataType from a JS value. */\nexport function inferArrowType(value: any): DataType {\n if (typeof value === \"string\") return new Utf8();\n if (typeof value === \"boolean\") return new Bool();\n if (typeof value === \"bigint\") return new Int64();\n if (typeof value === \"number\") return new Float64();\n if (value instanceof Uint8Array) return new Binary();\n return new Utf8(); // fallback\n}\n\n/**\n * Recursively coerce JS values to match Arrow type expectations.\n * Converts numbers to BigInt for Int64 fields, and recurses into Map/List types.\n */\nfunction coerceForArrow(type: DataType, value: any): any {\n if (value == null) return value;\n\n // Int64: convert number → BigInt\n if (DataType.isInt(type) && (type as any).bitWidth === 64) {\n if (typeof value === \"number\") return BigInt(value);\n return value;\n }\n\n // Map_: coerce map values recursively\n if (DataType.isMap(type)) {\n if (value instanceof Map) {\n const entriesField = (type as any).children[0];\n const valueType = entriesField.type.children[1].type;\n const coerced = new Map();\n for (const [k, v] of value) {\n coerced.set(k, coerceForArrow(valueType, v));\n }\n return coerced;\n }\n return value;\n }\n\n // List: coerce elements recursively\n if (DataType.isList(type)) {\n if (Array.isArray(value)) {\n const elemType = (type as any).children[0].type;\n return value.map((v: any) => coerceForArrow(elemType, v));\n }\n return value;\n }\n\n return value;\n}\n\n/**\n * Build a 1-row Arrow IPC request batch with method metadata.\n */\nexport function buildRequestIpc(schema: Schema, params: Record<string, any>, method: string): Uint8Array {\n const metadata = new Map<string, string>();\n metadata.set(RPC_METHOD_KEY, method);\n metadata.set(REQUEST_VERSION_KEY, REQUEST_VERSION);\n\n if (schema.fields.length === 0) {\n const structType = new Struct(schema.fields);\n const data = makeData({\n type: structType,\n length: 1,\n children: [],\n nullCount: 0,\n });\n const batch = new RecordBatch(schema, data, metadata);\n return serializeIpcStream(schema, [batch]);\n }\n\n const children = schema.fields.map((f) => {\n const val = coerceForArrow(f.type, params[f.name]);\n return vectorFromArray([val], f.type).data[0];\n });\n\n const structType = new Struct(schema.fields);\n const data = makeData({\n type: structType,\n length: 1,\n children,\n nullCount: 0,\n });\n\n const batch = new RecordBatch(schema, data, metadata);\n return serializeIpcStream(schema, [batch]);\n}\n\n/**\n * Read schema + all batches from an IPC stream body.\n */\nexport async function readResponseBatches(body: Uint8Array): Promise<{ schema: Schema; batches: RecordBatch[] }> {\n const reader = await RecordBatchReader.from(body);\n await reader.open();\n const schema = reader.schema;\n if (!schema) {\n throw new RpcError(\"ProtocolError\", \"Empty IPC stream: no schema\", \"\");\n }\n const batches = reader.readAll();\n return { schema, batches };\n}\n\n/**\n * Check if a zero-row batch carries log/error metadata.\n * If EXCEPTION → throw RpcError.\n * If other level → call onLog.\n * Returns true if the batch was consumed as a log/error.\n */\nexport function dispatchLogOrError(batch: RecordBatch, onLog?: (msg: LogMessage) => void): boolean {\n const meta = batch.metadata;\n if (!meta) return false;\n\n const level = meta.get(LOG_LEVEL_KEY);\n if (!level) return false;\n\n const message = meta.get(LOG_MESSAGE_KEY) ?? \"\";\n\n if (level === \"EXCEPTION\") {\n const extraStr = meta.get(LOG_EXTRA_KEY);\n let errorType = \"RpcError\";\n let errorMessage = message;\n let traceback = \"\";\n if (extraStr) {\n try {\n const extra = JSON.parse(extraStr);\n errorType = extra.exception_type ?? \"RpcError\";\n errorMessage = extra.exception_message ?? message;\n traceback = extra.traceback ?? \"\";\n } catch {}\n }\n throw new RpcError(errorType, errorMessage, traceback);\n }\n\n if (onLog) {\n const extraStr = meta.get(LOG_EXTRA_KEY);\n let extra: Record<string, any> | undefined;\n if (extraStr) {\n try {\n extra = JSON.parse(extraStr);\n } catch {}\n }\n onLog({ level, message, extra });\n }\n\n return true;\n}\n\n/**\n * Extract all rows from a batch as Record<string, any>[].\n * Converts BigInt to Number when safe.\n */\nexport function extractBatchRows(batch: RecordBatch): Record<string, any>[] {\n const rows: Record<string, any>[] = [];\n for (let r = 0; r < batch.numRows; r++) {\n const row: Record<string, any> = {};\n for (let i = 0; i < batch.schema.fields.length; i++) {\n const field = batch.schema.fields[i];\n let value = batch.getChildAt(i)?.get(r);\n if (typeof value === \"bigint\") {\n if (value >= BigInt(Number.MIN_SAFE_INTEGER) && value <= BigInt(Number.MAX_SAFE_INTEGER)) {\n value = Number(value);\n }\n }\n row[field.name] = value;\n }\n rows.push(row);\n }\n return rows;\n}\n\n/**\n * Read sequential IPC streams from a response body.\n * Returns an IpcStreamReader for reading header + data streams.\n */\nexport async function readSequentialStreams(body: Uint8Array): Promise<IpcStreamReader> {\n const stream = new ReadableStream<Uint8Array>({\n start(controller) {\n controller.enqueue(body);\n controller.close();\n },\n });\n return IpcStreamReader.create(stream);\n}\n",
10
11
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\n/** Error thrown when the server encounters an RPC protocol error. */\nexport class RpcError extends Error {\n constructor(\n public readonly errorType: string,\n public readonly errorMessage: string,\n public readonly remoteTraceback: string,\n ) {\n super(`${errorType}: ${errorMessage}`);\n this.name = \"RpcError\";\n }\n}\n\n/** Error thrown when the client sends an unsupported request version. */\nexport class VersionError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"VersionError\";\n }\n}\n",
@@ -15,7 +16,7 @@
15
16
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport { randomBytes } from \"node:crypto\";\nimport { Schema } from \"@query-farm/apache-arrow\";\nimport { DESCRIBE_METHOD_NAME } from \"../constants.js\";\nimport type { Protocol } from \"../protocol.js\";\nimport { MethodType } from \"../types.js\";\nimport { zstdCompress, zstdDecompress } from \"../util/zstd.js\";\nimport { buildErrorBatch } from \"../wire/response.js\";\nimport { ARROW_CONTENT_TYPE, arrowResponse, HttpRpcError, serializeIpcStream } from \"./common.js\";\nimport {\n httpDispatchDescribe,\n httpDispatchStreamExchange,\n httpDispatchStreamInit,\n httpDispatchUnary,\n} from \"./dispatch.js\";\nimport { type HttpHandlerOptions, jsonStateSerializer } from \"./types.js\";\n\nconst EMPTY_SCHEMA = new Schema([]);\n\n/**\n * Create a fetch-compatible HTTP handler for a vgi-rpc Protocol.\n *\n * Compatible with Bun.serve(), Deno.serve(), Cloudflare Workers, and any\n * Web API runtime that uses the standard Request/Response types.\n *\n * @example\n * ```typescript\n * const handler = createHttpHandler(protocol);\n * Bun.serve({ port: 8080, fetch: handler });\n * ```\n */\nexport function createHttpHandler(\n protocol: Protocol,\n options?: HttpHandlerOptions,\n): (request: Request) => Response | Promise<Response> {\n const prefix = (options?.prefix ?? \"/vgi\").replace(/\\/+$/, \"\");\n const signingKey = options?.signingKey ?? randomBytes(32);\n const tokenTtl = options?.tokenTtl ?? 3600;\n const corsOrigins = options?.corsOrigins;\n const maxRequestBytes = options?.maxRequestBytes;\n const maxStreamResponseBytes = options?.maxStreamResponseBytes;\n const serverId = options?.serverId ?? crypto.randomUUID().replace(/-/g, \"\").slice(0, 12);\n\n const methods = protocol.getMethods();\n\n const compressionLevel = options?.compressionLevel;\n const stateSerializer = options?.stateSerializer ?? jsonStateSerializer;\n\n const ctx = {\n signingKey,\n tokenTtl,\n serverId,\n maxStreamResponseBytes,\n stateSerializer,\n };\n\n function addCorsHeaders(headers: Headers): void {\n if (corsOrigins) {\n headers.set(\"Access-Control-Allow-Origin\", corsOrigins);\n headers.set(\"Access-Control-Allow-Methods\", \"POST, OPTIONS\");\n headers.set(\"Access-Control-Allow-Headers\", \"Content-Type\");\n }\n }\n\n async function compressIfAccepted(response: Response, clientAcceptsZstd: boolean): Promise<Response> {\n if (compressionLevel == null || !clientAcceptsZstd) return response;\n const responseBody = new Uint8Array(await response.arrayBuffer());\n const compressed = zstdCompress(responseBody, compressionLevel);\n const headers = new Headers(response.headers);\n headers.set(\"Content-Encoding\", \"zstd\");\n return new Response(compressed as unknown as BodyInit, {\n status: response.status,\n headers,\n });\n }\n\n function makeErrorResponse(error: Error, statusCode: number, schema: Schema = EMPTY_SCHEMA): Response {\n const errBatch = buildErrorBatch(schema, error, serverId, null);\n const body = serializeIpcStream(schema, [errBatch]);\n const resp = arrowResponse(body, statusCode);\n addCorsHeaders(resp.headers);\n return resp;\n }\n\n return async function handler(request: Request): Promise<Response> {\n const url = new URL(request.url);\n const path = url.pathname;\n\n // CORS preflight\n if (request.method === \"OPTIONS\") {\n if (path === `${prefix}/__capabilities__`) {\n const headers = new Headers();\n addCorsHeaders(headers);\n if (maxRequestBytes != null) {\n headers.set(\"VGI-Max-Request-Bytes\", String(maxRequestBytes));\n }\n return new Response(null, { status: 204, headers });\n }\n\n if (corsOrigins) {\n const headers = new Headers();\n addCorsHeaders(headers);\n return new Response(null, { status: 204, headers });\n }\n\n return new Response(null, { status: 405 });\n }\n\n if (request.method !== \"POST\") {\n return new Response(\"Method Not Allowed\", { status: 405 });\n }\n\n // Validate Content-Type\n const contentType = request.headers.get(\"Content-Type\");\n if (!contentType || !contentType.includes(ARROW_CONTENT_TYPE)) {\n return new Response(`Unsupported Media Type: expected ${ARROW_CONTENT_TYPE}`, { status: 415 });\n }\n\n // Check request body size\n if (maxRequestBytes != null) {\n const contentLength = request.headers.get(\"Content-Length\");\n if (contentLength && parseInt(contentLength, 10) > maxRequestBytes) {\n return new Response(\"Request body too large\", { status: 413 });\n }\n }\n\n const clientAcceptsZstd = (request.headers.get(\"Accept-Encoding\") ?? \"\").includes(\"zstd\");\n\n // Read body, decompressing if needed\n let body = new Uint8Array(await request.arrayBuffer());\n const contentEncoding = request.headers.get(\"Content-Encoding\");\n if (contentEncoding === \"zstd\") {\n body = zstdDecompress(body);\n }\n\n // Route: {prefix}/__describe__\n if (path === `${prefix}/${DESCRIBE_METHOD_NAME}`) {\n try {\n const response = httpDispatchDescribe(protocol.name, methods, serverId);\n addCorsHeaders(response.headers);\n return compressIfAccepted(response, clientAcceptsZstd);\n } catch (error: any) {\n return compressIfAccepted(makeErrorResponse(error, 500), clientAcceptsZstd);\n }\n }\n\n // Parse method name and sub-path from URL\n if (!path.startsWith(`${prefix}/`)) {\n return new Response(\"Not Found\", { status: 404 });\n }\n\n const subPath = path.slice(prefix.length + 1);\n let methodName: string;\n let action: \"call\" | \"init\" | \"exchange\";\n\n if (subPath.endsWith(\"/init\")) {\n methodName = subPath.slice(0, -5);\n action = \"init\";\n } else if (subPath.endsWith(\"/exchange\")) {\n methodName = subPath.slice(0, -9);\n action = \"exchange\";\n } else {\n methodName = subPath;\n action = \"call\";\n }\n\n // Look up method\n const method = methods.get(methodName);\n if (!method) {\n const available = [...methods.keys()].sort();\n const err = new Error(`Unknown method: '${methodName}'. Available methods: [${available.join(\", \")}]`);\n return compressIfAccepted(makeErrorResponse(err, 404), clientAcceptsZstd);\n }\n\n try {\n let response: Response;\n\n if (action === \"call\") {\n if (method.type !== MethodType.UNARY) {\n throw new HttpRpcError(`Method '${methodName}' is a stream method. Use /init and /exchange endpoints.`, 400);\n }\n response = await httpDispatchUnary(method, body, ctx);\n } else if (action === \"init\") {\n if (method.type !== MethodType.STREAM) {\n throw new HttpRpcError(\n `Method '${methodName}' is a unary method. Use POST ${prefix}/${methodName} instead.`,\n 400,\n );\n }\n response = await httpDispatchStreamInit(method, body, ctx);\n } else {\n if (method.type !== MethodType.STREAM) {\n throw new HttpRpcError(\n `Method '${methodName}' is a unary method. Use POST ${prefix}/${methodName} instead.`,\n 400,\n );\n }\n response = await httpDispatchStreamExchange(method, body, ctx);\n }\n\n addCorsHeaders(response.headers);\n return compressIfAccepted(response, clientAcceptsZstd);\n } catch (error: any) {\n if (error instanceof HttpRpcError) {\n return compressIfAccepted(makeErrorResponse(error, error.statusCode), clientAcceptsZstd);\n }\n return compressIfAccepted(makeErrorResponse(error, 500), clientAcceptsZstd);\n }\n };\n}\n",
16
17
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RecordBatch, recordBatchFromArrays, type Schema } from \"@query-farm/apache-arrow\";\nimport { buildLogBatch, coerceInt64 } from \"./wire/response.js\";\n\nexport enum MethodType {\n UNARY = \"unary\",\n STREAM = \"stream\",\n}\n\n/** Logging interface available to handlers. */\nexport interface LogContext {\n clientLog(level: string, message: string, extra?: Record<string, string>): void;\n}\n\n/** Handler for unary (request-response) RPC methods. */\nexport type UnaryHandler = (\n params: Record<string, any>,\n ctx: LogContext,\n) => Promise<Record<string, any>> | Record<string, any>;\n\n/** Initialization function for producer streams. Returns the initial state object. */\nexport type ProducerInit<S = any> = (params: Record<string, any>) => Promise<S> | S;\n/** Called repeatedly to produce output batches. Call `out.finish()` to end the stream. */\nexport type ProducerFn<S = any> = (state: S, out: OutputCollector) => Promise<void> | void;\n\n/** Initialization function for exchange streams. Returns the initial state object. */\nexport type ExchangeInit<S = any> = (params: Record<string, any>) => Promise<S> | S;\n/** Called once per input batch. Must emit exactly one output batch per call. */\nexport type ExchangeFn<S = any> = (state: S, input: RecordBatch, out: OutputCollector) => Promise<void> | void;\n\n/** Produces a header batch sent before the first output batch in a stream. */\nexport type HeaderInit = (params: Record<string, any>, state: any, ctx: LogContext) => Record<string, any>;\n\nexport interface MethodDefinition {\n name: string;\n type: MethodType;\n paramsSchema: Schema;\n resultSchema: Schema;\n outputSchema?: Schema;\n inputSchema?: Schema;\n handler?: UnaryHandler;\n producerInit?: ProducerInit;\n producerFn?: ProducerFn;\n exchangeInit?: ExchangeInit;\n exchangeFn?: ExchangeFn;\n headerSchema?: Schema;\n headerInit?: HeaderInit;\n doc?: string;\n defaults?: Record<string, any>;\n paramTypes?: Record<string, string>;\n}\n\nexport interface EmittedBatch {\n batch: RecordBatch;\n metadata?: Map<string, string>;\n}\n\n/**\n * Accumulates output batches during a produce/exchange call.\n * Enforces that exactly one data batch is emitted per call (plus any number of log batches).\n */\nexport class OutputCollector implements LogContext {\n private _batches: EmittedBatch[] = [];\n private _dataBatchIdx: number | null = null;\n private _finished = false;\n private _producerMode: boolean;\n private _outputSchema: Schema;\n private _serverId: string;\n private _requestId: string | null;\n\n constructor(outputSchema: Schema, producerMode = true, serverId = \"\", requestId: string | null = null) {\n this._outputSchema = outputSchema;\n this._producerMode = producerMode;\n this._serverId = serverId;\n this._requestId = requestId;\n }\n\n get outputSchema(): Schema {\n return this._outputSchema;\n }\n\n get finished(): boolean {\n return this._finished;\n }\n\n get batches(): EmittedBatch[] {\n return this._batches;\n }\n\n /** Emit a pre-built RecordBatch as the data batch for this call. */\n emit(batch: RecordBatch, metadata?: Map<string, string>): void;\n /** Emit a data batch from column arrays keyed by field name. Int64 Number values are coerced to BigInt. */\n emit(columns: Record<string, any[]>): void;\n emit(batchOrColumns: RecordBatch | Record<string, any[]>, metadata?: Map<string, string>): void {\n let batch: RecordBatch;\n if (batchOrColumns instanceof RecordBatch) {\n batch = batchOrColumns;\n } else {\n const coerced = coerceInt64(this._outputSchema, batchOrColumns);\n batch = recordBatchFromArrays(coerced, this._outputSchema);\n }\n if (this._dataBatchIdx !== null) {\n throw new Error(\"Only one data batch may be emitted per call\");\n }\n this._dataBatchIdx = this._batches.length;\n this._batches.push({ batch, metadata });\n }\n\n /** Single-row convenience. Wraps each value in `[value]` then calls `emit()`. */\n emitRow(values: Record<string, any>): void {\n const columns: Record<string, any[]> = {};\n for (const [key, value] of Object.entries(values)) {\n columns[key] = [value];\n }\n this.emit(columns);\n }\n\n /** Signal stream completion for producer streams. Throws if called on exchange streams. */\n finish(): void {\n if (!this._producerMode) {\n throw new Error(\n \"finish() is not allowed on exchange streams; \" + \"exchange streams must emit exactly one data batch per call\",\n );\n }\n this._finished = true;\n }\n\n /** Emit a zero-row client-directed log batch. */\n clientLog(level: string, message: string, extra?: Record<string, string>): void {\n const batch = buildLogBatch(this._outputSchema, level, message, extra, this._serverId, this._requestId);\n this._batches.push({ batch });\n }\n}\n",
17
18
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n Data,\n DataType,\n type Field,\n makeData,\n RecordBatch,\n type Schema,\n Struct,\n vectorFromArray,\n} from \"@query-farm/apache-arrow\";\nimport { LOG_EXTRA_KEY, LOG_LEVEL_KEY, LOG_MESSAGE_KEY, REQUEST_ID_KEY, SERVER_ID_KEY } from \"../constants.js\";\n\n/**\n * Coerce values for Int64 schema fields from Number to BigInt.\n * Handles both single values and arrays. Returns a new record with coerced values.\n */\nexport function coerceInt64(schema: Schema, values: Record<string, any>): Record<string, any> {\n const result: Record<string, any> = { ...values };\n for (const field of schema.fields) {\n const val = result[field.name];\n if (val === undefined) continue;\n if (!DataType.isInt(field.type) || (field.type as any).bitWidth !== 64) continue;\n\n if (Array.isArray(val)) {\n result[field.name] = val.map((v: any) => (typeof v === \"number\" ? BigInt(v) : v));\n } else if (typeof val === \"number\") {\n result[field.name] = BigInt(val);\n }\n }\n return result;\n}\n\n/**\n * Build a 1-row result batch with optional metadata.\n * For unary methods, `values` maps field names to single values.\n */\nexport function buildResultBatch(\n schema: Schema,\n values: Record<string, any>,\n serverId: string,\n requestId: string | null,\n): RecordBatch {\n const metadata = new Map<string, string>();\n metadata.set(SERVER_ID_KEY, serverId);\n if (requestId !== null) {\n metadata.set(REQUEST_ID_KEY, requestId);\n }\n\n if (schema.fields.length === 0) {\n return buildEmptyBatch(schema, metadata);\n }\n\n // Validate required fields\n for (const field of schema.fields) {\n if (values[field.name] === undefined && !field.nullable) {\n const got = Object.keys(values);\n throw new TypeError(`Handler result missing required field '${field.name}'. Got keys: [${got.join(\", \")}]`);\n }\n }\n\n const coerced = coerceInt64(schema, values);\n\n const children = schema.fields.map((f: Field) => {\n const val = coerced[f.name];\n // Raw Data passthrough for Map_ types (whose .get() is broken in arrow-js)\n if (val instanceof Data) {\n return val;\n }\n const arr = vectorFromArray([val], f.type);\n return arr.data[0];\n });\n\n const structType = new Struct(schema.fields);\n const data = makeData({\n type: structType,\n length: 1,\n children,\n nullCount: 0,\n });\n\n return new RecordBatch(schema, data, metadata);\n}\n\n/**\n * Build a 0-row error batch with EXCEPTION metadata matching Python's Message.from_exception().\n */\nexport function buildErrorBatch(schema: Schema, error: Error, serverId: string, requestId: string | null): RecordBatch {\n const metadata = new Map<string, string>();\n metadata.set(LOG_LEVEL_KEY, \"EXCEPTION\");\n metadata.set(LOG_MESSAGE_KEY, `${error.constructor.name}: ${error.message}`);\n\n const extra: Record<string, any> = {\n exception_type: error.constructor.name,\n exception_message: error.message,\n traceback: error.stack ?? \"\",\n };\n metadata.set(LOG_EXTRA_KEY, JSON.stringify(extra));\n metadata.set(SERVER_ID_KEY, serverId);\n if (requestId !== null) {\n metadata.set(REQUEST_ID_KEY, requestId);\n }\n\n return buildEmptyBatch(schema, metadata);\n}\n\n/**\n * Build a 0-row log batch.\n */\nexport function buildLogBatch(\n schema: Schema,\n level: string,\n message: string,\n extra?: Record<string, any>,\n serverId?: string,\n requestId?: string | null,\n): RecordBatch {\n const metadata = new Map<string, string>();\n metadata.set(LOG_LEVEL_KEY, level);\n metadata.set(LOG_MESSAGE_KEY, message);\n if (extra) {\n metadata.set(LOG_EXTRA_KEY, JSON.stringify(extra));\n }\n if (serverId != null) {\n metadata.set(SERVER_ID_KEY, serverId);\n }\n if (requestId != null) {\n metadata.set(REQUEST_ID_KEY, requestId);\n }\n\n return buildEmptyBatch(schema, metadata);\n}\n\n/**\n * Build a 0-row batch from a schema with metadata.\n * Used for error/log batches.\n */\nexport function buildEmptyBatch(schema: Schema, metadata?: Map<string, string>): RecordBatch {\n const children = schema.fields.map((f: Field) => {\n return makeData({ type: f.type, length: 0, nullCount: 0 });\n });\n\n if (schema.fields.length === 0) {\n const structType = new Struct(schema.fields);\n const data = makeData({\n type: structType,\n length: 0,\n children: [],\n nullCount: 0,\n });\n return new RecordBatch(schema, data, metadata);\n }\n\n const structType = new Struct(schema.fields);\n const data = makeData({\n type: structType,\n length: 0,\n children,\n nullCount: 0,\n });\n\n return new RecordBatch(schema, data, metadata);\n}\n",
18
- "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RecordBatch, RecordBatchReader, Schema } from \"@query-farm/apache-arrow\";\nimport { STATE_KEY } from \"../constants.js\";\nimport { buildDescribeBatch, DESCRIBE_SCHEMA } from \"../dispatch/describe.js\";\nimport type { MethodDefinition } from \"../types.js\";\nimport { OutputCollector } from \"../types.js\";\nimport { serializeSchema } from \"../util/schema.js\";\nimport { parseRequest } from \"../wire/request.js\";\nimport { buildEmptyBatch, buildErrorBatch, buildResultBatch } from \"../wire/response.js\";\nimport { arrowResponse, HttpRpcError, readRequestFromBody, serializeIpcStream } from \"./common.js\";\nimport { packStateToken, unpackStateToken } from \"./token.js\";\nimport type { StateSerializer } from \"./types.js\";\n\nasync function deserializeSchema(bytes: Uint8Array): Promise<Schema> {\n const reader = await RecordBatchReader.from(bytes);\n await reader.open();\n return reader.schema!;\n}\n\nconst EMPTY_SCHEMA = new Schema([]);\n\nexport interface DispatchContext {\n signingKey: Uint8Array;\n tokenTtl: number;\n serverId: string;\n maxStreamResponseBytes?: number;\n stateSerializer: StateSerializer;\n}\n\n/** Dispatch a __describe__ request. */\nexport function httpDispatchDescribe(\n protocolName: string,\n methods: Map<string, MethodDefinition>,\n serverId: string,\n): Response {\n const { batch } = buildDescribeBatch(protocolName, methods, serverId);\n const body = serializeIpcStream(DESCRIBE_SCHEMA, [batch]);\n return arrowResponse(body);\n}\n\n/** Dispatch a unary HTTP request. */\nexport async function httpDispatchUnary(\n method: MethodDefinition,\n body: Uint8Array,\n ctx: DispatchContext,\n): Promise<Response> {\n const schema = method.resultSchema;\n const { schema: reqSchema, batch: reqBatch } = await readRequestFromBody(body);\n const parsed = parseRequest(reqSchema, reqBatch);\n\n if (parsed.methodName !== method.name) {\n throw new HttpRpcError(`Method name in request '${parsed.methodName}' does not match URL '${method.name}'`, 400);\n }\n\n const out = new OutputCollector(schema, true, ctx.serverId, parsed.requestId);\n\n try {\n const result = await method.handler!(parsed.params, out);\n const resultBatch = buildResultBatch(schema, result, ctx.serverId, parsed.requestId);\n const batches = [...out.batches.map((b) => b.batch), resultBatch];\n return arrowResponse(serializeIpcStream(schema, batches));\n } catch (error: any) {\n const errBatch = buildErrorBatch(schema, error, ctx.serverId, parsed.requestId);\n return arrowResponse(serializeIpcStream(schema, [errBatch]), 500);\n }\n}\n\n/** Dispatch a stream init HTTP request (producer or exchange). */\nexport async function httpDispatchStreamInit(\n method: MethodDefinition,\n body: Uint8Array,\n ctx: DispatchContext,\n): Promise<Response> {\n const isProducer = !!method.producerFn;\n const outputSchema = method.outputSchema!;\n const inputSchema = method.inputSchema ?? EMPTY_SCHEMA;\n\n const { schema: reqSchema, batch: reqBatch } = await readRequestFromBody(body);\n const parsed = parseRequest(reqSchema, reqBatch);\n\n if (parsed.methodName !== method.name) {\n throw new HttpRpcError(`Method name in request '${parsed.methodName}' does not match URL '${method.name}'`, 400);\n }\n\n // Init state\n let state: any;\n try {\n if (isProducer) {\n state = await method.producerInit!(parsed.params);\n } else {\n state = await method.exchangeInit!(parsed.params);\n }\n } catch (error: any) {\n const errSchema = method.headerSchema ?? EMPTY_SCHEMA;\n const errBatch = buildErrorBatch(errSchema, error, ctx.serverId, parsed.requestId);\n return arrowResponse(serializeIpcStream(errSchema, [errBatch]), 500);\n }\n\n // Support dynamic output schemas (same as pipe transport)\n const resolvedOutputSchema = state?.__outputSchema ?? outputSchema;\n const effectiveProducer = state?.__isProducer ?? isProducer;\n\n // Build header IPC stream if method has a header schema\n let headerBytes: Uint8Array | null = null;\n if (method.headerSchema && method.headerInit) {\n try {\n const headerOut = new OutputCollector(method.headerSchema, true, ctx.serverId, parsed.requestId);\n const headerValues = method.headerInit(parsed.params, state, headerOut);\n const headerBatch = buildResultBatch(method.headerSchema, headerValues, ctx.serverId, parsed.requestId);\n const headerBatches = [...headerOut.batches.map((b) => b.batch), headerBatch];\n headerBytes = serializeIpcStream(method.headerSchema, headerBatches);\n } catch (error: any) {\n const errBatch = buildErrorBatch(method.headerSchema, error, ctx.serverId, parsed.requestId);\n return arrowResponse(serializeIpcStream(method.headerSchema, [errBatch]), 500);\n }\n }\n\n if (effectiveProducer) {\n // Producer method — produce data inline in the init response.\n // For exchange-registered methods acting as producers (__isProducer),\n // produceStreamResponse falls back to exchangeFn with tick batches.\n return produceStreamResponse(method, state, resolvedOutputSchema, inputSchema, ctx, parsed.requestId, headerBytes);\n } else {\n // Exchange: serialize state into signed token, return zero-row batch with token\n const stateBytes = ctx.stateSerializer.serialize(state);\n const schemaBytes = serializeSchema(resolvedOutputSchema);\n const inputSchemaBytes = serializeSchema(inputSchema);\n const token = packStateToken(stateBytes, schemaBytes, inputSchemaBytes, ctx.signingKey);\n\n const tokenMeta = new Map<string, string>();\n tokenMeta.set(STATE_KEY, token);\n const tokenBatch = buildEmptyBatch(resolvedOutputSchema, tokenMeta);\n const tokenStreamBytes = serializeIpcStream(resolvedOutputSchema, [tokenBatch]);\n\n let responseBody: Uint8Array;\n if (headerBytes) {\n responseBody = concatBytes(headerBytes, tokenStreamBytes);\n } else {\n responseBody = tokenStreamBytes;\n }\n\n return arrowResponse(responseBody);\n }\n}\n\n/** Dispatch a stream exchange HTTP request (producer continuation or exchange round). */\nexport async function httpDispatchStreamExchange(\n method: MethodDefinition,\n body: Uint8Array,\n ctx: DispatchContext,\n): Promise<Response> {\n const isProducer = !!method.producerFn;\n\n const { batch: reqBatch } = await readRequestFromBody(body);\n\n // Get state token from batch metadata\n const tokenBase64 = reqBatch.metadata?.get(STATE_KEY);\n if (!tokenBase64) {\n throw new HttpRpcError(\"Missing state token in exchange request\", 400);\n }\n\n let unpacked: import(\"./token.js\").UnpackedToken;\n try {\n unpacked = unpackStateToken(tokenBase64, ctx.signingKey, ctx.tokenTtl);\n } catch (error: any) {\n throw new HttpRpcError(`Invalid state token: ${error.message}`, 400);\n }\n\n let state: any;\n try {\n state = ctx.stateSerializer.deserialize(unpacked.stateBytes);\n } catch (error: any) {\n console.error(`[httpDispatchStreamExchange] state deserialize error:`, error.message);\n throw new HttpRpcError(`State deserialization failed: ${error.message}`, 500);\n }\n\n // Recover schemas from the token (the state itself may not contain\n // Schema objects after JSON round-trip — always prefer the token).\n let outputSchema: Schema;\n if (unpacked.schemaBytes.length > 0) {\n outputSchema = await deserializeSchema(unpacked.schemaBytes);\n } else {\n outputSchema = state?.__outputSchema ?? method.outputSchema!;\n }\n let inputSchema: Schema;\n if (unpacked.inputSchemaBytes.length > 0) {\n inputSchema = await deserializeSchema(unpacked.inputSchemaBytes);\n } else {\n inputSchema = method.inputSchema ?? EMPTY_SCHEMA;\n }\n const effectiveProducer = state?.__isProducer ?? isProducer;\n if (process.env.VGI_DISPATCH_DEBUG)\n console.error(\n `[httpDispatchStreamExchange] method=${method.name} effectiveProducer=${effectiveProducer} stateKeys=${Object.keys(state || {})}`,\n );\n\n if (effectiveProducer) {\n // Producer continuation — produce more data inline.\n // For exchange-registered methods, falls back to exchangeFn with tick batches.\n return produceStreamResponse(method, state, outputSchema, inputSchema, ctx, null, null);\n } else {\n // Exchange path — also handles exchange-registered methods acting as\n // producers (__isProducer=true). Use producer mode on the OutputCollector\n // when effectiveProducer so finish() is allowed.\n const out = new OutputCollector(outputSchema, effectiveProducer, ctx.serverId, null);\n\n try {\n if (method.exchangeFn) {\n await method.exchangeFn(state, reqBatch, out);\n } else {\n await method.producerFn!(state, out);\n }\n } catch (error: any) {\n if (process.env.VGI_DISPATCH_DEBUG)\n console.error(\n `[httpDispatchStreamExchange] exchange handler error:`,\n error.message,\n error.stack?.split(\"\\n\").slice(0, 5).join(\"\\n\"),\n );\n const errBatch = buildErrorBatch(outputSchema, error, ctx.serverId, null);\n return arrowResponse(serializeIpcStream(outputSchema, [errBatch]), 500);\n }\n\n // Collect emitted batches\n const batches: RecordBatch[] = [];\n\n if (out.finished) {\n // Stream is done — return data WITHOUT state token.\n // The absence of a token tells the client there's no more data.\n for (const emitted of out.batches) {\n batches.push(emitted.batch);\n }\n } else {\n // More data may follow — repack state into token for next exchange.\n const stateBytes = ctx.stateSerializer.serialize(state);\n const schemaBytes = serializeSchema(outputSchema);\n const inputSchemaBytes = serializeSchema(inputSchema);\n const token = packStateToken(stateBytes, schemaBytes, inputSchemaBytes, ctx.signingKey);\n\n for (const emitted of out.batches) {\n const batch = emitted.batch;\n if (batch.numRows > 0) {\n const mergedMeta = new Map<string, string>(batch.metadata ?? []);\n mergedMeta.set(STATE_KEY, token);\n batches.push(new RecordBatch(batch.schema, batch.data, mergedMeta));\n } else {\n batches.push(batch);\n }\n }\n\n // Safety net: if no batch carries a state token (e.g. all rows were\n // filtered out by pushdown filters), emit an empty batch with the\n // token so the client knows to continue exchanging.\n if (!batches.some((b) => b.metadata?.get(STATE_KEY))) {\n const tokenMeta = new Map<string, string>();\n tokenMeta.set(STATE_KEY, token);\n batches.push(buildEmptyBatch(outputSchema, tokenMeta));\n }\n }\n\n return arrowResponse(serializeIpcStream(outputSchema, batches));\n }\n}\n\n/** Run the producer loop and build the response. */\nasync function produceStreamResponse(\n method: MethodDefinition,\n state: any,\n outputSchema: Schema,\n inputSchema: Schema,\n ctx: DispatchContext,\n requestId: string | null,\n headerBytes: Uint8Array | null,\n): Promise<Response> {\n const allBatches: RecordBatch[] = [];\n const maxBytes = ctx.maxStreamResponseBytes;\n let estimatedBytes = 0;\n\n while (true) {\n const out = new OutputCollector(outputSchema, true, ctx.serverId, requestId);\n\n try {\n if (method.producerFn) {\n await method.producerFn(state, out);\n } else {\n // Exchange-registered method acting as producer (e.g. VGI's \"init\"\n // method which is registered as exchange but may produce based on\n // the __isProducer state flag). Call exchangeFn with an empty tick\n // batch, matching how the subprocess transport dispatches these.\n const tickBatch = buildEmptyBatch(inputSchema);\n await method.exchangeFn!(state, tickBatch, out);\n }\n } catch (error: any) {\n if (process.env.VGI_DISPATCH_DEBUG)\n console.error(`[produceStreamResponse] error:`, error.message, error.stack?.split(\"\\n\").slice(0, 3).join(\"\\n\"));\n allBatches.push(buildErrorBatch(outputSchema, error, ctx.serverId, requestId));\n break;\n }\n\n for (const emitted of out.batches) {\n allBatches.push(emitted.batch);\n if (maxBytes != null) {\n estimatedBytes += emitted.batch.data.byteLength;\n }\n }\n\n if (out.finished) {\n break;\n }\n\n // Check byte budget — if exceeded, emit continuation token\n if (maxBytes != null && estimatedBytes >= maxBytes) {\n const stateBytes = ctx.stateSerializer.serialize(state);\n const schemaBytes = serializeSchema(outputSchema);\n const inputSchemaBytes = serializeSchema(inputSchema);\n const token = packStateToken(stateBytes, schemaBytes, inputSchemaBytes, ctx.signingKey);\n const tokenMeta = new Map<string, string>();\n tokenMeta.set(STATE_KEY, token);\n allBatches.push(buildEmptyBatch(outputSchema, tokenMeta));\n break;\n }\n }\n\n const dataBytes = serializeIpcStream(outputSchema, allBatches);\n let responseBody: Uint8Array;\n if (headerBytes) {\n responseBody = concatBytes(headerBytes, dataBytes);\n } else {\n responseBody = dataBytes;\n }\n return arrowResponse(responseBody);\n}\n\nfunction concatBytes(...arrays: Uint8Array[]): Uint8Array {\n const totalLen = arrays.reduce((sum, a) => sum + a.length, 0);\n const result = new Uint8Array(totalLen);\n let offset = 0;\n for (const arr of arrays) {\n result.set(arr, offset);\n offset += arr.length;\n }\n return result;\n}\n",
19
+ "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RecordBatch, RecordBatchReader, Schema } from \"@query-farm/apache-arrow\";\nimport { STATE_KEY } from \"../constants.js\";\nimport { buildDescribeBatch, DESCRIBE_SCHEMA } from \"../dispatch/describe.js\";\nimport type { MethodDefinition } from \"../types.js\";\nimport { OutputCollector } from \"../types.js\";\nimport { conformBatchToSchema } from \"../util/conform.js\";\nimport { serializeSchema } from \"../util/schema.js\";\nimport { parseRequest } from \"../wire/request.js\";\nimport { buildEmptyBatch, buildErrorBatch, buildResultBatch } from \"../wire/response.js\";\nimport { arrowResponse, HttpRpcError, readRequestFromBody, serializeIpcStream } from \"./common.js\";\nimport { packStateToken, unpackStateToken } from \"./token.js\";\nimport type { StateSerializer } from \"./types.js\";\n\nasync function deserializeSchema(bytes: Uint8Array): Promise<Schema> {\n const reader = await RecordBatchReader.from(bytes);\n await reader.open();\n return reader.schema!;\n}\n\nconst EMPTY_SCHEMA = new Schema([]);\n\nexport interface DispatchContext {\n signingKey: Uint8Array;\n tokenTtl: number;\n serverId: string;\n maxStreamResponseBytes?: number;\n stateSerializer: StateSerializer;\n}\n\n/** Dispatch a __describe__ request. */\nexport function httpDispatchDescribe(\n protocolName: string,\n methods: Map<string, MethodDefinition>,\n serverId: string,\n): Response {\n const { batch } = buildDescribeBatch(protocolName, methods, serverId);\n const body = serializeIpcStream(DESCRIBE_SCHEMA, [batch]);\n return arrowResponse(body);\n}\n\n/** Dispatch a unary HTTP request. */\nexport async function httpDispatchUnary(\n method: MethodDefinition,\n body: Uint8Array,\n ctx: DispatchContext,\n): Promise<Response> {\n const schema = method.resultSchema;\n const { schema: reqSchema, batch: reqBatch } = await readRequestFromBody(body);\n const parsed = parseRequest(reqSchema, reqBatch);\n\n if (parsed.methodName !== method.name) {\n throw new HttpRpcError(`Method name in request '${parsed.methodName}' does not match URL '${method.name}'`, 400);\n }\n\n const out = new OutputCollector(schema, true, ctx.serverId, parsed.requestId);\n\n try {\n const result = await method.handler!(parsed.params, out);\n const resultBatch = buildResultBatch(schema, result, ctx.serverId, parsed.requestId);\n const batches = [...out.batches.map((b) => b.batch), resultBatch];\n return arrowResponse(serializeIpcStream(schema, batches));\n } catch (error: any) {\n const errBatch = buildErrorBatch(schema, error, ctx.serverId, parsed.requestId);\n return arrowResponse(serializeIpcStream(schema, [errBatch]), 500);\n }\n}\n\n/** Dispatch a stream init HTTP request (producer or exchange). */\nexport async function httpDispatchStreamInit(\n method: MethodDefinition,\n body: Uint8Array,\n ctx: DispatchContext,\n): Promise<Response> {\n const isProducer = !!method.producerFn;\n const outputSchema = method.outputSchema!;\n const inputSchema = method.inputSchema ?? EMPTY_SCHEMA;\n\n const { schema: reqSchema, batch: reqBatch } = await readRequestFromBody(body);\n const parsed = parseRequest(reqSchema, reqBatch);\n\n if (parsed.methodName !== method.name) {\n throw new HttpRpcError(`Method name in request '${parsed.methodName}' does not match URL '${method.name}'`, 400);\n }\n\n // Init state\n let state: any;\n try {\n if (isProducer) {\n state = await method.producerInit!(parsed.params);\n } else {\n state = await method.exchangeInit!(parsed.params);\n }\n } catch (error: any) {\n const errSchema = method.headerSchema ?? EMPTY_SCHEMA;\n const errBatch = buildErrorBatch(errSchema, error, ctx.serverId, parsed.requestId);\n return arrowResponse(serializeIpcStream(errSchema, [errBatch]), 500);\n }\n\n // Support dynamic output schemas (same as pipe transport)\n const resolvedOutputSchema = state?.__outputSchema ?? outputSchema;\n const effectiveProducer = state?.__isProducer ?? isProducer;\n\n // Build header IPC stream if method has a header schema\n let headerBytes: Uint8Array | null = null;\n if (method.headerSchema && method.headerInit) {\n try {\n const headerOut = new OutputCollector(method.headerSchema, true, ctx.serverId, parsed.requestId);\n const headerValues = method.headerInit(parsed.params, state, headerOut);\n const headerBatch = buildResultBatch(method.headerSchema, headerValues, ctx.serverId, parsed.requestId);\n const headerBatches = [...headerOut.batches.map((b) => b.batch), headerBatch];\n headerBytes = serializeIpcStream(method.headerSchema, headerBatches);\n } catch (error: any) {\n const errBatch = buildErrorBatch(method.headerSchema, error, ctx.serverId, parsed.requestId);\n return arrowResponse(serializeIpcStream(method.headerSchema, [errBatch]), 500);\n }\n }\n\n if (effectiveProducer) {\n // Producer method — produce data inline in the init response.\n // For exchange-registered methods acting as producers (__isProducer),\n // produceStreamResponse falls back to exchangeFn with tick batches.\n return produceStreamResponse(method, state, resolvedOutputSchema, inputSchema, ctx, parsed.requestId, headerBytes);\n } else {\n // Exchange: serialize state into signed token, return zero-row batch with token\n const stateBytes = ctx.stateSerializer.serialize(state);\n const schemaBytes = serializeSchema(resolvedOutputSchema);\n const inputSchemaBytes = serializeSchema(inputSchema);\n const token = packStateToken(stateBytes, schemaBytes, inputSchemaBytes, ctx.signingKey);\n\n const tokenMeta = new Map<string, string>();\n tokenMeta.set(STATE_KEY, token);\n const tokenBatch = buildEmptyBatch(resolvedOutputSchema, tokenMeta);\n const tokenStreamBytes = serializeIpcStream(resolvedOutputSchema, [tokenBatch]);\n\n let responseBody: Uint8Array;\n if (headerBytes) {\n responseBody = concatBytes(headerBytes, tokenStreamBytes);\n } else {\n responseBody = tokenStreamBytes;\n }\n\n return arrowResponse(responseBody);\n }\n}\n\n/** Dispatch a stream exchange HTTP request (producer continuation or exchange round). */\nexport async function httpDispatchStreamExchange(\n method: MethodDefinition,\n body: Uint8Array,\n ctx: DispatchContext,\n): Promise<Response> {\n const isProducer = !!method.producerFn;\n\n const { batch: reqBatch } = await readRequestFromBody(body);\n\n // Get state token from batch metadata\n const tokenBase64 = reqBatch.metadata?.get(STATE_KEY);\n if (!tokenBase64) {\n throw new HttpRpcError(\"Missing state token in exchange request\", 400);\n }\n\n let unpacked: import(\"./token.js\").UnpackedToken;\n try {\n unpacked = unpackStateToken(tokenBase64, ctx.signingKey, ctx.tokenTtl);\n } catch (error: any) {\n throw new HttpRpcError(`Invalid state token: ${error.message}`, 400);\n }\n\n let state: any;\n try {\n state = ctx.stateSerializer.deserialize(unpacked.stateBytes);\n } catch (error: any) {\n console.error(`[httpDispatchStreamExchange] state deserialize error:`, error.message);\n throw new HttpRpcError(`State deserialization failed: ${error.message}`, 500);\n }\n\n // Recover schemas from the token (the state itself may not contain\n // Schema objects after JSON round-trip — always prefer the token).\n let outputSchema: Schema;\n if (unpacked.schemaBytes.length > 0) {\n outputSchema = await deserializeSchema(unpacked.schemaBytes);\n } else {\n outputSchema = state?.__outputSchema ?? method.outputSchema!;\n }\n let inputSchema: Schema;\n if (unpacked.inputSchemaBytes.length > 0) {\n inputSchema = await deserializeSchema(unpacked.inputSchemaBytes);\n } else {\n inputSchema = method.inputSchema ?? EMPTY_SCHEMA;\n }\n const effectiveProducer = state?.__isProducer ?? isProducer;\n if (process.env.VGI_DISPATCH_DEBUG)\n console.error(\n `[httpDispatchStreamExchange] method=${method.name} effectiveProducer=${effectiveProducer} stateKeys=${Object.keys(state || {})}`,\n );\n\n if (effectiveProducer) {\n // Producer continuation — produce more data inline.\n // For exchange-registered methods, falls back to exchangeFn with tick batches.\n return produceStreamResponse(method, state, outputSchema, inputSchema, ctx, null, null);\n } else {\n // Exchange path — also handles exchange-registered methods acting as\n // producers (__isProducer=true). Use producer mode on the OutputCollector\n // when effectiveProducer so finish() is allowed.\n const out = new OutputCollector(outputSchema, effectiveProducer, ctx.serverId, null);\n\n // Cast compatible input types (e.g., decimal→double, int32→int64)\n const conformedBatch = conformBatchToSchema(reqBatch, inputSchema);\n\n try {\n if (method.exchangeFn) {\n await method.exchangeFn(state, conformedBatch, out);\n } else {\n await method.producerFn!(state, out);\n }\n } catch (error: any) {\n if (process.env.VGI_DISPATCH_DEBUG)\n console.error(\n `[httpDispatchStreamExchange] exchange handler error:`,\n error.message,\n error.stack?.split(\"\\n\").slice(0, 5).join(\"\\n\"),\n );\n const errBatch = buildErrorBatch(outputSchema, error, ctx.serverId, null);\n return arrowResponse(serializeIpcStream(outputSchema, [errBatch]), 500);\n }\n\n // Collect emitted batches\n const batches: RecordBatch[] = [];\n\n if (out.finished) {\n // Stream is done — return data WITHOUT state token.\n // The absence of a token tells the client there's no more data.\n for (const emitted of out.batches) {\n batches.push(emitted.batch);\n }\n } else {\n // More data may follow — repack state into token for next exchange.\n const stateBytes = ctx.stateSerializer.serialize(state);\n const schemaBytes = serializeSchema(outputSchema);\n const inputSchemaBytes = serializeSchema(inputSchema);\n const token = packStateToken(stateBytes, schemaBytes, inputSchemaBytes, ctx.signingKey);\n\n for (const emitted of out.batches) {\n const batch = emitted.batch;\n if (batch.numRows > 0) {\n const mergedMeta = new Map<string, string>(batch.metadata ?? []);\n mergedMeta.set(STATE_KEY, token);\n batches.push(new RecordBatch(batch.schema, batch.data, mergedMeta));\n } else {\n batches.push(batch);\n }\n }\n\n // Safety net: if no batch carries a state token (e.g. all rows were\n // filtered out by pushdown filters), emit an empty batch with the\n // token so the client knows to continue exchanging.\n if (!batches.some((b) => b.metadata?.get(STATE_KEY))) {\n const tokenMeta = new Map<string, string>();\n tokenMeta.set(STATE_KEY, token);\n batches.push(buildEmptyBatch(outputSchema, tokenMeta));\n }\n }\n\n return arrowResponse(serializeIpcStream(outputSchema, batches));\n }\n}\n\n/** Run the producer loop and build the response. */\nasync function produceStreamResponse(\n method: MethodDefinition,\n state: any,\n outputSchema: Schema,\n inputSchema: Schema,\n ctx: DispatchContext,\n requestId: string | null,\n headerBytes: Uint8Array | null,\n): Promise<Response> {\n const allBatches: RecordBatch[] = [];\n const maxBytes = ctx.maxStreamResponseBytes;\n let estimatedBytes = 0;\n\n while (true) {\n const out = new OutputCollector(outputSchema, true, ctx.serverId, requestId);\n\n try {\n if (method.producerFn) {\n await method.producerFn(state, out);\n } else {\n // Exchange-registered method acting as producer (e.g. VGI's \"init\"\n // method which is registered as exchange but may produce based on\n // the __isProducer state flag). Call exchangeFn with an empty tick\n // batch, matching how the subprocess transport dispatches these.\n const tickBatch = buildEmptyBatch(inputSchema);\n await method.exchangeFn!(state, tickBatch, out);\n }\n } catch (error: any) {\n if (process.env.VGI_DISPATCH_DEBUG)\n console.error(`[produceStreamResponse] error:`, error.message, error.stack?.split(\"\\n\").slice(0, 3).join(\"\\n\"));\n allBatches.push(buildErrorBatch(outputSchema, error, ctx.serverId, requestId));\n break;\n }\n\n for (const emitted of out.batches) {\n allBatches.push(emitted.batch);\n if (maxBytes != null) {\n estimatedBytes += emitted.batch.data.byteLength;\n }\n }\n\n if (out.finished) {\n break;\n }\n\n // Check byte budget — if exceeded, emit continuation token\n if (maxBytes != null && estimatedBytes >= maxBytes) {\n const stateBytes = ctx.stateSerializer.serialize(state);\n const schemaBytes = serializeSchema(outputSchema);\n const inputSchemaBytes = serializeSchema(inputSchema);\n const token = packStateToken(stateBytes, schemaBytes, inputSchemaBytes, ctx.signingKey);\n const tokenMeta = new Map<string, string>();\n tokenMeta.set(STATE_KEY, token);\n allBatches.push(buildEmptyBatch(outputSchema, tokenMeta));\n break;\n }\n }\n\n const dataBytes = serializeIpcStream(outputSchema, allBatches);\n let responseBody: Uint8Array;\n if (headerBytes) {\n responseBody = concatBytes(headerBytes, dataBytes);\n } else {\n responseBody = dataBytes;\n }\n return arrowResponse(responseBody);\n}\n\nfunction concatBytes(...arrays: Uint8Array[]): Uint8Array {\n const totalLen = arrays.reduce((sum, a) => sum + a.length, 0);\n const result = new Uint8Array(totalLen);\n let offset = 0;\n for (const arr of arrays) {\n result.set(arr, offset);\n offset += arr.length;\n }\n return result;\n}\n",
19
20
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n Binary,\n Bool,\n Field,\n makeData,\n RecordBatch,\n Schema,\n Struct,\n Utf8,\n vectorFromArray,\n} from \"@query-farm/apache-arrow\";\nimport {\n DESCRIBE_VERSION,\n DESCRIBE_VERSION_KEY,\n PROTOCOL_NAME_KEY,\n REQUEST_VERSION,\n REQUEST_VERSION_KEY,\n SERVER_ID_KEY,\n} from \"../constants.js\";\nimport type { MethodDefinition } from \"../types.js\";\nimport { serializeSchema } from \"../util/schema.js\";\n\n/**\n * The schema for the __describe__ response, matching Python's _DESCRIBE_SCHEMA.\n */\nexport const DESCRIBE_SCHEMA = new Schema([\n new Field(\"name\", new Utf8(), false),\n new Field(\"method_type\", new Utf8(), false),\n new Field(\"doc\", new Utf8(), true),\n new Field(\"has_return\", new Bool(), false),\n new Field(\"params_schema_ipc\", new Binary(), false),\n new Field(\"result_schema_ipc\", new Binary(), false),\n new Field(\"param_types_json\", new Utf8(), true),\n new Field(\"param_defaults_json\", new Utf8(), true),\n new Field(\"has_header\", new Bool(), false),\n new Field(\"header_schema_ipc\", new Binary(), true),\n]);\n\n/**\n * Build the __describe__ response batch and metadata.\n */\nexport function buildDescribeBatch(\n protocolName: string,\n methods: Map<string, MethodDefinition>,\n serverId: string,\n): { batch: RecordBatch; metadata: Map<string, string> } {\n // Sort methods by name for consistent ordering\n const sortedEntries = [...methods.entries()].sort(([a], [b]) => a.localeCompare(b));\n\n const names: (string | null)[] = [];\n const methodTypes: (string | null)[] = [];\n const docs: (string | null)[] = [];\n const hasReturns: boolean[] = [];\n const paramsSchemas: (Uint8Array | null)[] = [];\n const resultSchemas: (Uint8Array | null)[] = [];\n const paramTypesJsons: (string | null)[] = [];\n const paramDefaultsJsons: (string | null)[] = [];\n const hasHeaders: boolean[] = [];\n const headerSchemas: (Uint8Array | null)[] = [];\n\n for (const [name, method] of sortedEntries) {\n names.push(name);\n methodTypes.push(method.type);\n docs.push(method.doc ?? null);\n\n // Unary methods with non-empty result schema have a return value\n const hasReturn = method.type === \"unary\" && method.resultSchema.fields.length > 0;\n hasReturns.push(hasReturn);\n\n paramsSchemas.push(serializeSchema(method.paramsSchema));\n resultSchemas.push(serializeSchema(method.resultSchema));\n\n // Build param_types_json\n if (method.paramTypes && Object.keys(method.paramTypes).length > 0) {\n paramTypesJsons.push(JSON.stringify(method.paramTypes));\n } else {\n paramTypesJsons.push(null);\n }\n\n // Build param_defaults_json\n if (method.defaults && Object.keys(method.defaults).length > 0) {\n const safe: Record<string, any> = {};\n for (const [k, v] of Object.entries(method.defaults)) {\n if (v === null || typeof v === \"string\" || typeof v === \"number\" || typeof v === \"boolean\") {\n safe[k] = v;\n }\n }\n paramDefaultsJsons.push(Object.keys(safe).length > 0 ? JSON.stringify(safe) : null);\n } else {\n paramDefaultsJsons.push(null);\n }\n\n hasHeaders.push(!!method.headerSchema);\n headerSchemas.push(method.headerSchema ? serializeSchema(method.headerSchema) : null);\n }\n\n // Build the batch using vectorFromArray for each column\n const nameArr = vectorFromArray(names, new Utf8());\n const methodTypeArr = vectorFromArray(methodTypes, new Utf8());\n const docArr = vectorFromArray(docs, new Utf8());\n const hasReturnArr = vectorFromArray(hasReturns, new Bool());\n const paramsSchemaArr = vectorFromArray(paramsSchemas, new Binary());\n const resultSchemaArr = vectorFromArray(resultSchemas, new Binary());\n const paramTypesArr = vectorFromArray(paramTypesJsons, new Utf8());\n const paramDefaultsArr = vectorFromArray(paramDefaultsJsons, new Utf8());\n const hasHeaderArr = vectorFromArray(hasHeaders, new Bool());\n const headerSchemaArr = vectorFromArray(headerSchemas, new Binary());\n\n const children = [\n nameArr.data[0],\n methodTypeArr.data[0],\n docArr.data[0],\n hasReturnArr.data[0],\n paramsSchemaArr.data[0],\n resultSchemaArr.data[0],\n paramTypesArr.data[0],\n paramDefaultsArr.data[0],\n hasHeaderArr.data[0],\n headerSchemaArr.data[0],\n ];\n\n const structType = new Struct(DESCRIBE_SCHEMA.fields);\n const data = makeData({\n type: structType,\n length: sortedEntries.length,\n children,\n nullCount: 0,\n });\n\n // Build metadata for the batch\n const metadata = new Map<string, string>();\n metadata.set(PROTOCOL_NAME_KEY, protocolName);\n metadata.set(REQUEST_VERSION_KEY, REQUEST_VERSION);\n metadata.set(DESCRIBE_VERSION_KEY, DESCRIBE_VERSION);\n metadata.set(SERVER_ID_KEY, serverId);\n\n const batch = new RecordBatch(DESCRIBE_SCHEMA, data, metadata);\n\n return { batch, metadata };\n}\n",
20
21
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport { RecordBatchStreamWriter, type Schema } from \"@query-farm/apache-arrow\";\n\n/**\n * Serialize a Schema to the Arrow IPC Schema message format.\n * This produces bytes compatible with Python's `pa.ipc.read_schema()`.\n *\n * We serialize by writing an empty-batch IPC stream and extracting\n * the bytes, which includes the schema message. Python's read_schema()\n * uses `pa.ipc.read_schema(pa.py_buffer(bytes))` which expects\n * the schema flatbuffer message bytes directly — but the Python side\n * actually uses `schema.serialize()` which produces Schema message bytes.\n *\n * In arrow-js, we can get the equivalent by using Message.from(schema)\n * and encoding it, or by serializing a zero-batch stream.\n *\n * The Python `schema.serialize()` produces the Schema flatbuffer message bytes,\n * and `pa.ipc.read_schema()` expects an IPC stream containing a schema message.\n * The actual format is: continuation marker (0xFFFFFFFF) + length + flatbuffer bytes.\n */\nexport function serializeSchema(schema: Schema): Uint8Array {\n // Write a complete IPC stream with no batches.\n // This writes: Schema message + EOS marker.\n // Python's pa.ipc.read_schema() can read this format.\n const writer = new RecordBatchStreamWriter();\n writer.reset(undefined, schema);\n writer.close();\n return writer.toUint8Array(true);\n}\n",
21
22
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport { DataType, type RecordBatch, type Schema } from \"@query-farm/apache-arrow\";\nimport { REQUEST_ID_KEY, REQUEST_VERSION, REQUEST_VERSION_KEY, RPC_METHOD_KEY } from \"../constants.js\";\nimport { RpcError, VersionError } from \"../errors.js\";\n\nexport interface ParsedRequest {\n methodName: string;\n requestVersion: string;\n requestId: string | null;\n schema: Schema;\n params: Record<string, any>;\n rawMetadata: Map<string, string>;\n}\n\n/**\n * Parse a request from a RecordBatch with metadata.\n * Extracts method name, version, and params from the batch.\n */\nexport function parseRequest(schema: Schema, batch: RecordBatch): ParsedRequest {\n const metadata: Map<string, string> = batch.metadata ?? new Map();\n\n const methodName = metadata.get(RPC_METHOD_KEY);\n if (methodName === undefined) {\n throw new RpcError(\n \"ProtocolError\",\n \"Missing 'vgi_rpc.method' in request batch custom_metadata. \" +\n \"Each request batch must carry a 'vgi_rpc.method' key in its Arrow IPC custom_metadata \" +\n \"with the method name as a UTF-8 string.\",\n \"\",\n );\n }\n\n const version = metadata.get(REQUEST_VERSION_KEY);\n if (version === undefined) {\n throw new VersionError(\n \"Missing 'vgi_rpc.request_version' in request batch custom_metadata. \" +\n `Set the 'vgi_rpc.request_version' custom_metadata value to '${REQUEST_VERSION}'.`,\n );\n }\n if (version !== REQUEST_VERSION) {\n throw new VersionError(\n `Unsupported request version '${version}', expected '${REQUEST_VERSION}'. ` +\n `Set the 'vgi_rpc.request_version' custom_metadata value to '${REQUEST_VERSION}'.`,\n );\n }\n\n const requestId = metadata.get(REQUEST_ID_KEY) ?? null;\n\n // Extract params from single-row batch\n const params: Record<string, any> = {};\n if (schema.fields.length > 0 && batch.numRows !== 1) {\n throw new RpcError(\n \"ProtocolError\",\n `Expected 1 row in request batch, got ${batch.numRows}. ` +\n \"Each parameter is a column (not a row). The batch should have exactly 1 row.\",\n \"\",\n );\n }\n\n for (let i = 0; i < schema.fields.length; i++) {\n const field = schema.fields[i];\n // Map_ columns have a broken .get() in arrow-js — pass through raw Data\n if (DataType.isMap(field.type)) {\n params[field.name] = batch.getChildAt(i)!.data[0];\n continue;\n }\n let value = batch.getChildAt(i)?.get(0);\n // Convert BigInt to Number when safe\n if (typeof value === \"bigint\") {\n if (value >= BigInt(Number.MIN_SAFE_INTEGER) && value <= BigInt(Number.MAX_SAFE_INTEGER)) {\n value = Number(value);\n }\n }\n params[field.name] = value;\n }\n\n return {\n methodName,\n requestVersion: version,\n requestId,\n schema,\n params,\n rawMetadata: metadata,\n };\n}\n",
@@ -24,11 +25,11 @@
24
25
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Schema } from \"@query-farm/apache-arrow\";\nimport { inferParamTypes, type SchemaLike, toSchema } from \"./schema.js\";\nimport {\n type ExchangeFn,\n type ExchangeInit,\n type HeaderInit,\n type MethodDefinition,\n MethodType,\n type ProducerFn,\n type ProducerInit,\n type UnaryHandler,\n} from \"./types.js\";\n\nconst EMPTY_SCHEMA = new Schema([]);\n\n/**\n * Fluent builder for defining RPC methods.\n * Register unary, producer, and exchange methods, then pass to `VgiRpcServer`.\n */\nexport class Protocol {\n readonly name: string;\n private _methods: Map<string, MethodDefinition> = new Map();\n\n constructor(name: string) {\n this.name = name;\n }\n\n /**\n * Register a unary (request-response) method.\n * @param name - Method name exposed to clients\n * @param config.params - Parameter schema (SchemaLike)\n * @param config.result - Result schema (SchemaLike)\n * @param config.handler - Async function receiving params and returning result values\n * @param config.doc - Optional documentation string\n * @param config.defaults - Optional default parameter values\n * @param config.paramTypes - Optional parameter type hints (inferred from params if omitted)\n */\n unary(\n name: string,\n config: {\n params: SchemaLike;\n result: SchemaLike;\n handler: UnaryHandler;\n doc?: string;\n defaults?: Record<string, any>;\n paramTypes?: Record<string, string>;\n },\n ): this {\n const params = toSchema(config.params);\n this._methods.set(name, {\n name,\n type: MethodType.UNARY,\n paramsSchema: params,\n resultSchema: toSchema(config.result),\n handler: config.handler,\n doc: config.doc,\n defaults: config.defaults,\n paramTypes: config.paramTypes ?? inferParamTypes(params),\n });\n return this;\n }\n\n /**\n * Register a producer (server-streaming) method.\n * The generic `S` is inferred from the `init` return type and threaded to `produce`.\n */\n producer<S>(\n name: string,\n config: {\n params: SchemaLike;\n outputSchema: SchemaLike;\n init: ProducerInit<S>;\n produce: ProducerFn<S>;\n headerSchema?: SchemaLike;\n headerInit?: HeaderInit;\n doc?: string;\n defaults?: Record<string, any>;\n paramTypes?: Record<string, string>;\n },\n ): this {\n const params = toSchema(config.params);\n this._methods.set(name, {\n name,\n type: MethodType.STREAM,\n paramsSchema: params,\n resultSchema: EMPTY_SCHEMA,\n outputSchema: toSchema(config.outputSchema),\n inputSchema: EMPTY_SCHEMA,\n producerInit: config.init as ProducerInit,\n producerFn: config.produce as ProducerFn,\n headerSchema: config.headerSchema ? toSchema(config.headerSchema) : undefined,\n headerInit: config.headerInit,\n doc: config.doc,\n defaults: config.defaults,\n paramTypes: config.paramTypes ?? inferParamTypes(params),\n });\n return this;\n }\n\n /**\n * Register an exchange (bidirectional-streaming) method.\n * The generic `S` is inferred from the `init` return type and threaded to `exchange`.\n */\n exchange<S>(\n name: string,\n config: {\n params: SchemaLike;\n inputSchema: SchemaLike;\n outputSchema: SchemaLike;\n init: ExchangeInit<S>;\n exchange: ExchangeFn<S>;\n headerSchema?: SchemaLike;\n headerInit?: HeaderInit;\n doc?: string;\n defaults?: Record<string, any>;\n paramTypes?: Record<string, string>;\n },\n ): this {\n const params = toSchema(config.params);\n this._methods.set(name, {\n name,\n type: MethodType.STREAM,\n paramsSchema: params,\n resultSchema: EMPTY_SCHEMA,\n inputSchema: toSchema(config.inputSchema),\n outputSchema: toSchema(config.outputSchema),\n exchangeInit: config.init as ExchangeInit,\n exchangeFn: config.exchange as ExchangeFn,\n headerSchema: config.headerSchema ? toSchema(config.headerSchema) : undefined,\n headerInit: config.headerInit,\n doc: config.doc,\n defaults: config.defaults,\n paramTypes: config.paramTypes ?? inferParamTypes(params),\n });\n return this;\n }\n\n getMethods(): Map<string, MethodDefinition> {\n return new Map(this._methods);\n }\n}\n",
25
26
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport {\n Binary,\n Bool,\n DataType,\n Field,\n Float32,\n Float64,\n Int16,\n Int32,\n Int64,\n Schema,\n Utf8,\n} from \"@query-farm/apache-arrow\";\n\n// ---------------------------------------------------------------------------\n// Convenient DataType singletons — re-export so users avoid arrow imports\n// ---------------------------------------------------------------------------\n\n/** Apache Arrow Utf8 type. Use as schema shorthand: `{ name: str }` */\nexport const str = new Utf8();\n/** Apache Arrow Binary type. Use as schema shorthand: `{ data: bytes }` */\nexport const bytes = new Binary();\n/** Apache Arrow Int64 type. Use as schema shorthand: `{ count: int }` */\nexport const int = new Int64();\n/** Apache Arrow Int32 type. Use as schema shorthand: `{ count: int32 }` */\nexport const int32 = new Int32();\n/** Apache Arrow Float64 type. Use as schema shorthand: `{ value: float }` */\nexport const float = new Float64();\n/** Apache Arrow Float32 type. Use as schema shorthand: `{ value: float32 }` */\nexport const float32 = new Float32();\n/** Apache Arrow Bool type. Use as schema shorthand: `{ flag: bool }` */\nexport const bool = new Bool();\n\n// ---------------------------------------------------------------------------\n// SchemaLike — shorthand for declaring schemas\n// ---------------------------------------------------------------------------\n\n/**\n * A schema specification that accepts:\n * - A real `Schema` (passed through)\n * - A record mapping field names to `DataType` instances or `Field` instances\n * - An empty `{}` for an empty schema\n */\nexport type SchemaLike = Schema | Record<string, DataType | Field>;\n\n/**\n * Convert a SchemaLike spec into a real `Schema`.\n *\n * - `Schema` → returned as-is\n * - `Record<string, DataType>` → each entry becomes `new Field(name, type, false)`\n * - `Record<string, Field>` → each entry is passed through\n * - `{}` → `new Schema([])`\n */\nexport function toSchema(spec: SchemaLike): Schema {\n if (spec instanceof Schema) return spec;\n\n const fields: Field[] = [];\n for (const [name, value] of Object.entries(spec)) {\n if (value instanceof Field) {\n fields.push(value);\n } else if (value instanceof DataType) {\n fields.push(new Field(name, value, false));\n } else {\n throw new TypeError(`Invalid schema value for \"${name}\": expected DataType or Field, got ${typeof value}`);\n }\n }\n return new Schema(fields);\n}\n\n// ---------------------------------------------------------------------------\n// inferParamTypes — derive paramTypes from a schema spec\n// ---------------------------------------------------------------------------\n\nconst TYPE_MAP: [new (...args: any[]) => DataType, string][] = [\n [Utf8, \"str\"],\n [Binary, \"bytes\"],\n [Bool, \"bool\"],\n [Float64, \"float\"],\n [Float32, \"float\"],\n [Int64, \"int\"],\n [Int32, \"int\"],\n [Int16, \"int\"],\n];\n\n/**\n * Derive a `paramTypes` record from a SchemaLike spec.\n * Maps common Arrow scalar types to Python-style type strings.\n * Returns `undefined` if any field has a complex type (List, Map_, Dictionary, etc.).\n */\nexport function inferParamTypes(spec: SchemaLike): Record<string, string> | undefined {\n const schema = toSchema(spec);\n if (schema.fields.length === 0) return undefined;\n\n const result: Record<string, string> = {};\n for (const field of schema.fields) {\n let mapped: string | undefined;\n for (const [ctor, name] of TYPE_MAP) {\n if (field.type instanceof ctor) {\n mapped = name;\n break;\n }\n }\n if (!mapped) return undefined;\n result[field.name] = mapped;\n }\n return result;\n}\n",
26
27
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Schema } from \"@query-farm/apache-arrow\";\nimport { DESCRIBE_METHOD_NAME } from \"./constants.js\";\nimport { buildDescribeBatch } from \"./dispatch/describe.js\";\nimport { dispatchStream } from \"./dispatch/stream.js\";\nimport { dispatchUnary } from \"./dispatch/unary.js\";\nimport { RpcError, VersionError } from \"./errors.js\";\nimport type { Protocol } from \"./protocol.js\";\nimport { MethodType } from \"./types.js\";\nimport { IpcStreamReader } from \"./wire/reader.js\";\nimport { parseRequest } from \"./wire/request.js\";\nimport { buildErrorBatch } from \"./wire/response.js\";\nimport { IpcStreamWriter } from \"./wire/writer.js\";\n\nconst EMPTY_SCHEMA = new Schema([]);\n\n/**\n * RPC server that reads Arrow IPC requests from stdin and writes responses to stdout.\n * Supports unary and streaming (producer/exchange) methods.\n */\nexport class VgiRpcServer {\n private protocol: Protocol;\n private enableDescribe: boolean;\n private serverId: string;\n private describeBatch: import(\"@query-farm/apache-arrow\").RecordBatch | null = null;\n\n constructor(protocol: Protocol, options?: { enableDescribe?: boolean; serverId?: string }) {\n this.protocol = protocol;\n this.enableDescribe = options?.enableDescribe ?? true;\n this.serverId = options?.serverId ?? crypto.randomUUID().replace(/-/g, \"\").slice(0, 12);\n\n if (this.enableDescribe) {\n const { batch } = buildDescribeBatch(protocol.name, protocol.getMethods(), this.serverId);\n this.describeBatch = batch;\n }\n }\n\n /** Start the server loop. Reads requests until stdin closes. */\n async run(): Promise<void> {\n const stdin = process.stdin as unknown as ReadableStream<Uint8Array>;\n\n // Warn if running interactively\n if (process.stdin.isTTY || process.stdout.isTTY) {\n process.stderr.write(\n \"WARNING: This process communicates via Arrow IPC on stdin/stdout \" +\n \"and is not intended to be run interactively.\\n\" +\n \"It should be launched as a subprocess by an RPC client \" +\n \"(e.g. vgi_rpc.connect()).\\n\",\n );\n }\n\n const reader = await IpcStreamReader.create(stdin);\n const writer = new IpcStreamWriter();\n\n try {\n while (true) {\n await this.serveOne(reader, writer);\n }\n } catch (e: any) {\n // EOF or broken pipe → clean exit\n if (\n e.message?.includes(\"closed\") ||\n e.message?.includes(\"Expected Schema Message\") ||\n e.message?.includes(\"null or length 0\") ||\n e.code === \"EPIPE\" ||\n e.code === \"ERR_STREAM_PREMATURE_CLOSE\" ||\n e.code === \"ERR_STREAM_DESTROYED\" ||\n (e instanceof Error && e.message.includes(\"EOF\"))\n ) {\n return;\n }\n // ArrowInvalid or unexpected error\n throw e;\n } finally {\n await reader.cancel();\n }\n }\n\n private async serveOne(reader: IpcStreamReader, writer: IpcStreamWriter): Promise<void> {\n const stream = await reader.readStream();\n if (!stream) {\n throw new Error(\"EOF\");\n }\n\n const { schema, batches } = stream;\n if (batches.length === 0) {\n const err = new RpcError(\"ProtocolError\", \"Request stream contains no batches\", \"\");\n const errBatch = buildErrorBatch(EMPTY_SCHEMA, err, this.serverId, null);\n writer.writeStream(EMPTY_SCHEMA, [errBatch]);\n return;\n }\n\n const batch = batches[0];\n let methodName: string;\n let params: Record<string, any>;\n let requestId: string | null;\n\n try {\n const parsed = parseRequest(schema, batch);\n methodName = parsed.methodName;\n params = parsed.params;\n requestId = parsed.requestId;\n } catch (e: any) {\n // Write error response for protocol/version errors\n const errBatch = buildErrorBatch(EMPTY_SCHEMA, e, this.serverId, null);\n writer.writeStream(EMPTY_SCHEMA, [errBatch]);\n if (e instanceof VersionError || e instanceof RpcError) {\n return; // Continue serving\n }\n throw e;\n }\n\n // Handle __describe__\n if (methodName === DESCRIBE_METHOD_NAME && this.describeBatch) {\n writer.writeStream(this.describeBatch.schema, [this.describeBatch]);\n return;\n }\n\n // Look up method\n const methods = this.protocol.getMethods();\n const method = methods.get(methodName);\n if (!method) {\n const available = [...methods.keys()].sort();\n const err = new Error(`Unknown method: '${methodName}'. Available methods: [${available.join(\", \")}]`);\n const errBatch = buildErrorBatch(EMPTY_SCHEMA, err, this.serverId, requestId);\n writer.writeStream(EMPTY_SCHEMA, [errBatch]);\n return;\n }\n\n // Dispatch based on method type\n if (method.type === MethodType.UNARY) {\n await dispatchUnary(method, params, writer, this.serverId, requestId);\n } else {\n await dispatchStream(method, params, writer, reader, this.serverId, requestId);\n }\n }\n}\n",
27
- "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Schema } from \"@query-farm/apache-arrow\";\nimport type { MethodDefinition } from \"../types.js\";\nimport { OutputCollector } from \"../types.js\";\nimport type { IpcStreamReader } from \"../wire/reader.js\";\nimport { buildErrorBatch, buildResultBatch } from \"../wire/response.js\";\nimport type { IpcStreamWriter } from \"../wire/writer.js\";\n\nconst EMPTY_SCHEMA = new Schema([]);\n\n/**\n * Dispatch a stream RPC call (producer or exchange).\n *\n * Producer streams (empty input schema):\n * - Client sends tick batches (empty schema, 0 rows)\n * - Server reads each tick, calls produce(state, out)\n * - Server writes output batch(es) for each tick\n * - When produce() calls out.finish(), server closes output stream\n *\n * Exchange streams (real input schema):\n * - Client sends data batches\n * - Server reads each batch, calls exchange(state, input, out)\n * - Server writes output batch(es) for each input\n * - Stream ends when client closes input (EOS)\n */\nexport async function dispatchStream(\n method: MethodDefinition,\n params: Record<string, any>,\n writer: IpcStreamWriter,\n reader: IpcStreamReader,\n serverId: string,\n requestId: string | null,\n): Promise<void> {\n const isProducer = !!method.producerFn;\n\n let state: any;\n try {\n if (isProducer) {\n state = await method.producerInit!(params);\n } else {\n state = await method.exchangeInit!(params);\n }\n } catch (error: any) {\n const errSchema = method.headerSchema ?? EMPTY_SCHEMA;\n const errBatch = buildErrorBatch(errSchema, error, serverId, requestId);\n writer.writeStream(errSchema, [errBatch]);\n // Still need to consume the input stream from the client\n const inputSchema = await reader.openNextStream();\n if (inputSchema) {\n while ((await reader.readNextBatch()) !== null) {\n // drain\n }\n }\n return;\n }\n\n // Support dynamic output schemas: init may return state with __outputSchema\n // to override the method's registered output schema (needed for methods\n // like VGI's \"init\" that produce different schemas per invocation).\n const outputSchema = state?.__outputSchema ?? method.outputSchema!;\n\n // Effective producer mode: check state override (VGI \"init\" is registered as\n // exchange but may act as producer depending on the function type).\n const effectiveProducer = state?.__isProducer ?? isProducer;\n\n // Write header IPC stream if method has a header schema\n if (method.headerSchema && method.headerInit) {\n try {\n const headerOut = new OutputCollector(method.headerSchema, true, serverId, requestId);\n const headerValues = method.headerInit(params, state, headerOut);\n const headerBatch = buildResultBatch(method.headerSchema, headerValues, serverId, requestId);\n const headerBatches = [...headerOut.batches.map((b) => b.batch), headerBatch];\n writer.writeStream(method.headerSchema, headerBatches);\n } catch (error: any) {\n const errBatch = buildErrorBatch(method.headerSchema, error, serverId, requestId);\n writer.writeStream(method.headerSchema, [errBatch]);\n // Drain input stream so client doesn't hang\n const inputSchema = await reader.openNextStream();\n if (inputSchema) {\n while ((await reader.readNextBatch()) !== null) {}\n }\n return;\n }\n }\n\n // Open the input IPC stream (ticks or data from client)\n const inputSchema = await reader.openNextStream();\n if (!inputSchema) {\n const errBatch = buildErrorBatch(outputSchema, new Error(\"Expected input stream but got EOF\"), serverId, requestId);\n writer.writeStream(outputSchema, [errBatch]);\n return;\n }\n\n // Use a single continuous IPC stream for all output (matching Python vgi-rpc).\n // DuckDB exchanges are ping-pong: one input batch → one output batch on the\n // same stream. We use IncrementalStream which writes bytes synchronously.\n const stream = writer.openStream(outputSchema);\n\n try {\n while (true) {\n const inputBatch = await reader.readNextBatch();\n if (!inputBatch) break;\n\n const out = new OutputCollector(outputSchema, effectiveProducer, serverId, requestId);\n\n if (isProducer) {\n await method.producerFn!(state, out);\n } else {\n await method.exchangeFn!(state, inputBatch, out);\n }\n\n for (const emitted of out.batches) {\n stream.write(emitted.batch);\n }\n\n if (out.finished) {\n break;\n }\n }\n } catch (error: any) {\n stream.write(buildErrorBatch(outputSchema, error, serverId, requestId));\n }\n\n stream.close();\n\n // Drain remaining input so transport stays synchronized for next request.\n // Matches Python's _drain_stream() called after every streaming method.\n // Needed when the loop exits early (out.finished, error) while client\n // is still sending batches.\n try {\n while ((await reader.readNextBatch()) !== null) {}\n } catch {\n // Suppress errors during drain (broken pipe, etc.)\n }\n}\n",
28
+ "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport { Schema } from \"@query-farm/apache-arrow\";\nimport type { MethodDefinition } from \"../types.js\";\nimport { OutputCollector } from \"../types.js\";\nimport { conformBatchToSchema } from \"../util/conform.js\";\nimport type { IpcStreamReader } from \"../wire/reader.js\";\nimport { buildErrorBatch, buildResultBatch } from \"../wire/response.js\";\nimport type { IpcStreamWriter } from \"../wire/writer.js\";\n\nconst EMPTY_SCHEMA = new Schema([]);\n\n/**\n * Dispatch a stream RPC call (producer or exchange).\n *\n * Producer streams (empty input schema):\n * - Client sends tick batches (empty schema, 0 rows)\n * - Server reads each tick, calls produce(state, out)\n * - Server writes output batch(es) for each tick\n * - When produce() calls out.finish(), server closes output stream\n *\n * Exchange streams (real input schema):\n * - Client sends data batches\n * - Server reads each batch, calls exchange(state, input, out)\n * - Server writes output batch(es) for each input\n * - Stream ends when client closes input (EOS)\n */\nexport async function dispatchStream(\n method: MethodDefinition,\n params: Record<string, any>,\n writer: IpcStreamWriter,\n reader: IpcStreamReader,\n serverId: string,\n requestId: string | null,\n): Promise<void> {\n const isProducer = !!method.producerFn;\n\n let state: any;\n try {\n if (isProducer) {\n state = await method.producerInit!(params);\n } else {\n state = await method.exchangeInit!(params);\n }\n } catch (error: any) {\n const errSchema = method.headerSchema ?? EMPTY_SCHEMA;\n const errBatch = buildErrorBatch(errSchema, error, serverId, requestId);\n writer.writeStream(errSchema, [errBatch]);\n // Still need to consume the input stream from the client\n const inputSchema = await reader.openNextStream();\n if (inputSchema) {\n while ((await reader.readNextBatch()) !== null) {\n // drain\n }\n }\n return;\n }\n\n // Support dynamic output schemas: init may return state with __outputSchema\n // to override the method's registered output schema (needed for methods\n // like VGI's \"init\" that produce different schemas per invocation).\n const outputSchema = state?.__outputSchema ?? method.outputSchema!;\n\n // Effective producer mode: check state override (VGI \"init\" is registered as\n // exchange but may act as producer depending on the function type).\n const effectiveProducer = state?.__isProducer ?? isProducer;\n\n // Write header IPC stream if method has a header schema\n if (method.headerSchema && method.headerInit) {\n try {\n const headerOut = new OutputCollector(method.headerSchema, true, serverId, requestId);\n const headerValues = method.headerInit(params, state, headerOut);\n const headerBatch = buildResultBatch(method.headerSchema, headerValues, serverId, requestId);\n const headerBatches = [...headerOut.batches.map((b) => b.batch), headerBatch];\n writer.writeStream(method.headerSchema, headerBatches);\n } catch (error: any) {\n const errBatch = buildErrorBatch(method.headerSchema, error, serverId, requestId);\n writer.writeStream(method.headerSchema, [errBatch]);\n // Drain input stream so client doesn't hang\n const inputSchema = await reader.openNextStream();\n if (inputSchema) {\n while ((await reader.readNextBatch()) !== null) {}\n }\n return;\n }\n }\n\n // Open the input IPC stream (ticks or data from client)\n const inputSchema = await reader.openNextStream();\n if (!inputSchema) {\n const errBatch = buildErrorBatch(outputSchema, new Error(\"Expected input stream but got EOF\"), serverId, requestId);\n writer.writeStream(outputSchema, [errBatch]);\n return;\n }\n\n // Use a single continuous IPC stream for all output (matching Python vgi-rpc).\n // DuckDB exchanges are ping-pong: one input batch → one output batch on the\n // same stream. We use IncrementalStream which writes bytes synchronously.\n const stream = writer.openStream(outputSchema);\n\n // Expected input schema for casting compatible types (e.g., decimal→double)\n const expectedInputSchema = method.inputSchema;\n\n try {\n while (true) {\n let inputBatch = await reader.readNextBatch();\n if (!inputBatch) break;\n\n // Cast compatible input types when schema doesn't match exactly\n if (expectedInputSchema && !isProducer && inputBatch.schema !== expectedInputSchema) {\n try {\n inputBatch = conformBatchToSchema(inputBatch, expectedInputSchema);\n } catch {\n throw new TypeError(\n `Input schema mismatch: expected ${expectedInputSchema}, got ${inputBatch.schema}`,\n );\n }\n }\n\n const out = new OutputCollector(outputSchema, effectiveProducer, serverId, requestId);\n\n if (isProducer) {\n await method.producerFn!(state, out);\n } else {\n await method.exchangeFn!(state, inputBatch, out);\n }\n\n for (const emitted of out.batches) {\n stream.write(emitted.batch);\n }\n\n if (out.finished) {\n break;\n }\n }\n } catch (error: any) {\n stream.write(buildErrorBatch(outputSchema, error, serverId, requestId));\n }\n\n stream.close();\n\n // Drain remaining input so transport stays synchronized for next request.\n // Matches Python's _drain_stream() called after every streaming method.\n // Needed when the loop exits early (out.finished, error) while client\n // is still sending batches.\n try {\n while ((await reader.readNextBatch()) !== null) {}\n } catch {\n // Suppress errors during drain (broken pipe, etc.)\n }\n}\n",
28
29
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { MethodDefinition } from \"../types.js\";\nimport { OutputCollector } from \"../types.js\";\nimport { buildErrorBatch, buildResultBatch } from \"../wire/response.js\";\nimport type { IpcStreamWriter } from \"../wire/writer.js\";\n\n/**\n * Dispatch a unary RPC call.\n * Calls the handler with parsed params, writes result or error batch.\n * Supports client-directed logging via ctx.clientLog().\n */\nexport async function dispatchUnary(\n method: MethodDefinition,\n params: Record<string, any>,\n writer: IpcStreamWriter,\n serverId: string,\n requestId: string | null,\n): Promise<void> {\n const schema = method.resultSchema;\n const out = new OutputCollector(schema, true, serverId, requestId);\n\n try {\n const result = await method.handler!(params, out);\n const resultBatch = buildResultBatch(schema, result, serverId, requestId);\n // Collect log batches (from clientLog) + result batch\n const batches = [...out.batches.map((b) => b.batch), resultBatch];\n writer.writeStream(schema, batches);\n } catch (error: any) {\n const batch = buildErrorBatch(schema, error, serverId, requestId);\n writer.writeStream(schema, [batch]);\n }\n}\n",
29
30
  "// © Copyright 2025-2026, Query.Farm LLC - https://query.farm\n// SPDX-License-Identifier: Apache-2.0\n\nimport { writeSync } from \"node:fs\";\nimport { type RecordBatch, RecordBatchStreamWriter, type Schema } from \"@query-farm/apache-arrow\";\n\nconst STDOUT_FD = 1;\n\n/**\n * Write all bytes to a file descriptor, looping on partial writes.\n * Handles EAGAIN (pipe buffer full) by busy-waiting with Atomics.wait().\n * writeSync() can return fewer bytes than requested when the pipe buffer\n * is full (e.g., 64KB limit), and throws EAGAIN on non-blocking fds.\n */\nfunction writeAll(fd: number, data: Uint8Array): void {\n let offset = 0;\n while (offset < data.length) {\n try {\n const written = writeSync(fd, data, offset, data.length - offset);\n if (written <= 0) throw new Error(`writeSync returned ${written}`);\n offset += written;\n } catch (e: any) {\n if (e.code === \"EAGAIN\") {\n // Pipe buffer full — busy-wait briefly then retry\n Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, 1);\n continue;\n }\n throw e;\n }\n }\n}\n\n/**\n * Writes sequential IPC streams to a file descriptor (e.g., stdout).\n * Each call to writeStream() writes a complete IPC stream: schema + batches + EOS.\n *\n * All writes use synchronous I/O (writeSync) to avoid deadlocks when\n * interleaving stdout writes with blocking stdin reads.\n */\nexport class IpcStreamWriter {\n private readonly fd: number;\n\n constructor(fd: number = STDOUT_FD) {\n this.fd = fd;\n }\n\n /**\n * Write a complete IPC stream with the given schema and batches.\n * Creates schema message, writes all batches (with their metadata), writes EOS.\n */\n writeStream(schema: Schema, batches: RecordBatch[]): void {\n const writer = new RecordBatchStreamWriter();\n writer.reset(undefined, schema);\n for (const batch of batches) {\n // Use _writeRecordBatch to bypass schema comparison (see IncrementalStream.write)\n (writer as any)._writeRecordBatch(batch);\n }\n writer.close();\n const bytes = writer.toUint8Array(true);\n writeAll(this.fd, bytes);\n }\n\n /**\n * Open an incremental IPC stream for writing batches one at a time.\n * Used for streaming methods where output batches are produced incrementally.\n * Bytes are written synchronously after each batch.\n */\n openStream(schema: Schema): IncrementalStream {\n return new IncrementalStream(this.fd, schema);\n }\n}\n\n/**\n * An open IPC stream that supports incremental batch writes.\n *\n * Uses RecordBatchStreamWriter with internal buffering (no pipe to stdout).\n * After each operation, drains the writer's internal AsyncByteQueue buffer\n * and writes bytes synchronously via writeAll(). This avoids deadlocks\n * caused by Node.js async stream piping when stdin reads block before\n * stdout writes flush through the event loop.\n */\nexport class IncrementalStream {\n private writer: RecordBatchStreamWriter;\n private readonly fd: number;\n private closed = false;\n\n constructor(fd: number, schema: Schema) {\n this.fd = fd;\n this.writer = new RecordBatchStreamWriter();\n // Buffer internally (no sink) — we drain manually via writeAll\n this.writer.reset(undefined, schema);\n this.drain();\n }\n\n /**\n * Write a single batch to the stream. Bytes are flushed synchronously.\n *\n * Uses _writeRecordBatch() directly to bypass the Arrow writer's schema\n * comparison in write(). The public write() method calls compareSchemas()\n * and auto-closes the writer if the batch's schema differs (e.g., in\n * nullability), silently dropping the batch. Since our output schema is\n * set at stream open time and all batches are structurally compatible,\n * we skip the comparison.\n */\n write(batch: RecordBatch): void {\n if (this.closed) throw new Error(\"Stream already closed\");\n (this.writer as any)._writeRecordBatch(batch);\n this.drain();\n }\n\n /**\n * Close the stream (writes EOS marker synchronously).\n */\n close(): void {\n if (this.closed) return;\n this.closed = true;\n // EOS marker: continuation (0xFFFFFFFF) + metadata length (0x00000000)\n const eos = new Uint8Array(new Int32Array([-1, 0]).buffer);\n writeAll(this.fd, eos);\n }\n\n /**\n * Drain buffered bytes from the Arrow writer's internal queue\n * and write them synchronously to the output fd.\n */\n private drain(): void {\n const values = (this.writer as any)._sink._values as Uint8Array[];\n for (const chunk of values) {\n writeAll(this.fd, chunk);\n }\n values.length = 0;\n }\n}\n"
30
31
  ],
31
- "mappings": "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",
32
- "debugId": "E5E571F45BA75F8D64756E2164756E21",
32
+ "mappings": "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",
33
+ "debugId": "5E36C5DD1C64E65A64756E2164756E21",
33
34
  "names": []
34
35
  }
@@ -0,0 +1,16 @@
1
+ import { RecordBatch, type Schema } from "@query-farm/apache-arrow";
2
+ /**
3
+ * Rebuild a batch's data to match the given schema's field types.
4
+ *
5
+ * Batches deserialized from IPC streams (e.g., from PyArrow) may use generic
6
+ * types (Float) instead of specific ones (Float64). Arrow-JS's
7
+ * RecordBatchStreamWriter silently drops batches whose child Data types don't
8
+ * match the writer's schema. Cloning each child Data with the schema's field
9
+ * type fixes the type metadata while preserving the underlying buffers.
10
+ *
11
+ * This is also used to cast compatible input types (e.g., decimal→double,
12
+ * int32→int64) when the input batch schema doesn't exactly match the method's
13
+ * declared input schema.
14
+ */
15
+ export declare function conformBatchToSchema(batch: RecordBatch, schema: Schema): RecordBatch;
16
+ //# sourceMappingURL=conform.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conform.d.ts","sourceRoot":"","sources":["../../src/util/conform.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAoB,KAAK,MAAM,EAAE,MAAM,0BAA0B,CAAC;AAEtF;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,WAAW,CAYpF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@query-farm/vgi-rpc",
3
- "version": "0.3.2",
3
+ "version": "0.3.3",
4
4
  "license": "Apache-2.0",
5
5
  "homepage": "https://vgi-rpc-typescript.query.farm",
6
6
  "repository": {
@@ -4,6 +4,7 @@
4
4
  import { Schema } from "@query-farm/apache-arrow";
5
5
  import type { MethodDefinition } from "../types.js";
6
6
  import { OutputCollector } from "../types.js";
7
+ import { conformBatchToSchema } from "../util/conform.js";
7
8
  import type { IpcStreamReader } from "../wire/reader.js";
8
9
  import { buildErrorBatch, buildResultBatch } from "../wire/response.js";
9
10
  import type { IpcStreamWriter } from "../wire/writer.js";
@@ -98,11 +99,25 @@ export async function dispatchStream(
98
99
  // same stream. We use IncrementalStream which writes bytes synchronously.
99
100
  const stream = writer.openStream(outputSchema);
100
101
 
102
+ // Expected input schema for casting compatible types (e.g., decimal→double)
103
+ const expectedInputSchema = method.inputSchema;
104
+
101
105
  try {
102
106
  while (true) {
103
- const inputBatch = await reader.readNextBatch();
107
+ let inputBatch = await reader.readNextBatch();
104
108
  if (!inputBatch) break;
105
109
 
110
+ // Cast compatible input types when schema doesn't match exactly
111
+ if (expectedInputSchema && !isProducer && inputBatch.schema !== expectedInputSchema) {
112
+ try {
113
+ inputBatch = conformBatchToSchema(inputBatch, expectedInputSchema);
114
+ } catch {
115
+ throw new TypeError(
116
+ `Input schema mismatch: expected ${expectedInputSchema}, got ${inputBatch.schema}`,
117
+ );
118
+ }
119
+ }
120
+
106
121
  const out = new OutputCollector(outputSchema, effectiveProducer, serverId, requestId);
107
122
 
108
123
  if (isProducer) {
@@ -2,13 +2,12 @@
2
2
  // SPDX-License-Identifier: Apache-2.0
3
3
 
4
4
  import {
5
- makeData,
6
- RecordBatch,
5
+ type RecordBatch,
7
6
  RecordBatchReader,
8
7
  RecordBatchStreamWriter,
9
8
  type Schema,
10
- Struct,
11
9
  } from "@query-farm/apache-arrow";
10
+ import { conformBatchToSchema } from "../util/conform.js";
12
11
 
13
12
  export const ARROW_CONTENT_TYPE = "application/vnd.apache.arrow.stream";
14
13
 
@@ -22,29 +21,6 @@ export class HttpRpcError extends Error {
22
21
  }
23
22
  }
24
23
 
25
- /**
26
- * Rebuild a batch's data to match the given schema's field types.
27
- *
28
- * Batches deserialized from IPC streams (e.g., from PyArrow) may use generic
29
- * types (Float) instead of specific ones (Float64). Arrow-JS's
30
- * RecordBatchStreamWriter silently drops batches whose child Data types don't
31
- * match the writer's schema. Cloning each child Data with the schema's field
32
- * type fixes the type metadata while preserving the underlying buffers.
33
- */
34
- function conformBatchToSchema(batch: RecordBatch, schema: Schema): RecordBatch {
35
- if (batch.numRows === 0) return batch;
36
- const children = schema.fields.map((f, i) => batch.data.children[i].clone(f.type));
37
- const structType = new Struct(schema.fields);
38
- const data = makeData({
39
- type: structType,
40
- length: batch.numRows,
41
- children,
42
- nullCount: batch.data.nullCount,
43
- nullBitmap: batch.data.nullBitmap,
44
- });
45
- return new RecordBatch(schema, data, batch.metadata);
46
- }
47
-
48
24
  /** Serialize a schema + batches into a complete IPC stream as Uint8Array. */
49
25
  export function serializeIpcStream(schema: Schema, batches: RecordBatch[]): Uint8Array {
50
26
  const writer = new RecordBatchStreamWriter();
@@ -6,6 +6,7 @@ import { STATE_KEY } from "../constants.js";
6
6
  import { buildDescribeBatch, DESCRIBE_SCHEMA } from "../dispatch/describe.js";
7
7
  import type { MethodDefinition } from "../types.js";
8
8
  import { OutputCollector } from "../types.js";
9
+ import { conformBatchToSchema } from "../util/conform.js";
9
10
  import { serializeSchema } from "../util/schema.js";
10
11
  import { parseRequest } from "../wire/request.js";
11
12
  import { buildEmptyBatch, buildErrorBatch, buildResultBatch } from "../wire/response.js";
@@ -206,9 +207,12 @@ export async function httpDispatchStreamExchange(
206
207
  // when effectiveProducer so finish() is allowed.
207
208
  const out = new OutputCollector(outputSchema, effectiveProducer, ctx.serverId, null);
208
209
 
210
+ // Cast compatible input types (e.g., decimal→double, int32→int64)
211
+ const conformedBatch = conformBatchToSchema(reqBatch, inputSchema);
212
+
209
213
  try {
210
214
  if (method.exchangeFn) {
211
- await method.exchangeFn(state, reqBatch, out);
215
+ await method.exchangeFn(state, conformedBatch, out);
212
216
  } else {
213
217
  await method.producerFn!(state, out);
214
218
  }
@@ -0,0 +1,31 @@
1
+ // © Copyright 2025-2026, Query.Farm LLC - https://query.farm
2
+ // SPDX-License-Identifier: Apache-2.0
3
+
4
+ import { RecordBatch, Struct, makeData, type Schema } from "@query-farm/apache-arrow";
5
+
6
+ /**
7
+ * Rebuild a batch's data to match the given schema's field types.
8
+ *
9
+ * Batches deserialized from IPC streams (e.g., from PyArrow) may use generic
10
+ * types (Float) instead of specific ones (Float64). Arrow-JS's
11
+ * RecordBatchStreamWriter silently drops batches whose child Data types don't
12
+ * match the writer's schema. Cloning each child Data with the schema's field
13
+ * type fixes the type metadata while preserving the underlying buffers.
14
+ *
15
+ * This is also used to cast compatible input types (e.g., decimal→double,
16
+ * int32→int64) when the input batch schema doesn't exactly match the method's
17
+ * declared input schema.
18
+ */
19
+ export function conformBatchToSchema(batch: RecordBatch, schema: Schema): RecordBatch {
20
+ if (batch.numRows === 0) return batch;
21
+ const children = schema.fields.map((f, i) => batch.data.children[i].clone(f.type));
22
+ const structType = new Struct(schema.fields);
23
+ const data = makeData({
24
+ type: structType,
25
+ length: batch.numRows,
26
+ children,
27
+ nullCount: batch.data.nullCount,
28
+ nullBitmap: batch.data.nullBitmap,
29
+ });
30
+ return new RecordBatch(schema, data, batch.metadata);
31
+ }