@molecule/app-http 1.3.0 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +154 -1
- package/dist/client.d.ts +6 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +176 -139
- package/dist/provider.js.map +1 -1
- package/dist/retry.d.ts +105 -0
- package/dist/retry.d.ts.map +1 -0
- package/dist/retry.js +144 -0
- package/dist/retry.js.map +1 -0
- package/dist/types.d.ts +11 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/unwrap.d.ts +5 -0
- package/dist/unwrap.d.ts.map +1 -1
- package/dist/unwrap.js +5 -0
- package/dist/unwrap.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@ AUTO-GENERATED — DO NOT EDIT THIS FILE.
|
|
|
3
3
|
Generated by `mlcl sync-docs` from the package's src/index.ts JSDoc + mlcl/registry.json.
|
|
4
4
|
Edits here are overwritten on the next commit (molecule's pre-commit hook regenerates).
|
|
5
5
|
To change this document, edit the module-level JSDoc in src/index.ts.
|
|
6
|
-
Generated: 2026-10-
|
|
6
|
+
Generated: 2026-10-19T22:40:45.495Z
|
|
7
7
|
-->
|
|
8
8
|
|
|
9
9
|
# @molecule/app-http
|
|
@@ -187,6 +187,58 @@ interface HttpClientConfig {
|
|
|
187
187
|
* it returns.
|
|
188
188
|
*/
|
|
189
189
|
authScheme?: string
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Default retry policy for every request this client makes, or `false` to
|
|
193
|
+
* disable retries. A request's own `retry` overrides it.
|
|
194
|
+
*/
|
|
195
|
+
retry?: RetryOptions | false
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
#### `RetryOptions`
|
|
200
|
+
|
|
201
|
+
Tuning for the retry policy.
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
interface RetryOptions {
|
|
205
|
+
/**
|
|
206
|
+
* Maximum retries AFTER the first attempt. Defaults to `2` (three attempts
|
|
207
|
+
* in total).
|
|
208
|
+
*/
|
|
209
|
+
maxRetries?: number
|
|
210
|
+
|
|
211
|
+
/** Base backoff in milliseconds. Defaults to `300`. */
|
|
212
|
+
baseDelayMs?: number
|
|
213
|
+
|
|
214
|
+
/** Maximum backoff (before `Retry-After` can extend it). Defaults to `5000`. */
|
|
215
|
+
maxDelayMs?: number
|
|
216
|
+
|
|
217
|
+
/** Statuses treated as transient. Defaults to `[502, 503, 504]`. */
|
|
218
|
+
retryStatuses?: number[]
|
|
219
|
+
}
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
#### `RetryDecisionInput`
|
|
223
|
+
|
|
224
|
+
The request fields the policy decides from.
|
|
225
|
+
|
|
226
|
+
```typescript
|
|
227
|
+
interface RetryDecisionInput {
|
|
228
|
+
/** The request method. */
|
|
229
|
+
method: HttpMethod
|
|
230
|
+
/** The request headers (lower-cased lookup is done here). */
|
|
231
|
+
headers: Record<string, string | undefined>
|
|
232
|
+
/** The HTTP status, or `0` when no response arrived. */
|
|
233
|
+
status: number
|
|
234
|
+
/** How many retries have already been made (0 for the first failure). */
|
|
235
|
+
attempt: number
|
|
236
|
+
/** The error message, used to recognize a connection reset/refusal. */
|
|
237
|
+
errorMessage?: string
|
|
238
|
+
/** `true` when the request was aborted before a response. */
|
|
239
|
+
aborted?: boolean
|
|
240
|
+
/** Overrides layered over {@link DEFAULT_RETRY_OPTIONS}. */
|
|
241
|
+
options?: RetryOptions | false
|
|
190
242
|
}
|
|
191
243
|
```
|
|
192
244
|
|
|
@@ -264,6 +316,17 @@ interface RequestConfig {
|
|
|
264
316
|
* Custom request options (implementation-specific).
|
|
265
317
|
*/
|
|
266
318
|
options?: Record<string, unknown>
|
|
319
|
+
|
|
320
|
+
/**
|
|
321
|
+
* Retry policy for this request, or `false` to disable retries.
|
|
322
|
+
*
|
|
323
|
+
* The default policy retries only IDEMPOTENT requests (`GET`/`HEAD`/`PUT`/
|
|
324
|
+
* `DELETE`/`OPTIONS`, and `POST`/`PATCH` carrying an `Idempotency-Key`) on
|
|
325
|
+
* `502`/`503`/`504` or a reset/refused connection, twice, with exponential
|
|
326
|
+
* backoff and jitter, honoring `Retry-After`. See `@molecule/app-http`'s
|
|
327
|
+
* `shouldRetryRequest`.
|
|
328
|
+
*/
|
|
329
|
+
retry?: RetryOptions | false
|
|
267
330
|
}
|
|
268
331
|
````
|
|
269
332
|
|
|
@@ -568,6 +631,83 @@ function createFetchClient(config?: HttpClientConfig): HttpClient
|
|
|
568
631
|
|
|
569
632
|
**Returns:** A fully configured `HttpClient` instance.
|
|
570
633
|
|
|
634
|
+
#### `isIdempotentRequest(method, headers)`
|
|
635
|
+
|
|
636
|
+
Whether a request may be repeated at all.
|
|
637
|
+
|
|
638
|
+
```typescript
|
|
639
|
+
function isIdempotentRequest(
|
|
640
|
+
method: HttpMethod,
|
|
641
|
+
headers: Record<string, string | undefined>,
|
|
642
|
+
): boolean
|
|
643
|
+
```
|
|
644
|
+
|
|
645
|
+
- `method` — The HTTP method.
|
|
646
|
+
- `headers` — The request headers (an `Idempotency-Key` makes POST/PATCH repeatable).
|
|
647
|
+
|
|
648
|
+
**Returns:** `true` when repeating the request cannot duplicate a side effect.
|
|
649
|
+
|
|
650
|
+
#### `isTransientConnectionError(message)`
|
|
651
|
+
|
|
652
|
+
Whether a connection-level error is transient (a restarted process refuses
|
|
653
|
+
or resets connections; a DNS or TLS configuration error does not).
|
|
654
|
+
|
|
655
|
+
```typescript
|
|
656
|
+
function isTransientConnectionError(message: string | undefined): boolean
|
|
657
|
+
```
|
|
658
|
+
|
|
659
|
+
- `message` — The error message.
|
|
660
|
+
|
|
661
|
+
**Returns:** `true` for reset/refused/closed-early/timeout shapes.
|
|
662
|
+
|
|
663
|
+
#### `parseRetryAfter(value, now)`
|
|
664
|
+
|
|
665
|
+
Parse a `Retry-After` header into milliseconds from now.
|
|
666
|
+
|
|
667
|
+
```typescript
|
|
668
|
+
function parseRetryAfter(value: string | undefined, now?: number): number | undefined
|
|
669
|
+
```
|
|
670
|
+
|
|
671
|
+
- `value` — The header value (`seconds` or an HTTP date).
|
|
672
|
+
- `now` — The clock, injected for tests.
|
|
673
|
+
|
|
674
|
+
**Returns:** Milliseconds to wait, or undefined when absent/unparseable.
|
|
675
|
+
|
|
676
|
+
#### `shouldRetryRequest(input)`
|
|
677
|
+
|
|
678
|
+
Decide whether one failed request should be retried.
|
|
679
|
+
|
|
680
|
+
```typescript
|
|
681
|
+
function shouldRetryRequest(input: RetryDecisionInput): boolean
|
|
682
|
+
```
|
|
683
|
+
|
|
684
|
+
- `input` — The method, headers, status/error and attempt count.
|
|
685
|
+
|
|
686
|
+
**Returns:** `true` when the request may be repeated.
|
|
687
|
+
|
|
688
|
+
#### `retryDelayMs(retryAfter, attempt, options, random)`
|
|
689
|
+
|
|
690
|
+
Compute the wait before the next attempt.
|
|
691
|
+
|
|
692
|
+
`Retry-After` wins when the server sent one (it knows when the instance will
|
|
693
|
+
be back); otherwise exponential backoff with full jitter.
|
|
694
|
+
|
|
695
|
+
```typescript
|
|
696
|
+
function retryDelayMs(
|
|
697
|
+
retryAfter: string | undefined,
|
|
698
|
+
attempt: number,
|
|
699
|
+
options?: false | RetryOptions,
|
|
700
|
+
random?: () => number,
|
|
701
|
+
): number
|
|
702
|
+
```
|
|
703
|
+
|
|
704
|
+
- `retryAfter` — The raw `Retry-After` header value, when present.
|
|
705
|
+
- `attempt` — How many retries have already been made (0 for the first).
|
|
706
|
+
- `options` — Policy overrides.
|
|
707
|
+
- `random` — Jitter source, injected for tests (defaults to `Math.random`).
|
|
708
|
+
|
|
709
|
+
**Returns:** Milliseconds to wait before retrying.
|
|
710
|
+
|
|
571
711
|
#### `unwrapList(res)`
|
|
572
712
|
|
|
573
713
|
Normalize an unknown response body into a typed array.
|
|
@@ -591,6 +731,11 @@ r.json())`) or the `HttpResponse` returned by `useHttpClient().get(...)`.
|
|
|
591
731
|
Both shapes are handled here so pages don't have to remember to call
|
|
592
732
|
`unwrapList(res.data)` vs `unwrapList(res)`.
|
|
593
733
|
|
|
734
|
+
A custom envelope such as `{ items: [...], count: 10 }` is not a `data`
|
|
735
|
+
envelope and returns `[]`. Read its named array directly: `body.items` for
|
|
736
|
+
raw JSON, or `response.data.items` for an `HttpResponse`. Passing that
|
|
737
|
+
array to `unwrapList` is also valid; passing the enclosing object is not.
|
|
738
|
+
|
|
594
739
|
```typescript
|
|
595
740
|
function unwrapList(res: unknown): T[]
|
|
596
741
|
```
|
|
@@ -749,6 +894,14 @@ function del(url: string, config?: RequestConfig): Promise<HttpResponse<T>>
|
|
|
749
894
|
|
|
750
895
|
### Constants
|
|
751
896
|
|
|
897
|
+
#### `DEFAULT_RETRY_OPTIONS`
|
|
898
|
+
|
|
899
|
+
The resolved policy used when a caller passes no options.
|
|
900
|
+
|
|
901
|
+
```typescript
|
|
902
|
+
const DEFAULT_RETRY_OPTIONS: Required<RetryOptions>
|
|
903
|
+
```
|
|
904
|
+
|
|
752
905
|
#### `fetchClient`
|
|
753
906
|
|
|
754
907
|
Pre-created fetch client for environments where `fetch` is available.
|
package/dist/client.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
* @module
|
|
7
7
|
*/
|
|
8
8
|
import type { ErrorInterceptor, RequestInterceptor, ResponseInterceptor } from './interceptors.js';
|
|
9
|
+
import type { RetryOptions } from './retry.js';
|
|
9
10
|
import type { FullRequestConfig, HttpResponse, RequestConfig } from './types.js';
|
|
10
11
|
/**
|
|
11
12
|
* HTTP client interface.
|
|
@@ -109,5 +110,10 @@ export interface HttpClientConfig {
|
|
|
109
110
|
* it returns.
|
|
110
111
|
*/
|
|
111
112
|
authScheme?: string;
|
|
113
|
+
/**
|
|
114
|
+
* Default retry policy for every request this client makes, or `false` to
|
|
115
|
+
* disable retries. A request's own `retry` overrides it.
|
|
116
|
+
*/
|
|
117
|
+
retry?: RetryOptions | false;
|
|
112
118
|
}
|
|
113
119
|
//# sourceMappingURL=client.d.ts.map
|
package/dist/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAClG,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEhF;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEtC;;;OAGG;IACH,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAEzE;;OAEG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAE/E;;;;OAIG;IACH,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAEhG;;;OAGG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAE/F;;;OAGG;IACH,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAEjG;;OAEG;IACH,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAElF;;;OAGG;IACH,qBAAqB,CAAC,WAAW,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAAA;IAElE;;;OAGG;IACH,sBAAsB,CAAC,WAAW,EAAE,mBAAmB,GAAG,MAAM,IAAI,CAAA;IAEpE;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,gBAAgB,GAAG,MAAM,IAAI,CAAA;IAE9D;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IAExC;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI,CAAA;IAE7B;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEvC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAClG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAEhF;;;;GAIG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAA;IAEf;;OAEG;IACH,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEtC;;;OAGG;IACH,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAEzE;;OAEG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAE/E;;;;OAIG;IACH,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAEhG;;;OAGG;IACH,GAAG,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAE/F;;;OAGG;IACH,KAAK,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAEjG;;OAEG;IACH,MAAM,CAAC,CAAC,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAA;IAElF;;;OAGG;IACH,qBAAqB,CAAC,WAAW,EAAE,kBAAkB,GAAG,MAAM,IAAI,CAAA;IAElE;;;OAGG;IACH,sBAAsB,CAAC,WAAW,EAAE,mBAAmB,GAAG,MAAM,IAAI,CAAA;IAEpE;;;OAGG;IACH,mBAAmB,CAAC,WAAW,EAAE,gBAAgB,GAAG,MAAM,IAAI,CAAA;IAE9D;;OAEG;IACH,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAA;IAExC;;OAEG;IACH,YAAY,IAAI,MAAM,GAAG,IAAI,CAAA;IAE7B;;;;OAIG;IACH,WAAW,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI,CAAA;CAC7C;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEvC;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB;;;OAGG;IACH,KAAK,CAAC,EAAE,YAAY,GAAG,KAAK,CAAA;CAC7B"}
|
package/dist/index.d.ts
CHANGED
|
@@ -106,6 +106,7 @@ export * from './client.js';
|
|
|
106
106
|
export * from './errors.js';
|
|
107
107
|
export * from './interceptors.js';
|
|
108
108
|
export * from './provider.js';
|
|
109
|
+
export * from './retry.js';
|
|
109
110
|
export * from './types.js';
|
|
110
111
|
export * from './unwrap.js';
|
|
111
112
|
export * from './utilities.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsGG;AAEH,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsGG;AAEH,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -106,6 +106,7 @@ export * from './client.js';
|
|
|
106
106
|
export * from './errors.js';
|
|
107
107
|
export * from './interceptors.js';
|
|
108
108
|
export * from './provider.js';
|
|
109
|
+
export * from './retry.js';
|
|
109
110
|
export * from './types.js';
|
|
110
111
|
export * from './unwrap.js';
|
|
111
112
|
export * from './utilities.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsGG;AAEH,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsGG;AAEH,cAAc,gBAAgB,CAAA;AAC9B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,gBAAgB,CAAA"}
|
package/dist/provider.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAc/D;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,GAAI,SAAQ,gBAAqB,KAAG,UA8ajE,CAAA"}
|
package/dist/provider.js
CHANGED
|
@@ -8,7 +8,12 @@
|
|
|
8
8
|
import { t } from '@molecule/app-i18n';
|
|
9
9
|
import { getLogger } from '@molecule/app-logger';
|
|
10
10
|
import { awaitAuthGate } from './auth-gate.js';
|
|
11
|
+
import { retryDelayMs, shouldRetryRequest } from './retry.js';
|
|
11
12
|
import { HttpError } from './types.js';
|
|
13
|
+
/** Wait for a retry backoff. */
|
|
14
|
+
function sleep(ms) {
|
|
15
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
16
|
+
}
|
|
12
17
|
/** A response whose body is an HTML document, not JSON. */
|
|
13
18
|
const HTML_CONTENT_TYPE = /^text\/html\b/i;
|
|
14
19
|
/**
|
|
@@ -121,85 +126,183 @@ export const createFetchClient = (config = {}) => {
|
|
|
121
126
|
}
|
|
122
127
|
}
|
|
123
128
|
// Create abort controller for timeout
|
|
124
|
-
let timeoutId;
|
|
125
129
|
const timeout = finalConfig.timeout ?? config.timeout;
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
130
|
+
const retryOptions = finalConfig.retry ?? config.retry;
|
|
131
|
+
// Bounded retry of IDEMPOTENT requests only. A rolling deploy restarts
|
|
132
|
+
// one instance at a time, so a 502/503/504 or a reset connection can
|
|
133
|
+
// appear for a few seconds while the platform is healthy. A POST is
|
|
134
|
+
// repeated only when it carries an Idempotency-Key — never blind.
|
|
135
|
+
for (let attempt = 0;; attempt++) {
|
|
136
|
+
// A timeout signal belongs to ONE attempt: reusing an aborted
|
|
137
|
+
// controller would abort every retry instantly.
|
|
138
|
+
let timeoutId;
|
|
139
|
+
if (timeout && !finalConfig.signal) {
|
|
140
|
+
const controller = new AbortController();
|
|
141
|
+
fetchOptions.signal = controller.signal;
|
|
142
|
+
timeoutId = setTimeout(() => controller.abort(), timeout);
|
|
135
143
|
}
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
//
|
|
165
|
-
// A 2xx HTML DOCUMENT is not one of those cases: it is the app's page
|
|
166
|
-
// server answering a request that expected JSON — the Vite dev server's
|
|
167
|
-
// SPA fallback when a relative URL had no API baseURL. Resolving with the
|
|
168
|
-
// HTML as `data` turns that into a `Cannot read properties of undefined`
|
|
169
|
-
// crash far from the call (xr-molecule-flash-m126: 6.5 minutes and 22
|
|
170
|
-
// probe scripts to discover `getClient().baseURL` was `''`).
|
|
171
|
-
const contentType = fetchResponse.headers.get('content-type') ?? '';
|
|
172
|
-
if (fetchResponse.ok && HTML_CONTENT_TYPE.test(contentType)) {
|
|
173
|
-
throw new HttpError(`${finalConfig.method} ${url} answered ${contentType.split(';')[0]} instead of ` +
|
|
174
|
-
"JSON — the request reached the page server, not the API; check the client's " +
|
|
175
|
-
'baseURL (a relative path with no baseURL resolves against the page origin)', fetchResponse.status, {
|
|
176
|
-
data: text,
|
|
177
|
-
status: fetchResponse.status,
|
|
178
|
-
statusText: fetchResponse.statusText,
|
|
179
|
-
headers: responseHeaders,
|
|
180
|
-
config: finalConfig,
|
|
181
|
-
}, finalConfig, 'http.error.requestFailed');
|
|
144
|
+
try {
|
|
145
|
+
const fetchResponse = await fetch(url, fetchOptions);
|
|
146
|
+
if (timeoutId) {
|
|
147
|
+
clearTimeout(timeoutId);
|
|
148
|
+
}
|
|
149
|
+
// Parse response headers
|
|
150
|
+
const responseHeaders = {};
|
|
151
|
+
fetchResponse.headers.forEach((value, key) => {
|
|
152
|
+
responseHeaders[key] = value;
|
|
153
|
+
});
|
|
154
|
+
// Parse response body
|
|
155
|
+
let data;
|
|
156
|
+
const responseType = finalConfig.responseType || 'json';
|
|
157
|
+
switch (responseType) {
|
|
158
|
+
case 'text':
|
|
159
|
+
data = (await fetchResponse.text());
|
|
160
|
+
break;
|
|
161
|
+
case 'blob':
|
|
162
|
+
data = (await fetchResponse.blob());
|
|
163
|
+
break;
|
|
164
|
+
case 'arraybuffer':
|
|
165
|
+
data = (await fetchResponse.arrayBuffer());
|
|
166
|
+
break;
|
|
167
|
+
case 'json':
|
|
168
|
+
default: {
|
|
169
|
+
const text = await fetchResponse.text();
|
|
170
|
+
try {
|
|
171
|
+
data = text ? JSON.parse(text) : null;
|
|
182
172
|
}
|
|
183
|
-
|
|
184
|
-
|
|
173
|
+
catch (_error) {
|
|
174
|
+
// Safe to ignore: the raw text is already captured above and used
|
|
175
|
+
// as the fallback value. Non-JSON responses (plain text, HTML errors)
|
|
176
|
+
// are a known valid case for some APIs.
|
|
177
|
+
//
|
|
178
|
+
// A 2xx HTML DOCUMENT is not one of those cases: it is the app's page
|
|
179
|
+
// server answering a request that expected JSON — the Vite dev server's
|
|
180
|
+
// SPA fallback when a relative URL had no API baseURL. Resolving with the
|
|
181
|
+
// HTML as `data` turns that into a `Cannot read properties of undefined`
|
|
182
|
+
// crash far from the call (xr-molecule-flash-m126: 6.5 minutes and 22
|
|
183
|
+
// probe scripts to discover `getClient().baseURL` was `''`).
|
|
184
|
+
const contentType = fetchResponse.headers.get('content-type') ?? '';
|
|
185
|
+
if (fetchResponse.ok && HTML_CONTENT_TYPE.test(contentType)) {
|
|
186
|
+
throw new HttpError(`${finalConfig.method} ${url} answered ${contentType.split(';')[0]} instead of ` +
|
|
187
|
+
"JSON — the request reached the page server, not the API; check the client's " +
|
|
188
|
+
'baseURL (a relative path with no baseURL resolves against the page origin)', fetchResponse.status, {
|
|
189
|
+
data: text,
|
|
190
|
+
status: fetchResponse.status,
|
|
191
|
+
statusText: fetchResponse.statusText,
|
|
192
|
+
headers: responseHeaders,
|
|
193
|
+
config: finalConfig,
|
|
194
|
+
}, finalConfig, 'http.error.requestFailed');
|
|
195
|
+
}
|
|
196
|
+
logger.debug('Response is not JSON, using raw text', url);
|
|
197
|
+
data = text;
|
|
198
|
+
}
|
|
199
|
+
break;
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
let response = {
|
|
203
|
+
data,
|
|
204
|
+
status: fetchResponse.status,
|
|
205
|
+
statusText: fetchResponse.statusText,
|
|
206
|
+
headers: responseHeaders,
|
|
207
|
+
config: finalConfig,
|
|
208
|
+
};
|
|
209
|
+
// Handle error status codes
|
|
210
|
+
if (!fetchResponse.ok) {
|
|
211
|
+
logger.warn('HTTP error', finalConfig.method, url, fetchResponse.status);
|
|
212
|
+
const error = new HttpError(t('http.error.requestFailed', { status: fetchResponse.status }, { defaultValue: `Request failed with status ${fetchResponse.status}` }), fetchResponse.status, response, finalConfig, 'http.error.requestFailed');
|
|
213
|
+
// Handle auth errors
|
|
214
|
+
if (fetchResponse.status === 401) {
|
|
215
|
+
authErrorHandlers.forEach((handler) => handler());
|
|
185
216
|
}
|
|
186
|
-
|
|
217
|
+
if (shouldRetryRequest({
|
|
218
|
+
method: finalConfig.method,
|
|
219
|
+
headers,
|
|
220
|
+
status: fetchResponse.status,
|
|
221
|
+
attempt,
|
|
222
|
+
errorMessage: error.message,
|
|
223
|
+
options: retryOptions,
|
|
224
|
+
})) {
|
|
225
|
+
await sleep(retryDelayMs(fetchResponse.headers.get('retry-after') ?? undefined, attempt, retryOptions));
|
|
226
|
+
continue;
|
|
227
|
+
}
|
|
228
|
+
// Apply error interceptors
|
|
229
|
+
let finalError = error;
|
|
230
|
+
for (const interceptor of errorInterceptors) {
|
|
231
|
+
finalError = await interceptor(finalError);
|
|
232
|
+
}
|
|
233
|
+
throw finalError;
|
|
234
|
+
}
|
|
235
|
+
// Apply response interceptors
|
|
236
|
+
for (const interceptor of responseInterceptors) {
|
|
237
|
+
response = (await interceptor(response));
|
|
187
238
|
}
|
|
239
|
+
return response;
|
|
188
240
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
//
|
|
201
|
-
|
|
202
|
-
|
|
241
|
+
catch (err) {
|
|
242
|
+
if (timeoutId) {
|
|
243
|
+
clearTimeout(timeoutId);
|
|
244
|
+
}
|
|
245
|
+
if (err instanceof HttpError) {
|
|
246
|
+
throw err;
|
|
247
|
+
}
|
|
248
|
+
// Distinguish an explicit abort (AbortController, page unload
|
|
249
|
+
// wired up via signal) and SPA navigation-induced cancellation
|
|
250
|
+
// from a real network outage.
|
|
251
|
+
//
|
|
252
|
+
// - AbortError → user-initiated cancel: silent
|
|
253
|
+
// - "TypeError: Failed to fetch" while the browser tab is
|
|
254
|
+
// hidden / unloading → SPA tore down a fetch as it left the
|
|
255
|
+
// page. Demote to warn so it stays visible in the console
|
|
256
|
+
// for debugging but doesn't fail strict console-error gates.
|
|
257
|
+
// - Anything else (including "Failed to fetch" while the tab
|
|
258
|
+
// is visible) → real outage: logger.error.
|
|
259
|
+
//
|
|
260
|
+
// Components that want zero navigation noise should still pass
|
|
261
|
+
// an AbortSignal from their useEffect cleanup.
|
|
262
|
+
const errMsg = err instanceof Error ? err.message : '';
|
|
263
|
+
const errName = err instanceof Error ? err.name : '';
|
|
264
|
+
const isAbort = errName === 'AbortError' ||
|
|
265
|
+
(typeof DOMException !== 'undefined' &&
|
|
266
|
+
err instanceof DOMException &&
|
|
267
|
+
err.name === 'AbortError') ||
|
|
268
|
+
/the user aborted a request/i.test(errMsg);
|
|
269
|
+
const tabHidden = typeof document !== 'undefined' &&
|
|
270
|
+
(document.visibilityState === 'hidden' || document.hidden === true);
|
|
271
|
+
const isNavCancel = !isAbort &&
|
|
272
|
+
errName === 'TypeError' &&
|
|
273
|
+
/failed to fetch|network ?error|load failed/i.test(errMsg) &&
|
|
274
|
+
(tabHidden || navigationInProgress);
|
|
275
|
+
if (isAbort) {
|
|
276
|
+
// silent — not interesting
|
|
277
|
+
}
|
|
278
|
+
else if (isNavCancel) {
|
|
279
|
+
logger.warn('Network request cancelled by navigation', finalConfig.method, url);
|
|
280
|
+
}
|
|
281
|
+
else {
|
|
282
|
+
logger.error('Network error', finalConfig.method, url, err);
|
|
283
|
+
}
|
|
284
|
+
// An abort and a navigation cancellation are the SAME fact to a caller —
|
|
285
|
+
// the request was cancelled before any response — and neither is a network
|
|
286
|
+
// outage. Flag it (`aborted`) and give it its own errorKey so app code does
|
|
287
|
+
// not have to parse the message, and so a session-clearing check can tell
|
|
288
|
+
// it apart from a real failure without treating `status === 0` as a 4xx.
|
|
289
|
+
const aborted = isAbort || isNavCancel;
|
|
290
|
+
const error = new HttpError(err instanceof Error
|
|
291
|
+
? err.message
|
|
292
|
+
: t(aborted ? 'http.error.aborted' : 'http.error.networkError', undefined, {
|
|
293
|
+
defaultValue: aborted ? 'Request aborted' : 'Network error',
|
|
294
|
+
}), 0, undefined, finalConfig, aborted ? 'http.error.aborted' : 'http.error.networkError', aborted);
|
|
295
|
+
if (shouldRetryRequest({
|
|
296
|
+
method: finalConfig.method,
|
|
297
|
+
headers,
|
|
298
|
+
status: 0,
|
|
299
|
+
attempt,
|
|
300
|
+
errorMessage: errMsg,
|
|
301
|
+
aborted,
|
|
302
|
+
options: retryOptions,
|
|
303
|
+
})) {
|
|
304
|
+
await sleep(retryDelayMs(undefined, attempt, retryOptions));
|
|
305
|
+
continue;
|
|
203
306
|
}
|
|
204
307
|
// Apply error interceptors
|
|
205
308
|
let finalError = error;
|
|
@@ -208,72 +311,6 @@ export const createFetchClient = (config = {}) => {
|
|
|
208
311
|
}
|
|
209
312
|
throw finalError;
|
|
210
313
|
}
|
|
211
|
-
// Apply response interceptors
|
|
212
|
-
for (const interceptor of responseInterceptors) {
|
|
213
|
-
response = (await interceptor(response));
|
|
214
|
-
}
|
|
215
|
-
return response;
|
|
216
|
-
}
|
|
217
|
-
catch (err) {
|
|
218
|
-
if (timeoutId) {
|
|
219
|
-
clearTimeout(timeoutId);
|
|
220
|
-
}
|
|
221
|
-
if (err instanceof HttpError) {
|
|
222
|
-
throw err;
|
|
223
|
-
}
|
|
224
|
-
// Distinguish an explicit abort (AbortController, page unload
|
|
225
|
-
// wired up via signal) and SPA navigation-induced cancellation
|
|
226
|
-
// from a real network outage.
|
|
227
|
-
//
|
|
228
|
-
// - AbortError → user-initiated cancel: silent
|
|
229
|
-
// - "TypeError: Failed to fetch" while the browser tab is
|
|
230
|
-
// hidden / unloading → SPA tore down a fetch as it left the
|
|
231
|
-
// page. Demote to warn so it stays visible in the console
|
|
232
|
-
// for debugging but doesn't fail strict console-error gates.
|
|
233
|
-
// - Anything else (including "Failed to fetch" while the tab
|
|
234
|
-
// is visible) → real outage: logger.error.
|
|
235
|
-
//
|
|
236
|
-
// Components that want zero navigation noise should still pass
|
|
237
|
-
// an AbortSignal from their useEffect cleanup.
|
|
238
|
-
const errMsg = err instanceof Error ? err.message : '';
|
|
239
|
-
const errName = err instanceof Error ? err.name : '';
|
|
240
|
-
const isAbort = errName === 'AbortError' ||
|
|
241
|
-
(typeof DOMException !== 'undefined' &&
|
|
242
|
-
err instanceof DOMException &&
|
|
243
|
-
err.name === 'AbortError') ||
|
|
244
|
-
/the user aborted a request/i.test(errMsg);
|
|
245
|
-
const tabHidden = typeof document !== 'undefined' &&
|
|
246
|
-
(document.visibilityState === 'hidden' || document.hidden === true);
|
|
247
|
-
const isNavCancel = !isAbort &&
|
|
248
|
-
errName === 'TypeError' &&
|
|
249
|
-
/failed to fetch|network ?error|load failed/i.test(errMsg) &&
|
|
250
|
-
(tabHidden || navigationInProgress);
|
|
251
|
-
if (isAbort) {
|
|
252
|
-
// silent — not interesting
|
|
253
|
-
}
|
|
254
|
-
else if (isNavCancel) {
|
|
255
|
-
logger.warn('Network request cancelled by navigation', finalConfig.method, url);
|
|
256
|
-
}
|
|
257
|
-
else {
|
|
258
|
-
logger.error('Network error', finalConfig.method, url, err);
|
|
259
|
-
}
|
|
260
|
-
// An abort and a navigation cancellation are the SAME fact to a caller —
|
|
261
|
-
// the request was cancelled before any response — and neither is a network
|
|
262
|
-
// outage. Flag it (`aborted`) and give it its own errorKey so app code does
|
|
263
|
-
// not have to parse the message, and so a session-clearing check can tell
|
|
264
|
-
// it apart from a real failure without treating `status === 0` as a 4xx.
|
|
265
|
-
const aborted = isAbort || isNavCancel;
|
|
266
|
-
const error = new HttpError(err instanceof Error
|
|
267
|
-
? err.message
|
|
268
|
-
: t(aborted ? 'http.error.aborted' : 'http.error.networkError', undefined, {
|
|
269
|
-
defaultValue: aborted ? 'Request aborted' : 'Network error',
|
|
270
|
-
}), 0, undefined, finalConfig, aborted ? 'http.error.aborted' : 'http.error.networkError', aborted);
|
|
271
|
-
// Apply error interceptors
|
|
272
|
-
let finalError = error;
|
|
273
|
-
for (const interceptor of errorInterceptors) {
|
|
274
|
-
finalError = await interceptor(finalError);
|
|
275
|
-
}
|
|
276
|
-
throw finalError;
|
|
277
314
|
}
|
|
278
315
|
},
|
|
279
316
|
get(url, requestConfig) {
|
package/dist/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../src/provider.ts"],"names":[],"mappings":"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"}
|
package/dist/retry.d.ts
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded retry policy for idempotent HTTP requests.
|
|
3
|
+
*
|
|
4
|
+
* A rolling deploy restarts one API instance at a time, so a request can fail
|
|
5
|
+
* with `502`/`503`/`504` or a reset connection for a few seconds even though
|
|
6
|
+
* the platform is healthy. Retrying those — and ONLY those, and only when the
|
|
7
|
+
* request is safe to repeat — turns a user-visible error into a short wait.
|
|
8
|
+
*
|
|
9
|
+
* The rules the policy enforces:
|
|
10
|
+
*
|
|
11
|
+
* - **Idempotent methods only.** `GET`, `HEAD`, `PUT`, `DELETE` and `OPTIONS`
|
|
12
|
+
* may be repeated. `POST` and `PATCH` are retried ONLY when the caller sent
|
|
13
|
+
* an `Idempotency-Key` header, which tells the server to collapse the repeat
|
|
14
|
+
* (a retried POST without one can create two records).
|
|
15
|
+
* - **Transient failures only.** Statuses `502`/`503`/`504`, and connection
|
|
16
|
+
* errors (reset/refused/timeout). A `500` is a server bug, not a rolling
|
|
17
|
+
* restart, and is not retried.
|
|
18
|
+
* - **Bounded.** Two retries by default, exponential backoff with jitter, and
|
|
19
|
+
* `Retry-After` from the server is honored when present.
|
|
20
|
+
* - **Never on an abort.** A cancelled request (effect cleanup, navigation) is
|
|
21
|
+
* not retried.
|
|
22
|
+
*
|
|
23
|
+
* @module
|
|
24
|
+
*/
|
|
25
|
+
import type { HttpMethod } from './types.js';
|
|
26
|
+
/**
|
|
27
|
+
* Tuning for the retry policy.
|
|
28
|
+
*/
|
|
29
|
+
export interface RetryOptions {
|
|
30
|
+
/**
|
|
31
|
+
* Maximum retries AFTER the first attempt. Defaults to `2` (three attempts
|
|
32
|
+
* in total).
|
|
33
|
+
*/
|
|
34
|
+
maxRetries?: number;
|
|
35
|
+
/** Base backoff in milliseconds. Defaults to `300`. */
|
|
36
|
+
baseDelayMs?: number;
|
|
37
|
+
/** Maximum backoff (before `Retry-After` can extend it). Defaults to `5000`. */
|
|
38
|
+
maxDelayMs?: number;
|
|
39
|
+
/** Statuses treated as transient. Defaults to `[502, 503, 504]`. */
|
|
40
|
+
retryStatuses?: number[];
|
|
41
|
+
}
|
|
42
|
+
/** The resolved policy used when a caller passes no options. */
|
|
43
|
+
export declare const DEFAULT_RETRY_OPTIONS: Required<RetryOptions>;
|
|
44
|
+
/** The request fields the policy decides from. */
|
|
45
|
+
export interface RetryDecisionInput {
|
|
46
|
+
/** The request method. */
|
|
47
|
+
method: HttpMethod;
|
|
48
|
+
/** The request headers (lower-cased lookup is done here). */
|
|
49
|
+
headers: Record<string, string | undefined>;
|
|
50
|
+
/** The HTTP status, or `0` when no response arrived. */
|
|
51
|
+
status: number;
|
|
52
|
+
/** How many retries have already been made (0 for the first failure). */
|
|
53
|
+
attempt: number;
|
|
54
|
+
/** The error message, used to recognize a connection reset/refusal. */
|
|
55
|
+
errorMessage?: string;
|
|
56
|
+
/** `true` when the request was aborted before a response. */
|
|
57
|
+
aborted?: boolean;
|
|
58
|
+
/** Overrides layered over {@link DEFAULT_RETRY_OPTIONS}. */
|
|
59
|
+
options?: RetryOptions | false;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Whether a request may be repeated at all.
|
|
63
|
+
*
|
|
64
|
+
* @param method - The HTTP method.
|
|
65
|
+
* @param headers - The request headers (an `Idempotency-Key` makes POST/PATCH repeatable).
|
|
66
|
+
* @returns `true` when repeating the request cannot duplicate a side effect.
|
|
67
|
+
*/
|
|
68
|
+
export declare function isIdempotentRequest(method: HttpMethod, headers: Record<string, string | undefined>): boolean;
|
|
69
|
+
/**
|
|
70
|
+
* Whether a connection-level error is transient (a restarted process refuses
|
|
71
|
+
* or resets connections; a DNS or TLS configuration error does not).
|
|
72
|
+
*
|
|
73
|
+
* @param message - The error message.
|
|
74
|
+
* @returns `true` for reset/refused/closed-early/timeout shapes.
|
|
75
|
+
*/
|
|
76
|
+
export declare function isTransientConnectionError(message: string | undefined): boolean;
|
|
77
|
+
/**
|
|
78
|
+
* Parse a `Retry-After` header into milliseconds from now.
|
|
79
|
+
*
|
|
80
|
+
* @param value - The header value (`seconds` or an HTTP date).
|
|
81
|
+
* @param now - The clock, injected for tests.
|
|
82
|
+
* @returns Milliseconds to wait, or undefined when absent/unparseable.
|
|
83
|
+
*/
|
|
84
|
+
export declare function parseRetryAfter(value: string | undefined, now?: number): number | undefined;
|
|
85
|
+
/**
|
|
86
|
+
* Decide whether one failed request should be retried.
|
|
87
|
+
*
|
|
88
|
+
* @param input - The method, headers, status/error and attempt count.
|
|
89
|
+
* @returns `true` when the request may be repeated.
|
|
90
|
+
*/
|
|
91
|
+
export declare function shouldRetryRequest(input: RetryDecisionInput): boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Compute the wait before the next attempt.
|
|
94
|
+
*
|
|
95
|
+
* `Retry-After` wins when the server sent one (it knows when the instance will
|
|
96
|
+
* be back); otherwise exponential backoff with full jitter.
|
|
97
|
+
*
|
|
98
|
+
* @param retryAfter - The raw `Retry-After` header value, when present.
|
|
99
|
+
* @param attempt - How many retries have already been made (0 for the first).
|
|
100
|
+
* @param options - Policy overrides.
|
|
101
|
+
* @param random - Jitter source, injected for tests (defaults to `Math.random`).
|
|
102
|
+
* @returns Milliseconds to wait before retrying.
|
|
103
|
+
*/
|
|
104
|
+
export declare function retryDelayMs(retryAfter: string | undefined, attempt: number, options?: RetryOptions | false, random?: () => number): number;
|
|
105
|
+
//# sourceMappingURL=retry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.d.ts","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAE5C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB,gFAAgF;IAChF,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,oEAAoE;IACpE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;CACzB;AAED,gEAAgE;AAChE,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,YAAY,CAKxD,CAAA;AAED,kDAAkD;AAClD,MAAM,WAAW,kBAAkB;IACjC,0BAA0B;IAC1B,MAAM,EAAE,UAAU,CAAA;IAClB,6DAA6D;IAC7D,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAA;IAC3C,wDAAwD;IACxD,MAAM,EAAE,MAAM,CAAA;IACd,yEAAyE;IACzE,OAAO,EAAE,MAAM,CAAA;IACf,uEAAuE;IACvE,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,4DAA4D;IAC5D,OAAO,CAAC,EAAE,YAAY,GAAG,KAAK,CAAA;CAC/B;AAoBD;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAC1C,OAAO,CAgBT;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAK/E;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,GAAG,GAAE,MAAmB,GACvB,MAAM,GAAG,SAAS,CAOpB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAQrE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,YAAY,GAAG,KAAK,EAC9B,MAAM,GAAE,MAAM,MAAoB,GACjC,MAAM,CASR"}
|
package/dist/retry.js
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bounded retry policy for idempotent HTTP requests.
|
|
3
|
+
*
|
|
4
|
+
* A rolling deploy restarts one API instance at a time, so a request can fail
|
|
5
|
+
* with `502`/`503`/`504` or a reset connection for a few seconds even though
|
|
6
|
+
* the platform is healthy. Retrying those — and ONLY those, and only when the
|
|
7
|
+
* request is safe to repeat — turns a user-visible error into a short wait.
|
|
8
|
+
*
|
|
9
|
+
* The rules the policy enforces:
|
|
10
|
+
*
|
|
11
|
+
* - **Idempotent methods only.** `GET`, `HEAD`, `PUT`, `DELETE` and `OPTIONS`
|
|
12
|
+
* may be repeated. `POST` and `PATCH` are retried ONLY when the caller sent
|
|
13
|
+
* an `Idempotency-Key` header, which tells the server to collapse the repeat
|
|
14
|
+
* (a retried POST without one can create two records).
|
|
15
|
+
* - **Transient failures only.** Statuses `502`/`503`/`504`, and connection
|
|
16
|
+
* errors (reset/refused/timeout). A `500` is a server bug, not a rolling
|
|
17
|
+
* restart, and is not retried.
|
|
18
|
+
* - **Bounded.** Two retries by default, exponential backoff with jitter, and
|
|
19
|
+
* `Retry-After` from the server is honored when present.
|
|
20
|
+
* - **Never on an abort.** A cancelled request (effect cleanup, navigation) is
|
|
21
|
+
* not retried.
|
|
22
|
+
*
|
|
23
|
+
* @module
|
|
24
|
+
*/
|
|
25
|
+
/** The resolved policy used when a caller passes no options. */
|
|
26
|
+
export const DEFAULT_RETRY_OPTIONS = {
|
|
27
|
+
maxRetries: 2,
|
|
28
|
+
baseDelayMs: 300,
|
|
29
|
+
maxDelayMs: 5_000,
|
|
30
|
+
retryStatuses: [502, 503, 504],
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Read one header case-insensitively.
|
|
34
|
+
*
|
|
35
|
+
* @param headers - The header map.
|
|
36
|
+
* @param name - The header name (any case).
|
|
37
|
+
* @returns The value, or undefined.
|
|
38
|
+
*/
|
|
39
|
+
function headerValue(headers, name) {
|
|
40
|
+
const wanted = name.toLowerCase();
|
|
41
|
+
for (const [key, value] of Object.entries(headers)) {
|
|
42
|
+
if (key.toLowerCase() === wanted)
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Whether a request may be repeated at all.
|
|
49
|
+
*
|
|
50
|
+
* @param method - The HTTP method.
|
|
51
|
+
* @param headers - The request headers (an `Idempotency-Key` makes POST/PATCH repeatable).
|
|
52
|
+
* @returns `true` when repeating the request cannot duplicate a side effect.
|
|
53
|
+
*/
|
|
54
|
+
export function isIdempotentRequest(method, headers) {
|
|
55
|
+
switch (method) {
|
|
56
|
+
case 'GET':
|
|
57
|
+
case 'HEAD':
|
|
58
|
+
case 'PUT':
|
|
59
|
+
case 'DELETE':
|
|
60
|
+
case 'OPTIONS':
|
|
61
|
+
return true;
|
|
62
|
+
case 'POST':
|
|
63
|
+
case 'PATCH':
|
|
64
|
+
// Repeating a create is only safe when the SERVER has a key to collapse
|
|
65
|
+
// the duplicate on — the caller's assertion, not ours to assume.
|
|
66
|
+
return Boolean(headerValue(headers, 'idempotency-key'));
|
|
67
|
+
default:
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Whether a connection-level error is transient (a restarted process refuses
|
|
73
|
+
* or resets connections; a DNS or TLS configuration error does not).
|
|
74
|
+
*
|
|
75
|
+
* @param message - The error message.
|
|
76
|
+
* @returns `true` for reset/refused/closed-early/timeout shapes.
|
|
77
|
+
*/
|
|
78
|
+
export function isTransientConnectionError(message) {
|
|
79
|
+
if (!message)
|
|
80
|
+
return false;
|
|
81
|
+
return /ECONNRESET|ECONNREFUSED|EPIPE|ETIMEDOUT|socket hang up|connection (?:reset|refused|closed)|failed to fetch|fetch failed|network ?error|load failed/i.test(message);
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Parse a `Retry-After` header into milliseconds from now.
|
|
85
|
+
*
|
|
86
|
+
* @param value - The header value (`seconds` or an HTTP date).
|
|
87
|
+
* @param now - The clock, injected for tests.
|
|
88
|
+
* @returns Milliseconds to wait, or undefined when absent/unparseable.
|
|
89
|
+
*/
|
|
90
|
+
export function parseRetryAfter(value, now = Date.now()) {
|
|
91
|
+
if (!value)
|
|
92
|
+
return undefined;
|
|
93
|
+
const trimmed = value.trim();
|
|
94
|
+
if (/^\d+$/.test(trimmed))
|
|
95
|
+
return Number(trimmed) * 1_000;
|
|
96
|
+
const date = Date.parse(trimmed);
|
|
97
|
+
if (Number.isNaN(date))
|
|
98
|
+
return undefined;
|
|
99
|
+
return Math.max(0, date - now);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Decide whether one failed request should be retried.
|
|
103
|
+
*
|
|
104
|
+
* @param input - The method, headers, status/error and attempt count.
|
|
105
|
+
* @returns `true` when the request may be repeated.
|
|
106
|
+
*/
|
|
107
|
+
export function shouldRetryRequest(input) {
|
|
108
|
+
if (input.options === false)
|
|
109
|
+
return false;
|
|
110
|
+
if (input.aborted)
|
|
111
|
+
return false;
|
|
112
|
+
const options = { ...DEFAULT_RETRY_OPTIONS, ...(input.options ?? {}) };
|
|
113
|
+
if (input.attempt >= options.maxRetries)
|
|
114
|
+
return false;
|
|
115
|
+
if (!isIdempotentRequest(input.method, input.headers))
|
|
116
|
+
return false;
|
|
117
|
+
if (input.status !== 0)
|
|
118
|
+
return options.retryStatuses.includes(input.status);
|
|
119
|
+
return isTransientConnectionError(input.errorMessage);
|
|
120
|
+
}
|
|
121
|
+
/**
|
|
122
|
+
* Compute the wait before the next attempt.
|
|
123
|
+
*
|
|
124
|
+
* `Retry-After` wins when the server sent one (it knows when the instance will
|
|
125
|
+
* be back); otherwise exponential backoff with full jitter.
|
|
126
|
+
*
|
|
127
|
+
* @param retryAfter - The raw `Retry-After` header value, when present.
|
|
128
|
+
* @param attempt - How many retries have already been made (0 for the first).
|
|
129
|
+
* @param options - Policy overrides.
|
|
130
|
+
* @param random - Jitter source, injected for tests (defaults to `Math.random`).
|
|
131
|
+
* @returns Milliseconds to wait before retrying.
|
|
132
|
+
*/
|
|
133
|
+
export function retryDelayMs(retryAfter, attempt, options, random = Math.random) {
|
|
134
|
+
const resolved = { ...DEFAULT_RETRY_OPTIONS, ...(options === false ? {} : (options ?? {})) };
|
|
135
|
+
const fromHeader = parseRetryAfter(retryAfter);
|
|
136
|
+
if (fromHeader !== undefined)
|
|
137
|
+
return Math.min(fromHeader, resolved.maxDelayMs);
|
|
138
|
+
const exponential = resolved.baseDelayMs * 2 ** attempt;
|
|
139
|
+
// Full jitter in [0, exponential] avoids a fleet of clients retrying in
|
|
140
|
+
// lockstep after one instance restarts.
|
|
141
|
+
const jittered = random() * exponential;
|
|
142
|
+
return Math.min(Math.max(resolved.baseDelayMs / 2, jittered), resolved.maxDelayMs);
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=retry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
+
import type { RetryOptions } from './retry.js';
|
|
6
7
|
/**
|
|
7
8
|
* HTTP request method.
|
|
8
9
|
*/
|
|
@@ -71,6 +72,16 @@ export interface RequestConfig {
|
|
|
71
72
|
* Custom request options (implementation-specific).
|
|
72
73
|
*/
|
|
73
74
|
options?: Record<string, unknown>;
|
|
75
|
+
/**
|
|
76
|
+
* Retry policy for this request, or `false` to disable retries.
|
|
77
|
+
*
|
|
78
|
+
* The default policy retries only IDEMPOTENT requests (`GET`/`HEAD`/`PUT`/
|
|
79
|
+
* `DELETE`/`OPTIONS`, and `POST`/`PATCH` carrying an `Idempotency-Key`) on
|
|
80
|
+
* `502`/`503`/`504` or a reset/refused connection, twice, with exponential
|
|
81
|
+
* backoff and jitter, honoring `Retry-After`. See `@molecule/app-http`'s
|
|
82
|
+
* `shouldRetryRequest`.
|
|
83
|
+
*/
|
|
84
|
+
retry?: RetryOptions | false;
|
|
74
85
|
}
|
|
75
86
|
/**
|
|
76
87
|
* What the auth gate is told about the request it is about to hold: whether the request
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;AAEzF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEhC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAA;IAE9D;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAA;IAEvD;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IAEpB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAE9C;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;AAEzF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAEhC;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAA;IAE9D;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,aAAa,CAAA;IAEvD;;OAEG;IACH,MAAM,CAAC,EAAE,WAAW,CAAA;IAEpB;;;;;;OAMG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;IAEd;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAEjC;;;;;;;;OAQG;IACH,KAAK,CAAC,EAAE,YAAY,GAAG,KAAK,CAAA;CAC7B;AAED;;;;;;GAMG;AACH,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IAEtB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,CAAA;IAEf;;;OAGG;IACH,GAAG,CAAC,EAAE,MAAM,CAAA;CACb;AAED;;GAEG;AACH,MAAM,WAAW,iBAAkB,SAAQ,aAAa;IACtD;;OAEG;IACH,MAAM,EAAE,UAAU,CAAA;IAElB;;OAEG;IACH,GAAG,EAAE,MAAM,CAAA;IAEX;;OAEG;IACH,IAAI,CAAC,EAAE,OAAO,CAAA;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,OAAO;IACvC;;OAEG;IACH,IAAI,EAAE,CAAC,CAAA;IAEP;;OAEG;IACH,MAAM,EAAE,MAAM,CAAA;IAEd;;OAEG;IACH,UAAU,EAAE,MAAM,CAAA;IAElB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAE/B;;OAEG;IACH,MAAM,EAAE,iBAAiB,CAAA;CAC1B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAiBzB,MAAM,EAAE,MAAM;IACd,QAAQ,CAAC,EAAE,YAAY;IACvB,MAAM,CAAC,EAAE,iBAAiB;IAC1B,QAAQ,CAAC,EAAE,MAAM;IACjB,OAAO;IApBhB;;;;;;;;;;;;;OAaG;gBAED,OAAO,EAAE,MAAM,EACR,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,YAAY,YAAA,EACvB,MAAM,CAAC,EAAE,iBAAiB,YAAA,EAC1B,QAAQ,CAAC,EAAE,MAAM,YAAA,EACjB,OAAO,UAAQ;CAKzB"}
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AA0KH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,OAAO,SAAU,SAAQ,KAAK;IAiBzB;IACA;IACA;IACA;IACA;IApBT;;;;;;;;;;;;;OAaG;IACH,YACE,OAAe,EACR,MAAc,EACd,QAAuB,EACvB,MAA0B,EAC1B,QAAiB,EACjB,UAAU,KAAK;QAEtB,KAAK,CAAC,OAAO,CAAC,CAAA;QANP,WAAM,GAAN,MAAM,CAAQ;QACd,aAAQ,GAAR,QAAQ,CAAe;QACvB,WAAM,GAAN,MAAM,CAAoB;QAC1B,aAAQ,GAAR,QAAQ,CAAS;QACjB,YAAO,GAAP,OAAO,CAAQ;QAGtB,IAAI,CAAC,IAAI,GAAG,WAAW,CAAA;IACzB,CAAC;CACF"}
|
package/dist/unwrap.d.ts
CHANGED
|
@@ -38,6 +38,11 @@
|
|
|
38
38
|
* Both shapes are handled here so pages don't have to remember to call
|
|
39
39
|
* `unwrapList(res.data)` vs `unwrapList(res)`.
|
|
40
40
|
*
|
|
41
|
+
* A custom envelope such as `{ items: [...], count: 10 }` is not a `data`
|
|
42
|
+
* envelope and returns `[]`. Read its named array directly: `body.items` for
|
|
43
|
+
* raw JSON, or `response.data.items` for an `HttpResponse`. Passing that
|
|
44
|
+
* array to `unwrapList` is also valid; passing the enclosing object is not.
|
|
45
|
+
*
|
|
41
46
|
* @param res - Raw response body OR an `HttpResponse` envelope from `@molecule/app-http`.
|
|
42
47
|
* @returns A typed array `T[]`; never `null`/`undefined`.
|
|
43
48
|
*/
|
package/dist/unwrap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unwrap.d.ts","sourceRoot":"","sources":["../src/unwrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH
|
|
1
|
+
{"version":3,"file":"unwrap.d.ts","sourceRoot":"","sources":["../src/unwrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,UAAU,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,CAAC,EAAE,CAmC/C;AAyED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,GAAG,CAAC,GAAG,IAAI,CAmDtD"}
|
package/dist/unwrap.js
CHANGED
|
@@ -38,6 +38,11 @@
|
|
|
38
38
|
* Both shapes are handled here so pages don't have to remember to call
|
|
39
39
|
* `unwrapList(res.data)` vs `unwrapList(res)`.
|
|
40
40
|
*
|
|
41
|
+
* A custom envelope such as `{ items: [...], count: 10 }` is not a `data`
|
|
42
|
+
* envelope and returns `[]`. Read its named array directly: `body.items` for
|
|
43
|
+
* raw JSON, or `response.data.items` for an `HttpResponse`. Passing that
|
|
44
|
+
* array to `unwrapList` is also valid; passing the enclosing object is not.
|
|
45
|
+
*
|
|
41
46
|
* @param res - Raw response body OR an `HttpResponse` envelope from `@molecule/app-http`.
|
|
42
47
|
* @returns A typed array `T[]`; never `null`/`undefined`.
|
|
43
48
|
*/
|
package/dist/unwrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unwrap.js","sourceRoot":"","sources":["../src/unwrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH
|
|
1
|
+
{"version":3,"file":"unwrap.js","sourceRoot":"","sources":["../src/unwrap.ts"],"names":[],"mappings":"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"}
|