@molecule/app-http 1.5.1 → 1.5.4
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 +74 -13
- package/dist/auth-gate.d.ts +3 -3
- package/dist/auth-gate.js +3 -3
- package/dist/errors.d.ts +5 -2
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +10 -3
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +14 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -3
- package/dist/index.js.map +1 -1
- package/dist/provider.d.ts.map +1 -1
- package/dist/provider.js +37 -11
- package/dist/provider.js.map +1 -1
- package/dist/types.d.ts +38 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +185 -4
- package/dist/types.js.map +1 -1
- package/dist/url.d.ts +19 -0
- package/dist/url.d.ts.map +1 -0
- package/dist/url.js +20 -0
- package/dist/url.js.map +1 -0
- package/package.json +5 -5
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-
|
|
6
|
+
Generated: 2026-11-03T16:51:02.612Z
|
|
7
7
|
-->
|
|
8
8
|
|
|
9
9
|
# @molecule/app-http
|
|
@@ -394,8 +394,8 @@ interface AuthGateRequest {
|
|
|
394
394
|
method?: string
|
|
395
395
|
|
|
396
396
|
/**
|
|
397
|
-
* The request's URL, for the message logged when the gate never settles.
|
|
398
|
-
*
|
|
397
|
+
* The request's URL, for the message logged when the gate never settles. Any userinfo or
|
|
398
|
+
* credential query/fragment values are redacted from that report; non-secret parts remain.
|
|
399
399
|
*/
|
|
400
400
|
url?: string
|
|
401
401
|
}
|
|
@@ -519,6 +519,12 @@ type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'HEAD' | 'OPTION
|
|
|
519
519
|
|
|
520
520
|
HTTP error with response details.
|
|
521
521
|
|
|
522
|
+
Request metadata on `config` and `response.config` is limited to method, a
|
|
523
|
+
credential-redacted URL, and the two boolean notification-suppression controls
|
|
524
|
+
(`molSilentErrorNotification` and `molSilentRateLimitNotification`). Request bodies,
|
|
525
|
+
headers, params and all other provider options are omitted, as are credential-bearing
|
|
526
|
+
response headers, because errors are routinely serialized by logging transports.
|
|
527
|
+
|
|
522
528
|
**`status` is an HTTP status when the server answered, and `0` when it did not.**
|
|
523
529
|
A `0` means NO response exists: the request was aborted (an `AbortController`, a
|
|
524
530
|
component's effect cleanup, a route change tearing the request down) or the
|
|
@@ -530,13 +536,22 @@ session. The correct check is {@link isAuthFailure} (`status === 401 || status =
|
|
|
530
536
|
|
|
531
537
|
```typescript
|
|
532
538
|
class HttpError extends Error {
|
|
539
|
+
/**
|
|
540
|
+
* Redacts URL userinfo and credential query/fragment values while preserving the path and
|
|
541
|
+
* non-secret parameters. Shared by compatible HTTP and auth error/log views.
|
|
542
|
+
*/
|
|
543
|
+
static readonly redactUrlCredentials = redactUrlCredentials
|
|
544
|
+
|
|
533
545
|
/**
|
|
534
546
|
* Builds a failed-request error.
|
|
535
547
|
*
|
|
536
|
-
* @param message - Human-readable message (already translated where a key exists)
|
|
548
|
+
* @param message - Human-readable message (already translated where a key exists);
|
|
549
|
+
* credentials in any URL it contains are redacted.
|
|
537
550
|
* @param status - HTTP status, or `0` when no response was received (aborted / network failure).
|
|
538
|
-
* @param response - Parsed response when the server answered, otherwise undefined
|
|
539
|
-
*
|
|
551
|
+
* @param response - Parsed response when the server answered, otherwise undefined;
|
|
552
|
+
* its request config and headers are sanitized for safe logging.
|
|
553
|
+
* @param config - The request config that failed; only its method, redacted URL and
|
|
554
|
+
* boolean notification-suppression controls are retained.
|
|
540
555
|
* @param errorKey - Translation key for the failure (`http.error.aborted` for an
|
|
541
556
|
* aborted request, `http.error.networkError` for a real network failure).
|
|
542
557
|
* @param aborted - Whether the request was aborted before a response: an
|
|
@@ -552,8 +567,11 @@ class HttpError extends Error {
|
|
|
552
567
|
public errorKey?: string,
|
|
553
568
|
public aborted = false,
|
|
554
569
|
) {
|
|
555
|
-
super(message)
|
|
570
|
+
super(snapshotCredentials(message))
|
|
556
571
|
this.name = 'HttpError'
|
|
572
|
+
this.response = response ? errorResponse(response) : undefined
|
|
573
|
+
this.config = config ? errorRequestConfig(config) : undefined
|
|
574
|
+
Object.defineProperty(this, HTTP_ERROR_BRAND, { value: true })
|
|
557
575
|
}
|
|
558
576
|
}
|
|
559
577
|
```
|
|
@@ -612,7 +630,10 @@ function awaitAuthGate(request?: AuthGateRequest): Promise<void>
|
|
|
612
630
|
|
|
613
631
|
#### `isHttpError(err)`
|
|
614
632
|
|
|
615
|
-
Whether `err` is an {@link HttpError}
|
|
633
|
+
Whether `err` is an {@link HttpError} or a compatible branded request failure.
|
|
634
|
+
`@molecule/app-auth` uses the same global brand for its non-ok responses, so
|
|
635
|
+
this also recognizes them across realms and duplicated package copies without
|
|
636
|
+
either package depending on the other.
|
|
616
637
|
|
|
617
638
|
```typescript
|
|
618
639
|
function isHttpError(err: unknown): err is HttpError
|
|
@@ -620,7 +641,7 @@ function isHttpError(err: unknown): err is HttpError
|
|
|
620
641
|
|
|
621
642
|
- `err` — Any thrown value.
|
|
622
643
|
|
|
623
|
-
**Returns:** True for an `HttpError
|
|
644
|
+
**Returns:** True for an `HttpError` or a compatibly branded request failure.
|
|
624
645
|
|
|
625
646
|
#### `isAuthFailure(err)`
|
|
626
647
|
|
|
@@ -763,6 +784,35 @@ function retryDelayMs(
|
|
|
763
784
|
|
|
764
785
|
**Returns:** Milliseconds to wait before retrying.
|
|
765
786
|
|
|
787
|
+
#### `snapshotHttpErrorBody(body)`
|
|
788
|
+
|
|
789
|
+
Materialize a failed response body before the synchronous HttpError capture. Unchanged bytes
|
|
790
|
+
are cloned directly, including a Blob's BOM and every typed-array kind. Changed textual bytes
|
|
791
|
+
retain the BOM and use a Uint8Array fallback if the original view's alignment no longer fits.
|
|
792
|
+
Successful responses never pass through this helper.
|
|
793
|
+
|
|
794
|
+
```typescript
|
|
795
|
+
function snapshotHttpErrorBody<T>(body: T): Promise<T>
|
|
796
|
+
```
|
|
797
|
+
|
|
798
|
+
- `body` — A response body about to be retained on a failed request.
|
|
799
|
+
|
|
800
|
+
**Returns:** A scrubbed body with unchanged binary content preserved byte-for-byte.
|
|
801
|
+
|
|
802
|
+
#### `snapshotHttpErrorResponse(response)`
|
|
803
|
+
|
|
804
|
+
Read and scrub a failed response once for a retained-error reconstruction. The detached capture
|
|
805
|
+
carries the original body kind, safe response metadata, and minimal request config, so callers
|
|
806
|
+
such as auth never need to read the source response or its body again.
|
|
807
|
+
|
|
808
|
+
```typescript
|
|
809
|
+
function snapshotHttpErrorResponse<T extends HttpResponse>(response: T): Promise<T>
|
|
810
|
+
```
|
|
811
|
+
|
|
812
|
+
- `response` — The failed HTTP response to capture.
|
|
813
|
+
|
|
814
|
+
**Returns:** A detached, credential-scrubbed response preserving binary body bytes where safe.
|
|
815
|
+
|
|
766
816
|
#### `unwrapList(res)`
|
|
767
817
|
|
|
768
818
|
Normalize an unknown response body into a typed array.
|
|
@@ -1008,7 +1058,7 @@ Peer dependencies:
|
|
|
1008
1058
|
|
|
1009
1059
|
- `@molecule/app-bond` ^1.0.1
|
|
1010
1060
|
- `@molecule/app-i18n` ^1.0.1
|
|
1011
|
-
- `@molecule/app-logger` ^1.0.
|
|
1061
|
+
- `@molecule/app-logger` ^1.0.4
|
|
1012
1062
|
|
|
1013
1063
|
### Runtime Dependencies
|
|
1014
1064
|
|
|
@@ -1030,7 +1080,7 @@ Two mistakes that break in preview/production (seen in real imported apps):
|
|
|
1030
1080
|
the author's machine, then fails cross-origin (CORS) in the preview and points at the wrong
|
|
1031
1081
|
server in production. The base URL is configured ONCE (via `setClient`), not per call.
|
|
1032
1082
|
- **`getClient()` itself knows no baseURL.** The fallback client it mints when nothing is
|
|
1033
|
-
bonded has `baseURL: ''`, so `getClient().get('/
|
|
1083
|
+
bonded has `baseURL: ''`, so `getClient().get('/items')` requests the PAGE origin — in
|
|
1034
1084
|
dev the Vite server answers its own `index.html` with a 200, and the HTML arrives as
|
|
1035
1085
|
`data`, and the API then validates none of the fields it was sent. A scaffold bonds
|
|
1036
1086
|
`'/api'`; an app that builds its own client must pass `{ baseURL }`.
|
|
@@ -1049,9 +1099,16 @@ authScheme: 'Token' }))`, or the bonded provider's constructor
|
|
|
1049
1099
|
`getClient()`'s result: that is a built client, and `client.authScheme = 'Token'` is a type
|
|
1050
1100
|
error (TS2339) that changes no header. Do not hand-write a fetch wrapper for the scheme either.
|
|
1051
1101
|
|
|
1102
|
+
Header names are case-insensitive: request headers replace defaults with the same name.
|
|
1103
|
+
`createFetchClient` applies a nonempty static or resolved auth token AFTER request
|
|
1104
|
+
interceptors, replacing any default, request or interceptor `Authorization` header in any
|
|
1105
|
+
spelling. Clear the token (and any token resolver) or use a separate client to send another
|
|
1106
|
+
credential. The Axios bond retains Axios's precedence: explicit default/request headers and
|
|
1107
|
+
request interceptors can override the client's token.
|
|
1108
|
+
|
|
1052
1109
|
A request made while the session is still being restored WAITS for that restore, so a page
|
|
1053
|
-
that fetches viewer-dependent data on mount (
|
|
1054
|
-
|
|
1110
|
+
that fetches viewer-dependent data on mount (account settings, a dashboard, or a
|
|
1111
|
+
saved-item state) cannot go out unauthenticated and answer for an anonymous viewer. The auth
|
|
1055
1112
|
bond registers that wait with `setAuthGate`; apps that bond auth through
|
|
1056
1113
|
`@molecule/app-bonds-default-react` get it without doing anything. An app with its own session
|
|
1057
1114
|
module registers its own: `setAuthGate(() => session.whenRestored())`.
|
|
@@ -1085,6 +1142,10 @@ case so a caller can stay silent instead of reporting an outage. **Do not write
|
|
|
1085
1142
|
`err instanceof HttpError && err.status < 500` as a sign-out check** — it clears
|
|
1086
1143
|
the session on every aborted navigation request.
|
|
1087
1144
|
|
|
1145
|
+
Every non-ok response rejected by `@molecule/app-auth` also satisfies
|
|
1146
|
+
`isHttpError(err)`: its `status` and `response.data` are the same HTTP status
|
|
1147
|
+
and parsed body exposed as `AuthError.status` and `AuthError.body`.
|
|
1148
|
+
|
|
1088
1149
|
## Translations
|
|
1089
1150
|
|
|
1090
1151
|
Translation strings are provided by `@molecule/app-locales-http`.
|
package/dist/auth-gate.d.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The one gate every HTTP request awaits before it is sent.
|
|
3
3
|
*
|
|
4
|
-
* A page that fetches viewer-dependent data on mount (`GET /
|
|
5
|
-
* a
|
|
4
|
+
* A page that fetches viewer-dependent data on mount (`GET /accounts/:user`,
|
|
5
|
+
* a dashboard, a saved-item flag) can fire BEFORE the stored session has been
|
|
6
6
|
* restored, so the request leaves with no `Authorization` header and the server
|
|
7
|
-
* answers for an anonymous viewer — `
|
|
7
|
+
* answers for an anonymous viewer — `saved: false` on an item you saved.
|
|
8
8
|
* It is invisible on localhost, where the restore wins the race against the
|
|
9
9
|
* first effect, and appears over the network as soon as the restore takes one
|
|
10
10
|
* round trip: on a deployed URL it reads as stale server data rather than as a
|
package/dist/auth-gate.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The one gate every HTTP request awaits before it is sent.
|
|
3
3
|
*
|
|
4
|
-
* A page that fetches viewer-dependent data on mount (`GET /
|
|
5
|
-
* a
|
|
4
|
+
* A page that fetches viewer-dependent data on mount (`GET /accounts/:user`,
|
|
5
|
+
* a dashboard, a saved-item flag) can fire BEFORE the stored session has been
|
|
6
6
|
* restored, so the request leaves with no `Authorization` header and the server
|
|
7
|
-
* answers for an anonymous viewer — `
|
|
7
|
+
* answers for an anonymous viewer — `saved: false` on an item you saved.
|
|
8
8
|
* It is invisible on localhost, where the restore wins the race against the
|
|
9
9
|
* first effect, and appears over the network as soon as the restore takes one
|
|
10
10
|
* round trip: on a deployed URL it reads as stale server data rather than as a
|
package/dist/errors.d.ts
CHANGED
|
@@ -25,10 +25,13 @@
|
|
|
25
25
|
*/
|
|
26
26
|
import { HttpError } from './types.js';
|
|
27
27
|
/**
|
|
28
|
-
* Whether `err` is an {@link HttpError}
|
|
28
|
+
* Whether `err` is an {@link HttpError} or a compatible branded request failure.
|
|
29
|
+
* `@molecule/app-auth` uses the same global brand for its non-ok responses, so
|
|
30
|
+
* this also recognizes them across realms and duplicated package copies without
|
|
31
|
+
* either package depending on the other.
|
|
29
32
|
*
|
|
30
33
|
* @param err - Any thrown value.
|
|
31
|
-
* @returns True for an `HttpError
|
|
34
|
+
* @returns True for an `HttpError` or a compatibly branded request failure.
|
|
32
35
|
*/
|
|
33
36
|
export declare function isHttpError(err: unknown): err is HttpError;
|
|
34
37
|
/**
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAItC;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,SAAS,CAO1D;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEnD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAElD;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAE/C"}
|
package/dist/errors.js
CHANGED
|
@@ -24,14 +24,21 @@
|
|
|
24
24
|
* @module
|
|
25
25
|
*/
|
|
26
26
|
import { HttpError } from './types.js';
|
|
27
|
+
const HTTP_ERROR_BRAND = Symbol.for('@molecule/app-http/HttpError');
|
|
27
28
|
/**
|
|
28
|
-
* Whether `err` is an {@link HttpError}
|
|
29
|
+
* Whether `err` is an {@link HttpError} or a compatible branded request failure.
|
|
30
|
+
* `@molecule/app-auth` uses the same global brand for its non-ok responses, so
|
|
31
|
+
* this also recognizes them across realms and duplicated package copies without
|
|
32
|
+
* either package depending on the other.
|
|
29
33
|
*
|
|
30
34
|
* @param err - Any thrown value.
|
|
31
|
-
* @returns True for an `HttpError
|
|
35
|
+
* @returns True for an `HttpError` or a compatibly branded request failure.
|
|
32
36
|
*/
|
|
33
37
|
export function isHttpError(err) {
|
|
34
|
-
return err instanceof HttpError
|
|
38
|
+
return (err instanceof HttpError ||
|
|
39
|
+
(typeof err === 'object' &&
|
|
40
|
+
err !== null &&
|
|
41
|
+
err[HTTP_ERROR_BRAND] === true));
|
|
35
42
|
}
|
|
36
43
|
/**
|
|
37
44
|
* Whether the server REJECTED the request's credential — the only failure that
|
package/dist/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtC
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAEtC,MAAM,gBAAgB,GAAG,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAA;AAEnE;;;;;;;;GAQG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,OAAO,CACL,GAAG,YAAY,SAAS;QACxB,CAAC,OAAO,GAAG,KAAK,QAAQ;YACtB,GAAG,KAAK,IAAI;YACX,GAA+B,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,CAC/D,CAAA;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,CAAC,CAAA;AACvE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,GAAY;IACvC,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,CAAA;AAC7C,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CAAC,GAAY;IACpC,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,CAAA;AACxC,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
* the author's machine, then fails cross-origin (CORS) in the preview and points at the wrong
|
|
48
48
|
* server in production. The base URL is configured ONCE (via `setClient`), not per call.
|
|
49
49
|
* - **`getClient()` itself knows no baseURL.** The fallback client it mints when nothing is
|
|
50
|
-
* bonded has `baseURL: ''`, so `getClient().get('/
|
|
50
|
+
* bonded has `baseURL: ''`, so `getClient().get('/items')` requests the PAGE origin — in
|
|
51
51
|
* dev the Vite server answers its own `index.html` with a 200, and the HTML arrives as
|
|
52
52
|
* `data`, and the API then validates none of the fields it was sent. A scaffold bonds
|
|
53
53
|
* `'/api'`; an app that builds its own client must pass `{ baseURL }`.
|
|
@@ -66,9 +66,16 @@
|
|
|
66
66
|
* `getClient()`'s result: that is a built client, and `client.authScheme = 'Token'` is a type
|
|
67
67
|
* error (TS2339) that changes no header. Do not hand-write a fetch wrapper for the scheme either.
|
|
68
68
|
*
|
|
69
|
+
* Header names are case-insensitive: request headers replace defaults with the same name.
|
|
70
|
+
* `createFetchClient` applies a nonempty static or resolved auth token AFTER request
|
|
71
|
+
* interceptors, replacing any default, request or interceptor `Authorization` header in any
|
|
72
|
+
* spelling. Clear the token (and any token resolver) or use a separate client to send another
|
|
73
|
+
* credential. The Axios bond retains Axios's precedence: explicit default/request headers and
|
|
74
|
+
* request interceptors can override the client's token.
|
|
75
|
+
*
|
|
69
76
|
* A request made while the session is still being restored WAITS for that restore, so a page
|
|
70
|
-
* that fetches viewer-dependent data on mount (
|
|
71
|
-
*
|
|
77
|
+
* that fetches viewer-dependent data on mount (account settings, a dashboard, or a
|
|
78
|
+
* saved-item state) cannot go out unauthenticated and answer for an anonymous viewer. The auth
|
|
72
79
|
* bond registers that wait with `setAuthGate`; apps that bond auth through
|
|
73
80
|
* `@molecule/app-bonds-default-react` get it without doing anything. An app with its own session
|
|
74
81
|
* module registers its own: `setAuthGate(() => session.whenRestored())`.
|
|
@@ -102,6 +109,10 @@
|
|
|
102
109
|
* `err instanceof HttpError && err.status < 500` as a sign-out check** — it clears
|
|
103
110
|
* the session on every aborted navigation request.
|
|
104
111
|
*
|
|
112
|
+
* Every non-ok response rejected by `@molecule/app-auth` also satisfies
|
|
113
|
+
* `isHttpError(err)`: its `status` and `response.data` are the same HTTP status
|
|
114
|
+
* and parsed body exposed as `AuthError.status` and `AuthError.body`.
|
|
115
|
+
*
|
|
105
116
|
* @module
|
|
106
117
|
*/
|
|
107
118
|
export * from './auth-gate.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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoHG;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
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
* the author's machine, then fails cross-origin (CORS) in the preview and points at the wrong
|
|
48
48
|
* server in production. The base URL is configured ONCE (via `setClient`), not per call.
|
|
49
49
|
* - **`getClient()` itself knows no baseURL.** The fallback client it mints when nothing is
|
|
50
|
-
* bonded has `baseURL: ''`, so `getClient().get('/
|
|
50
|
+
* bonded has `baseURL: ''`, so `getClient().get('/items')` requests the PAGE origin — in
|
|
51
51
|
* dev the Vite server answers its own `index.html` with a 200, and the HTML arrives as
|
|
52
52
|
* `data`, and the API then validates none of the fields it was sent. A scaffold bonds
|
|
53
53
|
* `'/api'`; an app that builds its own client must pass `{ baseURL }`.
|
|
@@ -66,9 +66,16 @@
|
|
|
66
66
|
* `getClient()`'s result: that is a built client, and `client.authScheme = 'Token'` is a type
|
|
67
67
|
* error (TS2339) that changes no header. Do not hand-write a fetch wrapper for the scheme either.
|
|
68
68
|
*
|
|
69
|
+
* Header names are case-insensitive: request headers replace defaults with the same name.
|
|
70
|
+
* `createFetchClient` applies a nonempty static or resolved auth token AFTER request
|
|
71
|
+
* interceptors, replacing any default, request or interceptor `Authorization` header in any
|
|
72
|
+
* spelling. Clear the token (and any token resolver) or use a separate client to send another
|
|
73
|
+
* credential. The Axios bond retains Axios's precedence: explicit default/request headers and
|
|
74
|
+
* request interceptors can override the client's token.
|
|
75
|
+
*
|
|
69
76
|
* A request made while the session is still being restored WAITS for that restore, so a page
|
|
70
|
-
* that fetches viewer-dependent data on mount (
|
|
71
|
-
*
|
|
77
|
+
* that fetches viewer-dependent data on mount (account settings, a dashboard, or a
|
|
78
|
+
* saved-item state) cannot go out unauthenticated and answer for an anonymous viewer. The auth
|
|
72
79
|
* bond registers that wait with `setAuthGate`; apps that bond auth through
|
|
73
80
|
* `@molecule/app-bonds-default-react` get it without doing anything. An app with its own session
|
|
74
81
|
* module registers its own: `setAuthGate(() => session.whenRestored())`.
|
|
@@ -102,6 +109,10 @@
|
|
|
102
109
|
* `err instanceof HttpError && err.status < 500` as a sign-out check** — it clears
|
|
103
110
|
* the session on every aborted navigation request.
|
|
104
111
|
*
|
|
112
|
+
* Every non-ok response rejected by `@molecule/app-auth` also satisfies
|
|
113
|
+
* `isHttpError(err)`: its `status` and `response.data` are the same HTTP status
|
|
114
|
+
* and parsed body exposed as `AuthError.status` and `AuthError.body`.
|
|
115
|
+
*
|
|
105
116
|
* @module
|
|
106
117
|
*/
|
|
107
118
|
export * from './auth-gate.js';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoHG;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,EAAqB,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,EAAqB,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAoElF;;;;;;;;;GASG;AACH,eAAO,MAAM,iBAAiB,GAAI,SAAQ,gBAAqB,KAAG,UA6bjE,CAAA"}
|
package/dist/provider.js
CHANGED
|
@@ -9,11 +9,34 @@ import { t } from '@molecule/app-i18n';
|
|
|
9
9
|
import { getLogger } from '@molecule/app-logger';
|
|
10
10
|
import { awaitAuthGate } from './auth-gate.js';
|
|
11
11
|
import { retryDelayMs, shouldRetryRequest } from './retry.js';
|
|
12
|
-
import { HttpError } from './types.js';
|
|
12
|
+
import { HttpError, snapshotHttpErrorBody } from './types.js';
|
|
13
13
|
/** Wait for a retry backoff. */
|
|
14
14
|
function sleep(ms) {
|
|
15
15
|
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Remove every spelling of a header name. Header names are case-insensitive, and fetch joins a
|
|
19
|
+
* `content-type` and a `Content-Type` key into one `application/json, application/json` value,
|
|
20
|
+
* which JSON body parsers reject — the server then sees no body.
|
|
21
|
+
*/
|
|
22
|
+
function deleteHeader(headers, name) {
|
|
23
|
+
const lower = name.toLowerCase();
|
|
24
|
+
for (const key of Object.keys(headers))
|
|
25
|
+
if (key.toLowerCase() === lower)
|
|
26
|
+
delete headers[key];
|
|
27
|
+
}
|
|
28
|
+
/** Set a header, replacing it under any spelling. */
|
|
29
|
+
function setHeader(headers, name, value) {
|
|
30
|
+
deleteHeader(headers, name);
|
|
31
|
+
// This valid header must avoid both Object.prototype's setter and native Headers' record
|
|
32
|
+
// conversion, which can discard the exact `__proto__` spelling. Its case is immaterial to HTTP.
|
|
33
|
+
headers[name === '__proto__' ? '__PROTO__' : name] = value;
|
|
34
|
+
}
|
|
35
|
+
/** Whether a header is present under any spelling. */
|
|
36
|
+
function hasHeader(headers, name) {
|
|
37
|
+
const lower = name.toLowerCase();
|
|
38
|
+
return Object.keys(headers).some((key) => key.toLowerCase() === lower);
|
|
39
|
+
}
|
|
17
40
|
/** A response whose body is an HTML document, not JSON. */
|
|
18
41
|
const HTML_CONTENT_TYPE = /^text\/html\b/i;
|
|
19
42
|
/** A URL that names its own host: a scheme (`https://`) or protocol-relative (`//cdn…`). */
|
|
@@ -120,18 +143,21 @@ export const createFetchClient = (config = {}) => {
|
|
|
120
143
|
}
|
|
121
144
|
}
|
|
122
145
|
// Build headers
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
146
|
+
// A request header replaces a default one of the same name in any spelling.
|
|
147
|
+
const headers = {};
|
|
148
|
+
for (const [name, value] of [
|
|
149
|
+
...Object.entries(client.defaultHeaders),
|
|
150
|
+
...Object.entries(finalConfig.headers ?? {}),
|
|
151
|
+
])
|
|
152
|
+
setHeader(headers, name, value);
|
|
127
153
|
// Add auth token. Resolved HERE, after the gate: the session this request belongs to is
|
|
128
154
|
// the one the restore settled on, and it cannot have changed since a copy was taken.
|
|
129
155
|
const token = resolveAuthToken();
|
|
130
156
|
if (token) {
|
|
131
|
-
headers
|
|
157
|
+
setHeader(headers, 'Authorization', `${config.authScheme ?? 'Bearer'} ${token}`);
|
|
132
158
|
}
|
|
133
159
|
// Add content-type for JSON
|
|
134
|
-
if (finalConfig.data && !headers
|
|
160
|
+
if (finalConfig.data && !hasHeader(headers, 'Content-Type')) {
|
|
135
161
|
headers['Content-Type'] = 'application/json';
|
|
136
162
|
}
|
|
137
163
|
// Build fetch options
|
|
@@ -147,7 +173,7 @@ export const createFetchClient = (config = {}) => {
|
|
|
147
173
|
fetchOptions.body = finalConfig.data;
|
|
148
174
|
// Remove Content-Type for FormData (browser sets it with boundary)
|
|
149
175
|
if (finalConfig.data instanceof FormData) {
|
|
150
|
-
|
|
176
|
+
deleteHeader(headers, 'Content-Type');
|
|
151
177
|
}
|
|
152
178
|
}
|
|
153
179
|
else {
|
|
@@ -208,8 +234,7 @@ export const createFetchClient = (config = {}) => {
|
|
|
208
234
|
// server answering a request that expected JSON — the Vite dev server's
|
|
209
235
|
// SPA fallback when a relative URL had no API baseURL. Resolving with the
|
|
210
236
|
// HTML as `data` turns that into a `Cannot read properties of undefined`
|
|
211
|
-
// crash far from the call
|
|
212
|
-
// probe scripts to discover `getClient().baseURL` was `''`).
|
|
237
|
+
// crash far from the call, obscuring the missing API base URL.
|
|
213
238
|
const contentType = fetchResponse.headers.get('content-type') ?? '';
|
|
214
239
|
if (fetchResponse.ok && HTML_CONTENT_TYPE.test(contentType)) {
|
|
215
240
|
throw new HttpError(`${finalConfig.method} ${url} answered ${contentType.split(';')[0]} instead of ` +
|
|
@@ -237,6 +262,7 @@ export const createFetchClient = (config = {}) => {
|
|
|
237
262
|
};
|
|
238
263
|
// Handle error status codes
|
|
239
264
|
if (!fetchResponse.ok) {
|
|
265
|
+
response.data = await snapshotHttpErrorBody(response.data);
|
|
240
266
|
logger.warn('HTTP error', finalConfig.method, url, fetchResponse.status);
|
|
241
267
|
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');
|
|
242
268
|
// Handle auth errors
|
|
@@ -308,7 +334,7 @@ export const createFetchClient = (config = {}) => {
|
|
|
308
334
|
logger.warn('Network request cancelled by navigation', finalConfig.method, url);
|
|
309
335
|
}
|
|
310
336
|
else {
|
|
311
|
-
logger.error('Network error', finalConfig.method, url, err);
|
|
337
|
+
logger.error('Network error', finalConfig.method, url, err instanceof Error ? err.message : String(err));
|
|
312
338
|
}
|
|
313
339
|
// An abort and a navigation cancellation are the SAME fact to a caller —
|
|
314
340
|
// the request was cancelled before any response — and neither is a network
|
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/types.d.ts
CHANGED
|
@@ -101,8 +101,8 @@ export interface AuthGateRequest {
|
|
|
101
101
|
*/
|
|
102
102
|
method?: string;
|
|
103
103
|
/**
|
|
104
|
-
* The request's URL, for the message logged when the gate never settles.
|
|
105
|
-
*
|
|
104
|
+
* The request's URL, for the message logged when the gate never settles. Any userinfo or
|
|
105
|
+
* credential query/fragment values are redacted from that report; non-secret parts remain.
|
|
106
106
|
*/
|
|
107
107
|
url?: string;
|
|
108
108
|
}
|
|
@@ -148,9 +148,34 @@ export interface HttpResponse<T = unknown> {
|
|
|
148
148
|
*/
|
|
149
149
|
config: FullRequestConfig;
|
|
150
150
|
}
|
|
151
|
+
/**
|
|
152
|
+
* Materialize a failed response body before the synchronous HttpError capture. Unchanged bytes
|
|
153
|
+
* are cloned directly, including a Blob's BOM and every typed-array kind. Changed textual bytes
|
|
154
|
+
* retain the BOM and use a Uint8Array fallback if the original view's alignment no longer fits.
|
|
155
|
+
* Successful responses never pass through this helper.
|
|
156
|
+
*
|
|
157
|
+
* @param body - A response body about to be retained on a failed request.
|
|
158
|
+
* @returns A scrubbed body with unchanged binary content preserved byte-for-byte.
|
|
159
|
+
*/
|
|
160
|
+
export declare const snapshotHttpErrorBody: <T>(body: T) => Promise<T>;
|
|
161
|
+
/**
|
|
162
|
+
* Read and scrub a failed response once for a retained-error reconstruction. The detached capture
|
|
163
|
+
* carries the original body kind, safe response metadata, and minimal request config, so callers
|
|
164
|
+
* such as auth never need to read the source response or its body again.
|
|
165
|
+
*
|
|
166
|
+
* @param response - The failed HTTP response to capture.
|
|
167
|
+
* @returns A detached, credential-scrubbed response preserving binary body bytes where safe.
|
|
168
|
+
*/
|
|
169
|
+
export declare const snapshotHttpErrorResponse: <T extends HttpResponse>(response: T) => Promise<T>;
|
|
151
170
|
/**
|
|
152
171
|
* HTTP error with response details.
|
|
153
172
|
*
|
|
173
|
+
* Request metadata on `config` and `response.config` is limited to method, a
|
|
174
|
+
* credential-redacted URL, and the two boolean notification-suppression controls
|
|
175
|
+
* (`molSilentErrorNotification` and `molSilentRateLimitNotification`). Request bodies,
|
|
176
|
+
* headers, params and all other provider options are omitted, as are credential-bearing
|
|
177
|
+
* response headers, because errors are routinely serialized by logging transports.
|
|
178
|
+
*
|
|
154
179
|
* **`status` is an HTTP status when the server answered, and `0` when it did not.**
|
|
155
180
|
* A `0` means NO response exists: the request was aborted (an `AbortController`, a
|
|
156
181
|
* component's effect cleanup, a route change tearing the request down) or the
|
|
@@ -177,13 +202,21 @@ export declare class HttpError extends Error {
|
|
|
177
202
|
config?: FullRequestConfig | undefined;
|
|
178
203
|
errorKey?: string | undefined;
|
|
179
204
|
aborted: boolean;
|
|
205
|
+
/**
|
|
206
|
+
* Redacts URL userinfo and credential query/fragment values while preserving the path and
|
|
207
|
+
* non-secret parameters. Shared by compatible HTTP and auth error/log views.
|
|
208
|
+
*/
|
|
209
|
+
static readonly redactUrlCredentials: (value: string) => string;
|
|
180
210
|
/**
|
|
181
211
|
* Builds a failed-request error.
|
|
182
212
|
*
|
|
183
|
-
* @param message - Human-readable message (already translated where a key exists)
|
|
213
|
+
* @param message - Human-readable message (already translated where a key exists);
|
|
214
|
+
* credentials in any URL it contains are redacted.
|
|
184
215
|
* @param status - HTTP status, or `0` when no response was received (aborted / network failure).
|
|
185
|
-
* @param response - Parsed response when the server answered, otherwise undefined
|
|
186
|
-
*
|
|
216
|
+
* @param response - Parsed response when the server answered, otherwise undefined;
|
|
217
|
+
* its request config and headers are sanitized for safe logging.
|
|
218
|
+
* @param config - The request config that failed; only its method, redacted URL and
|
|
219
|
+
* boolean notification-suppression controls are retained.
|
|
187
220
|
* @param errorKey - Translation key for the failure (`http.error.aborted` for an
|
|
188
221
|
* aborted request, `http.error.networkError` for a real network failure).
|
|
189
222
|
* @param aborted - Whether the request was aborted before a response: an
|
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;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
CHANGED
|
@@ -3,9 +3,179 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
+
import { snapshotCredentials } from '@molecule/app-logger';
|
|
7
|
+
import { redactUrlCredentials } from './url.js';
|
|
8
|
+
// A global brand keeps failed-request classification working across realms and
|
|
9
|
+
// duplicated package copies. It is deliberately not an exported runtime key.
|
|
10
|
+
const HTTP_ERROR_BRAND = Symbol.for('@molecule/app-http/HttpError');
|
|
11
|
+
/** The boolean-only notification controls an error interceptor may read. */
|
|
12
|
+
const ERROR_INTERCEPTOR_OPTIONS = [
|
|
13
|
+
'molSilentErrorNotification',
|
|
14
|
+
'molSilentRateLimitNotification',
|
|
15
|
+
];
|
|
16
|
+
/** Keep notification suppression without retaining arbitrary provider options. */
|
|
17
|
+
const errorInterceptorOptions = (options) => {
|
|
18
|
+
if (!options)
|
|
19
|
+
return undefined;
|
|
20
|
+
const safe = Object.fromEntries(ERROR_INTERCEPTOR_OPTIONS.flatMap((key) => (options[key] === true ? [[key, true]] : [])));
|
|
21
|
+
return Object.keys(safe).length > 0 ? safe : undefined;
|
|
22
|
+
};
|
|
23
|
+
/** Keep only non-credential request metadata on an error that may be logged. */
|
|
24
|
+
const errorRequestConfig = (config) => {
|
|
25
|
+
const url = redactUrlCredentials(config.url);
|
|
26
|
+
const options = errorInterceptorOptions(config.options);
|
|
27
|
+
// Even the minimal public form is detached: a later caller mutation must not
|
|
28
|
+
// introduce credentials into the error's retained config or response.config.
|
|
29
|
+
return { method: config.method, url, ...(options ? { options } : {}) };
|
|
30
|
+
};
|
|
31
|
+
/** Fresh Blobs already materialized by the async failure boundary; no native property is written. */
|
|
32
|
+
const retainedErrorBlobs = new WeakSet();
|
|
33
|
+
const isBuffer = (value) => value instanceof ArrayBuffer ||
|
|
34
|
+
(typeof SharedArrayBuffer !== 'undefined' && value instanceof SharedArrayBuffer);
|
|
35
|
+
const sharedBuffer = (bytes) => {
|
|
36
|
+
const copy = new SharedArrayBuffer(bytes.byteLength);
|
|
37
|
+
new Uint8Array(copy).set(bytes);
|
|
38
|
+
return copy;
|
|
39
|
+
};
|
|
40
|
+
/** Clone a view over its exact bytes, retaining element width, offset-independent length and kind. */
|
|
41
|
+
const cloneBinaryBody = (original, bytes) => {
|
|
42
|
+
if (typeof SharedArrayBuffer !== 'undefined' && original instanceof SharedArrayBuffer) {
|
|
43
|
+
return sharedBuffer(bytes);
|
|
44
|
+
}
|
|
45
|
+
if (original instanceof ArrayBuffer)
|
|
46
|
+
return original.slice(0);
|
|
47
|
+
const copy = bytes.slice();
|
|
48
|
+
if (original instanceof DataView)
|
|
49
|
+
return new DataView(copy.buffer);
|
|
50
|
+
if (typeof Buffer !== 'undefined' && original instanceof Buffer)
|
|
51
|
+
return Buffer.from(copy);
|
|
52
|
+
const View = original.constructor;
|
|
53
|
+
return new View(copy.buffer);
|
|
54
|
+
};
|
|
55
|
+
/** Rebuild only changed textual bytes; unchanged and non-text bodies are cloned byte-for-byte. */
|
|
56
|
+
const retainedBinaryBody = (original, snapshot) => {
|
|
57
|
+
if (!isBuffer(original) && !ArrayBuffer.isView(original))
|
|
58
|
+
return snapshot;
|
|
59
|
+
let bytes;
|
|
60
|
+
try {
|
|
61
|
+
bytes = isBuffer(original)
|
|
62
|
+
? new Uint8Array(original)
|
|
63
|
+
: new Uint8Array(original.buffer, original.byteOffset, original.byteLength);
|
|
64
|
+
}
|
|
65
|
+
catch (_detached) {
|
|
66
|
+
return snapshot;
|
|
67
|
+
}
|
|
68
|
+
let decoded;
|
|
69
|
+
try {
|
|
70
|
+
decoded = new TextDecoder('utf-8', { fatal: true }).decode(bytes);
|
|
71
|
+
}
|
|
72
|
+
catch (_error) {
|
|
73
|
+
// A genuine non-text body is retained byte-for-byte below.
|
|
74
|
+
}
|
|
75
|
+
if (decoded === undefined || snapshot === decoded || typeof snapshot !== 'string') {
|
|
76
|
+
return cloneBinaryBody(original, bytes);
|
|
77
|
+
}
|
|
78
|
+
// snapshotCredentials decodes without a BOM. Restore one on changed text too,
|
|
79
|
+
// then construct typed/BigInt views over bytes rather than numeric elements.
|
|
80
|
+
const hasUtf8Bom = bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf;
|
|
81
|
+
const encoded = new TextEncoder().encode(hasUtf8Bom ? `\uFEFF${snapshot}` : snapshot);
|
|
82
|
+
if (typeof SharedArrayBuffer !== 'undefined' && original instanceof SharedArrayBuffer) {
|
|
83
|
+
return sharedBuffer(encoded);
|
|
84
|
+
}
|
|
85
|
+
if (original instanceof ArrayBuffer)
|
|
86
|
+
return encoded.buffer;
|
|
87
|
+
if (original instanceof DataView)
|
|
88
|
+
return new DataView(encoded.buffer);
|
|
89
|
+
if (typeof Buffer !== 'undefined' && original instanceof Buffer)
|
|
90
|
+
return Buffer.from(encoded);
|
|
91
|
+
const View = original.constructor;
|
|
92
|
+
const width = View.BYTES_PER_ELEMENT ?? 1;
|
|
93
|
+
return encoded.byteLength % width === 0 ? new View(encoded.buffer) : encoded;
|
|
94
|
+
};
|
|
95
|
+
/** Scrub response headers/body into a new tree and project safe request metadata onto it. */
|
|
96
|
+
const errorResponse = (response) => {
|
|
97
|
+
const config = errorRequestConfig(response.config);
|
|
98
|
+
const scrubbed = snapshotCredentials(response);
|
|
99
|
+
return {
|
|
100
|
+
...scrubbed,
|
|
101
|
+
data: typeof Blob !== 'undefined' &&
|
|
102
|
+
response.data instanceof Blob &&
|
|
103
|
+
retainedErrorBlobs.has(response.data)
|
|
104
|
+
? response.data
|
|
105
|
+
: retainedBinaryBody(response.data, scrubbed.data),
|
|
106
|
+
config,
|
|
107
|
+
};
|
|
108
|
+
};
|
|
109
|
+
/**
|
|
110
|
+
* Materialize a failed response body before the synchronous HttpError capture. Unchanged bytes
|
|
111
|
+
* are cloned directly, including a Blob's BOM and every typed-array kind. Changed textual bytes
|
|
112
|
+
* retain the BOM and use a Uint8Array fallback if the original view's alignment no longer fits.
|
|
113
|
+
* Successful responses never pass through this helper.
|
|
114
|
+
*
|
|
115
|
+
* @param body - A response body about to be retained on a failed request.
|
|
116
|
+
* @returns A scrubbed body with unchanged binary content preserved byte-for-byte.
|
|
117
|
+
*/
|
|
118
|
+
export const snapshotHttpErrorBody = async (body) => {
|
|
119
|
+
if (isBuffer(body) || ArrayBuffer.isView(body)) {
|
|
120
|
+
return retainedBinaryBody(body, snapshotCredentials(body));
|
|
121
|
+
}
|
|
122
|
+
if (typeof Blob === 'undefined' || !(body instanceof Blob))
|
|
123
|
+
return body;
|
|
124
|
+
try {
|
|
125
|
+
const bytes = new Uint8Array(await body.arrayBuffer());
|
|
126
|
+
let snapshot;
|
|
127
|
+
try {
|
|
128
|
+
const text = new TextDecoder('utf-8', { fatal: true }).decode(bytes);
|
|
129
|
+
const scrubbed = snapshotCredentials(text);
|
|
130
|
+
if (scrubbed === text) {
|
|
131
|
+
snapshot = new Blob([bytes], { type: body.type });
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
const hasUtf8Bom = bytes[0] === 0xef && bytes[1] === 0xbb && bytes[2] === 0xbf;
|
|
135
|
+
const encoded = new TextEncoder().encode(hasUtf8Bom ? `\uFEFF${scrubbed}` : scrubbed);
|
|
136
|
+
snapshot = new Blob([encoded], { type: body.type });
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
catch (_nonText) {
|
|
140
|
+
snapshot = new Blob([bytes], { type: body.type });
|
|
141
|
+
}
|
|
142
|
+
retainedErrorBlobs.add(snapshot);
|
|
143
|
+
return snapshot;
|
|
144
|
+
}
|
|
145
|
+
catch (_unreadable) {
|
|
146
|
+
retainedErrorBlobs.add(body);
|
|
147
|
+
return body;
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
/**
|
|
151
|
+
* Read and scrub a failed response once for a retained-error reconstruction. The detached capture
|
|
152
|
+
* carries the original body kind, safe response metadata, and minimal request config, so callers
|
|
153
|
+
* such as auth never need to read the source response or its body again.
|
|
154
|
+
*
|
|
155
|
+
* @param response - The failed HTTP response to capture.
|
|
156
|
+
* @returns A detached, credential-scrubbed response preserving binary body bytes where safe.
|
|
157
|
+
*/
|
|
158
|
+
export const snapshotHttpErrorResponse = async (response) => {
|
|
159
|
+
const captured = {
|
|
160
|
+
...response,
|
|
161
|
+
data: response.data,
|
|
162
|
+
status: response.status,
|
|
163
|
+
statusText: response.statusText,
|
|
164
|
+
headers: response.headers,
|
|
165
|
+
config: response.config,
|
|
166
|
+
};
|
|
167
|
+
captured.data = await snapshotHttpErrorBody(captured.data);
|
|
168
|
+
return errorResponse(captured);
|
|
169
|
+
};
|
|
6
170
|
/**
|
|
7
171
|
* HTTP error with response details.
|
|
8
172
|
*
|
|
173
|
+
* Request metadata on `config` and `response.config` is limited to method, a
|
|
174
|
+
* credential-redacted URL, and the two boolean notification-suppression controls
|
|
175
|
+
* (`molSilentErrorNotification` and `molSilentRateLimitNotification`). Request bodies,
|
|
176
|
+
* headers, params and all other provider options are omitted, as are credential-bearing
|
|
177
|
+
* response headers, because errors are routinely serialized by logging transports.
|
|
178
|
+
*
|
|
9
179
|
* **`status` is an HTTP status when the server answered, and `0` when it did not.**
|
|
10
180
|
* A `0` means NO response exists: the request was aborted (an `AbortController`, a
|
|
11
181
|
* component's effect cleanup, a route change tearing the request down) or the
|
|
@@ -32,13 +202,21 @@ export class HttpError extends Error {
|
|
|
32
202
|
config;
|
|
33
203
|
errorKey;
|
|
34
204
|
aborted;
|
|
205
|
+
/**
|
|
206
|
+
* Redacts URL userinfo and credential query/fragment values while preserving the path and
|
|
207
|
+
* non-secret parameters. Shared by compatible HTTP and auth error/log views.
|
|
208
|
+
*/
|
|
209
|
+
static redactUrlCredentials = redactUrlCredentials;
|
|
35
210
|
/**
|
|
36
211
|
* Builds a failed-request error.
|
|
37
212
|
*
|
|
38
|
-
* @param message - Human-readable message (already translated where a key exists)
|
|
213
|
+
* @param message - Human-readable message (already translated where a key exists);
|
|
214
|
+
* credentials in any URL it contains are redacted.
|
|
39
215
|
* @param status - HTTP status, or `0` when no response was received (aborted / network failure).
|
|
40
|
-
* @param response - Parsed response when the server answered, otherwise undefined
|
|
41
|
-
*
|
|
216
|
+
* @param response - Parsed response when the server answered, otherwise undefined;
|
|
217
|
+
* its request config and headers are sanitized for safe logging.
|
|
218
|
+
* @param config - The request config that failed; only its method, redacted URL and
|
|
219
|
+
* boolean notification-suppression controls are retained.
|
|
42
220
|
* @param errorKey - Translation key for the failure (`http.error.aborted` for an
|
|
43
221
|
* aborted request, `http.error.networkError` for a real network failure).
|
|
44
222
|
* @param aborted - Whether the request was aborted before a response: an
|
|
@@ -47,13 +225,16 @@ export class HttpError extends Error {
|
|
|
47
225
|
* from a network outage on the same `status === 0`, without parsing the message.
|
|
48
226
|
*/
|
|
49
227
|
constructor(message, status, response, config, errorKey, aborted = false) {
|
|
50
|
-
super(message);
|
|
228
|
+
super(snapshotCredentials(message));
|
|
51
229
|
this.status = status;
|
|
52
230
|
this.response = response;
|
|
53
231
|
this.config = config;
|
|
54
232
|
this.errorKey = errorKey;
|
|
55
233
|
this.aborted = aborted;
|
|
56
234
|
this.name = 'HttpError';
|
|
235
|
+
this.response = response ? errorResponse(response) : undefined;
|
|
236
|
+
this.config = config ? errorRequestConfig(config) : undefined;
|
|
237
|
+
Object.defineProperty(this, HTTP_ERROR_BRAND, { value: true });
|
|
57
238
|
}
|
|
58
239
|
}
|
|
59
240
|
//# sourceMappingURL=types.js.map
|
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":"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"}
|
package/dist/url.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL sanitization for errors and logs.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Redacts credentials from a URL or from text containing one, while preserving its scheme,
|
|
8
|
+
* host, path and non-credential parameters. Both absolute and relative URLs are supported;
|
|
9
|
+
* userinfo is replaced as a whole and credential-valued query/fragment parameters keep their
|
|
10
|
+
* names with `[REDACTED]` as their value. A string without URL credentials is returned unchanged.
|
|
11
|
+
*
|
|
12
|
+
* The implementation is the logger core's shared deep scrubber; this named view keeps the
|
|
13
|
+
* existing `HttpError.redactUrlCredentials` API without maintaining a second classification rule.
|
|
14
|
+
*
|
|
15
|
+
* @param value - A URL, error message or log argument that may contain a credential URL.
|
|
16
|
+
* @returns The input with URL userinfo and credential parameter values redacted.
|
|
17
|
+
*/
|
|
18
|
+
export declare const redactUrlCredentials: (value: string) => string;
|
|
19
|
+
//# sourceMappingURL=url.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.d.ts","sourceRoot":"","sources":["../src/url.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,GAAI,OAAO,MAAM,KAAG,MAAkC,CAAA"}
|
package/dist/url.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* URL sanitization for errors and logs.
|
|
3
|
+
*
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { redactCredentials } from '@molecule/app-logger';
|
|
7
|
+
/**
|
|
8
|
+
* Redacts credentials from a URL or from text containing one, while preserving its scheme,
|
|
9
|
+
* host, path and non-credential parameters. Both absolute and relative URLs are supported;
|
|
10
|
+
* userinfo is replaced as a whole and credential-valued query/fragment parameters keep their
|
|
11
|
+
* names with `[REDACTED]` as their value. A string without URL credentials is returned unchanged.
|
|
12
|
+
*
|
|
13
|
+
* The implementation is the logger core's shared deep scrubber; this named view keeps the
|
|
14
|
+
* existing `HttpError.redactUrlCredentials` API without maintaining a second classification rule.
|
|
15
|
+
*
|
|
16
|
+
* @param value - A URL, error message or log argument that may contain a credential URL.
|
|
17
|
+
* @returns The input with URL userinfo and credential parameter values redacted.
|
|
18
|
+
*/
|
|
19
|
+
export const redactUrlCredentials = (value) => redactCredentials(value);
|
|
20
|
+
//# sourceMappingURL=url.js.map
|
package/dist/url.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"url.js","sourceRoot":"","sources":["../src/url.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@molecule/app-http",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.4",
|
|
4
4
|
"description": "Client HTTP interface for molecule.dev",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -30,12 +30,12 @@
|
|
|
30
30
|
"peerDependencies": {
|
|
31
31
|
"@molecule/app-bond": "^1.0.1",
|
|
32
32
|
"@molecule/app-i18n": "^1.0.1",
|
|
33
|
-
"@molecule/app-logger": "^1.0.
|
|
33
|
+
"@molecule/app-logger": "^1.0.4"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
|
-
"@molecule/app-bond": "1.0.
|
|
37
|
-
"@molecule/app-i18n": "1.1.
|
|
38
|
-
"@molecule/app-logger": "1.0.
|
|
36
|
+
"@molecule/app-bond": "1.0.5",
|
|
37
|
+
"@molecule/app-i18n": "1.1.2",
|
|
38
|
+
"@molecule/app-logger": "1.0.5",
|
|
39
39
|
"@types/node": "26.6.5",
|
|
40
40
|
"typescript": "6.0.3",
|
|
41
41
|
"vitest": "4.1.12"
|