snapreq 0.0.9 → 0.0.11

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 +59 -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 +113 -71
  40. package/build/websocket/websocket-client.d.ts.map +1 -1
  41. package/build/websocket/websocket-client.js +142 -58
  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 +8 -4
package/build/retry.js CHANGED
@@ -1,5 +1,6 @@
1
1
  // @ts-check
2
- import { SnapReqHttpError, SnapReqTimeoutError } from "./errors.js";
2
+ import { SnapReqTimeoutError } from "./errors.js";
3
+ import retry from "awaitery/build/retry.js";
3
4
  const RETRYABLE_ERROR_CODES = new Set(["ECONNREFUSED", "ECONNRESET", "EHOSTUNREACH", "ENOENT", "ETIMEDOUT", "EPIPE"]);
4
5
  const DEFAULT_RETRYABLE_STATUSES = [502, 503, 504];
5
6
  /**
@@ -51,45 +52,50 @@ export function normalizeRetryOptions(retry) {
51
52
  shouldRetry
52
53
  };
53
54
  }
54
- /**
55
- * @param {number} waitMs - Delay in milliseconds.
56
- * @returns {Promise<void>} - Resolves after the delay.
57
- */
58
- function wait(waitMs) {
59
- return new Promise((resolve) => setTimeout(resolve, waitMs));
55
+ class RetryableResponse extends Error {
56
+ /** @param {import("./response.js").default} response - Retryable response. */
57
+ constructor(response) {
58
+ super(`Retryable HTTP status ${response.status}`);
59
+ this.response = response;
60
+ }
60
61
  }
61
62
  /**
62
63
  * Runs a request attempt, retrying transient network errors and retryable HTTP
63
64
  * statuses. Retries are only used for buffered requests — the caller must not
64
65
  * apply this to streamed responses.
65
- * @param {() => Promise<import("./response.js").default>} attempt - Performs one request attempt.
66
- * @param {NormalizedRetryOptions} retry - Normalized retry settings.
66
+ * @param {(signal: AbortSignal | undefined) => Promise<import("./response.js").default>} attempt - Performs one request attempt.
67
+ * @param {NormalizedRetryOptions} retryOptions - Normalized retry settings.
68
+ * @param {AbortSignal} [signal] - Caller cancellation signal.
67
69
  * @returns {Promise<import("./response.js").default>} - The successful (or final) response.
68
70
  */
69
- export async function runWithRetry(attempt, retry) {
70
- for (let tryNumber = 1; tryNumber <= retry.tries; tryNumber += 1) {
71
- /** @type {import("./response.js").default} */
72
- let response;
73
- try {
74
- response = await attempt();
75
- }
76
- catch (error) {
77
- if (tryNumber >= retry.tries || !retry.shouldRetry(error, tryNumber))
78
- throw error;
79
- await wait(retry.waitMs);
80
- continue;
81
- }
82
- if (tryNumber < retry.tries && retry.retryableStatuses.includes(response.status)) {
83
- await wait(retry.waitMs);
84
- continue;
85
- }
86
- return response;
71
+ export async function runWithRetry(attempt, retryOptions, signal) {
72
+ try {
73
+ return await retry({
74
+ tries: retryOptions.tries,
75
+ wait: retryOptions.waitMs,
76
+ signal,
77
+ shouldRetry: ({ error, tryNumber }) => {
78
+ if (error instanceof RetryableResponse) {
79
+ // Awaitery calls shouldRetry only when another attempt is available,
80
+ // and before its retry delay. The final response therefore remains
81
+ // caller-owned while every intermediate body is released promptly.
82
+ error.response._abortBody(error);
83
+ return true;
84
+ }
85
+ return retryOptions.shouldRetry(error, tryNumber);
86
+ }
87
+ }, async ({ signal: attemptSignal } = /** @type {any} */ ({})) => {
88
+ const response = await attempt(attemptSignal);
89
+ if (retryOptions.retryableStatuses.includes(response.status)) {
90
+ throw new RetryableResponse(response);
91
+ }
92
+ return response;
93
+ });
94
+ }
95
+ catch (error) {
96
+ if (error instanceof RetryableResponse)
97
+ return error.response;
98
+ throw error;
87
99
  }
88
- throw new SnapReqHttpError({
89
- message: "Retry loop exited without a response.",
90
- method: "",
91
- url: "",
92
- status: 0
93
- });
94
100
  }
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmV0cnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUVqRSxNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0FBQ3JILE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBRWxEOzs7Ozs7R0FNRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEtBQUs7SUFDekMsSUFBSSxLQUFLLFlBQVksbUJBQW1CO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFckQsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFckQsSUFBSSxNQUFNLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUkscUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQy9GLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELE9BQU8sS0FBSyxZQUFZLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLGdCQUFnQixDQUFBO0FBQ3JFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFLO0lBQ3pDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFdkIsTUFBTSxPQUFPLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7SUFDM0MsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLElBQUksMEJBQTBCLENBQUE7SUFDakYsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBRTNHLE9BQU87UUFDTCxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDO1FBQ3pCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLEdBQUc7UUFDN0IsaUJBQWlCO1FBQ2pCLFdBQVc7S0FDWixDQUFBO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILFNBQVMsSUFBSSxDQUFDLE1BQU07SUFDbEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO0FBQzlELENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxDQUFDLEtBQUssVUFBVSxZQUFZLENBQUMsT0FBTyxFQUFFLEtBQUs7SUFDL0MsS0FBSyxJQUFJLFNBQVMsR0FBRyxDQUFDLEVBQUUsU0FBUyxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsU0FBUyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2pFLDhDQUE4QztRQUM5QyxJQUFJLFFBQVEsQ0FBQTtRQUVaLElBQUksQ0FBQztZQUNILFFBQVEsR0FBRyxNQUFNLE9BQU8sRUFBRSxDQUFBO1FBQzVCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQztnQkFBRSxNQUFNLEtBQUssQ0FBQTtZQUVqRixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUE7WUFDeEIsU0FBUTtRQUNWLENBQUM7UUFFRCxJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUMsS0FBSyxJQUFJLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDakYsTUFBTSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ3hCLFNBQVE7UUFDVixDQUFDO1FBRUQsT0FBTyxRQUFRLENBQUE7SUFDakIsQ0FBQztJQUVELE1BQU0sSUFBSSxnQkFBZ0IsQ0FBQztRQUN6QixPQUFPLEVBQUUsdUNBQXVDO1FBQ2hELE1BQU0sRUFBRSxFQUFFO1FBQ1YsR0FBRyxFQUFFLEVBQUU7UUFDUCxNQUFNLEVBQUUsQ0FBQztLQUNWLENBQUMsQ0FBQTtBQUNKLENBQUMifQ==
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcmV0cnkuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsWUFBWTtBQUVaLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLGFBQWEsQ0FBQTtBQUMvQyxPQUFPLEtBQUssTUFBTSx5QkFBeUIsQ0FBQTtBQUUzQyxNQUFNLHFCQUFxQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsY0FBYyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO0FBQ3JILE1BQU0sMEJBQTBCLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0FBRWxEOzs7Ozs7R0FNRztBQUVIOzs7Ozs7R0FNRztBQUVIOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEtBQUs7SUFDekMsSUFBSSxLQUFLLFlBQVksbUJBQW1CO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFckQsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxLQUFLLENBQUE7SUFFckQsSUFBSSxNQUFNLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxDQUFDLElBQUksS0FBSyxRQUFRLElBQUkscUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQy9GLE9BQU8sSUFBSSxDQUFBO0lBQ2IsQ0FBQztJQUVELE9BQU8sS0FBSyxZQUFZLEtBQUssSUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLGdCQUFnQixDQUFBO0FBQ3JFLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFLO0lBQ3pDLElBQUksQ0FBQyxLQUFLO1FBQUUsT0FBTyxJQUFJLENBQUE7SUFFdkIsTUFBTSxPQUFPLEdBQUcsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7SUFDM0MsTUFBTSxpQkFBaUIsR0FBRyxPQUFPLENBQUMsaUJBQWlCLElBQUksMEJBQTBCLENBQUE7SUFDakYsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsSUFBSSxDQUFDLENBQUMsc0JBQXNCLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxxQkFBcUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBRTNHLE9BQU87UUFDTCxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDO1FBQ3pCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxJQUFJLEdBQUc7UUFDN0IsaUJBQWlCO1FBQ2pCLFdBQVc7S0FDWixDQUFBO0FBQ0gsQ0FBQztBQUVELE1BQU0saUJBQWtCLFNBQVEsS0FBSztJQUNuQyw4RUFBOEU7SUFDOUUsWUFBWSxRQUFRO1FBQ2xCLEtBQUssQ0FBQyx5QkFBeUIsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDakQsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7SUFDMUIsQ0FBQztDQUNGO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLFlBQVksQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU07SUFDOUQsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLEtBQUssQ0FBQztZQUNqQixLQUFLLEVBQUUsWUFBWSxDQUFDLEtBQUs7WUFDekIsSUFBSSxFQUFFLFlBQVksQ0FBQyxNQUFNO1lBQ3pCLE1BQU07WUFDTixXQUFXLEVBQUUsQ0FBQyxFQUFDLEtBQUssRUFBRSxTQUFTLEVBQUMsRUFBRSxFQUFFO2dCQUNsQyxJQUFJLEtBQUssWUFBWSxpQkFBaUIsRUFBRSxDQUFDO29CQUN2QyxxRUFBcUU7b0JBQ3JFLG1FQUFtRTtvQkFDbkUsbUVBQW1FO29CQUNuRSxLQUFLLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDaEMsT0FBTyxJQUFJLENBQUE7Z0JBQ2IsQ0FBQztnQkFFRCxPQUFPLFlBQVksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFNBQVMsQ0FBQyxDQUFBO1lBQ25ELENBQUM7U0FDRixFQUFFLEtBQUssRUFBRSxFQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUMsR0FBRyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDN0QsTUFBTSxRQUFRLEdBQUcsTUFBTSxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUE7WUFFN0MsSUFBSSxZQUFZLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM3RCxNQUFNLElBQUksaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUE7WUFDdkMsQ0FBQztZQUVELE9BQU8sUUFBUSxDQUFBO1FBQ2pCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssWUFBWSxpQkFBaUI7WUFBRSxPQUFPLEtBQUssQ0FBQyxRQUFRLENBQUE7UUFFN0QsTUFBTSxLQUFLLENBQUE7SUFDYixDQUFDO0FBQ0gsQ0FBQyJ9
@@ -1,3 +1,90 @@
1
+ import { SnapReqHttpError } from "./errors.js";
2
+ import SnapReqHeaders from "./headers.js";
3
+ export type CompressionEncoding = import("./request.js").CompressionEncoding;
4
+ export type NormalizedRequest = {
5
+ /**
6
+ * - Upper-cased HTTP method.
7
+ */
8
+ method: string;
9
+ /**
10
+ * - Fully resolved request URL.
11
+ */
12
+ url: string;
13
+ /**
14
+ * - Request headers.
15
+ */
16
+ headers: SnapReqHeaders;
17
+ /**
18
+ * - Normalized request body.
19
+ */
20
+ body: import("./request.js").NormalizedBody;
21
+ /**
22
+ * - Request body compression.
23
+ */
24
+ bodyCompression: CompressionEncoding;
25
+ /**
26
+ * - Abort signal.
27
+ */
28
+ signal?: AbortSignal;
29
+ /**
30
+ * - Request timeout in milliseconds.
31
+ */
32
+ timeoutMs?: number;
33
+ /**
34
+ * - Fetch credentials mode ("omit" | "same-origin" | "include").
35
+ */
36
+ credentials?: string;
37
+ };
38
+ export type RequestOptions = {
39
+ /**
40
+ * - HTTP method. Defaults to GET.
41
+ */
42
+ method?: string;
43
+ /**
44
+ * - Request path (joined with the client `baseUrl`) or absolute URL.
45
+ */
46
+ path?: string;
47
+ /**
48
+ * - Alias for `path`.
49
+ */
50
+ url?: string;
51
+ /**
52
+ * - Query parameters.
53
+ */
54
+ query?: Record<string, string | number | boolean | null | undefined>;
55
+ /**
56
+ * - Per-request headers.
57
+ */
58
+ headers?: Record<string, string | number> | SnapReqHeaders;
59
+ /**
60
+ * - Request body: string, object (JSON), Uint8Array/ArrayBuffer, or a stream/async-iterable.
61
+ */
62
+ body?: any;
63
+ /**
64
+ * - Compress the request body (Node transport only).
65
+ */
66
+ bodyCompression?: CompressionEncoding;
67
+ /**
68
+ * - Abort signal for the request.
69
+ */
70
+ signal?: AbortSignal;
71
+ /**
72
+ * - Request timeout in milliseconds. Set to `0` to disable a client default.
73
+ */
74
+ timeoutMs?: number;
75
+ /**
76
+ * - Fetch credentials mode.
77
+ */
78
+ credentials?: string;
79
+ /**
80
+ * - Retry transient failures.
81
+ */
82
+ retry?: boolean | import("./retry.js").RetryOptions;
83
+ /**
84
+ * - Throw `SnapReqHttpError` on non-2xx responses.
85
+ */
86
+ throwOnError?: boolean;
87
+ };
1
88
  /**
2
89
  * @typedef {import("./request.js").CompressionEncoding} CompressionEncoding
3
90
  */
@@ -27,13 +114,6 @@
27
114
  * @property {boolean | import("./retry.js").RetryOptions} [retry] - Retry transient failures.
28
115
  * @property {boolean} [throwOnError] - Throw `SnapReqHttpError` on non-2xx responses.
29
116
  */
30
- /**
31
- * @typedef {object} RequestTimeout
32
- * @property {AbortSignal | undefined} signal - Signal to use for the request.
33
- * @property {() => void} clear - Clears timeout resources.
34
- * @property {(response: import("./response.js").default, request: NormalizedRequest) => import("./response.js").default} response - Attaches timeout handling to a response.
35
- * @property {(error: unknown, request: NormalizedRequest) => unknown} error - Maps a thrown error.
36
- */
37
117
  /**
38
118
  * A cross-platform HTTP client with one API across Node, web, Expo and React
39
119
  * Native. The right transport is chosen at runtime; features a platform cannot
@@ -41,6 +121,27 @@
41
121
  * behaviour.
42
122
  */
43
123
  export default class SnapReq {
124
+ baseUrl: string;
125
+ defaultHeaders: Record<string, string | number> | (() => Record<string, string | number>);
126
+ defaultRetry: boolean | import("./retry.js").RetryOptions;
127
+ throwOnError: boolean;
128
+ timeoutMs: number;
129
+ credentials: string;
130
+ _transportPreference: import("./transports/select.js").Transport | import("./transports/select.js").TransportName;
131
+ _nodeConfig: {
132
+ socketPath: string;
133
+ tls: {
134
+ ca?: string | Buffer;
135
+ cert?: string | Buffer;
136
+ key?: string | Buffer;
137
+ rejectUnauthorized?: boolean;
138
+ };
139
+ keepAlive: boolean;
140
+ };
141
+ /** @type {Promise<import("./transports/select.js").Transport> | null} */
142
+ _transportPromise: Promise<import("./transports/select.js").Transport> | null;
143
+ /** @type {import("./transports/select.js").Transport | null} */
144
+ _transport: import("./transports/select.js").Transport | null;
44
145
  /**
45
146
  * @param {object} [config] - Client configuration.
46
147
  * @param {string} [config.baseUrl] - Origin (and optional base path) prepended to relative paths.
@@ -71,27 +172,6 @@ export default class SnapReq {
71
172
  credentials?: string;
72
173
  transport?: import("./transports/select.js").TransportName | import("./transports/select.js").Transport;
73
174
  });
74
- baseUrl: string;
75
- defaultHeaders: Record<string, string | number> | (() => Record<string, string | number>);
76
- defaultRetry: boolean | import("./retry.js").RetryOptions;
77
- throwOnError: boolean;
78
- timeoutMs: number;
79
- credentials: string;
80
- _transportPreference: import("./transports/select.js").TransportName | import("./transports/select.js").Transport;
81
- _nodeConfig: {
82
- socketPath: string;
83
- tls: {
84
- ca?: string | Buffer;
85
- cert?: string | Buffer;
86
- key?: string | Buffer;
87
- rejectUnauthorized?: boolean;
88
- };
89
- keepAlive: boolean;
90
- };
91
- /** @type {Promise<import("./transports/select.js").Transport> | null} */
92
- _transportPromise: Promise<import("./transports/select.js").Transport> | null;
93
- /** @type {import("./transports/select.js").Transport | null} */
94
- _transport: import("./transports/select.js").Transport | null;
95
175
  /** @returns {Promise<import("./transports/select.js").Transport>} - The resolved transport. */
96
176
  _resolveTransport(): Promise<import("./transports/select.js").Transport>;
97
177
  /** @returns {Promise<import("./capabilities.js").TransportCapabilities>} - The active transport's capabilities. */
@@ -103,32 +183,12 @@ export default class SnapReq {
103
183
  * @returns {NormalizedRequest} - The normalized request.
104
184
  */
105
185
  _normalize(options: RequestOptions): NormalizedRequest;
106
- /**
107
- * @param {RequestOptions} options - Request options.
108
- * @returns {RequestTimeout} - Timeout handling for one request attempt.
109
- */
110
- _requestTimeout(options: RequestOptions): RequestTimeout;
111
- /**
112
- * @param {AbortSignal | undefined} callerSignal - Caller-supplied signal.
113
- * @param {AbortSignal} timeoutSignal - Timeout signal.
114
- * @returns {{signal: AbortSignal, clear: () => void}} - Signal that aborts when either source aborts.
115
- */
116
- _composeSignal(callerSignal: AbortSignal | undefined, timeoutSignal: AbortSignal): {
117
- signal: AbortSignal;
118
- clear: () => void;
119
- };
120
186
  /**
121
187
  * @param {(() => void) | undefined} existing - Existing body-done callback.
122
188
  * @param {() => void} next - Callback to add.
123
189
  * @returns {() => void} - Combined callback.
124
190
  */
125
191
  _chainBodyDone(existing: (() => void) | undefined, next: () => void): () => void;
126
- /**
127
- * @param {((error: unknown) => unknown) | undefined} existing - Existing error mapper.
128
- * @param {(error: unknown) => unknown} next - Mapper to add.
129
- * @returns {(error: unknown) => unknown} - Combined mapper.
130
- */
131
- _chainBodyError(existing: ((error: unknown) => unknown) | undefined, next: (error: unknown) => unknown): (error: unknown) => unknown;
132
192
  /**
133
193
  * Performs a request and buffers nothing eagerly — read the body via the
134
194
  * returned response (`json()`, `text()`, `bytes()`). Retries transient
@@ -151,6 +211,14 @@ export default class SnapReq {
151
211
  * @returns {Promise<import("./response.js").default>} - Response with timeout handling attached.
152
212
  */
153
213
  _requestWithTimeout(options: RequestOptions, performRequest: (request: NormalizedRequest) => Promise<import("./response.js").default>): Promise<import("./response.js").default>;
214
+ /**
215
+ * @param {unknown} error - Awaitery/transport error.
216
+ * @param {NormalizedRequest} request - Request metadata.
217
+ * @param {number | undefined} timeoutMs - Attempt timeout.
218
+ * @param {AbortSignal | undefined} callerSignal - Caller cancellation.
219
+ * @returns {unknown} - Stable public Snapreq error.
220
+ */
221
+ _requestControlError(error: unknown, request: NormalizedRequest, timeoutMs: number | undefined, callerSignal: AbortSignal | undefined): unknown;
154
222
  /**
155
223
  * @param {string} path - Request path or absolute URL.
156
224
  * @param {RequestOptions} [options] - Request options.
@@ -196,109 +264,4 @@ export default class SnapReq {
196
264
  */
197
265
  close(): void;
198
266
  }
199
- export type CompressionEncoding = import("./request.js").CompressionEncoding;
200
- export type NormalizedRequest = {
201
- /**
202
- * - Upper-cased HTTP method.
203
- */
204
- method: string;
205
- /**
206
- * - Fully resolved request URL.
207
- */
208
- url: string;
209
- /**
210
- * - Request headers.
211
- */
212
- headers: SnapReqHeaders;
213
- /**
214
- * - Normalized request body.
215
- */
216
- body: import("./request.js").NormalizedBody;
217
- /**
218
- * - Request body compression.
219
- */
220
- bodyCompression: CompressionEncoding;
221
- /**
222
- * - Abort signal.
223
- */
224
- signal?: AbortSignal;
225
- /**
226
- * - Request timeout in milliseconds.
227
- */
228
- timeoutMs?: number;
229
- /**
230
- * - Fetch credentials mode ("omit" | "same-origin" | "include").
231
- */
232
- credentials?: string;
233
- };
234
- export type RequestOptions = {
235
- /**
236
- * - HTTP method. Defaults to GET.
237
- */
238
- method?: string;
239
- /**
240
- * - Request path (joined with the client `baseUrl`) or absolute URL.
241
- */
242
- path?: string;
243
- /**
244
- * - Alias for `path`.
245
- */
246
- url?: string;
247
- /**
248
- * - Query parameters.
249
- */
250
- query?: Record<string, string | number | boolean | null | undefined>;
251
- /**
252
- * - Per-request headers.
253
- */
254
- headers?: Record<string, string | number> | SnapReqHeaders;
255
- /**
256
- * - Request body: string, object (JSON), Uint8Array/ArrayBuffer, or a stream/async-iterable.
257
- */
258
- body?: any;
259
- /**
260
- * - Compress the request body (Node transport only).
261
- */
262
- bodyCompression?: CompressionEncoding;
263
- /**
264
- * - Abort signal for the request.
265
- */
266
- signal?: AbortSignal;
267
- /**
268
- * - Request timeout in milliseconds. Set to `0` to disable a client default.
269
- */
270
- timeoutMs?: number;
271
- /**
272
- * - Fetch credentials mode.
273
- */
274
- credentials?: string;
275
- /**
276
- * - Retry transient failures.
277
- */
278
- retry?: boolean | import("./retry.js").RetryOptions;
279
- /**
280
- * - Throw `SnapReqHttpError` on non-2xx responses.
281
- */
282
- throwOnError?: boolean;
283
- };
284
- export type RequestTimeout = {
285
- /**
286
- * - Signal to use for the request.
287
- */
288
- signal: AbortSignal | undefined;
289
- /**
290
- * - Clears timeout resources.
291
- */
292
- clear: () => void;
293
- /**
294
- * - Attaches timeout handling to a response.
295
- */
296
- response: (response: import("./response.js").default, request: NormalizedRequest) => import("./response.js").default;
297
- /**
298
- * - Maps a thrown error.
299
- */
300
- error: (error: unknown, request: NormalizedRequest) => unknown;
301
- };
302
- import { SnapReqHttpError } from "./errors.js";
303
- import SnapReqHeaders from "./headers.js";
304
267
  //# sourceMappingURL=snap-req.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"snap-req.d.ts","sourceRoot":"","sources":["../src/snap-req.js"],"names":[],"mappings":"AAQA;;GAEG;AAEH;;;;;;;;;;GAUG;AAEH;;;;;;;;;;;;;;GAcG;AAEH;;;;;;GAMG;AAEH;;;;;GAKG;AACH;IACE;;;;;;;;;;;;OAYG;IACH,uHAXG;QAAwB,OAAO,GAAvB,MAAM;QACU,UAAU,GAA1B,MAAM;QACuG,GAAG,GAAhH;YAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;YAAC,kBAAkB,CAAC,EAAE,OAAO,CAAA;SAAC;QAClF,SAAS,GAA1B,OAAO;QAC4E,OAAO,GAA1F,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC;QACpB,KAAK,GAA1D,OAAO,GAAG,OAAO,YAAY,EAAE,YAAY;QAC1B,YAAY,GAA7B,OAAO;QACS,SAAS,GAAzB,MAAM;QACU,WAAW,GAA3B,MAAM;QAC+F,SAAS,GAA9G,OAAO,wBAAwB,EAAE,aAAa,GAAG,OAAO,wBAAwB,EAAE,SAAS;KACrG,EAcA;IAZC,gBAAsB;IACtB,yDATkD,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,EASpD;IAC7B,0DAAyB;IACzB,sBAAgC;IAChC,kBAA0B;IAC1B,oBAA8B;IAC9B,kHAAqC;IACrC;;;iBAjBe,MAAM,GAAG,MAAM;mBAAS,MAAM,GAAG,MAAM;kBAAQ,MAAM,GAAG,MAAM;iCAAuB,OAAO;;;MAiB5D;IAC/C,yEAAyE;IACzE,mBADW,OAAO,CAAC,OAAO,wBAAwB,EAAE,SAAS,CAAC,GAAG,IAAI,CACxC;IAC7B,gEAAgE;IAChE,YADW,OAAO,wBAAwB,EAAE,SAAS,GAAG,IAAI,CACtC;IAGxB,+FAA+F;IAC/F,qBADc,OAAO,CAAC,OAAO,wBAAwB,EAAE,SAAS,CAAC,CAMhE;IAED,mHAAmH;IACnH,gBADc,OAAO,CAAC,OAAO,mBAAmB,EAAE,qBAAqB,CAAC,CAGvE;IAED,gEAAgE;IAChE,iBADc,OAAO,CAAC,MAAM,CAAC,CAK5B;IAED;;;OAGG;IACH,oBAHW,cAAc,GACZ,iBAAiB,CAsB7B;IAED;;;OAGG;IACH,yBAHW,cAAc,GACZ,cAAc,CAyD1B;IAED;;;;OAIG;IACH,6BAJW,WAAW,GAAG,SAAS,iBACvB,WAAW,GACT;QAAC,MAAM,EAAE,WAAW,CAAC;QAAC,KAAK,EAAE,MAAM,IAAI,CAAA;KAAC,CAsBpD;IAED;;;;OAIG;IACH,yBAJW,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,QACxB,MAAM,IAAI,GACR,MAAM,IAAI,CAOtB;IAED;;;;OAIG;IACH,0BAJW,CAAC,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,GAAG,SAAS,QACzC,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,GACzB,CAAC,KAAK,EAAE,OAAO,KAAK,OAAO,CAIvC;IAED;;;;;;OAMG;IACH,iBAHW,cAAc,GACZ,OAAO,CAAC,OAAO,eAAe,EAAE,OAAO,CAAC,CAcpD;IAED;;;;;;OAMG;IACH,uBAHW,cAAc,GACZ,OAAO,CAAC,OAAO,eAAe,EAAE,OAAO,CAAC,CAmBpD;IAED;;;;OAIG;IACH,6BAJW,cAAc,kBACd,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,OAAO,eAAe,EAAE,OAAO,CAAC,GACtE,OAAO,CAAC,OAAO,eAAe,EAAE,OAAO,CAAC,CAepD;IAED;;;;OAIG;IACH,UAJW,MAAM,YACN,cAAc,GACZ,OAAO,CAAC,OAAO,eAAe,EAAE,OAAO,CAAC,CAIpD;IAED;;;;;OAKG;IACH,WALW,MAAM,SACN,GAAG,YACH,cAAc,GACZ,OAAO,CAAC,OAAO,eAAe,EAAE,OAAO,CAAC,CAIpD;IAED;;;;;OAKG;IACH,UALW,MAAM,SACN,GAAG,YACH,cAAc,GACZ,OAAO,CAAC,OAAO,eAAe,EAAE,OAAO,CAAC,CAIpD;IAED;;;;;OAKG;IACH,YALW,MAAM,SACN,GAAG,YACH,cAAc,GACZ,OAAO,CAAC,OAAO,eAAe,EAAE,OAAO,CAAC,CAIpD;IAED;;;;OAIG;IACH,aAJW,MAAM,YACN,cAAc,GACZ,OAAO,CAAC,OAAO,eAAe,EAAE,OAAO,CAAC,CAIpD;IAED;;;;OAIG;IACH,qBAJW,OAAO,eAAe,EAAE,OAAO,WAC/B,iBAAiB,GACf,OAAO,CAAC,gBAAgB,CAAC,CAwBrC;IAED;;;OAGG;IACH,SAFa,IAAI,CAIhB;CACF;kCA5XY,OAAO,cAAc,EAAE,mBAAmB;;;;;YAKzC,MAAM;;;;SACN,MAAM;;;;aACN,cAAc;;;;UACd,OAAO,cAAc,EAAE,cAAc;;;;qBACrC,mBAAmB;;;;aACnB,WAAW;;;;gBACX,MAAM;;;;kBACN,MAAM;;;;;;aAKN,MAAM;;;;WACN,MAAM;;;;UACN,MAAM;;;;YACN,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,SAAS,CAAC;;;;cAC5D,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAAG,cAAc;;;;WAChD,GAAG;;;;sBACH,mBAAmB;;;;aACnB,WAAW;;;;gBACX,MAAM;;;;kBACN,MAAM;;;;YACN,OAAO,GAAG,OAAO,YAAY,EAAE,YAAY;;;;mBAC3C,OAAO;;;;;;YAKP,WAAW,GAAG,SAAS;;;;WACvB,MAAM,IAAI;;;;cACV,CAAC,QAAQ,EAAE,OAAO,eAAe,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,KAAK,OAAO,eAAe,EAAE,OAAO;;;;WAC1G,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,KAAK,OAAO;;iCA3Ce,aAAa;2BACtE,cAAc"}
1
+ {"version":3,"file":"snap-req.d.ts","sourceRoot":"","sources":["../src/snap-req.js"],"names":[],"mappings":"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"}