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.
- package/README.md +8 -5
- package/build/capabilities.d.ts +17 -17
- package/build/capabilities.d.ts.map +1 -1
- package/build/control.d.ts +12 -0
- package/build/control.d.ts.map +1 -0
- package/build/control.js +27 -0
- package/build/errors.d.ts +16 -16
- package/build/errors.d.ts.map +1 -1
- package/build/headers.d.ts +6 -6
- package/build/headers.d.ts.map +1 -1
- package/build/request.d.ts +15 -15
- package/build/request.d.ts.map +1 -1
- package/build/response.d.ts +27 -17
- package/build/response.d.ts.map +1 -1
- package/build/response.js +26 -2
- package/build/retry.d.ts +38 -37
- package/build/retry.d.ts.map +1 -1
- package/build/retry.js +40 -34
- package/build/snap-req.d.ts +116 -153
- package/build/snap-req.d.ts.map +1 -1
- package/build/snap-req.js +57 -102
- package/build/transports/fetch-transport.d.ts +10 -4
- package/build/transports/fetch-transport.d.ts.map +1 -1
- package/build/transports/fetch-transport.js +58 -12
- package/build/transports/fetch.d.ts.map +1 -1
- package/build/transports/node-transport.d.ts +23 -22
- package/build/transports/node-transport.d.ts.map +1 -1
- package/build/transports/node-transport.js +45 -10
- package/build/transports/proxy-bounce-transport.d.ts +4 -4
- package/build/transports/proxy-bounce-transport.d.ts.map +1 -1
- package/build/transports/select.d.ts +21 -21
- package/build/transports/select.d.ts.map +1 -1
- package/build/transports/xhr-transport.d.ts +2 -2
- package/build/transports/xhr-transport.d.ts.map +1 -1
- package/build/transports/xhr.d.ts.map +1 -1
- package/build/websocket/websocket-channel.d.ts +33 -22
- package/build/websocket/websocket-channel.d.ts.map +1 -1
- package/build/websocket/websocket-channel.js +27 -11
- package/build/websocket/websocket-client.d.ts +136 -65
- package/build/websocket/websocket-client.d.ts.map +1 -1
- package/build/websocket/websocket-client.js +221 -66
- package/build/websocket/websocket-connection.d.ts +19 -16
- package/build/websocket/websocket-connection.d.ts.map +1 -1
- package/build/websocket/websocket-connection.js +11 -3
- package/build/websocket.d.ts.map +1 -1
- 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 = () =>
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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":"
|
|
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":"
|
|
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":"
|
|
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] -
|
|
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":"
|
|
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
|
-
|
|
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] -
|
|
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
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
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,
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWNoYW5uZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd2Vic29ja2V0L3dlYnNvY2tldC1jaGFubmVsLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0sZUFBZSxDQUFBO0FBRTNDOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE9BQU8sT0FBTyx1QkFBdUI7SUFDMUM7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNILFlBQVksRUFBQyxNQUFNLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFDO1FBQ25JLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFBO1FBQ3BCLElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFBO1FBQ3BDLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFBO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQTtRQUMxQixJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQTtRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQTtRQUMzQixJQUFJLENBQUMsYUFBYSxHQUFHLFlBQVksQ0FBQTtRQUNqQyxJQUFJLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQTtRQUN6QixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQTtRQUN2QixJQUFJLENBQUMsTUFBTSxHQUFHLEtBQUssQ0FBQTtRQUNuQixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFBO1FBQ2pDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFBO1FBQ3hCLElBQUksQ0FBQyxjQUFjLEdBQUcsS0FBSyxDQUFBO1FBQzNCLElBQUksQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFBO1FB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
|