@atproto-labs/fetch 0.1.1 → 0.2.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/CHANGELOG.md +16 -0
- package/dist/fetch-error.d.ts +3 -2
- package/dist/fetch-error.d.ts.map +1 -1
- package/dist/fetch-error.js +4 -43
- package/dist/fetch-error.js.map +1 -1
- package/dist/fetch-request.d.ts +1 -0
- package/dist/fetch-request.d.ts.map +1 -1
- package/dist/fetch-request.js +66 -5
- package/dist/fetch-request.js.map +1 -1
- package/dist/fetch-response.d.ts +5 -5
- package/dist/fetch-response.d.ts.map +1 -1
- package/dist/fetch-response.js +36 -20
- package/dist/fetch-response.js.map +1 -1
- package/dist/fetch-wrap.d.ts.map +1 -1
- package/dist/fetch-wrap.js +3 -3
- package/dist/fetch-wrap.js.map +1 -1
- package/dist/fetch.js +2 -3
- package/dist/fetch.js.map +1 -1
- package/dist/util.d.ts.map +1 -1
- package/dist/util.js +6 -6
- package/dist/util.js.map +1 -1
- package/package.json +2 -2
- package/src/fetch-error.ts +8 -54
- package/src/fetch-request.ts +72 -0
- package/src/fetch-response.ts +26 -9
- package/tsconfig.build.tsbuildinfo +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
# @atproto-labs/fetch
|
|
2
2
|
|
|
3
|
+
## 0.2.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#3343](https://github.com/bluesky-social/atproto/pull/3343) [`5ece8c6ae`](https://github.com/bluesky-social/atproto/commit/5ece8c6aeab9c5c3f51295d93ed6e27c3c6095c2) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Fix typo in `ResponseTranformer` and `fetchResponseJsonTranformer`
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- [#3343](https://github.com/bluesky-social/atproto/pull/3343) [`5ece8c6ae`](https://github.com/bluesky-social/atproto/commit/5ece8c6aeab9c5c3f51295d93ed6e27c3c6095c2) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Response mime type check is now case-insensitive (as per rfc2616)
|
|
12
|
+
|
|
13
|
+
## 0.1.2
|
|
14
|
+
|
|
15
|
+
### Patch Changes
|
|
16
|
+
|
|
17
|
+
- [#3135](https://github.com/bluesky-social/atproto/pull/3135) [`622654672`](https://github.com/bluesky-social/atproto/commit/6226546725d1bb0375e3c9e0d71af173e8253c4f) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Support parsing of more fetch() errors
|
|
18
|
+
|
|
3
19
|
## 0.1.1
|
|
4
20
|
|
|
5
21
|
### Patch Changes
|
package/dist/fetch-error.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
export declare class FetchError extends Error {
|
|
1
|
+
export declare abstract class FetchError extends Error {
|
|
2
2
|
readonly statusCode: number;
|
|
3
|
-
constructor(statusCode
|
|
3
|
+
constructor(statusCode: number, message?: string, options?: ErrorOptions);
|
|
4
|
+
get expose(): boolean;
|
|
4
5
|
}
|
|
5
6
|
//# sourceMappingURL=fetch-error.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-error.d.ts","sourceRoot":"","sources":["../src/fetch-error.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"fetch-error.d.ts","sourceRoot":"","sources":["../src/fetch-error.ts"],"names":[],"mappings":"AAAA,8BAAsB,UAAW,SAAQ,KAAK;aAE1B,UAAU,EAAE,MAAM;gBAAlB,UAAU,EAAE,MAAM,EAClC,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,YAAY;IAKxB,IAAI,MAAM,YAET;CACF"}
|
package/dist/fetch-error.js
CHANGED
|
@@ -3,56 +3,17 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.FetchError = void 0;
|
|
4
4
|
class FetchError extends Error {
|
|
5
5
|
constructor(statusCode, message, options) {
|
|
6
|
-
if (statusCode == null || !message) {
|
|
7
|
-
const info = extractInfo(extractRootCause(options?.cause));
|
|
8
|
-
statusCode = statusCode ?? info[0];
|
|
9
|
-
message = message || info[1];
|
|
10
|
-
}
|
|
11
6
|
super(message, options);
|
|
12
7
|
Object.defineProperty(this, "statusCode", {
|
|
13
8
|
enumerable: true,
|
|
14
9
|
configurable: true,
|
|
15
10
|
writable: true,
|
|
16
|
-
value:
|
|
11
|
+
value: statusCode
|
|
17
12
|
});
|
|
18
|
-
this.statusCode = statusCode;
|
|
19
13
|
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
function extractRootCause(err) {
|
|
23
|
-
// Unwrap the Network error from undici (i.e. Node's internal fetch() implementation)
|
|
24
|
-
// https://github.com/nodejs/undici/blob/3274c975947ce11a08508743df026f73598bfead/lib/web/fetch/index.js#L223-L228
|
|
25
|
-
if (err instanceof TypeError &&
|
|
26
|
-
err.message === 'fetch failed' &&
|
|
27
|
-
err.cause !== undefined) {
|
|
28
|
-
return err.cause;
|
|
14
|
+
get expose() {
|
|
15
|
+
return true;
|
|
29
16
|
}
|
|
30
|
-
return err;
|
|
31
|
-
}
|
|
32
|
-
function extractInfo(err) {
|
|
33
|
-
if (typeof err === 'string' && err.length > 0) {
|
|
34
|
-
return [500, err];
|
|
35
|
-
}
|
|
36
|
-
if (!(err instanceof Error)) {
|
|
37
|
-
return [500, 'Failed to fetch'];
|
|
38
|
-
}
|
|
39
|
-
const code = err['code'];
|
|
40
|
-
if (typeof code === 'string') {
|
|
41
|
-
switch (true) {
|
|
42
|
-
case code === 'ENOTFOUND':
|
|
43
|
-
return [400, 'Invalid hostname'];
|
|
44
|
-
case code === 'ECONNREFUSED':
|
|
45
|
-
return [502, 'Connection refused'];
|
|
46
|
-
case code === 'DEPTH_ZERO_SELF_SIGNED_CERT':
|
|
47
|
-
return [502, 'Self-signed certificate'];
|
|
48
|
-
case code.startsWith('ERR_TLS'):
|
|
49
|
-
return [502, 'TLS error'];
|
|
50
|
-
case code.startsWith('ECONN'):
|
|
51
|
-
return [502, 'Connection error'];
|
|
52
|
-
default:
|
|
53
|
-
return [500, `${code} error`];
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
return [500, err.message];
|
|
57
17
|
}
|
|
18
|
+
exports.FetchError = FetchError;
|
|
58
19
|
//# sourceMappingURL=fetch-error.js.map
|
package/dist/fetch-error.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-error.js","sourceRoot":"","sources":["../src/fetch-error.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"fetch-error.js","sourceRoot":"","sources":["../src/fetch-error.ts"],"names":[],"mappings":";;;AAAA,MAAsB,UAAW,SAAQ,KAAK;IAC5C,YACkB,UAAkB,EAClC,OAAgB,EAChB,OAAsB;QAEtB,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QAJvB;;;;mBAAgB,UAAU;WAAQ;IAKpC,CAAC;IAED,IAAI,MAAM;QACR,OAAO,IAAI,CAAA;IACb,CAAC;CACF;AAZD,gCAYC"}
|
package/dist/fetch-request.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { asRequest } from './fetch.js';
|
|
|
3
3
|
export declare class FetchRequestError extends FetchError {
|
|
4
4
|
readonly request: Request;
|
|
5
5
|
constructor(request: Request, statusCode?: number, message?: string, options?: ErrorOptions);
|
|
6
|
+
get expose(): boolean;
|
|
6
7
|
static from(request: Request, cause: unknown): FetchRequestError;
|
|
7
8
|
}
|
|
8
9
|
export declare function protocolCheckRequestTransform(protocols: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-request.d.ts","sourceRoot":"","sources":["../src/fetch-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAGtC,qBAAa,iBAAkB,SAAQ,UAAU;aAE7B,OAAO,EAAE,OAAO;gBAAhB,OAAO,EAAE,OAAO,EAChC,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,YAAY;
|
|
1
|
+
{"version":3,"file":"fetch-request.d.ts","sourceRoot":"","sources":["../src/fetch-request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAGtC,qBAAa,iBAAkB,SAAQ,UAAU;aAE7B,OAAO,EAAE,OAAO;gBAAhB,OAAO,EAAE,OAAO,EAChC,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,YAAY;IAWxB,IAAI,MAAM,YAKT;IAED,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,iBAAiB;CAIjE;AA6DD,wBAAgB,6BAA6B,CAAC,SAAS,EAAE;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,OAAO,CAAC,EAAE,OAAO,GAAG;QAAE,eAAe,EAAE,OAAO,CAAA;KAAE,CAAA;IAChD,QAAQ,CAAC,EAAE,OAAO,GAAG;QAAE,eAAe,EAAE,OAAO,CAAA;KAAE,CAAA;CAClD,WACgB,OAAO,GAAG,MAAM,GAAG,GAAG,SAAS,WAAW,aA0B1D;AAED,wBAAgB,6BAA6B,YAC5B,OAAO,GAAG,MAAM,GAAG,GAAG,SAAS,WAAW,aAa1D;AAED,wBAAgB,0BAA0B,YACzB,OAAO,GAAG,MAAM,GAAG,GAAG,SAAS,WAAW,aAuB1D;AAED,eAAO,MAAM,8BAA8B,UAS1C,CAAA;AAED,wBAAgB,mCAAmC,CACjD,QAAQ,GAAE,QAAQ,CAAC,MAAM,CAAkC,+BAUtC,OAAO,GAAG,MAAM,GAAG,GAAG,SAAS,WAAW,uBAsBhE"}
|
package/dist/fetch-request.js
CHANGED
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.DEFAULT_FORBIDDEN_DOMAIN_NAMES = exports.FetchRequestError = void 0;
|
|
4
|
+
exports.protocolCheckRequestTransform = protocolCheckRequestTransform;
|
|
5
|
+
exports.redirectCheckRequestTransform = redirectCheckRequestTransform;
|
|
6
|
+
exports.requireHostHeaderTransform = requireHostHeaderTransform;
|
|
7
|
+
exports.forbiddenDomainNameRequestTransform = forbiddenDomainNameRequestTransform;
|
|
4
8
|
const fetch_error_js_1 = require("./fetch-error.js");
|
|
5
9
|
const fetch_js_1 = require("./fetch.js");
|
|
6
10
|
const util_js_1 = require("./util.js");
|
|
7
11
|
class FetchRequestError extends fetch_error_js_1.FetchError {
|
|
8
12
|
constructor(request, statusCode, message, options) {
|
|
13
|
+
if (statusCode == null || !message) {
|
|
14
|
+
const info = extractInfo(extractRootCause(options?.cause));
|
|
15
|
+
statusCode ?? (statusCode = info[0]);
|
|
16
|
+
message || (message = info[1]);
|
|
17
|
+
}
|
|
9
18
|
super(statusCode, message, options);
|
|
10
19
|
Object.defineProperty(this, "request", {
|
|
11
20
|
enumerable: true,
|
|
@@ -14,6 +23,12 @@ class FetchRequestError extends fetch_error_js_1.FetchError {
|
|
|
14
23
|
value: request
|
|
15
24
|
});
|
|
16
25
|
}
|
|
26
|
+
get expose() {
|
|
27
|
+
// A 500 request error means that the request was not made due to an infra,
|
|
28
|
+
// programming or server side issue. The message should no be exposed to
|
|
29
|
+
// downstream clients.
|
|
30
|
+
return this.statusCode !== 500;
|
|
31
|
+
}
|
|
17
32
|
static from(request, cause) {
|
|
18
33
|
if (cause instanceof FetchRequestError)
|
|
19
34
|
return cause;
|
|
@@ -21,6 +36,56 @@ class FetchRequestError extends fetch_error_js_1.FetchError {
|
|
|
21
36
|
}
|
|
22
37
|
}
|
|
23
38
|
exports.FetchRequestError = FetchRequestError;
|
|
39
|
+
function extractRootCause(err) {
|
|
40
|
+
// Unwrap the Network error from undici (i.e. Node's internal fetch() implementation)
|
|
41
|
+
// https://github.com/nodejs/undici/blob/3274c975947ce11a08508743df026f73598bfead/lib/web/fetch/index.js#L223-L228
|
|
42
|
+
if (err instanceof TypeError &&
|
|
43
|
+
err.message === 'fetch failed' &&
|
|
44
|
+
err.cause !== undefined) {
|
|
45
|
+
return err.cause;
|
|
46
|
+
}
|
|
47
|
+
return err;
|
|
48
|
+
}
|
|
49
|
+
function extractInfo(err) {
|
|
50
|
+
if (typeof err === 'string' && err.length > 0) {
|
|
51
|
+
return [500, err];
|
|
52
|
+
}
|
|
53
|
+
if (!(err instanceof Error)) {
|
|
54
|
+
return [500, 'Failed to fetch'];
|
|
55
|
+
}
|
|
56
|
+
// Undici fetch() "network" errors
|
|
57
|
+
switch (err.message) {
|
|
58
|
+
case 'failed to fetch the data URL':
|
|
59
|
+
return [400, err.message];
|
|
60
|
+
case 'unexpected redirect':
|
|
61
|
+
case 'cors failure':
|
|
62
|
+
case 'blocked':
|
|
63
|
+
case 'proxy authentication required':
|
|
64
|
+
// These cases could be represented either as a 4xx user error (invalid
|
|
65
|
+
// URL provided), or as a 5xx server error (server didn't behave as
|
|
66
|
+
// expected).
|
|
67
|
+
return [502, err.message];
|
|
68
|
+
}
|
|
69
|
+
// NodeJS errors
|
|
70
|
+
const code = err['code'];
|
|
71
|
+
if (typeof code === 'string') {
|
|
72
|
+
switch (true) {
|
|
73
|
+
case code === 'ENOTFOUND':
|
|
74
|
+
return [400, 'Invalid hostname'];
|
|
75
|
+
case code === 'ECONNREFUSED':
|
|
76
|
+
return [502, 'Connection refused'];
|
|
77
|
+
case code === 'DEPTH_ZERO_SELF_SIGNED_CERT':
|
|
78
|
+
return [502, 'Self-signed certificate'];
|
|
79
|
+
case code.startsWith('ERR_TLS'):
|
|
80
|
+
return [502, 'TLS error'];
|
|
81
|
+
case code.startsWith('ECONN'):
|
|
82
|
+
return [502, 'Connection error'];
|
|
83
|
+
default:
|
|
84
|
+
return [500, `${code} error`];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return [500, err.message];
|
|
88
|
+
}
|
|
24
89
|
function protocolCheckRequestTransform(protocols) {
|
|
25
90
|
return (input, init) => {
|
|
26
91
|
const { protocol, port } = (0, util_js_1.extractUrl)(input);
|
|
@@ -38,7 +103,6 @@ function protocolCheckRequestTransform(protocols) {
|
|
|
38
103
|
return request;
|
|
39
104
|
};
|
|
40
105
|
}
|
|
41
|
-
exports.protocolCheckRequestTransform = protocolCheckRequestTransform;
|
|
42
106
|
function redirectCheckRequestTransform() {
|
|
43
107
|
return (input, init) => {
|
|
44
108
|
const request = (0, fetch_js_1.asRequest)(input, init);
|
|
@@ -48,7 +112,6 @@ function redirectCheckRequestTransform() {
|
|
|
48
112
|
return request;
|
|
49
113
|
};
|
|
50
114
|
}
|
|
51
|
-
exports.redirectCheckRequestTransform = redirectCheckRequestTransform;
|
|
52
115
|
function requireHostHeaderTransform() {
|
|
53
116
|
return (input, init) => {
|
|
54
117
|
// Note that fetch() will automatically add the Host header from the URL and
|
|
@@ -65,7 +128,6 @@ function requireHostHeaderTransform() {
|
|
|
65
128
|
return request;
|
|
66
129
|
};
|
|
67
130
|
}
|
|
68
|
-
exports.requireHostHeaderTransform = requireHostHeaderTransform;
|
|
69
131
|
exports.DEFAULT_FORBIDDEN_DOMAIN_NAMES = [
|
|
70
132
|
'example.com',
|
|
71
133
|
'*.example.com',
|
|
@@ -102,5 +164,4 @@ function forbiddenDomainNameRequestTransform(denyList = exports.DEFAULT_FORBIDDE
|
|
|
102
164
|
return request;
|
|
103
165
|
};
|
|
104
166
|
}
|
|
105
|
-
exports.forbiddenDomainNameRequestTransform = forbiddenDomainNameRequestTransform;
|
|
106
167
|
//# sourceMappingURL=fetch-request.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-request.js","sourceRoot":"","sources":["../src/fetch-request.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"fetch-request.js","sourceRoot":"","sources":["../src/fetch-request.ts"],"names":[],"mappings":"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"}
|
package/dist/fetch-response.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { Transformer } from '@atproto-labs/pipe';
|
|
|
2
2
|
import type { ZodTypeAny, ParseParams, TypeOf } from 'zod';
|
|
3
3
|
import { FetchError } from './fetch-error.js';
|
|
4
4
|
import { Json } from './util.js';
|
|
5
|
-
export type
|
|
5
|
+
export type ResponseTransformer = Transformer<Response>;
|
|
6
6
|
export type ResponseMessageGetter = Transformer<Response, string | undefined>;
|
|
7
7
|
export declare class FetchResponseError extends FetchError {
|
|
8
8
|
readonly response: Response;
|
|
@@ -24,19 +24,19 @@ export declare function extractMime(response: Response): string | undefined;
|
|
|
24
24
|
* cloned.
|
|
25
25
|
*/
|
|
26
26
|
export declare function cancelBodyOnError<T>(transformer: Transformer<Response, T>, onCancellationError?: null | ((err: unknown) => void)): (response: Response) => Promise<T>;
|
|
27
|
-
export declare function fetchOkProcessor(customMessage?: string | ResponseMessageGetter):
|
|
27
|
+
export declare function fetchOkProcessor(customMessage?: string | ResponseMessageGetter): ResponseTransformer;
|
|
28
28
|
export declare function fetchOkTransformer(response: Response, customMessage?: string | ResponseMessageGetter): Promise<Response>;
|
|
29
|
-
export declare function fetchMaxSizeProcessor(maxBytes: number):
|
|
29
|
+
export declare function fetchMaxSizeProcessor(maxBytes: number): ResponseTransformer;
|
|
30
30
|
export declare function fetchResponseMaxSizeChecker(response: Response, maxBytes: number): Response;
|
|
31
31
|
export type MimeTypeCheckFn = (mimeType: string) => boolean;
|
|
32
32
|
export type MimeTypeCheck = string | RegExp | MimeTypeCheckFn;
|
|
33
|
-
export declare function fetchTypeProcessor(expectedMime: MimeTypeCheck, contentTypeRequired?: boolean):
|
|
33
|
+
export declare function fetchTypeProcessor(expectedMime: MimeTypeCheck, contentTypeRequired?: boolean): ResponseTransformer;
|
|
34
34
|
export declare function fetchResponseTypeChecker(response: Response, isExpectedMime: MimeTypeCheckFn, contentTypeRequired?: boolean): Promise<Response>;
|
|
35
35
|
export type ParsedJsonResponse<T = Json> = {
|
|
36
36
|
response: Response;
|
|
37
37
|
json: T;
|
|
38
38
|
};
|
|
39
|
-
export declare function
|
|
39
|
+
export declare function fetchResponseJsonTransformer<T = Json>(response: Response): Promise<ParsedJsonResponse<T>>;
|
|
40
40
|
export declare function fetchJsonProcessor<T = Json>(expectedMime?: MimeTypeCheck, contentTypeRequired?: boolean): Transformer<Response, ParsedJsonResponse<T>>;
|
|
41
41
|
export declare function fetchJsonZodProcessor<S extends ZodTypeAny>(schema: S, params?: Partial<ParseParams>): Transformer<ParsedJsonResponse, TypeOf<S>>;
|
|
42
42
|
//# sourceMappingURL=fetch-response.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-response.d.ts","sourceRoot":"","sources":["../src/fetch-response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAQ,MAAM,oBAAoB,CAAA;AAGtD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,KAAK,CAAA;AAE1D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C,OAAO,EACL,IAAI,EAML,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"fetch-response.d.ts","sourceRoot":"","sources":["../src/fetch-response.ts"],"names":[],"mappings":"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"}
|
package/dist/fetch-response.js
CHANGED
|
@@ -1,10 +1,40 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.FetchResponseError = void 0;
|
|
4
|
+
exports.peekJson = peekJson;
|
|
5
|
+
exports.checkLength = checkLength;
|
|
6
|
+
exports.extractLength = extractLength;
|
|
7
|
+
exports.extractMime = extractMime;
|
|
8
|
+
exports.cancelBodyOnError = cancelBodyOnError;
|
|
9
|
+
exports.fetchOkProcessor = fetchOkProcessor;
|
|
10
|
+
exports.fetchOkTransformer = fetchOkTransformer;
|
|
11
|
+
exports.fetchMaxSizeProcessor = fetchMaxSizeProcessor;
|
|
12
|
+
exports.fetchResponseMaxSizeChecker = fetchResponseMaxSizeChecker;
|
|
13
|
+
exports.fetchTypeProcessor = fetchTypeProcessor;
|
|
14
|
+
exports.fetchResponseTypeChecker = fetchResponseTypeChecker;
|
|
15
|
+
exports.fetchResponseJsonTransformer = fetchResponseJsonTransformer;
|
|
16
|
+
exports.fetchJsonProcessor = fetchJsonProcessor;
|
|
17
|
+
exports.fetchJsonZodProcessor = fetchJsonZodProcessor;
|
|
4
18
|
const pipe_1 = require("@atproto-labs/pipe");
|
|
5
19
|
const fetch_error_js_1 = require("./fetch-error.js");
|
|
6
20
|
const transformed_response_js_1 = require("./transformed-response.js");
|
|
7
21
|
const util_js_1 = require("./util.js");
|
|
22
|
+
/**
|
|
23
|
+
* media-type = type "/" subtype *( ";" parameter )
|
|
24
|
+
* type = token
|
|
25
|
+
* subtype = token
|
|
26
|
+
* token = 1*<any CHAR except CTLs or separators>
|
|
27
|
+
* separators = "(" | ")" | "<" | ">" | "@"
|
|
28
|
+
* | "," | ";" | ":" | "\" | <">
|
|
29
|
+
* | "/" | "[" | "]" | "?" | "="
|
|
30
|
+
* | "{" | "}" | SP | HT
|
|
31
|
+
* CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)>
|
|
32
|
+
* SP = <US-ASCII SP, space (32)>
|
|
33
|
+
* HT = <US-ASCII HT, horizontal-tab (9)>
|
|
34
|
+
* @note The type, subtype, and parameter attribute names are case-insensitive.
|
|
35
|
+
* @see {@link https://datatracker.ietf.org/doc/html/rfc2616#autoid-23}
|
|
36
|
+
*/
|
|
37
|
+
const JSON_MIME = /^application\/(?:[^()<>@,;:/[\]\\?={} \t]+\+)?json$/i;
|
|
8
38
|
class FetchResponseError extends fetch_error_js_1.FetchError {
|
|
9
39
|
constructor(response, statusCode = response.status, message = response.statusText, options) {
|
|
10
40
|
super(statusCode, message, options);
|
|
@@ -33,7 +63,7 @@ const extractResponseMessage = async (response) => {
|
|
|
33
63
|
if (mimeType === 'text/plain') {
|
|
34
64
|
return await response.text();
|
|
35
65
|
}
|
|
36
|
-
else if (
|
|
66
|
+
else if (JSON_MIME.test(mimeType)) {
|
|
37
67
|
const json = await response.json();
|
|
38
68
|
if (typeof json === 'string')
|
|
39
69
|
return json;
|
|
@@ -68,7 +98,6 @@ async function peekJson(response, maxSize = Infinity) {
|
|
|
68
98
|
// 3) Parse the JSON
|
|
69
99
|
return limitedResponse.json();
|
|
70
100
|
}
|
|
71
|
-
exports.peekJson = peekJson;
|
|
72
101
|
function checkLength(response, maxBytes) {
|
|
73
102
|
// Note: negation accounts for invalid value types (NaN, non numbers)
|
|
74
103
|
if (!(maxBytes >= 0)) {
|
|
@@ -80,7 +109,6 @@ function checkLength(response, maxBytes) {
|
|
|
80
109
|
}
|
|
81
110
|
return length;
|
|
82
111
|
}
|
|
83
|
-
exports.checkLength = checkLength;
|
|
84
112
|
function extractLength(response) {
|
|
85
113
|
const contentLength = response.headers.get('Content-Length');
|
|
86
114
|
if (contentLength == null)
|
|
@@ -94,14 +122,12 @@ function extractLength(response) {
|
|
|
94
122
|
}
|
|
95
123
|
return length;
|
|
96
124
|
}
|
|
97
|
-
exports.extractLength = extractLength;
|
|
98
125
|
function extractMime(response) {
|
|
99
126
|
const contentType = response.headers.get('Content-Type');
|
|
100
127
|
if (contentType == null)
|
|
101
128
|
return undefined;
|
|
102
129
|
return contentType.split(';', 1)[0].trim();
|
|
103
130
|
}
|
|
104
|
-
exports.extractMime = extractMime;
|
|
105
131
|
/**
|
|
106
132
|
* If the transformer results in an error, ensure that the response body is
|
|
107
133
|
* consumed as, in some environments (Node 👀), the response will not
|
|
@@ -123,19 +149,16 @@ function cancelBodyOnError(transformer, onCancellationError = util_js_1.logCance
|
|
|
123
149
|
}
|
|
124
150
|
};
|
|
125
151
|
}
|
|
126
|
-
exports.cancelBodyOnError = cancelBodyOnError;
|
|
127
152
|
function fetchOkProcessor(customMessage) {
|
|
128
153
|
return cancelBodyOnError((response) => {
|
|
129
154
|
return fetchOkTransformer(response, customMessage);
|
|
130
155
|
});
|
|
131
156
|
}
|
|
132
|
-
exports.fetchOkProcessor = fetchOkProcessor;
|
|
133
157
|
async function fetchOkTransformer(response, customMessage) {
|
|
134
158
|
if (response.ok)
|
|
135
159
|
return response;
|
|
136
160
|
throw await FetchResponseError.from(response, customMessage);
|
|
137
161
|
}
|
|
138
|
-
exports.fetchOkTransformer = fetchOkTransformer;
|
|
139
162
|
function fetchMaxSizeProcessor(maxBytes) {
|
|
140
163
|
if (maxBytes === Infinity)
|
|
141
164
|
return (response) => response;
|
|
@@ -146,7 +169,6 @@ function fetchMaxSizeProcessor(maxBytes) {
|
|
|
146
169
|
return fetchResponseMaxSizeChecker(response, maxBytes);
|
|
147
170
|
});
|
|
148
171
|
}
|
|
149
|
-
exports.fetchMaxSizeProcessor = fetchMaxSizeProcessor;
|
|
150
172
|
function fetchResponseMaxSizeChecker(response, maxBytes) {
|
|
151
173
|
if (maxBytes === Infinity)
|
|
152
174
|
return response;
|
|
@@ -158,7 +180,6 @@ function fetchResponseMaxSizeChecker(response, maxBytes) {
|
|
|
158
180
|
const transform = new util_js_1.MaxBytesTransformStream(maxBytes);
|
|
159
181
|
return new transformed_response_js_1.TransformedResponse(response, transform);
|
|
160
182
|
}
|
|
161
|
-
exports.fetchResponseMaxSizeChecker = fetchResponseMaxSizeChecker;
|
|
162
183
|
function fetchTypeProcessor(expectedMime, contentTypeRequired = true) {
|
|
163
184
|
const isExpected = typeof expectedMime === 'string'
|
|
164
185
|
? (mimeType) => mimeType === expectedMime
|
|
@@ -169,11 +190,10 @@ function fetchTypeProcessor(expectedMime, contentTypeRequired = true) {
|
|
|
169
190
|
return fetchResponseTypeChecker(response, isExpected, contentTypeRequired);
|
|
170
191
|
});
|
|
171
192
|
}
|
|
172
|
-
exports.fetchTypeProcessor = fetchTypeProcessor;
|
|
173
193
|
async function fetchResponseTypeChecker(response, isExpectedMime, contentTypeRequired = true) {
|
|
174
194
|
const mimeType = extractMime(response);
|
|
175
195
|
if (mimeType) {
|
|
176
|
-
if (!isExpectedMime(mimeType)) {
|
|
196
|
+
if (!isExpectedMime(mimeType.toLowerCase())) {
|
|
177
197
|
throw await FetchResponseError.from(response, `Unexpected response Content-Type (${mimeType})`, 502);
|
|
178
198
|
}
|
|
179
199
|
}
|
|
@@ -182,8 +202,7 @@ async function fetchResponseTypeChecker(response, isExpectedMime, contentTypeReq
|
|
|
182
202
|
}
|
|
183
203
|
return response;
|
|
184
204
|
}
|
|
185
|
-
|
|
186
|
-
async function fetchResponseJsonTranformer(response) {
|
|
205
|
+
async function fetchResponseJsonTransformer(response) {
|
|
187
206
|
try {
|
|
188
207
|
const json = (await response.json());
|
|
189
208
|
return { response, json };
|
|
@@ -192,13 +211,10 @@ async function fetchResponseJsonTranformer(response) {
|
|
|
192
211
|
throw new FetchResponseError(response, 502, 'Unable to parse response as JSON', { cause });
|
|
193
212
|
}
|
|
194
213
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
return (0, pipe_1.pipe)(fetchTypeProcessor(expectedMime, contentTypeRequired), cancelBodyOnError((fetchResponseJsonTranformer)));
|
|
214
|
+
function fetchJsonProcessor(expectedMime = JSON_MIME, contentTypeRequired = true) {
|
|
215
|
+
return (0, pipe_1.pipe)(fetchTypeProcessor(expectedMime, contentTypeRequired), cancelBodyOnError((fetchResponseJsonTransformer)));
|
|
198
216
|
}
|
|
199
|
-
exports.fetchJsonProcessor = fetchJsonProcessor;
|
|
200
217
|
function fetchJsonZodProcessor(schema, params) {
|
|
201
218
|
return async (jsonResponse) => schema.parseAsync(jsonResponse.json, params);
|
|
202
219
|
}
|
|
203
|
-
exports.fetchJsonZodProcessor = fetchJsonZodProcessor;
|
|
204
220
|
//# sourceMappingURL=fetch-response.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-response.js","sourceRoot":"","sources":["../src/fetch-response.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"fetch-response.js","sourceRoot":"","sources":["../src/fetch-response.ts"],"names":[],"mappings":"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"}
|
package/dist/fetch-wrap.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-wrap.d.ts","sourceRoot":"","sources":["../src/fetch-wrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAwB,MAAM,YAAY,CAAA;AAItE,KAAK,KAAK,CAAC,IAAI,SAAS,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;AAEhF,wBAAgB,WAAW,CAAC,CAAC,GAAG,YAAY,EAAE,EAC5C,KAAoC,EACpC,UAAwD,EACxD,WAA6E,EAC7E,QAAsE,GACvE;;;;;CAAA,YAgDA;AAED,eAAO,MAAM,UAAU
|
|
1
|
+
{"version":3,"file":"fetch-wrap.d.ts","sourceRoot":"","sources":["../src/fetch-wrap.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,YAAY,EAAwB,MAAM,YAAY,CAAA;AAItE,KAAK,KAAK,CAAC,IAAI,SAAS,OAAO,EAAE,IAAI,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAA;AAEhF,wBAAgB,WAAW,CAAC,CAAC,GAAG,YAAY,EAAE,EAC5C,KAAoC,EACpC,UAAwD,EACxD,WAA6E,EAC7E,QAAsE,GACvE;;;;;CAAA,YAgDA;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,2CAEnB,KAAK,CAAC,CAAC,CAAC,KACd,KAAK,CAAC,CAAC,CAqCT,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAgB,SAAS,CAAC,CAAC,GAAG,YAAY,EACxC,KAAK,GAAE,KAAK,CAAC,CAAC,CAAoB,EAClC,OAAO,GAAE,CAAmB;;EAS7B"}
|
package/dist/fetch-wrap.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.timedFetch = void 0;
|
|
4
|
+
exports.loggedFetch = loggedFetch;
|
|
5
|
+
exports.bindFetch = bindFetch;
|
|
4
6
|
const fetch_request_js_1 = require("./fetch-request.js");
|
|
5
7
|
const fetch_js_1 = require("./fetch.js");
|
|
6
8
|
const transformed_response_js_1 = require("./transformed-response.js");
|
|
@@ -41,7 +43,6 @@ function loggedFetch({ fetch = globalThis.fetch, logRequest = true, logResponse
|
|
|
41
43
|
}
|
|
42
44
|
});
|
|
43
45
|
}
|
|
44
|
-
exports.loggedFetch = loggedFetch;
|
|
45
46
|
const timedFetch = (timeout = 60e3, fetch = globalThis.fetch) => {
|
|
46
47
|
if (timeout === Infinity)
|
|
47
48
|
return fetch;
|
|
@@ -120,5 +121,4 @@ function bindFetch(fetch = globalThis.fetch, context = globalThis) {
|
|
|
120
121
|
}
|
|
121
122
|
});
|
|
122
123
|
}
|
|
123
|
-
exports.bindFetch = bindFetch;
|
|
124
124
|
//# sourceMappingURL=fetch-wrap.js.map
|
package/dist/fetch-wrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch-wrap.js","sourceRoot":"","sources":["../src/fetch-wrap.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"fetch-wrap.js","sourceRoot":"","sources":["../src/fetch-wrap.ts"],"names":[],"mappings":"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"}
|
package/dist/fetch.js
CHANGED
|
@@ -1,16 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.toRequestTransformer = toRequestTransformer;
|
|
4
|
+
exports.asRequest = asRequest;
|
|
4
5
|
function toRequestTransformer(requestTransformer) {
|
|
5
6
|
return function (input, init) {
|
|
6
7
|
return requestTransformer.call(this, asRequest(input, init));
|
|
7
8
|
};
|
|
8
9
|
}
|
|
9
|
-
exports.toRequestTransformer = toRequestTransformer;
|
|
10
10
|
function asRequest(input, init) {
|
|
11
11
|
if (!init && input instanceof Request)
|
|
12
12
|
return input;
|
|
13
13
|
return new Request(input, init);
|
|
14
14
|
}
|
|
15
|
-
exports.asRequest = asRequest;
|
|
16
15
|
//# sourceMappingURL=fetch.js.map
|
package/dist/fetch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":";;AAqBA,oDASC;AAED,8BAMC;AAjBD,SAAgB,oBAAoB,CAClC,kBAAkD;IAKlD,OAAO,UAAmB,KAAK,EAAE,IAAI;QACnC,OAAO,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAA;IAC9D,CAAC,CAAA;AACH,CAAC;AAED,SAAgB,SAAS,CACvB,KAA6B,EAC7B,IAAkB;IAElB,IAAI,CAAC,IAAI,IAAI,KAAK,YAAY,OAAO;QAAE,OAAO,KAAK,CAAA;IACnD,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;AACjC,CAAC"}
|
package/dist/util.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AACzD,MAAM,MAAM,IAAI,GAAG,UAAU,GAAG,IAAI,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAA;CAAE,CAAA;AAC5E,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAA;AAChD,MAAM,MAAM,SAAS,GAAG,IAAI,EAAE,CAAA;AAE9B,MAAM,MAAM,qBAAqB,CAC/B,CAAC,EACD,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,IAC3B,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GACxC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAA;CACpC,GACD,KAAK,CAAA;AAET,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,WAQpC;AAGD,eAAO,MAAM,QAAQ,
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAA;AACzD,MAAM,MAAM,IAAI,GAAG,UAAU,GAAG,IAAI,EAAE,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAA;CAAE,CAAA;AAC5E,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAA;AAChD,MAAM,MAAM,SAAS,GAAG,IAAI,EAAE,CAAA;AAE9B,MAAM,MAAM,qBAAqB,CAC/B,CAAC,EACD,EAAE,SAAS,CAAC,GAAG,CAAC,EAAE,GAAG,KAAK,GAAG,IAC3B,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GACxC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,CAAA;CACpC,GACD,KAAK,CAAA;AAET,wBAAgB,IAAI,CAAC,QAAQ,EAAE,MAAM,WAQpC;AAGD,eAAO,MAAM,QAAQ,GAAI,CAAC,KAAK,CAAC,8HAe/B,CAAA;AAED,eAAO,MAAM,QAAQ,GAAI,CAAC,KAAK,CAAC,6BAA4C,CAAA;AAE5E,qBAAa,uBAAwB,SAAQ,eAAe,CAC1D,UAAU,EACV,UAAU,CACX;gBACa,QAAQ,EAAE,MAAM;CAqB7B;AAGD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,UAGlD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,IAAI,EACV,mBAAmB,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC,GACrD,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAgB,oBAAoB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAEvD;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,IAAI,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,mBAQxE;AA2BD,eAAO,MAAM,UAAU,UAAW,OAAO,GAAG,MAAM,GAAG,GAAG,QAK9B,CAAA"}
|
package/dist/util.js
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
// @TODO: Move some of these to a shared package ?
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.extractUrl = exports.
|
|
4
|
+
exports.extractUrl = exports.MaxBytesTransformStream = exports.ifString = exports.ifObject = void 0;
|
|
5
|
+
exports.isIp = isIp;
|
|
6
|
+
exports.padLines = padLines;
|
|
7
|
+
exports.cancelBody = cancelBody;
|
|
8
|
+
exports.logCancellationError = logCancellationError;
|
|
9
|
+
exports.stringifyMessage = stringifyMessage;
|
|
5
10
|
function isIp(hostname) {
|
|
6
11
|
// IPv4
|
|
7
12
|
if (hostname.match(/^\d+\.\d+\.\d+\.\d+$/))
|
|
@@ -11,7 +16,6 @@ function isIp(hostname) {
|
|
|
11
16
|
return true;
|
|
12
17
|
return false;
|
|
13
18
|
}
|
|
14
|
-
exports.isIp = isIp;
|
|
15
19
|
const plainObjectProto = Object.prototype;
|
|
16
20
|
const ifObject = (v) => {
|
|
17
21
|
if (typeof v === 'object' && v != null && !Array.isArray(v)) {
|
|
@@ -52,7 +56,6 @@ function padLines(input, pad) {
|
|
|
52
56
|
return input;
|
|
53
57
|
return pad + input.replace(LINE_BREAK, `$&${pad}`);
|
|
54
58
|
}
|
|
55
|
-
exports.padLines = padLines;
|
|
56
59
|
/**
|
|
57
60
|
* @param [onCancellationError] - Callback that will trigger to asynchronously
|
|
58
61
|
* handle any error that occurs while cancelling the response body. Providing
|
|
@@ -101,11 +104,9 @@ async function cancelBody(body, onCancellationError) {
|
|
|
101
104
|
}
|
|
102
105
|
}
|
|
103
106
|
}
|
|
104
|
-
exports.cancelBody = cancelBody;
|
|
105
107
|
function logCancellationError(err) {
|
|
106
108
|
console.warn('Failed to cancel response body', err);
|
|
107
109
|
}
|
|
108
|
-
exports.logCancellationError = logCancellationError;
|
|
109
110
|
async function stringifyMessage(input) {
|
|
110
111
|
try {
|
|
111
112
|
const headers = stringifyHeaders(input.headers);
|
|
@@ -116,7 +117,6 @@ async function stringifyMessage(input) {
|
|
|
116
117
|
void cancelBody(input, 'log');
|
|
117
118
|
}
|
|
118
119
|
}
|
|
119
|
-
exports.stringifyMessage = stringifyMessage;
|
|
120
120
|
function stringifyHeaders(headers) {
|
|
121
121
|
return Array.from(headers)
|
|
122
122
|
.map(([name, value]) => `${name}: ${value}`)
|
package/dist/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";AAAA,kDAAkD;;;AAgBlD,SAAgB,IAAI,CAAC,QAAgB;IACnC,OAAO;IACP,IAAI,QAAQ,CAAC,KAAK,CAAC,sBAAsB,CAAC;QAAE,OAAO,IAAI,CAAA;IAEvD,OAAO;IACP,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAA;IAEnE,OAAO,KAAK,CAAA;AACd,CAAC;
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atproto-labs/fetch",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Isomorphic wrapper utilities for fetch API",
|
|
6
6
|
"keywords": [
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
"@atproto-labs/pipe": "0.1.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
-
"typescript": "^5.
|
|
29
|
+
"typescript": "^5.6.3"
|
|
30
30
|
},
|
|
31
31
|
"optionalDependencies": {
|
|
32
32
|
"zod": "^3.23.8"
|
package/src/fetch-error.ts
CHANGED
|
@@ -1,59 +1,13 @@
|
|
|
1
|
-
export class FetchError extends Error {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const info = extractInfo(extractRootCause(options?.cause))
|
|
7
|
-
statusCode = statusCode ?? info[0]
|
|
8
|
-
message = message || info[1]
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
super(message, options)
|
|
12
|
-
|
|
13
|
-
this.statusCode = statusCode
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function extractRootCause(err: unknown): unknown {
|
|
18
|
-
// Unwrap the Network error from undici (i.e. Node's internal fetch() implementation)
|
|
19
|
-
// https://github.com/nodejs/undici/blob/3274c975947ce11a08508743df026f73598bfead/lib/web/fetch/index.js#L223-L228
|
|
20
|
-
if (
|
|
21
|
-
err instanceof TypeError &&
|
|
22
|
-
err.message === 'fetch failed' &&
|
|
23
|
-
err.cause !== undefined
|
|
1
|
+
export abstract class FetchError extends Error {
|
|
2
|
+
constructor(
|
|
3
|
+
public readonly statusCode: number,
|
|
4
|
+
message?: string,
|
|
5
|
+
options?: ErrorOptions,
|
|
24
6
|
) {
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
return err
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
function extractInfo(err: unknown): [statusCode: number, message: string] {
|
|
32
|
-
if (typeof err === 'string' && err.length > 0) {
|
|
33
|
-
return [500, err]
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
if (!(err instanceof Error)) {
|
|
37
|
-
return [500, 'Failed to fetch']
|
|
7
|
+
super(message, options)
|
|
38
8
|
}
|
|
39
9
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
switch (true) {
|
|
43
|
-
case code === 'ENOTFOUND':
|
|
44
|
-
return [400, 'Invalid hostname']
|
|
45
|
-
case code === 'ECONNREFUSED':
|
|
46
|
-
return [502, 'Connection refused']
|
|
47
|
-
case code === 'DEPTH_ZERO_SELF_SIGNED_CERT':
|
|
48
|
-
return [502, 'Self-signed certificate']
|
|
49
|
-
case code.startsWith('ERR_TLS'):
|
|
50
|
-
return [502, 'TLS error']
|
|
51
|
-
case code.startsWith('ECONN'):
|
|
52
|
-
return [502, 'Connection error']
|
|
53
|
-
default:
|
|
54
|
-
return [500, `${code} error`]
|
|
55
|
-
}
|
|
10
|
+
get expose() {
|
|
11
|
+
return true
|
|
56
12
|
}
|
|
57
|
-
|
|
58
|
-
return [500, err.message]
|
|
59
13
|
}
|
package/src/fetch-request.ts
CHANGED
|
@@ -9,15 +9,87 @@ export class FetchRequestError extends FetchError {
|
|
|
9
9
|
message?: string,
|
|
10
10
|
options?: ErrorOptions,
|
|
11
11
|
) {
|
|
12
|
+
if (statusCode == null || !message) {
|
|
13
|
+
const info = extractInfo(extractRootCause(options?.cause))
|
|
14
|
+
statusCode ??= info[0]
|
|
15
|
+
message ||= info[1]
|
|
16
|
+
}
|
|
17
|
+
|
|
12
18
|
super(statusCode, message, options)
|
|
13
19
|
}
|
|
14
20
|
|
|
21
|
+
get expose() {
|
|
22
|
+
// A 500 request error means that the request was not made due to an infra,
|
|
23
|
+
// programming or server side issue. The message should no be exposed to
|
|
24
|
+
// downstream clients.
|
|
25
|
+
return this.statusCode !== 500
|
|
26
|
+
}
|
|
27
|
+
|
|
15
28
|
static from(request: Request, cause: unknown): FetchRequestError {
|
|
16
29
|
if (cause instanceof FetchRequestError) return cause
|
|
17
30
|
return new FetchRequestError(request, undefined, undefined, { cause })
|
|
18
31
|
}
|
|
19
32
|
}
|
|
20
33
|
|
|
34
|
+
function extractRootCause(err: unknown): unknown {
|
|
35
|
+
// Unwrap the Network error from undici (i.e. Node's internal fetch() implementation)
|
|
36
|
+
// https://github.com/nodejs/undici/blob/3274c975947ce11a08508743df026f73598bfead/lib/web/fetch/index.js#L223-L228
|
|
37
|
+
if (
|
|
38
|
+
err instanceof TypeError &&
|
|
39
|
+
err.message === 'fetch failed' &&
|
|
40
|
+
err.cause !== undefined
|
|
41
|
+
) {
|
|
42
|
+
return err.cause
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return err
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
function extractInfo(err: unknown): [statusCode: number, message: string] {
|
|
49
|
+
if (typeof err === 'string' && err.length > 0) {
|
|
50
|
+
return [500, err]
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (!(err instanceof Error)) {
|
|
54
|
+
return [500, 'Failed to fetch']
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Undici fetch() "network" errors
|
|
58
|
+
switch (err.message) {
|
|
59
|
+
case 'failed to fetch the data URL':
|
|
60
|
+
return [400, err.message]
|
|
61
|
+
case 'unexpected redirect':
|
|
62
|
+
case 'cors failure':
|
|
63
|
+
case 'blocked':
|
|
64
|
+
case 'proxy authentication required':
|
|
65
|
+
// These cases could be represented either as a 4xx user error (invalid
|
|
66
|
+
// URL provided), or as a 5xx server error (server didn't behave as
|
|
67
|
+
// expected).
|
|
68
|
+
return [502, err.message]
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// NodeJS errors
|
|
72
|
+
const code = err['code']
|
|
73
|
+
if (typeof code === 'string') {
|
|
74
|
+
switch (true) {
|
|
75
|
+
case code === 'ENOTFOUND':
|
|
76
|
+
return [400, 'Invalid hostname']
|
|
77
|
+
case code === 'ECONNREFUSED':
|
|
78
|
+
return [502, 'Connection refused']
|
|
79
|
+
case code === 'DEPTH_ZERO_SELF_SIGNED_CERT':
|
|
80
|
+
return [502, 'Self-signed certificate']
|
|
81
|
+
case code.startsWith('ERR_TLS'):
|
|
82
|
+
return [502, 'TLS error']
|
|
83
|
+
case code.startsWith('ECONN'):
|
|
84
|
+
return [502, 'Connection error']
|
|
85
|
+
default:
|
|
86
|
+
return [500, `${code} error`]
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
return [500, err.message]
|
|
91
|
+
}
|
|
92
|
+
|
|
21
93
|
export function protocolCheckRequestTransform(protocols: {
|
|
22
94
|
'about:'?: boolean
|
|
23
95
|
'blob:'?: boolean
|
package/src/fetch-response.ts
CHANGED
|
@@ -14,7 +14,24 @@ import {
|
|
|
14
14
|
logCancellationError,
|
|
15
15
|
} from './util.js'
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
/**
|
|
18
|
+
* media-type = type "/" subtype *( ";" parameter )
|
|
19
|
+
* type = token
|
|
20
|
+
* subtype = token
|
|
21
|
+
* token = 1*<any CHAR except CTLs or separators>
|
|
22
|
+
* separators = "(" | ")" | "<" | ">" | "@"
|
|
23
|
+
* | "," | ";" | ":" | "\" | <">
|
|
24
|
+
* | "/" | "[" | "]" | "?" | "="
|
|
25
|
+
* | "{" | "}" | SP | HT
|
|
26
|
+
* CTL = <any US-ASCII control character (octets 0 - 31) and DEL (127)>
|
|
27
|
+
* SP = <US-ASCII SP, space (32)>
|
|
28
|
+
* HT = <US-ASCII HT, horizontal-tab (9)>
|
|
29
|
+
* @note The type, subtype, and parameter attribute names are case-insensitive.
|
|
30
|
+
* @see {@link https://datatracker.ietf.org/doc/html/rfc2616#autoid-23}
|
|
31
|
+
*/
|
|
32
|
+
const JSON_MIME = /^application\/(?:[^()<>@,;:/[\]\\?={} \t]+\+)?json$/i
|
|
33
|
+
|
|
34
|
+
export type ResponseTransformer = Transformer<Response>
|
|
18
35
|
export type ResponseMessageGetter = Transformer<Response, string | undefined>
|
|
19
36
|
|
|
20
37
|
export class FetchResponseError extends FetchError {
|
|
@@ -51,7 +68,7 @@ const extractResponseMessage: ResponseMessageGetter = async (response) => {
|
|
|
51
68
|
try {
|
|
52
69
|
if (mimeType === 'text/plain') {
|
|
53
70
|
return await response.text()
|
|
54
|
-
} else if (
|
|
71
|
+
} else if (JSON_MIME.test(mimeType)) {
|
|
55
72
|
const json: unknown = await response.json()
|
|
56
73
|
|
|
57
74
|
if (typeof json === 'string') return json
|
|
@@ -155,7 +172,7 @@ export function cancelBodyOnError<T>(
|
|
|
155
172
|
|
|
156
173
|
export function fetchOkProcessor(
|
|
157
174
|
customMessage?: string | ResponseMessageGetter,
|
|
158
|
-
):
|
|
175
|
+
): ResponseTransformer {
|
|
159
176
|
return cancelBodyOnError((response) => {
|
|
160
177
|
return fetchOkTransformer(response, customMessage)
|
|
161
178
|
})
|
|
@@ -169,7 +186,7 @@ export async function fetchOkTransformer(
|
|
|
169
186
|
throw await FetchResponseError.from(response, customMessage)
|
|
170
187
|
}
|
|
171
188
|
|
|
172
|
-
export function fetchMaxSizeProcessor(maxBytes: number):
|
|
189
|
+
export function fetchMaxSizeProcessor(maxBytes: number): ResponseTransformer {
|
|
173
190
|
if (maxBytes === Infinity) return (response) => response
|
|
174
191
|
if (!Number.isFinite(maxBytes) || maxBytes < 0) {
|
|
175
192
|
throw new TypeError('maxBytes must be a 0, Infinity or a positive number')
|
|
@@ -200,7 +217,7 @@ export type MimeTypeCheck = string | RegExp | MimeTypeCheckFn
|
|
|
200
217
|
export function fetchTypeProcessor(
|
|
201
218
|
expectedMime: MimeTypeCheck,
|
|
202
219
|
contentTypeRequired = true,
|
|
203
|
-
):
|
|
220
|
+
): ResponseTransformer {
|
|
204
221
|
const isExpected: MimeTypeCheckFn =
|
|
205
222
|
typeof expectedMime === 'string'
|
|
206
223
|
? (mimeType) => mimeType === expectedMime
|
|
@@ -220,7 +237,7 @@ export async function fetchResponseTypeChecker(
|
|
|
220
237
|
): Promise<Response> {
|
|
221
238
|
const mimeType = extractMime(response)
|
|
222
239
|
if (mimeType) {
|
|
223
|
-
if (!isExpectedMime(mimeType)) {
|
|
240
|
+
if (!isExpectedMime(mimeType.toLowerCase())) {
|
|
224
241
|
throw await FetchResponseError.from(
|
|
225
242
|
response,
|
|
226
243
|
`Unexpected response Content-Type (${mimeType})`,
|
|
@@ -243,7 +260,7 @@ export type ParsedJsonResponse<T = Json> = {
|
|
|
243
260
|
json: T
|
|
244
261
|
}
|
|
245
262
|
|
|
246
|
-
export async function
|
|
263
|
+
export async function fetchResponseJsonTransformer<T = Json>(
|
|
247
264
|
response: Response,
|
|
248
265
|
): Promise<ParsedJsonResponse<T>> {
|
|
249
266
|
try {
|
|
@@ -260,12 +277,12 @@ export async function fetchResponseJsonTranformer<T = Json>(
|
|
|
260
277
|
}
|
|
261
278
|
|
|
262
279
|
export function fetchJsonProcessor<T = Json>(
|
|
263
|
-
expectedMime: MimeTypeCheck =
|
|
280
|
+
expectedMime: MimeTypeCheck = JSON_MIME,
|
|
264
281
|
contentTypeRequired = true,
|
|
265
282
|
): Transformer<Response, ParsedJsonResponse<T>> {
|
|
266
283
|
return pipe(
|
|
267
284
|
fetchTypeProcessor(expectedMime, contentTypeRequired),
|
|
268
|
-
cancelBodyOnError(
|
|
285
|
+
cancelBodyOnError(fetchResponseJsonTransformer<T>),
|
|
269
286
|
)
|
|
270
287
|
}
|
|
271
288
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"root":["./src/fetch-error.ts","./src/fetch-request.ts","./src/fetch-response.ts","./src/fetch-wrap.ts","./src/fetch.ts","./src/index.ts","./src/transformed-response.ts","./src/util.ts"],"version":"5.6.3"}
|