snapreq 0.0.4 → 0.0.8

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.
Files changed (68) hide show
  1. package/{types → build}/capabilities.d.ts +1 -0
  2. package/build/capabilities.d.ts.map +1 -0
  3. package/{src → build}/capabilities.js +11 -12
  4. package/{types → build}/errors.d.ts +1 -0
  5. package/build/errors.d.ts.map +1 -0
  6. package/build/errors.js +82 -0
  7. package/{types → build}/headers.d.ts +3 -0
  8. package/build/headers.d.ts.map +1 -0
  9. package/build/headers.js +93 -0
  10. package/{types → build}/request.d.ts +1 -0
  11. package/build/request.d.ts.map +1 -0
  12. package/build/request.js +89 -0
  13. package/{types → build}/response.d.ts +1 -0
  14. package/build/response.d.ts.map +1 -0
  15. package/build/response.js +171 -0
  16. package/{types → build}/retry.d.ts +1 -0
  17. package/build/retry.d.ts.map +1 -0
  18. package/build/retry.js +95 -0
  19. package/{types → build}/snap-req.d.ts +1 -0
  20. package/build/snap-req.d.ts.map +1 -0
  21. package/build/snap-req.js +349 -0
  22. package/{types → build}/transports/fetch-transport.d.ts +1 -0
  23. package/build/transports/fetch-transport.d.ts.map +1 -0
  24. package/build/transports/fetch-transport.js +116 -0
  25. package/build/transports/fetch.d.ts +2 -0
  26. package/build/transports/fetch.d.ts.map +1 -0
  27. package/build/transports/fetch.js +3 -0
  28. package/{types → build}/transports/node-transport.d.ts +1 -0
  29. package/build/transports/node-transport.d.ts.map +1 -0
  30. package/build/transports/node-transport.js +287 -0
  31. package/build/transports/proxy-bounce-transport.d.ts +27 -0
  32. package/build/transports/proxy-bounce-transport.d.ts.map +1 -0
  33. package/build/transports/proxy-bounce-transport.js +127 -0
  34. package/{types → build}/transports/select.d.ts +11 -0
  35. package/build/transports/select.d.ts.map +1 -0
  36. package/build/transports/select.js +77 -0
  37. package/{types → build}/transports/xhr-transport.d.ts +1 -0
  38. package/build/transports/xhr-transport.d.ts.map +1 -0
  39. package/build/transports/xhr-transport.js +93 -0
  40. package/build/transports/xhr.d.ts +2 -0
  41. package/build/transports/xhr.d.ts.map +1 -0
  42. package/build/transports/xhr.js +3 -0
  43. package/{types → build}/websocket/websocket-channel.d.ts +1 -0
  44. package/build/websocket/websocket-channel.d.ts.map +1 -0
  45. package/build/websocket/websocket-channel.js +171 -0
  46. package/{types → build}/websocket/websocket-client.d.ts +1 -0
  47. package/build/websocket/websocket-client.d.ts.map +1 -0
  48. package/build/websocket/websocket-client.js +920 -0
  49. package/{types → build}/websocket/websocket-connection.d.ts +1 -0
  50. package/build/websocket/websocket-connection.d.ts.map +1 -0
  51. package/build/websocket/websocket-connection.js +148 -0
  52. package/build/websocket.d.ts +3 -0
  53. package/build/websocket.d.ts.map +1 -0
  54. package/build/websocket.js +4 -0
  55. package/package.json +15 -50
  56. package/src/errors.js +0 -86
  57. package/src/headers.js +0 -92
  58. package/src/request.js +0 -104
  59. package/src/response.js +0 -197
  60. package/src/retry.js +0 -107
  61. package/src/snap-req.js +0 -390
  62. package/src/transports/fetch-transport.js +0 -128
  63. package/src/transports/node-transport.js +0 -323
  64. package/src/transports/select.js +0 -73
  65. package/src/transports/xhr-transport.js +0 -112
  66. package/src/websocket/websocket-channel.js +0 -176
  67. package/src/websocket/websocket-client.js +0 -1034
  68. package/src/websocket/websocket-connection.js +0 -154
@@ -0,0 +1,93 @@
1
+ // @ts-check
2
+ import { buildCapabilities } from "../capabilities.js";
3
+ import { SnapReqAbortError, SnapReqUnsupportedFeatureError } from "../errors.js";
4
+ import SnapReqHeaders from "../headers.js";
5
+ import SnapReqResponse from "../response.js";
6
+ /**
7
+ * Transport backed by `XMLHttpRequest`. A fallback for web environments that
8
+ * lack `fetch`. Buffers the whole response (no incremental streaming) and, like
9
+ * `fetch`, cannot do Unix sockets, client TLS or request-body compression.
10
+ */
11
+ export default class XhrTransport {
12
+ /** @returns {string} - Transport name. */
13
+ static get transportName() {
14
+ return "xhr";
15
+ }
16
+ /** @returns {boolean} - Whether this transport can run in the current environment. */
17
+ static isAvailable() {
18
+ return typeof XMLHttpRequest === "function";
19
+ }
20
+ /** @returns {import("../capabilities.js").TransportCapabilities} - Supported capabilities. */
21
+ get capabilities() {
22
+ return buildCapabilities({ abort: true });
23
+ }
24
+ /**
25
+ * @param {import("../snap-req.js").NormalizedRequest} request - Normalized request.
26
+ * @returns {Promise<SnapReqResponse>} - The response.
27
+ */
28
+ performRequest(request) {
29
+ if (request.bodyCompression && request.bodyCompression !== "identity") {
30
+ throw new SnapReqUnsupportedFeatureError({ feature: "request body compression", transport: "xhr" });
31
+ }
32
+ if (request.body.kind === "stream") {
33
+ throw new SnapReqUnsupportedFeatureError({ feature: "streamed request bodies", transport: "xhr" });
34
+ }
35
+ return new Promise((resolve, reject) => {
36
+ if (request.signal?.aborted) {
37
+ reject(new SnapReqAbortError());
38
+ return;
39
+ }
40
+ const xhr = new XMLHttpRequest();
41
+ xhr.open(request.method, request.url, true);
42
+ xhr.responseType = "arraybuffer";
43
+ if (request.credentials === "include")
44
+ xhr.withCredentials = true;
45
+ for (const [name, value] of request.headers.entries())
46
+ xhr.setRequestHeader(name, value);
47
+ const abort = () => xhr.abort();
48
+ request.signal?.addEventListener("abort", abort, { once: true });
49
+ const cleanup = () => request.signal?.removeEventListener("abort", abort);
50
+ xhr.onload = () => {
51
+ cleanup();
52
+ resolve(new SnapReqResponse({
53
+ url: request.url,
54
+ method: request.method,
55
+ status: xhr.status,
56
+ statusText: xhr.statusText,
57
+ headers: this._parseHeaders(xhr.getAllResponseHeaders()),
58
+ bytes: new Uint8Array(/** @type {ArrayBuffer} */ (xhr.response) || new ArrayBuffer(0))
59
+ }));
60
+ };
61
+ xhr.onerror = () => {
62
+ cleanup();
63
+ reject(new Error(`XMLHttpRequest failed for ${request.method} ${request.url}`));
64
+ };
65
+ xhr.onabort = () => {
66
+ cleanup();
67
+ reject(new SnapReqAbortError());
68
+ };
69
+ const body = request.body;
70
+ if (body.kind === "none") {
71
+ xhr.send();
72
+ }
73
+ else {
74
+ xhr.send(/** @type {any} */ (body.value));
75
+ }
76
+ });
77
+ }
78
+ /**
79
+ * @param {string} rawHeaders - Raw header block from `getAllResponseHeaders`.
80
+ * @returns {SnapReqHeaders} - The parsed response headers.
81
+ */
82
+ _parseHeaders(rawHeaders) {
83
+ const headers = new SnapReqHeaders();
84
+ for (const line of rawHeaders.trim().split(/[\r\n]+/)) {
85
+ const separatorIndex = line.indexOf(":");
86
+ if (separatorIndex === -1)
87
+ continue;
88
+ headers.set(line.slice(0, separatorIndex).trim(), line.slice(separatorIndex + 1).trim());
89
+ }
90
+ return headers;
91
+ }
92
+ }
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGhyLXRyYW5zcG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFuc3BvcnRzL3hoci10cmFuc3BvcnQuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQ3BELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSw4QkFBOEIsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUM5RSxPQUFPLGNBQWMsTUFBTSxlQUFlLENBQUE7QUFDMUMsT0FBTyxlQUFlLE1BQU0sZ0JBQWdCLENBQUE7QUFFNUM7Ozs7R0FJRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sWUFBWTtJQUMvQiwwQ0FBMEM7SUFDMUMsTUFBTSxLQUFLLGFBQWE7UUFDdEIsT0FBTyxLQUFLLENBQUE7SUFDZCxDQUFDO0lBRUQsc0ZBQXNGO0lBQ3RGLE1BQU0sQ0FBQyxXQUFXO1FBQ2hCLE9BQU8sT0FBTyxjQUFjLEtBQUssVUFBVSxDQUFBO0lBQzdDLENBQUM7SUFFRCw4RkFBOEY7SUFDOUYsSUFBSSxZQUFZO1FBQ2QsT0FBTyxpQkFBaUIsQ0FBQyxFQUFDLEtBQUssRUFBRSxJQUFJLEVBQUMsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjLENBQUMsT0FBTztRQUNwQixJQUFJLE9BQU8sQ0FBQyxlQUFlLElBQUksT0FBTyxDQUFDLGVBQWUsS0FBSyxVQUFVLEVBQUUsQ0FBQztZQUN0RSxNQUFNLElBQUksOEJBQThCLENBQUMsRUFBQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBQyxDQUFDLENBQUE7UUFDbkcsQ0FBQztRQUVELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLEtBQUssUUFBUSxFQUFFLENBQUM7WUFDbkMsTUFBTSxJQUFJLDhCQUE4QixDQUFDLEVBQUMsT0FBTyxFQUFFLHlCQUF5QixFQUFFLFNBQVMsRUFB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
@@ -0,0 +1,2 @@
1
+ export { default } from "./xhr-transport.js";
2
+ //# sourceMappingURL=xhr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"xhr.d.ts","sourceRoot":"","sources":["../../src/transports/xhr.js"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ // @ts-check
2
+ export { default } from "./xhr-transport.js";
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieGhyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYW5zcG9ydHMveGhyLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sb0JBQW9CLENBQUEifQ==
@@ -90,3 +90,4 @@ export default class SnapReqWebSocketChannel {
90
90
  /** @returns {boolean} - Whether the subscription is active. */
91
91
  isSubscribed(): boolean;
92
92
  }
93
+ //# sourceMappingURL=websocket-channel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-channel.d.ts","sourceRoot":"","sources":["../../src/websocket/websocket-channel.js"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH;IACE;;;;;;;;;;;OAWG;IACH,sHAVG;QAAsD,MAAM,EAApD,OAAO,uBAAuB,EAAE,OAAO;QAC1B,cAAc,EAA3B,MAAM;QACO,WAAW,EAAxB,MAAM;QACqB,MAAM,GAAjC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC;QACL,WAAW,GAAzB,MAAM;QACqB,SAAS,GAApC,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI;QACD,YAAY,GAA9B,MAAM,IAAI;QACQ,QAAQ,GAA1B,MAAM,IAAI;QACsB,OAAO,GAAvC,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI;KAClC,EAgBA;IAdC,gDAAoB;IACpB,uBAAoC;IACpC,oBAA8B;IAC9B,4BAA0B;IAC1B,oBAA8B;IAC9B,mBAXgB,GAAG,KAAK,IAAI,CAWD;IAC3B,qBAXe,IAAI,CAWc;IACjC,iBAXe,IAAI,CAWM;IACzB,mBAXkB,MAAM,KAAK,IAAI,CAWV;IACvB,gBAAmB;IACnB,8BAAiC;IACjC,qBAAwB;IACxB,wBAA2B;IAC3B,iBAAoB;IAGtB,iFAAiF;IACjF,uBADc,OAAO,CAAC,IAAI,CAAC,CAW1B;IARG,4BAA4B;IAC5B,eADW,OAAO,CAAC,IAAI,CAAC,CAItB;IAFA,yDAA4B;IAC5B,qCAA0B;IAOhC,iFAAiF;IACjF,aADc,OAAO,CAAC,IAAI,CAAC,CAG1B;IAED,sBAAsB;IACtB,sBADc,IAAI,CAMjB;IAED,sBAAsB;IACtB,iBADc,IAAI,CAGjB;IAED,sBAAsB;IACtB,qBADc,IAAI,CAKjB;IAED,sBAAsB;IACtB,sBADc,IAAI,CAGjB;IAED,4EAA4E;IAC5E,mBADc,OAAO,CAGpB;IAED;;;OAGG;IACH,qBAHW,GAAG,GACD,IAAI,CAKhB;IAED,sBAAsB;IACtB,uBADc,IAAI,CAOjB;IAED,sBAAsB;IACtB,kBADc,IAAI,CASjB;IAED;;;OAGG;IACH,sBAHW,MAAM,GACJ,IAAI,CAyBhB;IAED;;;OAGG;IACH,6BAHW;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAC,GAClB,OAAO,CAAC,IAAI,CAAC,CAWzB;IAED,sBAAsB;IACtB,SADc,IAAI,CAcjB;IAED,+DAA+D;IAC/D,YADc,OAAO,CACa;IAElC,+EAA+E;IAC/E,WADc,OAAO,CACW;IAEhC,+DAA+D;IAC/D,gBADc,OAAO,CACsC;CAC5D"}
@@ -0,0 +1,171 @@
1
+ // @ts-check
2
+ /**
3
+ * Client-side handle for a channel subscription opened via
4
+ * `SnapReqWebSocketClient.subscribeChannel()`. Mirrors the server's
5
+ * subscription lifecycle — `subscribed` (resolves `ready`) / `onMessage` /
6
+ * `onClose`.
7
+ */
8
+ export default class SnapReqWebSocketChannel {
9
+ /**
10
+ * @param {object} args - Channel arguments.
11
+ * @param {import("./websocket-client.js").default} args.client - Owning client.
12
+ * @param {string} args.subscriptionId - Generated id unique within the session.
13
+ * @param {string} args.channelType - Name the server registered the channel under.
14
+ * @param {Record<string, any>} [args.params] - Opaque params forwarded to the server.
15
+ * @param {string} [args.lastEventId] - Resume replay from this event id.
16
+ * @param {(body: any) => void} [args.onMessage] - Fired on each `channel-message` from the server.
17
+ * @param {() => void} [args.onDisconnect] - Fired when the socket drops.
18
+ * @param {() => void} [args.onResume] - Fired when the session resumes after a drop.
19
+ * @param {(reason: string) => void} [args.onClose] - Fired exactly once when the subscription closes permanently.
20
+ */
21
+ constructor({ client, subscriptionId, channelType, params, lastEventId, onMessage, onDisconnect, onResume, onClose }) {
22
+ this.client = client;
23
+ this.subscriptionId = subscriptionId;
24
+ this.channelType = channelType;
25
+ this.params = params || {};
26
+ this.lastEventId = lastEventId;
27
+ this._onMessage = onMessage;
28
+ this._onDisconnect = onDisconnect;
29
+ this._onResume = onResume;
30
+ this._onClose = onClose;
31
+ this._ready = false;
32
+ this._resumeReadyOnResume = false;
33
+ this._subscribed = false;
34
+ this._subscribeSent = false;
35
+ this._closed = false;
36
+ }
37
+ /** @returns {Promise<void>} - Resolves once the subscription is acknowledged. */
38
+ _ensureReadyPromise() {
39
+ if (!this._readyPromise || !this._resolveReady || !this._rejectReady) {
40
+ /** @type {Promise<void>} */
41
+ this._readyPromise = new Promise((resolve, reject) => {
42
+ this._resolveReady = resolve;
43
+ this._rejectReady = reject;
44
+ });
45
+ }
46
+ return this._readyPromise;
47
+ }
48
+ /** @returns {Promise<void>} - Resolves once the subscription is acknowledged. */
49
+ get ready() {
50
+ return this._ensureReadyPromise();
51
+ }
52
+ /** @returns {void} */
53
+ _resolveReadyState() {
54
+ this._ready = true;
55
+ this._resolveReady?.();
56
+ this._resolveReady = null;
57
+ this._rejectReady = null;
58
+ }
59
+ /** @returns {void} */
60
+ _markNotReady() {
61
+ this._ready = false;
62
+ }
63
+ /** @returns {void} */
64
+ _handleSubscribed() {
65
+ if (this._closed || this._subscribed)
66
+ return;
67
+ this._subscribed = true;
68
+ this._resolveReadyState();
69
+ }
70
+ /** @returns {void} */
71
+ _markSubscribeSent() {
72
+ this._subscribeSent = true;
73
+ }
74
+ /** @returns {boolean} - Whether the subscription still needs to be sent. */
75
+ _needsSubscribe() {
76
+ return !this._closed && !this._subscribeSent;
77
+ }
78
+ /**
79
+ * @param {any} body - Message payload.
80
+ * @returns {void}
81
+ */
82
+ _handleMessage(body) {
83
+ if (this._closed)
84
+ return;
85
+ this._onMessage?.(body);
86
+ }
87
+ /** @returns {void} */
88
+ _handleDisconnected() {
89
+ if (this._closed)
90
+ return;
91
+ this._resumeReadyOnResume || (this._resumeReadyOnResume = this._subscribed);
92
+ this._subscribed = false;
93
+ this._markNotReady();
94
+ this._onDisconnect?.();
95
+ }
96
+ /** @returns {void} */
97
+ _handleResumed() {
98
+ if (this._closed)
99
+ return;
100
+ if (this._resumeReadyOnResume) {
101
+ this._subscribed = true;
102
+ this._resolveReadyState();
103
+ }
104
+ this._resumeReadyOnResume = false;
105
+ this._onResume?.();
106
+ }
107
+ /**
108
+ * @param {string} reason - Why the subscription closed.
109
+ * @returns {void}
110
+ */
111
+ _handleClosed(reason) {
112
+ if (this._closed)
113
+ return;
114
+ this._closed = true;
115
+ try {
116
+ this._onClose?.(reason);
117
+ }
118
+ finally {
119
+ this._resumeReadyOnResume = false;
120
+ if (!this._ready) {
121
+ if (reason === "client_unsubscribe") {
122
+ // The client itself closed the subscription before the server ack
123
+ // (e.g. a UI component unmounting right after subscribing). That is a
124
+ // benign race, not a failure — resolve `ready` so awaiting callers
125
+ // don't surface a spurious "closed before acknowledgement" error.
126
+ this._resolveReady?.();
127
+ }
128
+ else {
129
+ this._rejectReady?.(new Error(`Subscription closed before acknowledgement: ${reason}`));
130
+ }
131
+ }
132
+ this._resolveReady = null;
133
+ this._rejectReady = null;
134
+ }
135
+ }
136
+ /**
137
+ * @param {{timeoutMs?: number}} [params] - Options.
138
+ * @returns {Promise<void>} - Resolves once ready or rejects on timeout.
139
+ */
140
+ async waitForReady({ timeoutMs = 5000 } = {}) {
141
+ if (this._ready)
142
+ return;
143
+ const readyPromise = this._ensureReadyPromise();
144
+ const timeoutPromise = new Promise((_, reject) => {
145
+ setTimeout(() => reject(new Error(`Subscription not ready after ${timeoutMs}ms`)), timeoutMs);
146
+ });
147
+ await Promise.race([readyPromise, timeoutPromise]);
148
+ }
149
+ /** @returns {void} */
150
+ close() {
151
+ if (this._closed)
152
+ return;
153
+ try {
154
+ if (this.client.isOpen()) {
155
+ this.client._sendMessage({ type: "channel-unsubscribe", subscriptionId: this.subscriptionId });
156
+ }
157
+ }
158
+ catch {
159
+ // Socket already gone; server will clean up on session teardown.
160
+ }
161
+ this.client._removeChannelSubscription(this.subscriptionId);
162
+ this._handleClosed("client_unsubscribe");
163
+ }
164
+ /** @returns {boolean} - Whether the subscription is closed. */
165
+ isClosed() { return this._closed; }
166
+ /** @returns {boolean} - Whether the subscription is acknowledged and ready. */
167
+ isReady() { return this._ready; }
168
+ /** @returns {boolean} - Whether the subscription is active. */
169
+ isSubscribed() { return this._subscribed && !this._closed; }
170
+ }
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWNoYW5uZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2Vic29ja2V0L3dlYnNvY2tldC1jaGFubmVsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sdUJBQXVCO0lBQzFDOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsWUFBWSxFQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFDO1FBQ2hILElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFBO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQTtRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQTtRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQTtRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQTtRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQTtRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFBO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFBO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO0lBQ3RCLENBQUM7SUFFRCxpRkFBaUY7SUFDakYsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFB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
@@ -362,3 +362,4 @@ export class SnapReqWebSocketResponse {
362
362
  }
363
363
  import SnapReqWebSocketConnection from "./websocket-connection.js";
364
364
  import SnapReqWebSocketChannel from "./websocket-channel.js";
365
+ //# sourceMappingURL=websocket-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"websocket-client.d.ts","sourceRoot":"","sources":["../../src/websocket/websocket-client.js"],"names":[],"mappings":"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"}