@lodestar/utils 1.30.0-dev.c91cd9c141 → 1.30.0-dev.d85e73aa12
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/lib/fetch.d.ts +74 -0
- package/lib/fetch.js +68 -0
- package/lib/fetch.js.map +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/timeout.js +4 -1
- package/lib/timeout.js.map +1 -1
- package/package.json +3 -3
package/lib/fetch.d.ts
ADDED
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native fetch with transparent and consistent error handling
|
|
3
|
+
*
|
|
4
|
+
* [MDN Reference](https://developer.mozilla.org/docs/Web/API/fetch)
|
|
5
|
+
*/
|
|
6
|
+
declare function wrappedFetch(url: string | URL, init?: RequestInit): Promise<Response>;
|
|
7
|
+
export { wrappedFetch as fetch };
|
|
8
|
+
export declare function isFetchError(e: unknown): e is FetchError;
|
|
9
|
+
export type FetchErrorType = "failed" | "input" | "aborted" | "timeout" | "unknown";
|
|
10
|
+
type FetchErrorCause = NativeFetchFailedError["cause"] | NativeFetchInputError["cause"];
|
|
11
|
+
export declare class FetchError extends Error {
|
|
12
|
+
type: FetchErrorType;
|
|
13
|
+
code: string;
|
|
14
|
+
cause?: FetchErrorCause;
|
|
15
|
+
constructor(url: string | URL, e: unknown);
|
|
16
|
+
}
|
|
17
|
+
type NativeFetchError = TypeError & {
|
|
18
|
+
cause: Error & {
|
|
19
|
+
code?: string;
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* ```
|
|
24
|
+
* TypeError: fetch failed
|
|
25
|
+
* cause: Error: connect ECONNREFUSED 127.0.0.1:9596
|
|
26
|
+
* errno: -111,
|
|
27
|
+
* code: 'ECONNREFUSED',
|
|
28
|
+
* syscall: 'connect',
|
|
29
|
+
* address: '127.0.0.1',
|
|
30
|
+
* port: 9596
|
|
31
|
+
* ---------------------------
|
|
32
|
+
* TypeError: fetch failed
|
|
33
|
+
* cause: Error: getaddrinfo ENOTFOUND non-existent-domain
|
|
34
|
+
* errno: -3008,
|
|
35
|
+
* code: 'ENOTFOUND',
|
|
36
|
+
* syscall: 'getaddrinfo',
|
|
37
|
+
* hostname: 'non-existent-domain'
|
|
38
|
+
* ---------------------------
|
|
39
|
+
* TypeError: fetch failed
|
|
40
|
+
* cause: SocketError: other side closed
|
|
41
|
+
* code: 'UND_ERR_SOCKET',
|
|
42
|
+
* socket: {}
|
|
43
|
+
* ---------------------------
|
|
44
|
+
* TypeError: fetch failed
|
|
45
|
+
* cause: Error: unknown scheme
|
|
46
|
+
* [cause]: undefined
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
type NativeFetchFailedError = NativeFetchError & {
|
|
50
|
+
message: "fetch failed";
|
|
51
|
+
cause: {
|
|
52
|
+
errno?: string;
|
|
53
|
+
syscall?: string;
|
|
54
|
+
address?: string;
|
|
55
|
+
port?: string;
|
|
56
|
+
hostname?: string;
|
|
57
|
+
socket?: object;
|
|
58
|
+
[prop: string]: unknown;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
/**
|
|
62
|
+
* ```
|
|
63
|
+
* TypeError: Failed to parse URL from invalid-url
|
|
64
|
+
* [cause]: TypeError [ERR_INVALID_URL]: Invalid URL
|
|
65
|
+
* input: 'invalid-url',
|
|
66
|
+
* code: 'ERR_INVALID_URL'
|
|
67
|
+
* ```
|
|
68
|
+
*/
|
|
69
|
+
type NativeFetchInputError = NativeFetchError & {
|
|
70
|
+
cause: {
|
|
71
|
+
input: unknown;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=fetch.d.ts.map
|
package/lib/fetch.js
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Native fetch with transparent and consistent error handling
|
|
3
|
+
*
|
|
4
|
+
* [MDN Reference](https://developer.mozilla.org/docs/Web/API/fetch)
|
|
5
|
+
*/
|
|
6
|
+
async function wrappedFetch(url, init) {
|
|
7
|
+
try {
|
|
8
|
+
// This function wraps global `fetch` which should only be directly called here
|
|
9
|
+
// biome-ignore lint/style/noRestrictedGlobals: <explanation>
|
|
10
|
+
return await fetch(url, init);
|
|
11
|
+
}
|
|
12
|
+
catch (e) {
|
|
13
|
+
throw new FetchError(url, e);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export { wrappedFetch as fetch };
|
|
17
|
+
export function isFetchError(e) {
|
|
18
|
+
return e instanceof FetchError;
|
|
19
|
+
}
|
|
20
|
+
export class FetchError extends Error {
|
|
21
|
+
constructor(url, e) {
|
|
22
|
+
if (isNativeFetchFailedError(e)) {
|
|
23
|
+
super(`Request to ${url.toString()} failed, reason: ${e.cause.message}`);
|
|
24
|
+
this.type = "failed";
|
|
25
|
+
this.code = e.cause.code || "ERR_FETCH_FAILED";
|
|
26
|
+
this.cause = e.cause;
|
|
27
|
+
}
|
|
28
|
+
else if (isNativeFetchInputError(e)) {
|
|
29
|
+
// For input errors the e.message is more detailed
|
|
30
|
+
super(e.message);
|
|
31
|
+
this.type = "input";
|
|
32
|
+
this.code = e.cause.code || "ERR_INVALID_INPUT";
|
|
33
|
+
this.cause = e.cause;
|
|
34
|
+
}
|
|
35
|
+
else if (isNativeFetchAbortError(e)) {
|
|
36
|
+
super(`Request to ${url.toString()} was aborted`);
|
|
37
|
+
this.type = "aborted";
|
|
38
|
+
this.code = "ERR_ABORTED";
|
|
39
|
+
}
|
|
40
|
+
else if (isNativeFetchTimeoutError(e)) {
|
|
41
|
+
super(`Request to ${url.toString()} timed out`);
|
|
42
|
+
this.type = "timeout";
|
|
43
|
+
this.code = "ERR_TIMEOUT";
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
super(e.message);
|
|
47
|
+
this.type = "unknown";
|
|
48
|
+
this.code = "ERR_UNKNOWN";
|
|
49
|
+
}
|
|
50
|
+
this.name = this.constructor.name;
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
function isNativeFetchError(e) {
|
|
54
|
+
return e instanceof TypeError && e.cause instanceof Error;
|
|
55
|
+
}
|
|
56
|
+
function isNativeFetchFailedError(e) {
|
|
57
|
+
return isNativeFetchError(e) && e.message === "fetch failed";
|
|
58
|
+
}
|
|
59
|
+
function isNativeFetchInputError(e) {
|
|
60
|
+
return isNativeFetchError(e) && e.cause.input !== undefined;
|
|
61
|
+
}
|
|
62
|
+
function isNativeFetchAbortError(e) {
|
|
63
|
+
return e instanceof DOMException && e.name === "AbortError";
|
|
64
|
+
}
|
|
65
|
+
function isNativeFetchTimeoutError(e) {
|
|
66
|
+
return e instanceof DOMException && e.name === "TimeoutError";
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=fetch.js.map
|
package/lib/fetch.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../src/fetch.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,KAAK,UAAU,YAAY,CAAC,GAAiB,EAAE,IAAkB;IAC/D,IAAI,CAAC;QACH,+EAA+E;QAC/E,6DAA6D;QAC7D,OAAO,MAAM,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,OAAO,EAAC,YAAY,IAAI,KAAK,EAAC,CAAC;AAE/B,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,OAAO,CAAC,YAAY,UAAU,CAAC;AACjC,CAAC;AAMD,MAAM,OAAO,UAAW,SAAQ,KAAK;IAKnC,YAAY,GAAiB,EAAE,CAAU;QACvC,IAAI,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;YAChC,KAAK,CAAC,cAAc,GAAG,CAAC,QAAQ,EAAE,oBAAoB,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACzE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC;YACrB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,kBAAkB,CAAC;YAC/C,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACvB,CAAC;aAAM,IAAI,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,kDAAkD;YAClD,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;YACjB,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;YACpB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,mBAAmB,CAAC;YAChD,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACvB,CAAC;aAAM,IAAI,uBAAuB,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,KAAK,CAAC,cAAc,GAAG,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YAClD,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC5B,CAAC;aAAM,IAAI,yBAAyB,CAAC,CAAC,CAAC,EAAE,CAAC;YACxC,KAAK,CAAC,cAAc,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;YAChD,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC5B,CAAC;aAAM,CAAC;YACN,KAAK,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;YAC5B,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;YACtB,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC5B,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;IACpC,CAAC;CACF;AAgFD,SAAS,kBAAkB,CAAC,CAAU;IACpC,OAAO,CAAC,YAAY,SAAS,IAAK,CAAsB,CAAC,KAAK,YAAY,KAAK,CAAC;AAClF,CAAC;AAED,SAAS,wBAAwB,CAAC,CAAU;IAC1C,OAAO,kBAAkB,CAAC,CAAC,CAAC,IAAK,CAA4B,CAAC,OAAO,KAAK,cAAc,CAAC;AAC3F,CAAC;AAED,SAAS,uBAAuB,CAAC,CAAU;IACzC,OAAO,kBAAkB,CAAC,CAAC,CAAC,IAAK,CAA2B,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,CAAC;AACzF,CAAC;AAED,SAAS,uBAAuB,CAAC,CAAU;IACzC,OAAO,CAAC,YAAY,YAAY,IAAK,CAA2B,CAAC,IAAI,KAAK,YAAY,CAAC;AACzF,CAAC;AAED,SAAS,yBAAyB,CAAC,CAAU;IAC3C,OAAO,CAAC,YAAY,YAAY,IAAK,CAA6B,CAAC,IAAI,KAAK,cAAc,CAAC;AAC7F,CAAC"}
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAC,KAAK,EAAoB,MAAM,YAAY,CAAC;AACpD,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAwB,OAAO,EAAyB,MAAM,YAAY,CAAC;AAClF,cAAc,UAAU,CAAC;AACzB,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAC,KAAK,EAAoB,MAAM,YAAY,CAAC;AACpD,cAAc,iBAAiB,CAAC;AAChC,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAwB,OAAO,EAAyB,MAAM,YAAY,CAAC;AAClF,cAAc,UAAU,CAAC;AACzB,cAAc,yBAAyB,CAAC;AACxC,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC"}
|
package/lib/timeout.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
1
|
import { anySignal } from "any-signal";
|
|
2
|
-
import { TimeoutError } from "./errors.js";
|
|
2
|
+
import { ErrorAborted, TimeoutError } from "./errors.js";
|
|
3
3
|
import { sleep } from "./sleep.js";
|
|
4
4
|
export async function withTimeout(asyncFn, timeoutMs, signal) {
|
|
5
|
+
if (signal?.aborted) {
|
|
6
|
+
throw new ErrorAborted();
|
|
7
|
+
}
|
|
5
8
|
const timeoutAbortController = new AbortController();
|
|
6
9
|
const timeoutAndParentSignal = anySignal([timeoutAbortController.signal, ...(signal ? [signal] : [])]);
|
|
7
10
|
async function timeoutPromise(signal) {
|
package/lib/timeout.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timeout.js","sourceRoot":"","sources":["../src/timeout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,YAAY,CAAC;AACrC,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"timeout.js","sourceRoot":"","sources":["../src/timeout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,YAAY,CAAC;AACrC,OAAO,EAAC,YAAY,EAAE,YAAY,EAAC,MAAM,aAAa,CAAC;AACvD,OAAO,EAAC,KAAK,EAAC,MAAM,YAAY,CAAC;AAEjC,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAA6D,EAC7D,SAAiB,EACjB,MAAoB;IAEpB,IAAI,MAAM,EAAE,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;IAED,MAAM,sBAAsB,GAAG,IAAI,eAAe,EAAE,CAAC;IACrD,MAAM,sBAAsB,GAAG,SAAS,CAAC,CAAC,sBAAsB,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAEvG,KAAK,UAAU,cAAc,CAAC,MAAmB;QAC/C,MAAM,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,IAAI,YAAY,EAAE,CAAC;IAC3B,CAAC;IAED,IAAI,CAAC;QACH,OAAO,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,cAAc,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACvG,CAAC;YAAS,CAAC;QACT,sBAAsB,CAAC,KAAK,EAAE,CAAC;IACjC,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/ChainSafe/lodestar/issues"
|
|
13
13
|
},
|
|
14
|
-
"version": "1.30.0-dev.
|
|
14
|
+
"version": "1.30.0-dev.d85e73aa12",
|
|
15
15
|
"type": "module",
|
|
16
16
|
"exports": "./lib/index.js",
|
|
17
17
|
"files": [
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"types": "lib/index.d.ts",
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@chainsafe/as-sha256": "^1.1.0",
|
|
40
|
-
"any-signal": "
|
|
40
|
+
"any-signal": "^4.1.1",
|
|
41
41
|
"bigint-buffer": "^1.1.5",
|
|
42
42
|
"case": "^1.6.3",
|
|
43
43
|
"js-yaml": "^4.1.0"
|
|
@@ -53,5 +53,5 @@
|
|
|
53
53
|
"beacon",
|
|
54
54
|
"blockchain"
|
|
55
55
|
],
|
|
56
|
-
"gitHead": "
|
|
56
|
+
"gitHead": "9fdde7b824f52d85f7c18fa244d22a1446a12482"
|
|
57
57
|
}
|