snapreq 0.0.8 → 0.0.10

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 (46) hide show
  1. package/README.md +8 -5
  2. package/build/capabilities.d.ts +17 -17
  3. package/build/capabilities.d.ts.map +1 -1
  4. package/build/control.d.ts +12 -0
  5. package/build/control.d.ts.map +1 -0
  6. package/build/control.js +27 -0
  7. package/build/errors.d.ts +16 -16
  8. package/build/errors.d.ts.map +1 -1
  9. package/build/headers.d.ts +6 -6
  10. package/build/headers.d.ts.map +1 -1
  11. package/build/request.d.ts +15 -15
  12. package/build/request.d.ts.map +1 -1
  13. package/build/response.d.ts +27 -17
  14. package/build/response.d.ts.map +1 -1
  15. package/build/response.js +26 -2
  16. package/build/retry.d.ts +38 -37
  17. package/build/retry.d.ts.map +1 -1
  18. package/build/retry.js +40 -34
  19. package/build/snap-req.d.ts +116 -153
  20. package/build/snap-req.d.ts.map +1 -1
  21. package/build/snap-req.js +57 -102
  22. package/build/transports/fetch-transport.d.ts +10 -4
  23. package/build/transports/fetch-transport.d.ts.map +1 -1
  24. package/build/transports/fetch-transport.js +58 -12
  25. package/build/transports/fetch.d.ts.map +1 -1
  26. package/build/transports/node-transport.d.ts +23 -22
  27. package/build/transports/node-transport.d.ts.map +1 -1
  28. package/build/transports/node-transport.js +45 -10
  29. package/build/transports/proxy-bounce-transport.d.ts +4 -4
  30. package/build/transports/proxy-bounce-transport.d.ts.map +1 -1
  31. package/build/transports/select.d.ts +21 -21
  32. package/build/transports/select.d.ts.map +1 -1
  33. package/build/transports/xhr-transport.d.ts +2 -2
  34. package/build/transports/xhr-transport.d.ts.map +1 -1
  35. package/build/transports/xhr.d.ts.map +1 -1
  36. package/build/websocket/websocket-channel.d.ts +33 -22
  37. package/build/websocket/websocket-channel.d.ts.map +1 -1
  38. package/build/websocket/websocket-channel.js +27 -11
  39. package/build/websocket/websocket-client.d.ts +136 -65
  40. package/build/websocket/websocket-client.d.ts.map +1 -1
  41. package/build/websocket/websocket-client.js +221 -66
  42. package/build/websocket/websocket-connection.d.ts +19 -16
  43. package/build/websocket/websocket-connection.d.ts.map +1 -1
  44. package/build/websocket/websocket-connection.js +11 -3
  45. package/build/websocket.d.ts.map +1 -1
  46. package/package.json +6 -3
@@ -114,7 +114,13 @@ export default class NodeTransport {
114
114
  return;
115
115
  }
116
116
  let settled = false;
117
- const abort = () => req.destroy(new SnapReqAbortError());
117
+ const abort = () => {
118
+ const error = new SnapReqAbortError();
119
+ requestBody.stream?.unpipe(req);
120
+ if (requestBody.ownedStream)
121
+ requestBody.stream?.destroy(error);
122
+ req.destroy(error);
123
+ };
118
124
  const removeAbortListener = () => request.signal?.removeEventListener("abort", abort);
119
125
  const req = httpModule.request(requestOptions, (res) => {
120
126
  /** @type {import("node:stream").Readable} */
@@ -133,9 +139,22 @@ export default class NodeTransport {
133
139
  // Re-point the abort listener at the response stream so aborting after
134
140
  // headers arrive tears down the body stream rather than the request.
135
141
  removeAbortListener();
136
- const abortStream = () => responseStream.destroy(new SnapReqAbortError());
142
+ const cancelResponse = (/** @type {Error} */ error) => {
143
+ responseStream.destroy(error);
144
+ if (responseStream !== res)
145
+ res.destroy(error);
146
+ };
147
+ const abortStream = () => cancelResponse(new SnapReqAbortError());
137
148
  request.signal?.addEventListener("abort", abortStream, { once: true });
138
149
  responseStream.on("close", () => request.signal?.removeEventListener("abort", abortStream));
150
+ // Cancellation may own and destroy a response body before the caller
151
+ // starts consuming it. Keep that intentional stream error from being
152
+ // process-fatal; async iteration still observes and rejects with it.
153
+ const handleOwnedResponseError = () => { };
154
+ for (const ownedStream of new Set([res, responseStream])) {
155
+ ownedStream.on("error", handleOwnedResponseError);
156
+ ownedStream.once("close", () => ownedStream.removeListener("error", handleOwnedResponseError));
157
+ }
139
158
  settled = true;
140
159
  resolve(new SnapReqResponse({
141
160
  url: request.url,
@@ -144,10 +163,19 @@ export default class NodeTransport {
144
163
  statusText: res.statusMessage || "",
145
164
  headers: this._responseHeaders(res),
146
165
  stream: responseStream,
147
- nodeStream: responseStream
166
+ nodeStream: responseStream,
167
+ cancelBody: (error) => cancelResponse(/** @type {Error} */ (error))
148
168
  }));
149
169
  });
150
170
  request.signal?.addEventListener("abort", abort, { once: true });
171
+ const onRequestBodyError = (/** @type {Error} */ error) => req.destroy(error);
172
+ requestBody.stream?.on("error", onRequestBodyError);
173
+ if (requestBody.ownedStream) {
174
+ requestBody.stream?.once("close", () => requestBody.stream?.removeListener("error", onRequestBodyError));
175
+ }
176
+ else {
177
+ req.on("close", () => requestBody.stream?.removeListener("error", onRequestBodyError));
178
+ }
151
179
  req.on("error", (/** @type {unknown} */ error) => {
152
180
  removeAbortListener();
153
181
  if (!settled) {
@@ -169,20 +197,22 @@ export default class NodeTransport {
169
197
  * @param {import("../snap-req.js").NormalizedRequest} request - Normalized request.
170
198
  * @param {SnapReqHeaders} headers - Headers, mutated with Content-Length / Content-Encoding.
171
199
  * @param {{zlib: any, stream: any}} modules - Node modules.
172
- * @returns {{buffer: Buffer | null, stream: import("node:stream").Readable | null}} - Prepared body.
200
+ * @returns {{buffer: Buffer | null, stream: import("node:stream").Readable | null, ownedStream: boolean}} - Prepared body.
173
201
  */
174
202
  _prepareRequestBody(request, headers, { zlib, stream }) {
175
203
  const compression = request.bodyCompression || "identity";
176
204
  const body = request.body;
177
205
  if (body.kind === "none")
178
- return { buffer: null, stream: null };
206
+ return { buffer: null, stream: null, ownedStream: false };
179
207
  /** @type {Buffer | null} */
180
208
  let buffer = null;
181
209
  /** @type {import("node:stream").Readable | null} */
182
210
  let bodyStream = null;
211
+ let ownedStream = false;
183
212
  if (body.kind === "stream") {
184
213
  const value = /** @type {any} */ (body.value);
185
- bodyStream = typeof value.pipe === "function" ? value : stream.Readable.from(value);
214
+ ownedStream = typeof value.pipe !== "function";
215
+ bodyStream = ownedStream ? stream.Readable.from(value) : value;
186
216
  }
187
217
  else if (body.kind === "bytes") {
188
218
  buffer = Buffer.from(/** @type {Uint8Array} */ (body.value));
@@ -193,7 +223,7 @@ export default class NodeTransport {
193
223
  if (compression === "identity") {
194
224
  if (buffer)
195
225
  headers.set("Content-Length", String(buffer.length));
196
- return { buffer, stream: bodyStream };
226
+ return { buffer, stream: bodyStream, ownedStream };
197
227
  }
198
228
  if (headers.has("content-encoding")) {
199
229
  throw new SnapReqUnsupportedFeatureError({
@@ -205,9 +235,14 @@ export default class NodeTransport {
205
235
  headers.set("Content-Encoding", compression);
206
236
  const compressor = this._requestCompressor(compression, zlib);
207
237
  const source = bodyStream || stream.Readable.from(/** @type {Buffer} */ (buffer));
208
- source.on("error", (/** @type {Error} */ error) => compressor.destroy(error));
238
+ const forwardError = (/** @type {Error} */ error) => compressor.destroy(error);
239
+ source.on("error", forwardError);
240
+ compressor.once("close", () => {
241
+ source.unpipe(compressor);
242
+ source.removeListener("error", forwardError);
243
+ });
209
244
  source.pipe(compressor);
210
- return { buffer: null, stream: compressor };
245
+ return { buffer: null, stream: compressor, ownedStream: true };
211
246
  }
212
247
  /**
213
248
  * @param {string} encoding - Compression encoding.
@@ -284,4 +319,4 @@ export default class NodeTransport {
284
319
  this._httpsAgent = null;
285
320
  }
286
321
  }
287
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS10cmFuc3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNwb3J0cy9ub2RlLXRyYW5zcG9ydC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFDcEQsT0FBTyxFQUFDLGlCQUFpQixFQUFFLDhCQUE4QixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQzlFLE9BQU8sY0FBYyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLGVBQWUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUU1Qzs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLGFBQWE7SUFDaEMsMENBQTBDO0lBQzFDLE1BQU0sS0FBSyxhQUFhO1FBQ3RCLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVELHNGQUFzRjtJQUN0RixNQUFNLENBQUMsV0FBVztRQUNoQixPQUFPLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLEVBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEdBQUcsSUFBSSxFQUFDLEdBQUcsRUFBRTtRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUM1QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO1FBQzFCLHFFQUFxRTtRQUNyRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtRQUNwQixrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7UUFDdEIsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO0lBQ3pCLENBQUM7SUFFRCw4RkFBOEY7SUFD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
322
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS10cmFuc3BvcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhbnNwb3J0cy9ub2RlLXRyYW5zcG9ydC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLGlCQUFpQixFQUFDLE1BQU0sb0JBQW9CLENBQUE7QUFDcEQsT0FBTyxFQUFDLGlCQUFpQixFQUFFLDhCQUE4QixFQUFDLE1BQU0sY0FBYyxDQUFBO0FBQzlFLE9BQU8sY0FBYyxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLGVBQWUsTUFBTSxnQkFBZ0IsQ0FBQTtBQUU1Qzs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsT0FBTyxPQUFPLGFBQWE7SUFDaEMsMENBQTBDO0lBQzFDLE1BQU0sS0FBSyxhQUFhO1FBQ3RCLE9BQU8sTUFBTSxDQUFBO0lBQ2YsQ0FBQztJQUVELHNGQUFzRjtJQUN0RixNQUFNLENBQUMsV0FBVztRQUNoQixPQUFPLE9BQU8sT0FBTyxLQUFLLFdBQVcsSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsQ0FBQTtJQUMxRSxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxZQUFZLEVBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxTQUFTLEdBQUcsSUFBSSxFQUFDLEdBQUcsRUFBRTtRQUNsRCxJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQTtRQUM1QixJQUFJLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQTtRQUNkLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFBO1FBQzFCLHFFQUFxRTtRQUNyRSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQTtRQUNwQixrQkFBa0I7UUFDbEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUE7UUFDdEIsa0JBQWtCO1FBQ2xCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFBO0lBQ3pCLENBQUM7SUFFRCw4RkFBOEY7SUFD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
@@ -1,3 +1,4 @@
1
+ import SnapReqResponse from "../response.js";
1
2
  /**
2
3
  * Transport that bounces every request through a same-origin proxy endpoint.
3
4
  * Used when the real target is a different origin and CORS would block direct
@@ -5,8 +6,7 @@
5
6
  * server-side where CORS does not apply.
6
7
  */
7
8
  export default class ProxyBounceTransport {
8
- /** @returns {string} - Transport name. */
9
- static get transportName(): string;
9
+ proxyUrl: string;
10
10
  /**
11
11
  * @param {object} config - Transport configuration.
12
12
  * @param {string} config.proxyUrl - Absolute URL of the proxy endpoint.
@@ -14,7 +14,8 @@ export default class ProxyBounceTransport {
14
14
  constructor({ proxyUrl }: {
15
15
  proxyUrl: string;
16
16
  });
17
- proxyUrl: string;
17
+ /** @returns {string} - Transport name. */
18
+ static get transportName(): string;
18
19
  /** @returns {import("../capabilities.js").TransportCapabilities} - Supported capabilities. */
19
20
  get capabilities(): import("../capabilities.js").TransportCapabilities;
20
21
  /**
@@ -23,5 +24,4 @@ export default class ProxyBounceTransport {
23
24
  */
24
25
  performRequest(request: import("../snap-req.js").NormalizedRequest): Promise<SnapReqResponse>;
25
26
  }
26
- import SnapReqResponse from "../response.js";
27
27
  //# sourceMappingURL=proxy-bounce-transport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"proxy-bounce-transport.d.ts","sourceRoot":"","sources":["../../src/transports/proxy-bounce-transport.js"],"names":[],"mappings":"AA4CA;;;;;GAKG;AACH;IASE,0CAA0C;IAC1C,4BADc,MAAM,CAGnB;IAXD;;;OAGG;IACH,0BAFG;QAAuB,QAAQ,EAAvB,MAAM;KAChB,EAGA;IADC,iBAAwB;IAQ1B,8FAA8F;IAC9F,oBADc,OAAO,oBAAoB,EAAE,qBAAqB,CAG/D;IAED;;;OAGG;IACH,wBAHW,OAAO,gBAAgB,EAAE,iBAAiB,GACxC,OAAO,CAAC,eAAe,CAAC,CA2EpC;CACF;4BA9I2B,gBAAgB"}
1
+ {"version":3,"file":"proxy-bounce-transport.d.ts","sourceRoot":"","sources":["../../src/transports/proxy-bounce-transport.js"],"names":[],"mappings":"AAKA,OAAO,eAAe,MAAM,gBAAgB,CAAA;AAuC5C;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,oBAAoB;IAMhC,QAAQ;IALf;;;OAGG;IACH,YAAY,EAAC,QAAQ,EAAC,EAFnB;QAAuB,QAAQ,EAAvB,MAAM,CAChB;KACqB,EAErB;IAED,0CAA0C;IAC1C,MAAM,KAAK,aAAa,IADV,MAAM,CAGnB;IAED,8FAA8F;IAC9F,IAAI,YAAY,IADF,OAAO,oBAAoB,EAAE,qBAAqB,CAG/D;IAED;;;OAGG;IACG,cAAc,CAAC,OAAO,EAHjB,OAAO,gBAAgB,EAAE,iBAGR,GAFf,OAAO,CAAC,eAAe,CAAC,CA2EpC;CACF"}
@@ -1,3 +1,22 @@
1
+ export type TransportName = "auto" | "node" | "fetch" | "xhr";
2
+ export type Transport = {
3
+ /**
4
+ * - Supported capabilities.
5
+ */
6
+ capabilities: import("../capabilities.js").TransportCapabilities;
7
+ /**
8
+ * - Perform a request.
9
+ */
10
+ performRequest: (request: import("../snap-req.js").NormalizedRequest) => Promise<import("../response.js").default>;
11
+ /**
12
+ * - Optional resource cleanup.
13
+ */
14
+ close?: () => void;
15
+ };
16
+ export type NodeTransportConstructor = new (config: object) => Transport;
17
+ export type NodeTransportModule = {
18
+ default: NodeTransportConstructor;
19
+ };
1
20
  /**
2
21
  * @typedef {"auto" | "node" | "fetch" | "xhr"} TransportName
3
22
  */
@@ -17,7 +36,7 @@
17
36
  * Detects the JavaScript runtime so `auto` can pick the right transport.
18
37
  * @returns {"node" | "react-native" | "browser" | "unknown"} - Detected runtime.
19
38
  */
20
- export function detectRuntime(): "node" | "react-native" | "browser" | "unknown";
39
+ export declare function detectRuntime(): "node" | "react-native" | "browser" | "unknown";
21
40
  /**
22
41
  * Resolves a transport for the requested preference. Returns the preference
23
42
  * untouched when it is already a transport instance. The Node transport is
@@ -26,24 +45,5 @@ export function detectRuntime(): "node" | "react-native" | "browser" | "unknown"
26
45
  * @param {object} nodeConfig - Configuration forwarded to the Node transport.
27
46
  * @returns {Promise<Transport>} - The resolved transport.
28
47
  */
29
- export function selectTransport(preference: TransportName | Transport | undefined, nodeConfig: object): Promise<Transport>;
30
- export type TransportName = "auto" | "node" | "fetch" | "xhr";
31
- export type Transport = {
32
- /**
33
- * - Supported capabilities.
34
- */
35
- capabilities: import("../capabilities.js").TransportCapabilities;
36
- /**
37
- * - Perform a request.
38
- */
39
- performRequest: (request: import("../snap-req.js").NormalizedRequest) => Promise<import("../response.js").default>;
40
- /**
41
- * - Optional resource cleanup.
42
- */
43
- close?: () => void;
44
- };
45
- export type NodeTransportConstructor = new (config: object) => Transport;
46
- export type NodeTransportModule = {
47
- default: NodeTransportConstructor;
48
- };
48
+ export declare function selectTransport(preference: TransportName | Transport | undefined, nodeConfig: object): Promise<Transport>;
49
49
  //# sourceMappingURL=select.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/transports/select.js"],"names":[],"mappings":"AAQA;;GAEG;AAEH;;;;;GAKG;AAEH;;GAEG;AAEH;;GAEG;AAEH;;;GAGG;AACH,iCAFa,MAAM,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,CAU3D;AAeD;;;;;;;GAOG;AACH,4CAJW,aAAa,GAAG,SAAS,GAAG,SAAS,cACrC,MAAM,GACJ,OAAO,CAAC,SAAS,CAAC,CAyB9B;4BA5EY,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK;;;;;kBAKhC,OAAO,oBAAoB,EAAE,qBAAqB;;;;oBAClD,CAAC,OAAO,EAAE,OAAO,gBAAgB,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,gBAAgB,EAAE,OAAO,CAAC;;;;YAClG,MAAM,IAAI;;uCAIX,KAAK,MAAM,EAAE,MAAM,KAAK,SAAS;kCAIjC;IAAC,OAAO,EAAE,wBAAwB,CAAA;CAAC"}
1
+ {"version":3,"file":"select.d.ts","sourceRoot":"","sources":["../../src/transports/select.js"],"names":[],"mappings":"AASG,YAA6C,aAAa,GAAhD,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,CAAe;AAI1D,YAAkB,SAAS,GAC3B;;;;IAA+D,YAAY,EAAhE,OAAO,oBAAoB,EAAE,qBAAqB,CAC7D;;;;IAA+G,cAAc,EAAlH,CAAC,OAAO,EAAE,OAAO,gBAAgB,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,gBAAgB,EAAE,OAAO,CAAC,CAC7G;;;;IAAwB,KAAK,AAA7B,CACF,EADa,MAAM,IAAI,CACvB;CAAA,CAAA;AAGE,YAA6C,wBAAwB,GAA3D,KAAK,MAAM,EAAE,MAAM,KAAK,SAAS,CAA0B;AAIrE,YAA+C,mBAAmB,GAAxD;IAAC,OAAO,EAAE,wBAAwB,CAAA;CAAC,CAAqB;AAhBrE;;GAEG;AAEH;;;;;GAKG;AAEH;;GAEG;AAEH;;GAEG;AAEH;;;GAGG;AACH,wBAAgB,aAAa,IAFhB,MAAM,GAAG,cAAc,GAAG,SAAS,GAAG,SAAS,CAU3D;AAeD;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,UAAU,EAJrC,aAAa,GAAG,SAAS,GAAG,SAIS,EAAE,UAAU,EAHjD,MAGiD,GAF/C,OAAO,CAAC,SAAS,CAAC,CAyB9B"}
@@ -1,3 +1,5 @@
1
+ import SnapReqHeaders from "../headers.js";
2
+ import SnapReqResponse from "../response.js";
1
3
  /**
2
4
  * Transport backed by `XMLHttpRequest`. A fallback for web environments that
3
5
  * lack `fetch`. Buffers the whole response (no incremental streaming) and, like
@@ -21,6 +23,4 @@ export default class XhrTransport {
21
23
  */
22
24
  _parseHeaders(rawHeaders: string): SnapReqHeaders;
23
25
  }
24
- import SnapReqResponse from "../response.js";
25
- import SnapReqHeaders from "../headers.js";
26
26
  //# sourceMappingURL=xhr-transport.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"xhr-transport.d.ts","sourceRoot":"","sources":["../../src/transports/xhr-transport.js"],"names":[],"mappings":"AAOA;;;;GAIG;AACH;IACE,0CAA0C;IAC1C,4BADc,MAAM,CAGnB;IAED,sFAAsF;IACtF,sBADc,OAAO,CAGpB;IAED,8FAA8F;IAC9F,oBADc,OAAO,oBAAoB,EAAE,qBAAqB,CAG/D;IAED;;;OAGG;IACH,wBAHW,OAAO,gBAAgB,EAAE,iBAAiB,GACxC,OAAO,CAAC,eAAe,CAAC,CA8DpC;IAED;;;OAGG;IACH,0BAHW,MAAM,GACJ,cAAc,CAc1B;CACF;4BA1G2B,gBAAgB;2BADjB,eAAe"}
1
+ {"version":3,"file":"xhr-transport.d.ts","sourceRoot":"","sources":["../../src/transports/xhr-transport.js"],"names":[],"mappings":"AAIA,OAAO,cAAc,MAAM,eAAe,CAAA;AAC1C,OAAO,eAAe,MAAM,gBAAgB,CAAA;AAE5C;;;;GAIG;AACH,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,0CAA0C;IAC1C,MAAM,KAAK,aAAa,IADV,MAAM,CAGnB;IAED,sFAAsF;IACtF,MAAM,CAAC,WAAW,IADJ,OAAO,CAGpB;IAED,8FAA8F;IAC9F,IAAI,YAAY,IADF,OAAO,oBAAoB,EAAE,qBAAqB,CAG/D;IAED;;;OAGG;IACH,cAAc,CAAC,OAAO,EAHX,OAAO,gBAAgB,EAAE,iBAGd,GAFT,OAAO,CAAC,eAAe,CAAC,CA8DpC;IAED;;;OAGG;IACH,aAAa,CAAC,UAAU,EAHb,MAGa,GAFX,cAAc,CAc1B;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"xhr.d.ts","sourceRoot":"","sources":["../../src/transports/xhr.js"],"names":[],"mappings":""}
1
+ {"version":3,"file":"xhr.d.ts","sourceRoot":"","sources":["../../src/transports/xhr.js"],"names":[],"mappings":"AAEA,OAAO,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAA"}
@@ -5,6 +5,30 @@
5
5
  * `onClose`.
6
6
  */
7
7
  export default class SnapReqWebSocketChannel {
8
+ client: import("./websocket-client.js").default;
9
+ subscriptionId: string;
10
+ channelType: string;
11
+ params: Record<string, any>;
12
+ lastEventId: string;
13
+ _onMessage: (body: any) => void;
14
+ _onDisconnect: () => void;
15
+ _onResume: () => void;
16
+ _onClose: (reason: string) => void;
17
+ _ready: boolean;
18
+ _resumeReadyOnResume: boolean;
19
+ _subscribed: boolean;
20
+ _subscribeSent: boolean;
21
+ _closed: boolean;
22
+ _readyControls: {
23
+ timeoutMs: number;
24
+ signal: AbortSignal;
25
+ };
26
+ /** @type {Promise<void> | null} */
27
+ _controlledReadyPromise: Promise<void> | null;
28
+ /** @type {Promise<void>} */
29
+ _readyPromise: Promise<void>;
30
+ _resolveReady: (value: void | PromiseLike<void>) => void;
31
+ _rejectReady: (reason?: any) => void;
8
32
  /**
9
33
  * @param {object} args - Channel arguments.
10
34
  * @param {import("./websocket-client.js").default} args.client - Owning client.
@@ -12,42 +36,28 @@ export default class SnapReqWebSocketChannel {
12
36
  * @param {string} args.channelType - Name the server registered the channel under.
13
37
  * @param {Record<string, any>} [args.params] - Opaque params forwarded to the server.
14
38
  * @param {string} [args.lastEventId] - Resume replay from this event id.
39
+ * @param {number} [args.timeoutMs] - Server-confirmed readiness deadline.
40
+ * @param {AbortSignal} [args.signal] - Cancels readiness without affecting other subscriptions.
15
41
  * @param {(body: any) => void} [args.onMessage] - Fired on each `channel-message` from the server.
16
42
  * @param {() => void} [args.onDisconnect] - Fired when the socket drops.
17
43
  * @param {() => void} [args.onResume] - Fired when the session resumes after a drop.
18
44
  * @param {(reason: string) => void} [args.onClose] - Fired exactly once when the subscription closes permanently.
19
45
  */
20
- constructor({ client, subscriptionId, channelType, params, lastEventId, onMessage, onDisconnect, onResume, onClose }: {
46
+ constructor({ client, subscriptionId, channelType, params, lastEventId, timeoutMs, signal, onMessage, onDisconnect, onResume, onClose }: {
21
47
  client: import("./websocket-client.js").default;
22
48
  subscriptionId: string;
23
49
  channelType: string;
24
50
  params?: Record<string, any>;
25
51
  lastEventId?: string;
52
+ timeoutMs?: number;
53
+ signal?: AbortSignal;
26
54
  onMessage?: (body: any) => void;
27
55
  onDisconnect?: () => void;
28
56
  onResume?: () => void;
29
57
  onClose?: (reason: string) => void;
30
58
  });
31
- client: import("./websocket-client.js").default;
32
- subscriptionId: string;
33
- channelType: string;
34
- params: Record<string, any>;
35
- lastEventId: string;
36
- _onMessage: (body: any) => void;
37
- _onDisconnect: () => void;
38
- _onResume: () => void;
39
- _onClose: (reason: string) => void;
40
- _ready: boolean;
41
- _resumeReadyOnResume: boolean;
42
- _subscribed: boolean;
43
- _subscribeSent: boolean;
44
- _closed: boolean;
45
59
  /** @returns {Promise<void>} - Resolves once the subscription is acknowledged. */
46
60
  _ensureReadyPromise(): Promise<void>;
47
- /** @type {Promise<void>} */
48
- _readyPromise: Promise<void>;
49
- _resolveReady: (value: void | PromiseLike<void>) => void;
50
- _rejectReady: (reason?: any) => void;
51
61
  /** @returns {Promise<void>} - Resolves once the subscription is acknowledged. */
52
62
  get ready(): Promise<void>;
53
63
  /** @returns {void} */
@@ -75,11 +85,12 @@ export default class SnapReqWebSocketChannel {
75
85
  */
76
86
  _handleClosed(reason: string): void;
77
87
  /**
78
- * @param {{timeoutMs?: number}} [params] - Options.
79
- * @returns {Promise<void>} - Resolves once ready or rejects on timeout.
88
+ * @param {{timeoutMs?: number, signal?: AbortSignal}} [params] - Operation controls, overriding constructor controls.
89
+ * @returns {Promise<void>} - Resolves once ready or rejects on timeout/cancellation.
80
90
  */
81
- waitForReady({ timeoutMs }?: {
91
+ waitForReady({ timeoutMs, signal }?: {
82
92
  timeoutMs?: number;
93
+ signal?: AbortSignal;
83
94
  }): Promise<void>;
84
95
  /** @returns {void} */
85
96
  close(): void;
@@ -1 +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"}
1
+ {"version":3,"file":"websocket-channel.d.ts","sourceRoot":"","sources":["../../src/websocket/websocket-channel.js"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,uBAAuB;IAgBnC,MAAM;IACN,cAAc;IACd,WAAW;IACX,MAAM;IACN,WAAW;IACX,UAAU,SAXC,GAAG,KAAK,IAAI;IAYvB,aAAa,QAXH,IAAI;IAYd,SAAS,QAXC,IAAI;IAYd,QAAQ,WAXK,MAAM,KAAK,IAAI;IAY5B,MAAM;IACN,oBAAoB;IACpB,WAAW;IACX,cAAc;IACd,OAAO;IACP,cAAc;;;;IACnB,mCAAmC;IAC9B,uBAAuB,EADjB,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAO7B,4BAA4B;IACvB,aAAa,EADP,OAAO,CAAC,IAAI,CAAC;IAEjB,aAAa;IACb,YAAY;IAxCvB;;;;;;;;;;;;;OAaG;IACH,YAAY,EAAC,MAAM,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAC,EAZlI;QAAsD,MAAM,EAApD,OAAO,uBAAuB,EAAE,OAAO,CAC/C;QAAqB,cAAc,EAA3B,MAAM,CACd;QAAqB,WAAW,EAAxB,MAAM,CACd;QAAmC,MAAM,AAAzC,CACA,EADQ,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAC3B;QAAsB,WAAW,AAAjC,CACA,EADQ,MAAM,CACd;QAAsB,SAAS,AAA/B,CACA,EADQ,MAAM,CACd;QAA2B,MAAM,AAAjC,CACA,EADQ,WAAW,CACnB;QAAmC,SAAS,AAA5C,CACA,EADQ,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,CAC3B;QAA0B,YAAY,AAAtC,CACA,EADQ,MAAM,IAAI,CAClB;QAA0B,QAAQ,AAAlC,CACA,EADQ,MAAM,IAAI,CAClB;QAAwC,OAAO,AAA/C,CACF,EADU,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAClC;KACoI,EAkBpI;IAED,iFAAiF;IACjF,mBAAmB,IADL,OAAO,CAAC,IAAI,CAAC,CAW1B;IAED,iFAAiF;IACjF,IAAI,KAAK,IADK,OAAO,CAAC,IAAI,CAAC,CAW1B;IAED,sBAAsB;IACtB,kBAAkB,IADJ,IAAI,CAMjB;IAED,sBAAsB;IACtB,aAAa,IADC,IAAI,CAGjB;IAED,sBAAsB;IACtB,iBAAiB,IADH,IAAI,CAKjB;IAED,sBAAsB;IACtB,kBAAkB,IADJ,IAAI,CAGjB;IAED,4EAA4E;IAC5E,eAAe,IADD,OAAO,CAGpB;IAED;;;OAGG;IACH,cAAc,CAAC,IAAI,EAHR,GAGQ,GAFN,IAAI,CAKhB;IAED,sBAAsB;IACtB,mBAAmB,IADL,IAAI,CAOjB;IAED,sBAAsB;IACtB,cAAc,IADA,IAAI,CASjB;IAED;;;OAGG;IACH,aAAa,CAAC,MAAM,EAHT,MAGS,GAFP,IAAI,CAyBhB;IAED;;;OAGG;IACG,YAAY,CAAC,EAAC,SAAgB,EAAE,MAAM,EAAC,AAH1C,CACA,EADQ;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,WAAW,CAAA;KAGF,GAFrC,OAAO,CAAC,IAAI,CAAC,CAWzB;IAED,sBAAsB;IACtB,KAAK,IADS,IAAI,CAcjB;IAED,+DAA+D;IAC/D,QAAQ,IADM,OAAO,CACa;IAElC,+EAA+E;IAC/E,OAAO,IADO,OAAO,CACW;IAEhC,+DAA+D;IAC/D,YAAY,IADE,OAAO,CACsC;CAC5D"}
@@ -1,4 +1,5 @@
1
1
  // @ts-check
2
+ import { runControlled } from "../control.js";
2
3
  /**
3
4
  * Client-side handle for a channel subscription opened via
4
5
  * `SnapReqWebSocketClient.subscribeChannel()`. Mirrors the server's
@@ -13,12 +14,14 @@ export default class SnapReqWebSocketChannel {
13
14
  * @param {string} args.channelType - Name the server registered the channel under.
14
15
  * @param {Record<string, any>} [args.params] - Opaque params forwarded to the server.
15
16
  * @param {string} [args.lastEventId] - Resume replay from this event id.
17
+ * @param {number} [args.timeoutMs] - Server-confirmed readiness deadline.
18
+ * @param {AbortSignal} [args.signal] - Cancels readiness without affecting other subscriptions.
16
19
  * @param {(body: any) => void} [args.onMessage] - Fired on each `channel-message` from the server.
17
20
  * @param {() => void} [args.onDisconnect] - Fired when the socket drops.
18
21
  * @param {() => void} [args.onResume] - Fired when the session resumes after a drop.
19
22
  * @param {(reason: string) => void} [args.onClose] - Fired exactly once when the subscription closes permanently.
20
23
  */
21
- constructor({ client, subscriptionId, channelType, params, lastEventId, onMessage, onDisconnect, onResume, onClose }) {
24
+ constructor({ client, subscriptionId, channelType, params, lastEventId, timeoutMs, signal, onMessage, onDisconnect, onResume, onClose }) {
22
25
  this.client = client;
23
26
  this.subscriptionId = subscriptionId;
24
27
  this.channelType = channelType;
@@ -33,6 +36,9 @@ export default class SnapReqWebSocketChannel {
33
36
  this._subscribed = false;
34
37
  this._subscribeSent = false;
35
38
  this._closed = false;
39
+ this._readyControls = { timeoutMs, signal };
40
+ /** @type {Promise<void> | null} */
41
+ this._controlledReadyPromise = null;
36
42
  }
37
43
  /** @returns {Promise<void>} - Resolves once the subscription is acknowledged. */
38
44
  _ensureReadyPromise() {
@@ -47,7 +53,14 @@ export default class SnapReqWebSocketChannel {
47
53
  }
48
54
  /** @returns {Promise<void>} - Resolves once the subscription is acknowledged. */
49
55
  get ready() {
50
- return this._ensureReadyPromise();
56
+ if (!this._controlledReadyPromise) {
57
+ this._controlledReadyPromise = runControlled(this._readyControls, () => this._ensureReadyPromise()).catch((error) => {
58
+ if (!this._closed)
59
+ this.close();
60
+ throw error;
61
+ });
62
+ }
63
+ return this._controlledReadyPromise;
51
64
  }
52
65
  /** @returns {void} */
53
66
  _resolveReadyState() {
@@ -134,17 +147,20 @@ export default class SnapReqWebSocketChannel {
134
147
  }
135
148
  }
136
149
  /**
137
- * @param {{timeoutMs?: number}} [params] - Options.
138
- * @returns {Promise<void>} - Resolves once ready or rejects on timeout.
150
+ * @param {{timeoutMs?: number, signal?: AbortSignal}} [params] - Operation controls, overriding constructor controls.
151
+ * @returns {Promise<void>} - Resolves once ready or rejects on timeout/cancellation.
139
152
  */
140
- async waitForReady({ timeoutMs = 5000 } = {}) {
153
+ async waitForReady({ timeoutMs = 5000, signal } = {}) {
141
154
  if (this._ready)
142
155
  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]);
156
+ try {
157
+ await runControlled({ timeoutMs, signal }, () => this._ensureReadyPromise());
158
+ }
159
+ catch (error) {
160
+ if (!this._closed)
161
+ this.close();
162
+ throw error;
163
+ }
148
164
  }
149
165
  /** @returns {void} */
150
166
  close() {
@@ -168,4 +184,4 @@ export default class SnapReqWebSocketChannel {
168
184
  /** @returns {boolean} - Whether the subscription is active. */
169
185
  isSubscribed() { return this._subscribed && !this._closed; }
170
186
  }
171
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWNoYW5uZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2Vic29ja2V0L3dlYnNvY2tldC1jaGFubmVsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWjs7Ozs7R0FLRztBQUNILE1BQU0sQ0FBQyxPQUFPLE9BQU8sdUJBQXVCO0lBQzFDOzs7Ozs7Ozs7OztPQVdHO0lBQ0gsWUFBWSxFQUFDLE1BQU0sRUFBRSxjQUFjLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFDO1FBQ2hILElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFBO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQTtRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQTtRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQTtRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQTtRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQTtRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFBO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFBO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO0lBQ3RCLENBQUM7SUFFRCxpRkFBaUY7SUFDakYsbUJBQW1CO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsYUFB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
187
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWNoYW5uZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2Vic29ja2V0L3dlYnNvY2tldC1jaGFubmVsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBRTNDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyx1QkFBdUI7SUFDMUM7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFDO1FBQ25JLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFBO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQTtRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQTtRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQTtRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQTtRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQTtRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFBO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFBO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO1FB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