@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.
- package/README.md +93 -50
- package/dist/client.d.ts +6 -9
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +157 -206
- package/dist/client.js.map +1 -1
- package/dist/index.d.ts +19 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +13 -9
- package/dist/index.js.map +1 -1
- package/dist/pool.d.ts +3 -3
- package/dist/pool.js +3 -3
- package/dist/proto.d.ts +10 -0
- package/dist/proto.d.ts.map +1 -1
- package/dist/proto.js +15 -0
- package/dist/proto.js.map +1 -1
- package/dist/retry.d.ts +1 -1
- package/dist/runtime.d.ts +82 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +227 -0
- package/dist/runtime.js.map +1 -0
- package/dist/transport-grpc-js.d.ts +58 -0
- package/dist/transport-grpc-js.d.ts.map +1 -0
- package/dist/transport-grpc-js.js +300 -0
- package/dist/transport-grpc-js.js.map +1 -0
- package/dist/transport.d.ts +223 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +35 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +5 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +21 -3
- package/proto/Flight.proto +645 -0
- package/proto/FlightSql.proto +1925 -0
package/dist/runtime.js
ADDED
|
@@ -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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"}
|