@qualithm/arrow-flight-sql-js 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,227 @@
1
+ /**
2
+ * Runtime Detection
3
+ *
4
+ * Provides utilities for detecting the current JavaScript runtime environment.
5
+ * Supports Node.js, Bun, Deno, and browser environments.
6
+ */
7
+ /**
8
+ * Supported runtime environments
9
+ */
10
+ export const Runtime = {
11
+ Node: "node",
12
+ Bun: "bun",
13
+ Deno: "deno",
14
+ Browser: "browser",
15
+ Unknown: "unknown"
16
+ };
17
+ /**
18
+ * Cached runtime info to avoid repeated detection
19
+ */
20
+ let cachedRuntimeInfo = null;
21
+ /**
22
+ * Detect the current runtime environment.
23
+ *
24
+ * Detection order (first match wins):
25
+ * 1. Bun - checks for `Bun` global
26
+ * 2. Deno - checks for `Deno` global
27
+ * 3. Browser - checks for `window` and browser-specific APIs
28
+ * 4. Node.js - checks for `process.versions.node`
29
+ * 5. Unknown - fallback
30
+ *
31
+ * @returns RuntimeInfo with detected environment details
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * const info = detectRuntime()
36
+ * if (info.runtime === Runtime.Bun) {
37
+ * console.log(`Running on Bun ${info.version}`)
38
+ * }
39
+ * ```
40
+ */
41
+ export function detectRuntime() {
42
+ if (cachedRuntimeInfo) {
43
+ return cachedRuntimeInfo;
44
+ }
45
+ cachedRuntimeInfo = detectRuntimeUncached();
46
+ return cachedRuntimeInfo;
47
+ }
48
+ /**
49
+ * Clear the cached runtime info (useful for testing)
50
+ */
51
+ export function clearRuntimeCache() {
52
+ cachedRuntimeInfo = null;
53
+ }
54
+ /**
55
+ * Check if running in Bun runtime
56
+ */
57
+ function isBun() {
58
+ return typeof globalThis !== "undefined" && "Bun" in globalThis;
59
+ }
60
+ /**
61
+ * Check if running in Deno runtime
62
+ */
63
+ function isDeno() {
64
+ return typeof globalThis !== "undefined" && "Deno" in globalThis;
65
+ }
66
+ /**
67
+ * Check if running in a browser environment
68
+ */
69
+ function isBrowserEnv() {
70
+ return typeof globalThis !== "undefined" && "window" in globalThis && "document" in globalThis;
71
+ }
72
+ /**
73
+ * Check if running in a worker context
74
+ */
75
+ function isWorkerEnv() {
76
+ // Web Worker or Service Worker
77
+ if (typeof globalThis !== "undefined" && "self" in globalThis && !("window" in globalThis)) {
78
+ // Check for WorkerGlobalScope
79
+ if ("WorkerGlobalScope" in globalThis) {
80
+ return true;
81
+ }
82
+ // Check for ServiceWorkerGlobalScope
83
+ if ("ServiceWorkerGlobalScope" in globalThis) {
84
+ return true;
85
+ }
86
+ // Cloudflare Workers have no window but have fetch
87
+ if ("caches" in globalThis && "fetch" in globalThis) {
88
+ return true;
89
+ }
90
+ }
91
+ return false;
92
+ }
93
+ /**
94
+ * Check if running in Node.js
95
+ */
96
+ function isNode() {
97
+ if (typeof globalThis === "undefined") {
98
+ return false;
99
+ }
100
+ const proc = globalThis.process;
101
+ if (typeof proc === "undefined") {
102
+ return false;
103
+ }
104
+ return typeof proc.versions.node === "string";
105
+ }
106
+ /**
107
+ * Get Bun version
108
+ */
109
+ function getBunVersion() {
110
+ if (isBun()) {
111
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
112
+ return String(globalThis.Bun.version);
113
+ }
114
+ return null;
115
+ }
116
+ /**
117
+ * Get Deno version
118
+ */
119
+ function getDenoVersion() {
120
+ if (isDeno()) {
121
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
122
+ const version = globalThis.Deno?.version?.deno;
123
+ return version ?? null;
124
+ }
125
+ return null;
126
+ }
127
+ /**
128
+ * Get Node.js version
129
+ */
130
+ function getNodeVersion() {
131
+ if (isNode()) {
132
+ return globalThis.process.versions.node;
133
+ }
134
+ return null;
135
+ }
136
+ /**
137
+ * Perform runtime detection without caching
138
+ */
139
+ function detectRuntimeUncached() {
140
+ // Check Bun first (Bun also has process.versions.node for compatibility)
141
+ if (isBun()) {
142
+ return {
143
+ runtime: Runtime.Bun,
144
+ version: getBunVersion(),
145
+ supportsHttp2: true,
146
+ supportsGrpcJs: true, // Bun has Node.js compatibility
147
+ isBrowser: false,
148
+ isWorker: false
149
+ };
150
+ }
151
+ // Check Deno
152
+ if (isDeno()) {
153
+ return {
154
+ runtime: Runtime.Deno,
155
+ version: getDenoVersion(),
156
+ supportsHttp2: true,
157
+ supportsGrpcJs: false, // Deno needs npm: specifiers or different transport
158
+ isBrowser: false,
159
+ isWorker: false
160
+ };
161
+ }
162
+ // Check browser/worker environments
163
+ if (isBrowserEnv() || isWorkerEnv()) {
164
+ return {
165
+ runtime: Runtime.Browser,
166
+ version: null,
167
+ supportsHttp2: false, // Browsers don't expose raw HTTP/2
168
+ supportsGrpcJs: false, // Browser needs gRPC-web
169
+ isBrowser: isBrowserEnv(),
170
+ isWorker: isWorkerEnv()
171
+ };
172
+ }
173
+ // Check Node.js
174
+ if (isNode()) {
175
+ return {
176
+ runtime: Runtime.Node,
177
+ version: getNodeVersion(),
178
+ supportsHttp2: true,
179
+ supportsGrpcJs: true,
180
+ isBrowser: false,
181
+ isWorker: false
182
+ };
183
+ }
184
+ // Unknown runtime
185
+ return {
186
+ runtime: Runtime.Unknown,
187
+ version: null,
188
+ supportsHttp2: false,
189
+ supportsGrpcJs: false,
190
+ isBrowser: false,
191
+ isWorker: false
192
+ };
193
+ }
194
+ /**
195
+ * Assert that the current runtime is one of the supported types.
196
+ * Throws if the runtime is not supported.
197
+ *
198
+ * @param supported - Array of supported runtime types
199
+ * @throws Error if current runtime is not in the supported list
200
+ *
201
+ * @example
202
+ * ```typescript
203
+ * // Ensure we're running in Node.js or Bun
204
+ * assertRuntime([Runtime.Node, Runtime.Bun])
205
+ * ```
206
+ */
207
+ export function assertRuntime(supported) {
208
+ const info = detectRuntime();
209
+ if (!supported.includes(info.runtime)) {
210
+ throw new Error(`Unsupported runtime: ${info.runtime}. ` +
211
+ `This operation requires one of: ${supported.join(", ")}`);
212
+ }
213
+ }
214
+ /**
215
+ * Check if the current runtime supports @grpc/grpc-js
216
+ */
217
+ export function supportsGrpcJs() {
218
+ return detectRuntime().supportsGrpcJs;
219
+ }
220
+ /**
221
+ * Check if the current runtime requires gRPC-web transport
222
+ */
223
+ export function requiresGrpcWeb() {
224
+ const info = detectRuntime();
225
+ return info.isBrowser || info.isWorker;
226
+ }
227
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * gRPC-JS Transport
3
+ *
4
+ * Transport implementation using @grpc/grpc-js for Node.js and Bun runtimes.
5
+ */
6
+ import { type DuplexStream, type FlightTransport, type RawAction, type RawActionResult, type RawActionType, type RawFlightData, type RawFlightInfo, type RawHandshakeMessage, type RawPutResult, type RawTicket, type ReadableStream, type TransportMetadata, type TransportOptions } from "./transport.js";
7
+ /**
8
+ * Transport implementation using @grpc/grpc-js.
9
+ * Works with Node.js and Bun runtimes.
10
+ */
11
+ export declare class GrpcJsTransport implements FlightTransport {
12
+ private readonly options;
13
+ private grpcClient;
14
+ private flightService;
15
+ private authToken;
16
+ private connected;
17
+ constructor(options: TransportOptions);
18
+ connect(): Promise<void>;
19
+ close(): void;
20
+ isConnected(): boolean;
21
+ setAuthToken(token: string | null): void;
22
+ getFlightInfo(descriptor: {
23
+ type: number;
24
+ cmd?: Uint8Array;
25
+ path?: string[];
26
+ }, metadata?: TransportMetadata): Promise<RawFlightInfo>;
27
+ getSchema(descriptor: {
28
+ type: number;
29
+ cmd?: Uint8Array;
30
+ path?: string[];
31
+ }, metadata?: TransportMetadata): Promise<{
32
+ schema: Uint8Array;
33
+ }>;
34
+ doGet(ticket: RawTicket, metadata?: TransportMetadata): ReadableStream<RawFlightData>;
35
+ doAction(action: RawAction, metadata?: TransportMetadata): ReadableStream<RawActionResult>;
36
+ listActions(metadata?: TransportMetadata): ReadableStream<RawActionType>;
37
+ listFlights(criteria?: Uint8Array, metadata?: TransportMetadata): ReadableStream<RawFlightInfo>;
38
+ doPut(metadata?: TransportMetadata): DuplexStream<RawFlightData, RawPutResult>;
39
+ doExchange(metadata?: TransportMetadata): DuplexStream<RawFlightData, RawFlightData>;
40
+ handshake(metadata?: TransportMetadata): DuplexStream<RawHandshakeMessage, RawHandshakeMessage>;
41
+ private createCredentials;
42
+ private waitForReady;
43
+ private ensureConnected;
44
+ private createRequestMetadata;
45
+ private serializeDescriptor;
46
+ }
47
+ /**
48
+ * Create a GrpcJsTransport instance
49
+ */
50
+ export declare function createGrpcJsTransport(options: TransportOptions): FlightTransport;
51
+ /**
52
+ * Get the appropriate transport for the current runtime.
53
+ * Returns the GrpcJsTransport for Node.js and Bun.
54
+ *
55
+ * @throws Error if no transport is available for the current runtime
56
+ */
57
+ export declare function getTransportForRuntime(options: TransportOptions): FlightTransport;
58
+ //# sourceMappingURL=transport-grpc-js.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-grpc-js.d.ts","sourceRoot":"","sources":["../src/transport-grpc-js.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,EACL,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,aAAa,EAClB,KAAK,mBAAmB,EACxB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,cAAc,EAEnB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,aAAa,CAAA;AAmEpB;;;GAGG;AACH,qBAAa,eAAgB,YAAW,eAAe;IACrD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAGN;IAElB,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,aAAa,CAA6C;IAClE,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,SAAS,CAAQ;gBAEb,OAAO,EAAE,gBAAgB;IAS/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAgC9B,KAAK,IAAI,IAAI;IAUb,WAAW,IAAI,OAAO;IAItB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI;IAQlC,aAAa,CACjB,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,UAAU,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,EAC/D,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,OAAO,CAAC,aAAa,CAAC;IAyBnB,SAAS,CACb,UAAU,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,UAAU,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,EAC/D,QAAQ,CAAC,EAAE,iBAAiB,GAC3B,OAAO,CAAC;QAAE,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC;IA6BlC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC,aAAa,CAAC;IAarF,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC,eAAe,CAAC;IAa1F,WAAW,CAAC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC,aAAa,CAAC;IAaxE,WAAW,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC,aAAa,CAAC;IAiB/F,KAAK,CAAC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,YAAY,CAAC,aAAa,EAAE,YAAY,CAAC;IAa9E,UAAU,CAAC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,YAAY,CAAC,aAAa,EAAE,aAAa,CAAC;IAapF,SAAS,CAAC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,YAAY,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAmB/F,OAAO,CAAC,iBAAiB;YAUX,YAAY;IAiB1B,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,qBAAqB;IAwB7B,OAAO,CAAC,mBAAmB;CAW5B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAEhF;AAMD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAajF"}
@@ -0,0 +1,300 @@
1
+ /**
2
+ * gRPC-JS Transport
3
+ *
4
+ * Transport implementation using @grpc/grpc-js for Node.js and Bun runtimes.
5
+ */
6
+ import * as grpc from "@grpc/grpc-js";
7
+ import { getFlightServiceDefinition } from "./generated/index.js";
8
+ import { detectRuntime, Runtime } from "./runtime.js";
9
+ import { registerTransport } from "./transport.js";
10
+ // Default values
11
+ const DEFAULT_CONNECT_TIMEOUT_MS = 30_000;
12
+ const DEFAULT_REQUEST_TIMEOUT_MS = 60_000;
13
+ /**
14
+ * Wrap a gRPC readable stream as an async iterable
15
+ */
16
+ async function* wrapReadableStream(stream) {
17
+ const errorHolder = { error: null };
18
+ stream.on("error", (err) => {
19
+ errorHolder.error = err;
20
+ });
21
+ for await (const item of stream) {
22
+ const err = errorHolder.error;
23
+ if (err !== null) {
24
+ throw err;
25
+ }
26
+ yield item;
27
+ }
28
+ // Check for error after stream ends
29
+ const finalErr = errorHolder.error;
30
+ if (finalErr !== null) {
31
+ throw finalErr;
32
+ }
33
+ }
34
+ /**
35
+ * Create a ReadableStream wrapper around a gRPC ClientReadableStream
36
+ */
37
+ function createReadableStream(stream) {
38
+ return {
39
+ [Symbol.asyncIterator]() {
40
+ return wrapReadableStream(stream);
41
+ },
42
+ cancel() {
43
+ stream.cancel();
44
+ }
45
+ };
46
+ }
47
+ /**
48
+ * Create a DuplexStream wrapper around a gRPC ClientDuplexStream
49
+ */
50
+ function createDuplexStream(stream) {
51
+ return {
52
+ [Symbol.asyncIterator]() {
53
+ return wrapReadableStream(stream);
54
+ },
55
+ cancel() {
56
+ stream.cancel();
57
+ },
58
+ write(message) {
59
+ return stream.write(message);
60
+ },
61
+ end() {
62
+ stream.end();
63
+ }
64
+ };
65
+ }
66
+ /**
67
+ * Transport implementation using @grpc/grpc-js.
68
+ * Works with Node.js and Bun runtimes.
69
+ */
70
+ export class GrpcJsTransport {
71
+ options;
72
+ grpcClient = null;
73
+ flightService = null;
74
+ authToken = null;
75
+ connected = false;
76
+ constructor(options) {
77
+ this.options = {
78
+ ...options,
79
+ tls: options.tls,
80
+ connectTimeoutMs: options.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS,
81
+ requestTimeoutMs: options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS
82
+ };
83
+ }
84
+ async connect() {
85
+ if (this.connected) {
86
+ return;
87
+ }
88
+ // Load the Flight service definition
89
+ const packageDef = await getFlightServiceDefinition();
90
+ // Navigate to arrow.flight.protocol.FlightService
91
+ const arrowPackage = packageDef.arrow;
92
+ const flightPackage = arrowPackage.flight;
93
+ const protocolPackage = flightPackage.protocol;
94
+ this.flightService = protocolPackage.FlightService;
95
+ // Create channel credentials
96
+ const credentials = this.createCredentials();
97
+ // Create the gRPC client
98
+ const address = `${this.options.host}:${String(this.options.port)}`;
99
+ this.grpcClient = new this.flightService(address, credentials, {
100
+ "grpc.max_receive_message_length": -1, // Unlimited
101
+ "grpc.max_send_message_length": -1,
102
+ "grpc.keepalive_time_ms": 30_000,
103
+ "grpc.keepalive_timeout_ms": 10_000
104
+ });
105
+ // Wait for channel to be ready
106
+ await this.waitForReady();
107
+ this.connected = true;
108
+ }
109
+ close() {
110
+ if (this.grpcClient) {
111
+ this.grpcClient.close();
112
+ this.grpcClient = null;
113
+ }
114
+ this.flightService = null;
115
+ this.connected = false;
116
+ this.authToken = null;
117
+ }
118
+ isConnected() {
119
+ return this.connected;
120
+ }
121
+ setAuthToken(token) {
122
+ this.authToken = token;
123
+ }
124
+ // --------------------------------------------------------------------------
125
+ // Unary Calls
126
+ // --------------------------------------------------------------------------
127
+ async getFlightInfo(descriptor, metadata) {
128
+ this.ensureConnected();
129
+ return new Promise((resolve, reject) => {
130
+ const client = this.grpcClient;
131
+ const grpcMeta = this.createRequestMetadata(metadata);
132
+ const request = this.serializeDescriptor(descriptor);
133
+ client.getFlightInfo(request, grpcMeta, (error, response) => {
134
+ if (error) {
135
+ reject(error);
136
+ return;
137
+ }
138
+ resolve(response);
139
+ });
140
+ });
141
+ }
142
+ async getSchema(descriptor, metadata) {
143
+ this.ensureConnected();
144
+ return new Promise((resolve, reject) => {
145
+ const client = this.grpcClient;
146
+ const grpcMeta = this.createRequestMetadata(metadata);
147
+ const request = this.serializeDescriptor(descriptor);
148
+ client.getSchema(request, grpcMeta, (error, response) => {
149
+ if (error) {
150
+ reject(error);
151
+ return;
152
+ }
153
+ resolve(response);
154
+ });
155
+ });
156
+ }
157
+ // --------------------------------------------------------------------------
158
+ // Server Streaming
159
+ // --------------------------------------------------------------------------
160
+ doGet(ticket, metadata) {
161
+ this.ensureConnected();
162
+ const client = this.grpcClient;
163
+ const grpcMeta = this.createRequestMetadata(metadata);
164
+ const stream = client.doGet({ ticket: ticket.ticket }, grpcMeta);
165
+ return createReadableStream(stream);
166
+ }
167
+ doAction(action, metadata) {
168
+ this.ensureConnected();
169
+ const client = this.grpcClient;
170
+ const grpcMeta = this.createRequestMetadata(metadata);
171
+ const stream = client.doAction(action, grpcMeta);
172
+ return createReadableStream(stream);
173
+ }
174
+ listActions(metadata) {
175
+ this.ensureConnected();
176
+ const client = this.grpcClient;
177
+ const grpcMeta = this.createRequestMetadata(metadata);
178
+ const stream = client.listActions({}, grpcMeta);
179
+ return createReadableStream(stream);
180
+ }
181
+ listFlights(criteria, metadata) {
182
+ this.ensureConnected();
183
+ const client = this.grpcClient;
184
+ const grpcMeta = this.createRequestMetadata(metadata);
185
+ const stream = client.listFlights({ expression: criteria }, grpcMeta);
186
+ return createReadableStream(stream);
187
+ }
188
+ // --------------------------------------------------------------------------
189
+ // Bidirectional Streaming
190
+ // --------------------------------------------------------------------------
191
+ doPut(metadata) {
192
+ this.ensureConnected();
193
+ const client = this.grpcClient;
194
+ const grpcMeta = this.createRequestMetadata(metadata);
195
+ const stream = client.doPut(grpcMeta);
196
+ return createDuplexStream(stream);
197
+ }
198
+ doExchange(metadata) {
199
+ this.ensureConnected();
200
+ const client = this.grpcClient;
201
+ const grpcMeta = this.createRequestMetadata(metadata);
202
+ const stream = client.doExchange(grpcMeta);
203
+ return createDuplexStream(stream);
204
+ }
205
+ handshake(metadata) {
206
+ this.ensureConnected();
207
+ const client = this.grpcClient;
208
+ const grpcMeta = this.createRequestMetadata(metadata);
209
+ const stream = client.handshake(grpcMeta);
210
+ return createDuplexStream(stream);
211
+ }
212
+ // --------------------------------------------------------------------------
213
+ // Private Helpers
214
+ // --------------------------------------------------------------------------
215
+ createCredentials() {
216
+ if (this.options.credentials !== undefined) {
217
+ return this.options.credentials;
218
+ }
219
+ if (this.options.tls) {
220
+ return grpc.credentials.createSsl();
221
+ }
222
+ return grpc.credentials.createInsecure();
223
+ }
224
+ async waitForReady() {
225
+ const client = this.grpcClient;
226
+ if (!client) {
227
+ throw new Error("gRPC client not initialized");
228
+ }
229
+ return new Promise((resolve, reject) => {
230
+ const deadline = Date.now() + this.options.connectTimeoutMs;
231
+ client.waitForReady(deadline, (error) => {
232
+ if (error) {
233
+ reject(error);
234
+ }
235
+ else {
236
+ resolve();
237
+ }
238
+ });
239
+ });
240
+ }
241
+ ensureConnected() {
242
+ if (!this.connected || !this.grpcClient) {
243
+ throw new Error("Transport not connected. Call connect() first.");
244
+ }
245
+ }
246
+ createRequestMetadata(additional) {
247
+ const meta = new grpc.Metadata();
248
+ // Add auth token if present
249
+ if (this.authToken !== null && this.authToken !== "") {
250
+ meta.set("authorization", `Bearer ${this.authToken}`);
251
+ }
252
+ // Add additional metadata
253
+ if (additional) {
254
+ for (const [key, value] of Object.entries(additional)) {
255
+ if (Array.isArray(value)) {
256
+ for (const v of value) {
257
+ meta.add(key, v);
258
+ }
259
+ }
260
+ else {
261
+ meta.set(key, value);
262
+ }
263
+ }
264
+ }
265
+ return meta;
266
+ }
267
+ serializeDescriptor(descriptor) {
268
+ return {
269
+ type: descriptor.type,
270
+ cmd: descriptor.cmd,
271
+ path: descriptor.path
272
+ };
273
+ }
274
+ }
275
+ /**
276
+ * Create a GrpcJsTransport instance
277
+ */
278
+ export function createGrpcJsTransport(options) {
279
+ return new GrpcJsTransport(options);
280
+ }
281
+ // Register for Node.js and Bun runtimes
282
+ registerTransport(Runtime.Node, createGrpcJsTransport);
283
+ registerTransport(Runtime.Bun, createGrpcJsTransport);
284
+ /**
285
+ * Get the appropriate transport for the current runtime.
286
+ * Returns the GrpcJsTransport for Node.js and Bun.
287
+ *
288
+ * @throws Error if no transport is available for the current runtime
289
+ */
290
+ export function getTransportForRuntime(options) {
291
+ const info = detectRuntime();
292
+ // Check for supported runtimes
293
+ const supportedRuntimes = [Runtime.Node, Runtime.Bun];
294
+ if (supportedRuntimes.includes(info.runtime)) {
295
+ return new GrpcJsTransport(options);
296
+ }
297
+ throw new Error(`No transport available for runtime: ${info.runtime}. ` +
298
+ `Supported runtimes: ${supportedRuntimes.join(", ")}`);
299
+ }
300
+ //# sourceMappingURL=transport-grpc-js.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-grpc-js.js","sourceRoot":"","sources":["../src/transport-grpc-js.ts"],"names":[],"mappings":"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"}