@qualithm/arrow-flight-sql-js 0.2.0 → 0.3.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 CHANGED
@@ -494,13 +494,100 @@ type AuthConfig =
494
494
 
495
495
  ### Runtime Support
496
496
 
497
- | Runtime | Status | Notes |
498
- | ------------------ | ------------ | ---------------------- |
499
- | Node.js 20+ | ✅ Supported | Primary target |
500
- | Bun | ✅ Supported | Development runtime |
501
- | Deno | 🔄 Planned | Via npm compatibility |
502
- | Cloudflare Workers | 🔄 Planned | Requires custom HTTP/2 |
503
- | Browser | 🔄 Planned | Via gRPC-web proxy |
497
+ | Runtime | Status | Transport | Notes |
498
+ | ------------------ | ------------ | --------- | ----------------------- |
499
+ | Node.js 20+ | ✅ Supported | gRPC-JS | Full feature support |
500
+ | Bun | ✅ Supported | gRPC-JS | Development runtime |
501
+ | Deno | Supported | gRPC-Web | Requires gRPC-web proxy |
502
+ | Browser | Supported | gRPC-Web | Requires gRPC-web proxy |
503
+ | Cloudflare Workers | Supported | gRPC-Web | Requires gRPC-web proxy |
504
+
505
+ ### Browser & Deno Usage
506
+
507
+ Browser and Deno environments use the gRPC-Web transport, which requires a gRPC-Web proxy (like
508
+ [Envoy](https://www.envoyproxy.io/)) in front of your Flight SQL server.
509
+
510
+ ```typescript
511
+ // Browser or Deno
512
+ import { FlightSqlClient, createGrpcWebTransport } from "@qualithm/arrow-flight-sql-js"
513
+
514
+ // Create a gRPC-Web transport explicitly
515
+ const transport = createGrpcWebTransport({
516
+ host: "your-grpc-web-proxy.example.com",
517
+ port: 8080,
518
+ tls: true
519
+ })
520
+
521
+ // Create client with custom transport
522
+ const client = new FlightSqlClient({
523
+ host: "your-grpc-web-proxy.example.com",
524
+ port: 8080,
525
+ tls: true,
526
+ transport
527
+ })
528
+
529
+ await client.connect()
530
+ const result = await client.query("SELECT * FROM my_table")
531
+ ```
532
+
533
+ **gRPC-Web Limitations:**
534
+
535
+ - Client streaming (`DoPut`) is not supported
536
+ - Bidirectional streaming (`DoExchange`, `Handshake`) is not supported
537
+ - Use bearer token auth via `setAuthToken()` instead of `Handshake`
538
+
539
+ **Envoy gRPC-Web Proxy Example:**
540
+
541
+ ```yaml
542
+ # envoy.yaml
543
+ static_resources:
544
+ listeners:
545
+ - address:
546
+ socket_address:
547
+ address: 0.0.0.0
548
+ port_value: 8080
549
+ filter_chains:
550
+ - filters:
551
+ - name: envoy.filters.network.http_connection_manager
552
+ typed_config:
553
+ "@type": type.googleapis.com/envoy.extensions.filters.network.http_connection_manager.v3.HttpConnectionManager
554
+ codec_type: AUTO
555
+ stat_prefix: ingress_http
556
+ route_config:
557
+ name: local_route
558
+ virtual_hosts:
559
+ - name: backend
560
+ domains: ["*"]
561
+ routes:
562
+ - match: { prefix: "/" }
563
+ route:
564
+ cluster: flight_sql_backend
565
+ cors:
566
+ allow_origin_string_match:
567
+ - prefix: "*"
568
+ allow_methods: "GET, PUT, DELETE, POST, OPTIONS"
569
+ allow_headers: "content-type,x-grpc-web,x-user-agent"
570
+ expose_headers: "grpc-status,grpc-message"
571
+ http_filters:
572
+ - name: envoy.filters.http.grpc_web
573
+ - name: envoy.filters.http.cors
574
+ - name: envoy.filters.http.router
575
+ clusters:
576
+ - name: flight_sql_backend
577
+ connect_timeout: 0.25s
578
+ type: LOGICAL_DNS
579
+ http2_protocol_options: {}
580
+ lb_policy: ROUND_ROBIN
581
+ load_assignment:
582
+ cluster_name: flight_sql_backend
583
+ endpoints:
584
+ - lb_endpoints:
585
+ - endpoint:
586
+ address:
587
+ socket_address:
588
+ address: your-flight-sql-server
589
+ port_value: 50051
590
+ ```
504
591
 
505
592
  ### Flight SQL Servers
506
593
 
package/dist/index.d.ts CHANGED
@@ -45,4 +45,5 @@ export { assertRuntime, clearRuntimeCache, detectRuntime, requiresGrpcWeb, Runti
45
45
  export type { DuplexStream, FlightTransport, RawAction, RawActionResult, RawActionType, RawFlightData, RawFlightInfo, RawHandshakeMessage, RawPutResult, RawTicket, ReadableStream, TransportError, TransportFactory, TransportMetadata, TransportOptions, WritableStream } from "./transport.js";
46
46
  export { getRegisteredRuntimes, getTransportFactory, registerTransport } from "./transport.js";
47
47
  export { createGrpcJsTransport, getTransportForRuntime, GrpcJsTransport } from "./transport-grpc-js.js";
48
+ export { createGrpcWebTransport, getWebTransport, GrpcWebTransport } from "./transport-grpc-web.js";
48
49
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAGxF,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,EACb,UAAU,EACV,YAAY,EACb,MAAM,UAAU,CAAA;AAGjB,OAAO,EACL,cAAc,EACd,cAAc,EACd,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,cAAc,EACf,MAAM,SAAS,CAAA;AAGhB,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,EAC3B,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,QAAQ,EACT,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAGtC,YAAY,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAC1C,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,SAAS,EACV,MAAM,SAAS,CAAA;AAGhB,YAAY,EACV,YAAY,EACZ,UAAU,EACV,WAAW,EACX,cAAc,EACd,eAAe,EACf,aAAa,EACd,MAAM,WAAW,CAAA;AAClB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,WAAW,EACZ,MAAM,WAAW,CAAA;AAGlB,YAAY,EACV,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EAEX,cAAc,EACd,UAAU,EACV,gBAAgB,EAChB,cAAc,EACd,UAAU,EAEV,sBAAsB,EACtB,cAAc,EAEd,eAAe,EACf,QAAQ,EAER,WAAW,EACX,SAAS,EACT,wBAAwB,EACxB,uBAAuB,EACvB,cAAc,EACd,SAAS,EAET,iBAAiB,EAEjB,YAAY,EACZ,UAAU,EACV,YAAY,EAEZ,gBAAgB,EAChB,kBAAkB,EAClB,oBAAoB,EACpB,SAAS,EACT,SAAS,EACT,MAAM,EACN,YAAY,EACb,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAGnF,YAAY,EACV,UAAU,EACV,UAAU,EACV,kBAAkB,EAClB,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,SAAS,EACT,aAAa,EACb,aAAa,EACb,QAAQ,EACR,cAAc,EACf,MAAM,iBAAiB,CAAA;AACxB,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,EACZ,GAAG,EACH,MAAM,EACN,MAAM,EACP,MAAM,iBAAiB,CAAA;AAGxB,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACzD,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,OAAO,EACP,cAAc,EACf,MAAM,WAAW,CAAA;AAGlB,YAAY,EACV,YAAY,EACZ,eAAe,EACf,SAAS,EACT,eAAe,EACf,aAAa,EACb,aAAa,EACb,aAAa,EACb,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACf,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAG3F,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAGpG,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA"}
package/dist/index.js CHANGED
@@ -44,4 +44,6 @@ export { assertRuntime, clearRuntimeCache, detectRuntime, requiresGrpcWeb, Runti
44
44
  export { getRegisteredRuntimes, getTransportFactory, registerTransport } from "./transport.js";
45
45
  // gRPC-JS transport (Node.js/Bun)
46
46
  export { createGrpcJsTransport, getTransportForRuntime, GrpcJsTransport } from "./transport-grpc-js.js";
47
+ // gRPC-Web transport (Browser/Workers)
48
+ export { createGrpcWebTransport, getWebTransport, GrpcWebTransport } from "./transport-grpc-web.js";
47
49
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAExF,cAAc;AACd,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,EACb,UAAU,EACV,YAAY,EACb,MAAM,UAAU,CAAA;AAEjB,kBAAkB;AAClB,OAAO,EACL,cAAc,EACd,cAAc,EACd,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,cAAc,EACf,MAAM,SAAS,CAAA;AAEhB,0CAA0C;AAC1C,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,EAC3B,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,QAAQ,EACT,MAAM,SAAS,CAAA;AAEhB,kBAAkB;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAItC,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,SAAS,EACV,MAAM,SAAS,CAAA;AAWhB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,WAAW,EACZ,MAAM,WAAW,CAAA;AA4ClB,2EAA2E;AAC3E,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAgBnF,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,EACZ,GAAG,EACH,MAAM,EACN,MAAM,EACP,MAAM,iBAAiB,CAAA;AAIxB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,OAAO,EACP,cAAc,EACf,MAAM,WAAW,CAAA;AAqBlB,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE3F,kCAAkC;AAClC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAIH,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAExF,cAAc;AACd,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,aAAa,EACb,UAAU,EACV,YAAY,EACb,MAAM,UAAU,CAAA;AAEjB,kBAAkB;AAClB,OAAO,EACL,cAAc,EACd,cAAc,EACd,WAAW,EACX,eAAe,EACf,qBAAqB,EACrB,WAAW,EACX,cAAc,EACd,cAAc,EACf,MAAM,SAAS,CAAA;AAEhB,0CAA0C;AAC1C,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,4BAA4B,EAC5B,4BAA4B,EAC5B,2BAA2B,EAC3B,sBAAsB,EACtB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,QAAQ,EACT,MAAM,SAAS,CAAA;AAEhB,kBAAkB;AAClB,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAA;AAItC,OAAO,EACL,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,aAAa,EACb,WAAW,EACX,SAAS,EACV,MAAM,SAAS,CAAA;AAWhB,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,WAAW,EACX,YAAY,EACZ,kBAAkB,EAClB,UAAU,EACV,WAAW,EACZ,MAAM,WAAW,CAAA;AA4ClB,2EAA2E;AAC3E,OAAO,EAAE,cAAc,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAgBnF,OAAO,EACL,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY,EACZ,GAAG,EACH,MAAM,EACN,MAAM,EACP,MAAM,iBAAiB,CAAA;AAIxB,OAAO,EACL,aAAa,EACb,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,OAAO,EACP,cAAc,EACf,MAAM,WAAW,CAAA;AAqBlB,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAE3F,kCAAkC;AAClC,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAEpG,uCAAuC;AACvC,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * gRPC-Web Transport
3
+ *
4
+ * Transport implementation using the gRPC-web protocol for browser and
5
+ * Cloudflare Workers environments. Uses the native Fetch API.
6
+ *
7
+ * Limitations:
8
+ * - Client streaming (DoPut) and bidirectional streaming (DoExchange, Handshake)
9
+ * are not fully supported in gRPC-web. These methods will throw an error.
10
+ * - Requires a gRPC-web proxy (e.g., Envoy, grpcwebproxy) in front of the
11
+ * Flight SQL server.
12
+ *
13
+ * @see https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-WEB.md
14
+ */
15
+ 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";
16
+ /**
17
+ * Transport implementation using gRPC-web protocol.
18
+ * Works with browsers and Cloudflare Workers.
19
+ *
20
+ * Requires a gRPC-web proxy in front of the Flight SQL server.
21
+ */
22
+ export declare class GrpcWebTransport implements FlightTransport {
23
+ private readonly options;
24
+ private authToken;
25
+ private connected;
26
+ private readonly baseUrl;
27
+ constructor(options: TransportOptions);
28
+ connect(): Promise<void>;
29
+ close(): void;
30
+ isConnected(): boolean;
31
+ setAuthToken(token: string | null): void;
32
+ getFlightInfo(descriptor: {
33
+ type: number;
34
+ cmd?: Uint8Array;
35
+ path?: string[];
36
+ }, metadata?: TransportMetadata): Promise<RawFlightInfo>;
37
+ getSchema(descriptor: {
38
+ type: number;
39
+ cmd?: Uint8Array;
40
+ path?: string[];
41
+ }, metadata?: TransportMetadata): Promise<{
42
+ schema: Uint8Array;
43
+ }>;
44
+ doGet(ticket: RawTicket, metadata?: TransportMetadata): ReadableStream<RawFlightData>;
45
+ doAction(action: RawAction, metadata?: TransportMetadata): ReadableStream<RawActionResult>;
46
+ listActions(metadata?: TransportMetadata): ReadableStream<RawActionType>;
47
+ listFlights(criteria?: Uint8Array, metadata?: TransportMetadata): ReadableStream<RawFlightInfo>;
48
+ doPut(_metadata?: TransportMetadata): DuplexStream<RawFlightData, RawPutResult>;
49
+ doExchange(_metadata?: TransportMetadata): DuplexStream<RawFlightData, RawFlightData>;
50
+ handshake(_metadata?: TransportMetadata): DuplexStream<RawHandshakeMessage, RawHandshakeMessage>;
51
+ private createHeaders;
52
+ private unaryCall;
53
+ private serverStreamingCall;
54
+ private ensureConnected;
55
+ }
56
+ /**
57
+ * Create a GrpcWebTransport instance
58
+ */
59
+ export declare function createGrpcWebTransport(options: TransportOptions): FlightTransport;
60
+ /**
61
+ * Get the appropriate web transport for browser environments.
62
+ *
63
+ * @throws Error if called in a non-browser environment
64
+ */
65
+ export declare function getWebTransport(options: TransportOptions): FlightTransport;
66
+ //# sourceMappingURL=transport-grpc-web.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-grpc-web.d.ts","sourceRoot":"","sources":["../src/transport-grpc-web.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,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,EAGnB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACtB,MAAM,aAAa,CAAA;AA4iBpB;;;;;GAKG;AACH,qBAAa,gBAAiB,YAAW,eAAe;IACtD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAGN;IAElB,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,SAAS,CAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;gBAEpB,OAAO,EAAE,gBAAgB;IAY/B,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAuC9B,KAAK,IAAI,IAAI;IAKb,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;IAUnB,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;IAclC,KAAK,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC,aAAa,CAAC;IAUrF,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC,eAAe,CAAC;IAU1F,WAAW,CAAC,QAAQ,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC,aAAa,CAAC;IAWxE,WAAW,CAAC,QAAQ,CAAC,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,iBAAiB,GAAG,cAAc,CAAC,aAAa,CAAC;IAc/F,KAAK,CAAC,SAAS,CAAC,EAAE,iBAAiB,GAAG,YAAY,CAAC,aAAa,EAAE,YAAY,CAAC;IAO/E,UAAU,CAAC,SAAS,CAAC,EAAE,iBAAiB,GAAG,YAAY,CAAC,aAAa,EAAE,aAAa,CAAC;IAOrF,SAAS,CAAC,SAAS,CAAC,EAAE,iBAAiB,GAAG,YAAY,CAAC,mBAAmB,EAAE,mBAAmB,CAAC;IAWhG,OAAO,CAAC,aAAa;YA2BP,SAAS;IAoEvB,OAAO,CAAC,mBAAmB;IA+F3B,OAAO,CAAC,eAAe;CAKxB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAEjF;AAQD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,eAAe,CAE1E"}
@@ -0,0 +1,752 @@
1
+ /**
2
+ * gRPC-Web Transport
3
+ *
4
+ * Transport implementation using the gRPC-web protocol for browser and
5
+ * Cloudflare Workers environments. Uses the native Fetch API.
6
+ *
7
+ * Limitations:
8
+ * - Client streaming (DoPut) and bidirectional streaming (DoExchange, Handshake)
9
+ * are not fully supported in gRPC-web. These methods will throw an error.
10
+ * - Requires a gRPC-web proxy (e.g., Envoy, grpcwebproxy) in front of the
11
+ * Flight SQL server.
12
+ *
13
+ * @see https://github.com/grpc/grpc/blob/master/doc/PROTOCOL-WEB.md
14
+ */
15
+ import { Runtime } from "./runtime.js";
16
+ import { registerTransport } from "./transport.js";
17
+ // gRPC-web content types
18
+ const GRPC_WEB_CONTENT_TYPE = "application/grpc-web+proto";
19
+ // const GRPC_WEB_TEXT_CONTENT_TYPE = "application/grpc-web-text+proto" // For base64 mode
20
+ // gRPC-web frame flags
21
+ const DATA_FRAME = 0x00;
22
+ const TRAILER_FRAME = 0x80;
23
+ // gRPC status codes
24
+ const GRPC_STATUS = {
25
+ OK: 0,
26
+ CANCELLED: 1,
27
+ UNKNOWN: 2,
28
+ INVALID_ARGUMENT: 3,
29
+ DEADLINE_EXCEEDED: 4,
30
+ NOT_FOUND: 5,
31
+ ALREADY_EXISTS: 6,
32
+ PERMISSION_DENIED: 7,
33
+ RESOURCE_EXHAUSTED: 8,
34
+ FAILED_PRECONDITION: 9,
35
+ ABORTED: 10,
36
+ OUT_OF_RANGE: 11,
37
+ UNIMPLEMENTED: 12,
38
+ INTERNAL: 13,
39
+ UNAVAILABLE: 14,
40
+ DATA_LOSS: 15,
41
+ UNAUTHENTICATED: 16
42
+ };
43
+ // Default values
44
+ const DEFAULT_CONNECT_TIMEOUT_MS = 30_000;
45
+ const DEFAULT_REQUEST_TIMEOUT_MS = 60_000;
46
+ // Flight service path
47
+ const FLIGHT_SERVICE_PATH = "/arrow.flight.protocol.FlightService";
48
+ // ============================================================================
49
+ // Protobuf Wire Format Helpers
50
+ // ============================================================================
51
+ /**
52
+ * Encode a varint (variable-length integer)
53
+ */
54
+ function encodeVarint(value) {
55
+ const bytes = [];
56
+ let v = value >>> 0;
57
+ while (v > 0x7f) {
58
+ bytes.push((v & 0x7f) | 0x80);
59
+ v >>>= 7;
60
+ }
61
+ bytes.push(v);
62
+ return new Uint8Array(bytes);
63
+ }
64
+ /**
65
+ * Decode a varint from a buffer at a given offset
66
+ * Returns [value, bytesRead]
67
+ */
68
+ function decodeVarint(buffer, offset) {
69
+ let result = 0;
70
+ let shift = 0;
71
+ let bytesRead = 0;
72
+ while (offset + bytesRead < buffer.length) {
73
+ const byte = buffer[offset + bytesRead];
74
+ result |= (byte & 0x7f) << shift;
75
+ bytesRead++;
76
+ if ((byte & 0x80) === 0) {
77
+ break;
78
+ }
79
+ shift += 7;
80
+ }
81
+ return [result >>> 0, bytesRead];
82
+ }
83
+ /**
84
+ * Encode a field tag
85
+ */
86
+ function encodeTag(fieldNumber, wireType) {
87
+ return encodeVarint((fieldNumber << 3) | wireType);
88
+ }
89
+ /**
90
+ * Encode a string field
91
+ */
92
+ function encodeStringField(fieldNumber, value) {
93
+ const encoder = new TextEncoder();
94
+ const bytes = encoder.encode(value);
95
+ return encodeBytesField(fieldNumber, bytes);
96
+ }
97
+ /**
98
+ * Encode a bytes field
99
+ */
100
+ function encodeBytesField(fieldNumber, value) {
101
+ const tag = encodeTag(fieldNumber, 2); // wire type 2 = length-delimited
102
+ const length = encodeVarint(value.length);
103
+ const result = new Uint8Array(tag.length + length.length + value.length);
104
+ result.set(tag, 0);
105
+ result.set(length, tag.length);
106
+ result.set(value, tag.length + length.length);
107
+ return result;
108
+ }
109
+ /**
110
+ * Encode a varint field
111
+ */
112
+ function encodeVarintField(fieldNumber, value) {
113
+ const tag = encodeTag(fieldNumber, 0); // wire type 0 = varint
114
+ const varint = encodeVarint(value);
115
+ const result = new Uint8Array(tag.length + varint.length);
116
+ result.set(tag, 0);
117
+ result.set(varint, tag.length);
118
+ return result;
119
+ }
120
+ /**
121
+ * Concatenate multiple Uint8Arrays
122
+ */
123
+ function concat(...arrays) {
124
+ const filtered = arrays.filter((a) => a.length > 0);
125
+ if (filtered.length === 0) {
126
+ return new Uint8Array(0);
127
+ }
128
+ if (filtered.length === 1) {
129
+ return filtered[0];
130
+ }
131
+ const totalLength = filtered.reduce((sum, arr) => sum + arr.length, 0);
132
+ const result = new Uint8Array(totalLength);
133
+ let offset = 0;
134
+ for (const arr of filtered) {
135
+ result.set(arr, offset);
136
+ offset += arr.length;
137
+ }
138
+ return result;
139
+ }
140
+ // ============================================================================
141
+ // Protobuf Message Encoders
142
+ // ============================================================================
143
+ /**
144
+ * Encode a FlightDescriptor message
145
+ */
146
+ function encodeFlightDescriptor(descriptor) {
147
+ const parts = [];
148
+ // field 1: type (enum as varint)
149
+ parts.push(encodeVarintField(1, descriptor.type));
150
+ // field 2: cmd (bytes)
151
+ if (descriptor.cmd && descriptor.cmd.length > 0) {
152
+ parts.push(encodeBytesField(2, descriptor.cmd));
153
+ }
154
+ // field 3: path (repeated string)
155
+ if (descriptor.path) {
156
+ for (const p of descriptor.path) {
157
+ parts.push(encodeStringField(3, p));
158
+ }
159
+ }
160
+ return concat(...parts);
161
+ }
162
+ /**
163
+ * Encode a Ticket message
164
+ */
165
+ function encodeTicket(ticket) {
166
+ return encodeBytesField(1, ticket.ticket);
167
+ }
168
+ /**
169
+ * Encode an Action message
170
+ */
171
+ function encodeAction(action) {
172
+ const parts = [];
173
+ // field 1: type (string)
174
+ parts.push(encodeStringField(1, action.type));
175
+ // field 2: body (bytes)
176
+ if (action.body && action.body.length > 0) {
177
+ parts.push(encodeBytesField(2, action.body));
178
+ }
179
+ return concat(...parts);
180
+ }
181
+ /**
182
+ * Encode a Criteria message
183
+ */
184
+ function encodeCriteria(expression) {
185
+ if (!expression || expression.length === 0) {
186
+ return new Uint8Array(0);
187
+ }
188
+ return encodeBytesField(1, expression);
189
+ }
190
+ /**
191
+ * Parse protobuf fields from a buffer
192
+ */
193
+ function parseProtoFields(buffer) {
194
+ const fields = [];
195
+ let offset = 0;
196
+ while (offset < buffer.length) {
197
+ const [tag, tagBytes] = decodeVarint(buffer, offset);
198
+ offset += tagBytes;
199
+ const fieldNumber = tag >>> 3;
200
+ const wireType = tag & 0x07;
201
+ if (wireType === 0) {
202
+ // Varint
203
+ const [value, valueBytes] = decodeVarint(buffer, offset);
204
+ offset += valueBytes;
205
+ fields.push({ fieldNumber, wireType, data: value });
206
+ }
207
+ else if (wireType === 2) {
208
+ // Length-delimited
209
+ const [length, lengthBytes] = decodeVarint(buffer, offset);
210
+ offset += lengthBytes;
211
+ const data = buffer.slice(offset, offset + length);
212
+ offset += length;
213
+ fields.push({ fieldNumber, wireType, data });
214
+ }
215
+ else if (wireType === 1) {
216
+ // 64-bit fixed
217
+ const data = buffer.slice(offset, offset + 8);
218
+ offset += 8;
219
+ fields.push({ fieldNumber, wireType, data });
220
+ }
221
+ else if (wireType === 5) {
222
+ // 32-bit fixed
223
+ const data = buffer.slice(offset, offset + 4);
224
+ offset += 4;
225
+ fields.push({ fieldNumber, wireType, data });
226
+ }
227
+ else {
228
+ // Unknown wire type, skip
229
+ break;
230
+ }
231
+ }
232
+ return fields;
233
+ }
234
+ /**
235
+ * Get a bytes field value
236
+ */
237
+ function getBytesField(fields, fieldNumber) {
238
+ const field = fields.find((f) => f.fieldNumber === fieldNumber && f.wireType === 2);
239
+ return field?.data instanceof Uint8Array ? field.data : undefined;
240
+ }
241
+ /**
242
+ * Get a string field value
243
+ */
244
+ function getStringField(fields, fieldNumber) {
245
+ const bytes = getBytesField(fields, fieldNumber);
246
+ if (!bytes) {
247
+ return undefined;
248
+ }
249
+ return new TextDecoder().decode(bytes);
250
+ }
251
+ /**
252
+ * Get a varint field value
253
+ */
254
+ function getVarintField(fields, fieldNumber) {
255
+ const field = fields.find((f) => f.fieldNumber === fieldNumber && f.wireType === 0);
256
+ return typeof field?.data === "number" ? field.data : undefined;
257
+ }
258
+ /**
259
+ * Get all repeated bytes fields
260
+ */
261
+ function getRepeatedBytesField(fields, fieldNumber) {
262
+ return fields
263
+ .filter((f) => f.fieldNumber === fieldNumber && f.wireType === 2 && f.data instanceof Uint8Array)
264
+ .map((f) => f.data);
265
+ }
266
+ /**
267
+ * Decode a FlightInfo message
268
+ */
269
+ function decodeFlightInfo(buffer) {
270
+ const fields = parseProtoFields(buffer);
271
+ const result = {};
272
+ // field 1: schema
273
+ const schema = getBytesField(fields, 1);
274
+ if (schema) {
275
+ result.schema = schema;
276
+ }
277
+ // field 2: flight_descriptor (nested message)
278
+ const descriptorBytes = getBytesField(fields, 2);
279
+ if (descriptorBytes) {
280
+ const descFields = parseProtoFields(descriptorBytes);
281
+ result.flightDescriptor = {
282
+ type: getVarintField(descFields, 1) ?? 0,
283
+ cmd: getBytesField(descFields, 2),
284
+ path: getRepeatedBytesField(descFields, 3).map((b) => new TextDecoder().decode(b))
285
+ };
286
+ }
287
+ // field 3: endpoint (repeated, nested message)
288
+ const endpointMessages = getRepeatedBytesField(fields, 3);
289
+ if (endpointMessages.length > 0) {
290
+ result.endpoint = endpointMessages.map((epBytes) => {
291
+ const epFields = parseProtoFields(epBytes);
292
+ const ep = {};
293
+ // field 1: ticket
294
+ const ticketBytes = getBytesField(epFields, 1);
295
+ if (ticketBytes) {
296
+ const ticketFields = parseProtoFields(ticketBytes);
297
+ const ticket = getBytesField(ticketFields, 1);
298
+ if (ticket) {
299
+ ep.ticket = { ticket };
300
+ }
301
+ }
302
+ // field 2: location (repeated)
303
+ const locationMessages = getRepeatedBytesField(epFields, 2);
304
+ if (locationMessages.length > 0) {
305
+ ep.location = locationMessages.map((locBytes) => {
306
+ const locFields = parseProtoFields(locBytes);
307
+ return { uri: getStringField(locFields, 1) ?? "" };
308
+ });
309
+ }
310
+ return ep;
311
+ });
312
+ }
313
+ // field 4: total_records
314
+ const totalRecords = getVarintField(fields, 4);
315
+ if (totalRecords !== undefined) {
316
+ result.totalRecords = totalRecords;
317
+ }
318
+ // field 5: total_bytes
319
+ const totalBytes = getVarintField(fields, 5);
320
+ if (totalBytes !== undefined) {
321
+ result.totalBytes = totalBytes;
322
+ }
323
+ return result;
324
+ }
325
+ /**
326
+ * Decode a FlightData message
327
+ */
328
+ function decodeFlightData(buffer) {
329
+ const fields = parseProtoFields(buffer);
330
+ const result = {};
331
+ // field 1: flight_descriptor
332
+ const descriptorBytes = getBytesField(fields, 1);
333
+ if (descriptorBytes) {
334
+ const descFields = parseProtoFields(descriptorBytes);
335
+ result.flightDescriptor = {
336
+ type: getVarintField(descFields, 1) ?? 0,
337
+ cmd: getBytesField(descFields, 2),
338
+ path: getRepeatedBytesField(descFields, 3).map((b) => new TextDecoder().decode(b))
339
+ };
340
+ }
341
+ // field 2: data_header
342
+ result.dataHeader = getBytesField(fields, 2);
343
+ // field 1000: data_body
344
+ result.dataBody = getBytesField(fields, 1000);
345
+ // field 3: app_metadata
346
+ result.appMetadata = getBytesField(fields, 3);
347
+ return result;
348
+ }
349
+ /**
350
+ * Decode a Result message (from DoAction)
351
+ */
352
+ function decodeActionResult(buffer) {
353
+ const fields = parseProtoFields(buffer);
354
+ return {
355
+ body: getBytesField(fields, 1)
356
+ };
357
+ }
358
+ /**
359
+ * Decode an ActionType message
360
+ */
361
+ function decodeActionType(buffer) {
362
+ const fields = parseProtoFields(buffer);
363
+ return {
364
+ type: getStringField(fields, 1) ?? "",
365
+ description: getStringField(fields, 2)
366
+ };
367
+ }
368
+ /**
369
+ * Decode a SchemaResult message
370
+ */
371
+ function decodeSchemaResult(buffer) {
372
+ const fields = parseProtoFields(buffer);
373
+ return {
374
+ schema: getBytesField(fields, 1) ?? new Uint8Array(0)
375
+ };
376
+ }
377
+ // ============================================================================
378
+ // gRPC-Web Framing
379
+ // ============================================================================
380
+ /**
381
+ * Frame a message for gRPC-web (5-byte header + payload)
382
+ */
383
+ function frameMessage(data) {
384
+ const { length } = data;
385
+ const frame = new Uint8Array(5 + length);
386
+ // Byte 0: flags (0x00 = data frame)
387
+ frame[0] = DATA_FRAME;
388
+ // Bytes 1-4: length (big-endian)
389
+ frame[1] = (length >>> 24) & 0xff;
390
+ frame[2] = (length >>> 16) & 0xff;
391
+ frame[3] = (length >>> 8) & 0xff;
392
+ frame[4] = length & 0xff;
393
+ // Payload
394
+ frame.set(data, 5);
395
+ return frame.buffer;
396
+ }
397
+ /**
398
+ * Parse gRPC-web frames from response body
399
+ */
400
+ async function* parseGrpcWebFrames(reader) {
401
+ let buffer = new Uint8Array(0);
402
+ let streamDone = false;
403
+ while (!streamDone) {
404
+ const { done, value } = await reader.read();
405
+ if (value) {
406
+ // Append new data to buffer
407
+ const newBuffer = new Uint8Array(buffer.length + value.length);
408
+ newBuffer.set(buffer, 0);
409
+ newBuffer.set(value, buffer.length);
410
+ buffer = newBuffer;
411
+ }
412
+ // Parse complete frames
413
+ while (buffer.length >= 5) {
414
+ const flags = buffer[0];
415
+ const length = (buffer[1] << 24) | (buffer[2] << 16) | (buffer[3] << 8) | buffer[4];
416
+ if (buffer.length < 5 + length) {
417
+ // Not enough data for complete frame
418
+ break;
419
+ }
420
+ const frameData = buffer.slice(5, 5 + length);
421
+ buffer = buffer.slice(5 + length);
422
+ const isTrailer = (flags & TRAILER_FRAME) !== 0;
423
+ yield { isTrailer, data: frameData };
424
+ }
425
+ if (done) {
426
+ streamDone = true;
427
+ }
428
+ }
429
+ }
430
+ /**
431
+ * Parse gRPC trailers from trailer frame
432
+ */
433
+ function parseTrailers(data) {
434
+ const text = new TextDecoder().decode(data);
435
+ const lines = text.split("\r\n");
436
+ let status = GRPC_STATUS.UNKNOWN;
437
+ let message;
438
+ for (const line of lines) {
439
+ const colonIndex = line.indexOf(":");
440
+ if (colonIndex === -1) {
441
+ continue;
442
+ }
443
+ const key = line.slice(0, colonIndex).trim().toLowerCase();
444
+ const value = line.slice(colonIndex + 1).trim();
445
+ if (key === "grpc-status") {
446
+ const parsed = parseInt(value, 10);
447
+ if (!Number.isNaN(parsed)) {
448
+ status = parsed;
449
+ }
450
+ }
451
+ else if (key === "grpc-message") {
452
+ message = decodeURIComponent(value);
453
+ }
454
+ }
455
+ return { status, message };
456
+ }
457
+ /**
458
+ * Create a TransportError from gRPC status
459
+ */
460
+ function createTransportError(status, message) {
461
+ const error = new Error(message ?? `gRPC error: status ${String(status)}`);
462
+ error.code = status;
463
+ error.details = message;
464
+ return error;
465
+ }
466
+ // ============================================================================
467
+ // GrpcWebTransport
468
+ // ============================================================================
469
+ /**
470
+ * Transport implementation using gRPC-web protocol.
471
+ * Works with browsers and Cloudflare Workers.
472
+ *
473
+ * Requires a gRPC-web proxy in front of the Flight SQL server.
474
+ */
475
+ export class GrpcWebTransport {
476
+ options;
477
+ authToken = null;
478
+ connected = false;
479
+ baseUrl;
480
+ constructor(options) {
481
+ this.options = {
482
+ ...options,
483
+ tls: options.tls,
484
+ connectTimeoutMs: options.connectTimeoutMs ?? DEFAULT_CONNECT_TIMEOUT_MS,
485
+ requestTimeoutMs: options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS
486
+ };
487
+ const protocol = this.options.tls ? "https" : "http";
488
+ this.baseUrl = `${protocol}://${this.options.host}:${String(this.options.port)}`;
489
+ }
490
+ async connect() {
491
+ if (this.connected) {
492
+ return;
493
+ }
494
+ // For gRPC-web, we don't establish a persistent connection
495
+ // Just verify the server is reachable with a simple request
496
+ try {
497
+ const controller = new AbortController();
498
+ const timeoutId = setTimeout(() => {
499
+ controller.abort();
500
+ }, this.options.connectTimeoutMs);
501
+ // Send an empty OPTIONS request to check connectivity
502
+ const response = await fetch(this.baseUrl, {
503
+ method: "OPTIONS",
504
+ signal: controller.signal
505
+ }).catch(() => null);
506
+ clearTimeout(timeoutId);
507
+ // Even if OPTIONS fails (which is expected), if we got here
508
+ // without aborting, the server is reachable
509
+ this.connected = true;
510
+ // Check for CORS errors
511
+ if (response === null) {
512
+ // Connection was aborted or failed
513
+ throw new Error(`Failed to connect to ${this.baseUrl}`);
514
+ }
515
+ }
516
+ catch (error) {
517
+ if (error.name === "AbortError") {
518
+ throw new Error(`Connection timeout after ${String(this.options.connectTimeoutMs)}ms`);
519
+ }
520
+ // Allow connection even if OPTIONS fails - the actual RPC calls will fail if needed
521
+ this.connected = true;
522
+ }
523
+ }
524
+ close() {
525
+ this.connected = false;
526
+ this.authToken = null;
527
+ }
528
+ isConnected() {
529
+ return this.connected;
530
+ }
531
+ setAuthToken(token) {
532
+ this.authToken = token;
533
+ }
534
+ // --------------------------------------------------------------------------
535
+ // Unary Calls
536
+ // --------------------------------------------------------------------------
537
+ async getFlightInfo(descriptor, metadata) {
538
+ const requestData = encodeFlightDescriptor(descriptor);
539
+ const responseData = await this.unaryCall(`${FLIGHT_SERVICE_PATH}/GetFlightInfo`, requestData, metadata);
540
+ return decodeFlightInfo(responseData);
541
+ }
542
+ async getSchema(descriptor, metadata) {
543
+ const requestData = encodeFlightDescriptor(descriptor);
544
+ const responseData = await this.unaryCall(`${FLIGHT_SERVICE_PATH}/GetSchema`, requestData, metadata);
545
+ return decodeSchemaResult(responseData);
546
+ }
547
+ // --------------------------------------------------------------------------
548
+ // Server Streaming
549
+ // --------------------------------------------------------------------------
550
+ doGet(ticket, metadata) {
551
+ const requestData = encodeTicket(ticket);
552
+ return this.serverStreamingCall(`${FLIGHT_SERVICE_PATH}/DoGet`, requestData, decodeFlightData, metadata);
553
+ }
554
+ doAction(action, metadata) {
555
+ const requestData = encodeAction(action);
556
+ return this.serverStreamingCall(`${FLIGHT_SERVICE_PATH}/DoAction`, requestData, decodeActionResult, metadata);
557
+ }
558
+ listActions(metadata) {
559
+ // Empty message for ListActions
560
+ const requestData = new Uint8Array(0);
561
+ return this.serverStreamingCall(`${FLIGHT_SERVICE_PATH}/ListActions`, requestData, decodeActionType, metadata);
562
+ }
563
+ listFlights(criteria, metadata) {
564
+ const requestData = encodeCriteria(criteria);
565
+ return this.serverStreamingCall(`${FLIGHT_SERVICE_PATH}/ListFlights`, requestData, decodeFlightInfo, metadata);
566
+ }
567
+ // --------------------------------------------------------------------------
568
+ // Bidirectional Streaming (Not Supported)
569
+ // --------------------------------------------------------------------------
570
+ doPut(_metadata) {
571
+ throw new Error("DoPut (client streaming) is not supported in gRPC-web. " +
572
+ "Use a server-side runtime (Node.js/Bun) or a different protocol for uploads.");
573
+ }
574
+ doExchange(_metadata) {
575
+ throw new Error("DoExchange (bidirectional streaming) is not supported in gRPC-web. " +
576
+ "Use a server-side runtime (Node.js/Bun) or WebSocket-based transport for bidirectional communication.");
577
+ }
578
+ handshake(_metadata) {
579
+ throw new Error("Handshake (bidirectional streaming) is not supported in gRPC-web. " +
580
+ "Use bearer token authentication via setAuthToken() instead.");
581
+ }
582
+ // --------------------------------------------------------------------------
583
+ // Private Helpers
584
+ // --------------------------------------------------------------------------
585
+ createHeaders(metadata) {
586
+ const headers = new Headers();
587
+ headers.set("Content-Type", GRPC_WEB_CONTENT_TYPE);
588
+ headers.set("Accept", GRPC_WEB_CONTENT_TYPE);
589
+ headers.set("X-Grpc-Web", "1");
590
+ headers.set("X-User-Agent", "grpc-web-js/0.1");
591
+ // Add auth token
592
+ if (this.authToken !== null && this.authToken !== "") {
593
+ headers.set("Authorization", `Bearer ${this.authToken}`);
594
+ }
595
+ // Add custom metadata
596
+ if (metadata) {
597
+ for (const [key, value] of Object.entries(metadata)) {
598
+ if (Array.isArray(value)) {
599
+ headers.set(key, value.join(", "));
600
+ }
601
+ else {
602
+ headers.set(key, value);
603
+ }
604
+ }
605
+ }
606
+ return headers;
607
+ }
608
+ async unaryCall(path, requestData, metadata) {
609
+ this.ensureConnected();
610
+ const controller = new AbortController();
611
+ const timeoutId = setTimeout(() => {
612
+ controller.abort();
613
+ }, this.options.requestTimeoutMs);
614
+ try {
615
+ const response = await fetch(`${this.baseUrl}${path}`, {
616
+ method: "POST",
617
+ headers: this.createHeaders(metadata),
618
+ body: frameMessage(requestData),
619
+ signal: controller.signal
620
+ });
621
+ clearTimeout(timeoutId);
622
+ if (!response.ok) {
623
+ throw createTransportError(GRPC_STATUS.INTERNAL, `HTTP error: ${String(response.status)} ${response.statusText}`);
624
+ }
625
+ const reader = response.body?.getReader();
626
+ if (!reader) {
627
+ throw createTransportError(GRPC_STATUS.INTERNAL, "No response body");
628
+ }
629
+ let responseData = null;
630
+ let grpcStatus = null;
631
+ for await (const frame of parseGrpcWebFrames(reader)) {
632
+ if (frame.isTrailer) {
633
+ grpcStatus = parseTrailers(frame.data);
634
+ }
635
+ else {
636
+ responseData = frame.data;
637
+ }
638
+ }
639
+ // Check gRPC status
640
+ if (grpcStatus && grpcStatus.status !== GRPC_STATUS.OK) {
641
+ throw createTransportError(grpcStatus.status, grpcStatus.message);
642
+ }
643
+ if (!responseData) {
644
+ throw createTransportError(GRPC_STATUS.INTERNAL, "No response data");
645
+ }
646
+ return responseData;
647
+ }
648
+ catch (error) {
649
+ clearTimeout(timeoutId);
650
+ if (error.name === "AbortError") {
651
+ throw createTransportError(GRPC_STATUS.DEADLINE_EXCEEDED, "Request timeout");
652
+ }
653
+ throw error;
654
+ }
655
+ }
656
+ serverStreamingCall(path, requestData, decoder, metadata) {
657
+ this.ensureConnected();
658
+ // Use an object wrapper so closures can share mutable state
659
+ const state = { cancelled: false };
660
+ let controller = null;
661
+ let reader = null;
662
+ const asyncIterable = {
663
+ [Symbol.asyncIterator]: () => {
664
+ return {
665
+ next: async () => {
666
+ if (state.cancelled) {
667
+ return { done: true, value: undefined };
668
+ }
669
+ // Initialize on first call
670
+ if (!controller) {
671
+ controller = new AbortController();
672
+ const response = await fetch(`${this.baseUrl}${path}`, {
673
+ method: "POST",
674
+ headers: this.createHeaders(metadata),
675
+ body: frameMessage(requestData),
676
+ signal: controller.signal
677
+ });
678
+ if (!response.ok) {
679
+ throw createTransportError(GRPC_STATUS.INTERNAL, `HTTP error: ${String(response.status)} ${response.statusText}`);
680
+ }
681
+ if (!response.body) {
682
+ throw createTransportError(GRPC_STATUS.INTERNAL, "No response body");
683
+ }
684
+ reader = response.body.getReader();
685
+ }
686
+ // Read next frame
687
+ if (!reader) {
688
+ return { done: true, value: undefined };
689
+ }
690
+ // We need to maintain state across next() calls, so we use a
691
+ // frame generator that we consume incrementally
692
+ const frameIterator = parseGrpcWebFrames(reader);
693
+ for await (const frame of frameIterator) {
694
+ // This can be set by cancel() or return() from another async context
695
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
696
+ if (state.cancelled) {
697
+ return { done: true, value: undefined };
698
+ }
699
+ if (frame.isTrailer) {
700
+ const status = parseTrailers(frame.data);
701
+ if (status.status !== GRPC_STATUS.OK) {
702
+ throw createTransportError(status.status, status.message);
703
+ }
704
+ return { done: true, value: undefined };
705
+ }
706
+ return { done: false, value: decoder(frame.data) };
707
+ }
708
+ return { done: true, value: undefined };
709
+ },
710
+ // eslint-disable-next-line @typescript-eslint/require-await
711
+ return: async () => {
712
+ state.cancelled = true;
713
+ controller?.abort();
714
+ return { done: true, value: undefined };
715
+ }
716
+ };
717
+ }
718
+ };
719
+ return {
720
+ ...asyncIterable,
721
+ [Symbol.asyncIterator]: asyncIterable[Symbol.asyncIterator],
722
+ cancel: () => {
723
+ state.cancelled = true;
724
+ controller?.abort();
725
+ }
726
+ };
727
+ }
728
+ ensureConnected() {
729
+ if (!this.connected) {
730
+ throw new Error("Transport not connected. Call connect() first.");
731
+ }
732
+ }
733
+ }
734
+ /**
735
+ * Create a GrpcWebTransport instance
736
+ */
737
+ export function createGrpcWebTransport(options) {
738
+ return new GrpcWebTransport(options);
739
+ }
740
+ // Register for browser and worker runtimes
741
+ registerTransport(Runtime.Browser, createGrpcWebTransport);
742
+ // Deno can also use gRPC-web since it has fetch support
743
+ registerTransport(Runtime.Deno, createGrpcWebTransport);
744
+ /**
745
+ * Get the appropriate web transport for browser environments.
746
+ *
747
+ * @throws Error if called in a non-browser environment
748
+ */
749
+ export function getWebTransport(options) {
750
+ return new GrpcWebTransport(options);
751
+ }
752
+ //# sourceMappingURL=transport-grpc-web.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transport-grpc-web.js","sourceRoot":"","sources":["../src/transport-grpc-web.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAYL,iBAAiB,EAIlB,MAAM,aAAa,CAAA;AAEpB,yBAAyB;AACzB,MAAM,qBAAqB,GAAG,4BAA4B,CAAA;AAC1D,0FAA0F;AAE1F,uBAAuB;AACvB,MAAM,UAAU,GAAG,IAAI,CAAA;AACvB,MAAM,aAAa,GAAG,IAAI,CAAA;AAE1B,oBAAoB;AACpB,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,CAAC;IACL,SAAS,EAAE,CAAC;IACZ,OAAO,EAAE,CAAC;IACV,gBAAgB,EAAE,CAAC;IACnB,iBAAiB,EAAE,CAAC;IACpB,SAAS,EAAE,CAAC;IACZ,cAAc,EAAE,CAAC;IACjB,iBAAiB,EAAE,CAAC;IACpB,kBAAkB,EAAE,CAAC;IACrB,mBAAmB,EAAE,CAAC;IACtB,OAAO,EAAE,EAAE;IACX,YAAY,EAAE,EAAE;IAChB,aAAa,EAAE,EAAE;IACjB,QAAQ,EAAE,EAAE;IACZ,WAAW,EAAE,EAAE;IACf,SAAS,EAAE,EAAE;IACb,eAAe,EAAE,EAAE;CACX,CAAA;AAEV,iBAAiB;AACjB,MAAM,0BAA0B,GAAG,MAAM,CAAA;AACzC,MAAM,0BAA0B,GAAG,MAAM,CAAA;AAEzC,sBAAsB;AACtB,MAAM,mBAAmB,GAAG,sCAAsC,CAAA;AAElE,+EAA+E;AAC/E,+BAA+B;AAC/B,+EAA+E;AAE/E;;GAEG;AACH,SAAS,YAAY,CAAC,KAAa;IACjC,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,CAAC,GAAG,KAAK,KAAK,CAAC,CAAA;IAEnB,OAAO,CAAC,GAAG,IAAI,EAAE,CAAC;QAChB,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;QAC7B,CAAC,MAAM,CAAC,CAAA;IACV,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IAEb,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC;AAED;;;GAGG;AACH,SAAS,YAAY,CAAC,MAAkB,EAAE,MAAc;IACtD,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,OAAO,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;QACvC,MAAM,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,CAAA;QAEhC,SAAS,EAAE,CAAA;QACX,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,MAAK;QACP,CAAC;QACD,KAAK,IAAI,CAAC,CAAA;IACZ,CAAC;IAED,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,SAAS,CAAC,CAAA;AAClC,CAAC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,WAAmB,EAAE,QAAgB;IACtD,OAAO,YAAY,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAA;AACpD,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,WAAmB,EAAE,KAAa;IAC3D,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;IACjC,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACnC,OAAO,gBAAgB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;AAC7C,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,WAAmB,EAAE,KAAiB;IAC9D,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA,CAAC,iCAAiC;IACvE,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAEzC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;IACxE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAClB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAC9B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IAE7C,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,WAAmB,EAAE,KAAa;IAC3D,MAAM,GAAG,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,CAAC,CAAA,CAAC,uBAAuB;IAC7D,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,CAAA;IAElC,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;IACzD,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAA;IAClB,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IAE9B,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,SAAS,MAAM,CAAC,GAAG,MAAoB;IACrC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;IACnD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IACD,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAA;IACpB,CAAC;IAED,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACtE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,WAAW,CAAC,CAAA;IAE1C,IAAI,MAAM,GAAG,CAAC,CAAA;IACd,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;QACvB,MAAM,IAAI,GAAG,CAAC,MAAM,CAAA;IACtB,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E;;GAEG;AACH,SAAS,sBAAsB,CAAC,UAI/B;IACC,MAAM,KAAK,GAAiB,EAAE,CAAA;IAE9B,iCAAiC;IACjC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;IAEjD,uBAAuB;IACvB,IAAI,UAAU,CAAC,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;IACjD,CAAC;IAED,kCAAkC;IAClC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,KAAK,CAAC,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,MAAiB;IACrC,OAAO,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;AAC3C,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,MAAiB;IACrC,MAAM,KAAK,GAAiB,EAAE,CAAA;IAE9B,yBAAyB;IACzB,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IAE7C,wBAAwB;IACxB,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,KAAK,CAAC,CAAA;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,UAAuB;IAC7C,IAAI,CAAC,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IACD,OAAO,gBAAgB,CAAC,CAAC,EAAE,UAAU,CAAC,CAAA;AACxC,CAAC;AAYD;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAkB;IAC1C,MAAM,MAAM,GAAiB,EAAE,CAAA;IAC/B,IAAI,MAAM,GAAG,CAAC,CAAA;IAEd,OAAO,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;QACpD,MAAM,IAAI,QAAQ,CAAA;QAElB,MAAM,WAAW,GAAG,GAAG,KAAK,CAAC,CAAA;QAC7B,MAAM,QAAQ,GAAG,GAAG,GAAG,IAAI,CAAA;QAE3B,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YACnB,SAAS;YACT,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YACxD,MAAM,IAAI,UAAU,CAAA;YACpB,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;QACrD,CAAC;aAAM,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,mBAAmB;YACnB,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YAC1D,MAAM,IAAI,WAAW,CAAA;YACrB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAA;YAClD,MAAM,IAAI,MAAM,CAAA;YAChB,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9C,CAAC;aAAM,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,eAAe;YACf,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAA;YAC7C,MAAM,IAAI,CAAC,CAAA;YACX,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9C,CAAC;aAAM,IAAI,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,eAAe;YACf,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,CAAC,CAAC,CAAA;YAC7C,MAAM,IAAI,CAAC,CAAA;YACX,MAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9C,CAAC;aAAM,CAAC;YACN,0BAA0B;YAC1B,MAAK;QACP,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,MAAoB,EAAE,WAAmB;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAA;IACnF,OAAO,KAAK,EAAE,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;AACnE,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,MAAoB,EAAE,WAAmB;IAC/D,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;IAChD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AACxC,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,MAAoB,EAAE,WAAmB;IAC/D,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAA;IACnF,OAAO,OAAO,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;AACjE,CAAC;AAED;;GAEG;AACH,SAAS,qBAAqB,CAAC,MAAoB,EAAE,WAAmB;IACtE,OAAO,MAAM;SACV,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,WAAW,IAAI,CAAC,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,YAAY,UAAU,CACzF;SACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAkB,CAAC,CAAA;AACrC,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAkB;IAC1C,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAEvC,MAAM,MAAM,GAAkB,EAAE,CAAA;IAEhC,kBAAkB;IAClB,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACvC,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,CAAC,MAAM,GAAG,MAAM,CAAA;IACxB,CAAC;IAED,8CAA8C;IAC9C,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAChD,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAA;QACpD,MAAM,CAAC,gBAAgB,GAAG;YACxB,IAAI,EAAE,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC;YACxC,GAAG,EAAE,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;YACjC,IAAI,EAAE,qBAAqB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACnF,CAAA;IACH,CAAC;IAED,+CAA+C;IAC/C,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IACzD,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,MAAM,CAAC,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;YACjD,MAAM,QAAQ,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;YAC1C,MAAM,EAAE,GAAmD,EAAE,CAAA;YAE7D,kBAAkB;YAClB,MAAM,WAAW,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;YAC9C,IAAI,WAAW,EAAE,CAAC;gBAChB,MAAM,YAAY,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAA;gBAClD,MAAM,MAAM,GAAG,aAAa,CAAC,YAAY,EAAE,CAAC,CAAC,CAAA;gBAC7C,IAAI,MAAM,EAAE,CAAC;oBACX,EAAE,CAAC,MAAM,GAAG,EAAE,MAAM,EAAE,CAAA;gBACxB,CAAC;YACH,CAAC;YAED,+BAA+B;YAC/B,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;YAC3D,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAChC,EAAE,CAAC,QAAQ,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,SAAS,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAA;oBAC5C,OAAO,EAAE,GAAG,EAAE,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,EAAE,CAAA;gBACpD,CAAC,CAAC,CAAA;YACJ,CAAC;YAED,OAAO,EAAE,CAAA;QACX,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,yBAAyB;IACzB,MAAM,YAAY,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC9C,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;QAC/B,MAAM,CAAC,YAAY,GAAG,YAAY,CAAA;IACpC,CAAC;IAED,uBAAuB;IACvB,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAC5C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,CAAC,UAAU,GAAG,UAAU,CAAA;IAChC,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAkB;IAC1C,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAEvC,MAAM,MAAM,GAAkB,EAAE,CAAA;IAEhC,6BAA6B;IAC7B,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAChD,IAAI,eAAe,EAAE,CAAC;QACpB,MAAM,UAAU,GAAG,gBAAgB,CAAC,eAAe,CAAC,CAAA;QACpD,MAAM,CAAC,gBAAgB,GAAG;YACxB,IAAI,EAAE,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC;YACxC,GAAG,EAAE,aAAa,CAAC,UAAU,EAAE,CAAC,CAAC;YACjC,IAAI,EAAE,qBAAqB,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SACnF,CAAA;IACH,CAAC;IAED,uBAAuB;IACvB,MAAM,CAAC,UAAU,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAE5C,wBAAwB;IACxB,MAAM,CAAC,QAAQ,GAAG,aAAa,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAE7C,wBAAwB;IACxB,MAAM,CAAC,WAAW,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;IAE7C,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,MAAkB;IAC5C,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACvC,OAAO;QACL,IAAI,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC;KAC/B,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,MAAkB;IAC1C,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACvC,OAAO;QACL,IAAI,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE;QACrC,WAAW,EAAE,cAAc,CAAC,MAAM,EAAE,CAAC,CAAC;KACvC,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,MAAkB;IAC5C,MAAM,MAAM,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IACvC,OAAO;QACL,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC;KACtD,CAAA;AACH,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,YAAY,CAAC,IAAgB;IACpC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;IACvB,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,CAAA;IAExC,oCAAoC;IACpC,KAAK,CAAC,CAAC,CAAC,GAAG,UAAU,CAAA;IAErB,iCAAiC;IACjC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;IACjC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;IACjC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,KAAK,CAAC,CAAC,GAAG,IAAI,CAAA;IAChC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,CAAA;IAExB,UAAU;IACV,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAElB,OAAO,KAAK,CAAC,MAAM,CAAA;AACrB,CAAC;AAED;;GAEG;AACH,KAAK,SAAS,CAAC,CAAC,kBAAkB,CAChC,MAA+C;IAE/C,IAAI,MAAM,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;IAC9B,IAAI,UAAU,GAAG,KAAK,CAAA;IAEtB,OAAO,CAAC,UAAU,EAAE,CAAC;QACnB,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;QAE3C,IAAI,KAAK,EAAE,CAAC;YACV,4BAA4B;YAC5B,MAAM,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;YAC9D,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;YACxB,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;YACnC,MAAM,GAAG,SAAS,CAAA;QACpB,CAAC;QAED,wBAAwB;QACxB,OAAO,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YACvB,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAA;YAEnF,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,EAAE,CAAC;gBAC/B,qCAAqC;gBACrC,MAAK;YACP,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,CAAA;YAC7C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,CAAA;YAEjC,MAAM,SAAS,GAAG,CAAC,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;YAC/C,MAAM,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAA;QACtC,CAAC;QAED,IAAI,IAAI,EAAE,CAAC;YACT,UAAU,GAAG,IAAI,CAAA;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,IAAgB;IACrC,MAAM,IAAI,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAEhC,IAAI,MAAM,GAAW,WAAW,CAAC,OAAO,CAAA;IACxC,IAAI,OAA2B,CAAA;IAE/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QACpC,IAAI,UAAU,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,SAAQ;QACV,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;QAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAE/C,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;YAClC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,MAAM,GAAG,MAAM,CAAA;YACjB,CAAC;QACH,CAAC;aAAM,IAAI,GAAG,KAAK,cAAc,EAAE,CAAC;YAClC,OAAO,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;QACrC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;AAC5B,CAAC;AAED;;GAEG;AACH,SAAS,oBAAoB,CAAC,MAAc,EAAE,OAAgB;IAC5D,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,OAAO,IAAI,sBAAsB,MAAM,CAAC,MAAM,CAAC,EAAE,CAAmB,CAAA;IAC5F,KAAK,CAAC,IAAI,GAAG,MAAM,CAAA;IACnB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAA;IACvB,OAAO,KAAK,CAAA;AACd,CAAC;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;;;;GAKG;AACH,MAAM,OAAO,gBAAgB;IACV,OAAO,CAGN;IAEV,SAAS,GAAkB,IAAI,CAAA;IAC/B,SAAS,GAAG,KAAK,CAAA;IACR,OAAO,CAAQ;IAEhC,YAAY,OAAyB;QACnC,IAAI,CAAC,OAAO,GAAG;YACb,GAAG,OAAO;YACV,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,0BAA0B;YACxE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,IAAI,0BAA0B;SACzE,CAAA;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAA;QACpD,IAAI,CAAC,OAAO,GAAG,GAAG,QAAQ,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAA;IAClF,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,OAAM;QACR,CAAC;QAED,2DAA2D;QAC3D,4DAA4D;QAC5D,IAAI,CAAC;YACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;YACxC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAChC,UAAU,CAAC,KAAK,EAAE,CAAA;YACpB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;YAEjC,sDAAsD;YACtD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE;gBACzC,MAAM,EAAE,SAAS;gBACjB,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;YAEpB,YAAY,CAAC,SAAS,CAAC,CAAA;YAEvB,4DAA4D;YAC5D,4CAA4C;YAC5C,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YAErB,wBAAwB;YACxB,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;gBACtB,mCAAmC;gBACnC,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;YACzD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAAe,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC3C,MAAM,IAAI,KAAK,CAAC,4BAA4B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;YACxF,CAAC;YACD,oFAAoF;YACpF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;QACvB,CAAC;IACH,CAAC;IAED,KAAK;QACH,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACvB,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;IAED,YAAY,CAAC,KAAoB;QAC/B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAA;IACxB,CAAC;IAED,6EAA6E;IAC7E,cAAc;IACd,6EAA6E;IAE7E,KAAK,CAAC,aAAa,CACjB,UAA+D,EAC/D,QAA4B;QAE5B,MAAM,WAAW,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAA;QACtD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CACvC,GAAG,mBAAmB,gBAAgB,EACtC,WAAW,EACX,QAAQ,CACT,CAAA;QACD,OAAO,gBAAgB,CAAC,YAAY,CAAC,CAAA;IACvC,CAAC;IAED,KAAK,CAAC,SAAS,CACb,UAA+D,EAC/D,QAA4B;QAE5B,MAAM,WAAW,GAAG,sBAAsB,CAAC,UAAU,CAAC,CAAA;QACtD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CACvC,GAAG,mBAAmB,YAAY,EAClC,WAAW,EACX,QAAQ,CACT,CAAA;QACD,OAAO,kBAAkB,CAAC,YAAY,CAAC,CAAA;IACzC,CAAC;IAED,6EAA6E;IAC7E,mBAAmB;IACnB,6EAA6E;IAE7E,KAAK,CAAC,MAAiB,EAAE,QAA4B;QACnD,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;QACxC,OAAO,IAAI,CAAC,mBAAmB,CAC7B,GAAG,mBAAmB,QAAQ,EAC9B,WAAW,EACX,gBAAgB,EAChB,QAAQ,CACT,CAAA;IACH,CAAC;IAED,QAAQ,CAAC,MAAiB,EAAE,QAA4B;QACtD,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAA;QACxC,OAAO,IAAI,CAAC,mBAAmB,CAC7B,GAAG,mBAAmB,WAAW,EACjC,WAAW,EACX,kBAAkB,EAClB,QAAQ,CACT,CAAA;IACH,CAAC;IAED,WAAW,CAAC,QAA4B;QACtC,gCAAgC;QAChC,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,CAAC,CAAC,CAAA;QACrC,OAAO,IAAI,CAAC,mBAAmB,CAC7B,GAAG,mBAAmB,cAAc,EACpC,WAAW,EACX,gBAAgB,EAChB,QAAQ,CACT,CAAA;IACH,CAAC;IAED,WAAW,CAAC,QAAqB,EAAE,QAA4B;QAC7D,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;QAC5C,OAAO,IAAI,CAAC,mBAAmB,CAC7B,GAAG,mBAAmB,cAAc,EACpC,WAAW,EACX,gBAAgB,EAChB,QAAQ,CACT,CAAA;IACH,CAAC;IAED,6EAA6E;IAC7E,0CAA0C;IAC1C,6EAA6E;IAE7E,KAAK,CAAC,SAA6B;QACjC,MAAM,IAAI,KAAK,CACb,yDAAyD;YACvD,8EAA8E,CACjF,CAAA;IACH,CAAC;IAED,UAAU,CAAC,SAA6B;QACtC,MAAM,IAAI,KAAK,CACb,qEAAqE;YACnE,uGAAuG,CAC1G,CAAA;IACH,CAAC;IAED,SAAS,CAAC,SAA6B;QACrC,MAAM,IAAI,KAAK,CACb,oEAAoE;YAClE,6DAA6D,CAChE,CAAA;IACH,CAAC;IAED,6EAA6E;IAC7E,kBAAkB;IAClB,6EAA6E;IAErE,aAAa,CAAC,QAA4B;QAChD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAA;QAE7B,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,qBAAqB,CAAC,CAAA;QAClD,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,qBAAqB,CAAC,CAAA;QAC5C,OAAO,CAAC,GAAG,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;QAC9B,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAA;QAE9C,iBAAiB;QACjB,IAAI,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,EAAE,EAAE,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,UAAU,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;QAC1D,CAAC;QAED,sBAAsB;QACtB,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACpD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBACzB,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;gBACpC,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;gBACzB,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,IAAY,EACZ,WAAuB,EACvB,QAA4B;QAE5B,IAAI,CAAC,eAAe,EAAE,CAAA;QAEtB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QACxC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAChC,UAAU,CAAC,KAAK,EAAE,CAAA;QACpB,CAAC,EAAE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAA;QAEjC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;gBACrD,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;gBACrC,IAAI,EAAE,YAAY,CAAC,WAAW,CAAC;gBAC/B,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAA;YAEF,YAAY,CAAC,SAAS,CAAC,CAAA;YAEvB,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,oBAAoB,CACxB,WAAW,CAAC,QAAQ,EACpB,eAAe,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,CAChE,CAAA;YACH,CAAC;YAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAE1B,CAAA;YACb,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,oBAAoB,CAAC,WAAW,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;YACtE,CAAC;YAED,IAAI,YAAY,GAAsB,IAAI,CAAA;YAC1C,IAAI,UAAU,GAAgD,IAAI,CAAA;YAElE,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;gBACrD,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;oBACpB,UAAU,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACxC,CAAC;qBAAM,CAAC;oBACN,YAAY,GAAG,KAAK,CAAC,IAAI,CAAA;gBAC3B,CAAC;YACH,CAAC;YAED,oBAAoB;YACpB,IAAI,UAAU,IAAI,UAAU,CAAC,MAAM,KAAK,WAAW,CAAC,EAAE,EAAE,CAAC;gBACvD,MAAM,oBAAoB,CAAC,UAAU,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAA;YACnE,CAAC;YAED,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,MAAM,oBAAoB,CAAC,WAAW,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;YACtE,CAAC;YAED,OAAO,YAAY,CAAA;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,YAAY,CAAC,SAAS,CAAC,CAAA;YAEvB,IAAK,KAAe,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;gBAC3C,MAAM,oBAAoB,CAAC,WAAW,CAAC,iBAAiB,EAAE,iBAAiB,CAAC,CAAA;YAC9E,CAAC;YAED,MAAM,KAAK,CAAA;QACb,CAAC;IACH,CAAC;IAEO,mBAAmB,CACzB,IAAY,EACZ,WAAuB,EACvB,OAAgC,EAChC,QAA4B;QAE5B,IAAI,CAAC,eAAe,EAAE,CAAA;QAEtB,4DAA4D;QAC5D,MAAM,KAAK,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAA;QAClC,IAAI,UAAU,GAA2B,IAAI,CAAA;QAC7C,IAAI,MAAM,GAAmD,IAAI,CAAA;QAEjE,MAAM,aAAa,GAAqB;YACtC,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,GAAG,EAAE;gBAC3B,OAAO;oBACL,IAAI,EAAE,KAAK,IAAgC,EAAE;wBAC3C,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;4BACpB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;wBACzC,CAAC;wBAED,2BAA2B;wBAC3B,IAAI,CAAC,UAAU,EAAE,CAAC;4BAChB,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;4BAElC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;gCACrD,MAAM,EAAE,MAAM;gCACd,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;gCACrC,IAAI,EAAE,YAAY,CAAC,WAAW,CAAC;gCAC/B,MAAM,EAAE,UAAU,CAAC,MAAM;6BAC1B,CAAC,CAAA;4BAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gCACjB,MAAM,oBAAoB,CACxB,WAAW,CAAC,QAAQ,EACpB,eAAe,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,UAAU,EAAE,CAChE,CAAA;4BACH,CAAC;4BAED,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;gCACnB,MAAM,oBAAoB,CAAC,WAAW,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAA;4BACtE,CAAC;4BAED,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAA6C,CAAA;wBAC/E,CAAC;wBAED,kBAAkB;wBAClB,IAAI,CAAC,MAAM,EAAE,CAAC;4BACZ,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;wBACzC,CAAC;wBAED,6DAA6D;wBAC7D,gDAAgD;wBAChD,MAAM,aAAa,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAA;wBAEhD,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;4BACxC,qEAAqE;4BACrE,uEAAuE;4BACvE,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gCACpB,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;4BACzC,CAAC;4BAED,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gCACpB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gCACxC,IAAI,MAAM,CAAC,MAAM,KAAK,WAAW,CAAC,EAAE,EAAE,CAAC;oCACrC,MAAM,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAA;gCAC3D,CAAC;gCACD,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;4BACzC,CAAC;4BAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAA;wBACpD,CAAC;wBAED,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;oBACzC,CAAC;oBACD,4DAA4D;oBAC5D,MAAM,EAAE,KAAK,IAAI,EAAE;wBACjB,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;wBACtB,UAAU,EAAE,KAAK,EAAE,CAAA;wBACnB,OAAO,EAAE,IAAI,EAAE,IAAa,EAAE,KAAK,EAAE,SAAS,EAAE,CAAA;oBAClD,CAAC;iBACF,CAAA;YACH,CAAC;SACF,CAAA;QAED,OAAO;YACL,GAAG,aAAa;YAChB,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,aAAa,CAAC;YAC3D,MAAM,EAAE,GAAG,EAAE;gBACX,KAAK,CAAC,SAAS,GAAG,IAAI,CAAA;gBACtB,UAAU,EAAE,KAAK,EAAE,CAAA;YACrB,CAAC;SACF,CAAA;IACH,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;QACnE,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAyB;IAC9D,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAA;AACtC,CAAC;AAED,2CAA2C;AAC3C,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,sBAAsB,CAAC,CAAA;AAE1D,wDAAwD;AACxD,iBAAiB,CAAC,OAAO,CAAC,IAAI,EAAE,sBAAsB,CAAC,CAAA;AAEvD;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,OAAyB;IACvD,OAAO,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAA;AACtC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qualithm/arrow-flight-sql-js",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Arrow Flight SQL client for JavaScript and TypeScript runtimes.",
5
5
  "private": false,
6
6
  "type": "module",
@@ -46,6 +46,11 @@
46
46
  "node": "./dist/transport-grpc-js.js",
47
47
  "import": "./dist/transport-grpc-js.js",
48
48
  "types": "./dist/transport-grpc-js.d.ts"
49
+ },
50
+ "./transport/grpc-web": {
51
+ "browser": "./dist/transport-grpc-web.js",
52
+ "import": "./dist/transport-grpc-web.js",
53
+ "types": "./dist/transport-grpc-web.d.ts"
49
54
  }
50
55
  },
51
56
  "files": [
@@ -71,6 +76,8 @@
71
76
  "proto:generate": "bun run scripts/generate-proto.ts",
72
77
  "start": "bun run src/index.ts",
73
78
  "test": "bun test",
79
+ "test:browser": "bunx playwright test",
80
+ "test:browser:install": "bunx playwright install chromium",
74
81
  "test:coverage": "bun test --coverage",
75
82
  "test:integration": "bun test src/__tests__/integration",
76
83
  "test:unit": "bun test src/__tests__/unit",
@@ -86,12 +93,14 @@
86
93
  },
87
94
  "devDependencies": {
88
95
  "@eslint/js": "9.39.2",
96
+ "@playwright/test": "^1.58.2",
89
97
  "@types/bun": "1.3.7",
90
98
  "eslint": "9.39.2",
91
99
  "eslint-plugin-simple-import-sort": "12.1.1",
92
100
  "eslint-plugin-unused-imports": "4.3.0",
93
101
  "globals": "17.2.0",
94
102
  "jiti": "2.6.1",
103
+ "playwright": "^1.58.2",
95
104
  "prettier": "3.8.1",
96
105
  "typedoc": "0.28.16",
97
106
  "typedoc-plugin-markdown": "4.9.0",