@helia/verified-fetch 4.1.1 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -40
- package/dist/index.min.js +73 -534
- package/dist/index.min.js.map +4 -4
- package/dist/src/constants.d.ts +2 -0
- package/dist/src/constants.d.ts.map +1 -1
- package/dist/src/constants.js +2 -0
- package/dist/src/constants.js.map +1 -1
- package/dist/src/index.d.ts +162 -68
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +7 -40
- package/dist/src/index.js.map +1 -1
- package/dist/src/plugins/index.d.ts +0 -5
- package/dist/src/plugins/index.d.ts.map +1 -1
- package/dist/src/plugins/index.js +0 -4
- package/dist/src/plugins/index.js.map +1 -1
- package/dist/src/plugins/plugin-base.d.ts +8 -9
- package/dist/src/plugins/plugin-base.d.ts.map +1 -1
- package/dist/src/plugins/plugin-base.js +5 -6
- package/dist/src/plugins/plugin-base.js.map +1 -1
- package/dist/src/plugins/plugin-handle-car.d.ts +3 -3
- package/dist/src/plugins/plugin-handle-car.d.ts.map +1 -1
- package/dist/src/plugins/plugin-handle-car.js +38 -39
- package/dist/src/plugins/plugin-handle-car.js.map +1 -1
- package/dist/src/plugins/plugin-handle-ipld.d.ts +12 -0
- package/dist/src/plugins/plugin-handle-ipld.d.ts.map +1 -0
- package/dist/src/plugins/plugin-handle-ipld.js +83 -0
- package/dist/src/plugins/plugin-handle-ipld.js.map +1 -0
- package/dist/src/plugins/plugin-handle-ipns-record.d.ts +3 -3
- package/dist/src/plugins/plugin-handle-ipns-record.d.ts.map +1 -1
- package/dist/src/plugins/plugin-handle-ipns-record.js +25 -34
- package/dist/src/plugins/plugin-handle-ipns-record.js.map +1 -1
- package/dist/src/plugins/plugin-handle-tar.d.ts +3 -3
- package/dist/src/plugins/plugin-handle-tar.d.ts.map +1 -1
- package/dist/src/plugins/plugin-handle-tar.js +20 -22
- package/dist/src/plugins/plugin-handle-tar.js.map +1 -1
- package/dist/src/plugins/plugin-handle-unixfs.d.ts +14 -0
- package/dist/src/plugins/plugin-handle-unixfs.d.ts.map +1 -0
- package/dist/src/plugins/plugin-handle-unixfs.js +180 -0
- package/dist/src/plugins/plugin-handle-unixfs.js.map +1 -0
- package/dist/src/plugins/types.d.ts +1 -77
- package/dist/src/plugins/types.d.ts.map +1 -1
- package/dist/src/url-resolver.d.ts +29 -11
- package/dist/src/url-resolver.d.ts.map +1 -1
- package/dist/src/url-resolver.js +152 -74
- package/dist/src/url-resolver.js.map +1 -1
- package/dist/src/utils/content-type-parser.d.ts.map +1 -1
- package/dist/src/utils/content-type-parser.js +4 -3
- package/dist/src/utils/content-type-parser.js.map +1 -1
- package/dist/src/utils/content-types.d.ts +26 -0
- package/dist/src/utils/content-types.d.ts.map +1 -0
- package/dist/src/utils/content-types.js +137 -0
- package/dist/src/utils/content-types.js.map +1 -0
- package/dist/src/utils/convert-output.d.ts +17 -0
- package/dist/src/utils/convert-output.d.ts.map +1 -0
- package/dist/src/utils/convert-output.js +176 -0
- package/dist/src/utils/convert-output.js.map +1 -0
- package/dist/src/utils/error-to-response.d.ts +3 -0
- package/dist/src/utils/error-to-response.d.ts.map +1 -0
- package/dist/src/utils/error-to-response.js +40 -0
- package/dist/src/utils/error-to-response.js.map +1 -0
- package/dist/src/utils/get-content-disposition-filename.d.ts +1 -1
- package/dist/src/utils/get-content-disposition-filename.d.ts.map +1 -1
- package/dist/src/utils/get-content-disposition-filename.js +4 -0
- package/dist/src/utils/get-content-disposition-filename.js.map +1 -1
- package/dist/src/utils/get-e-tag.d.ts +20 -15
- package/dist/src/utils/get-e-tag.d.ts.map +1 -1
- package/dist/src/utils/get-e-tag.js +8 -22
- package/dist/src/utils/get-e-tag.js.map +1 -1
- package/dist/src/utils/get-offset-and-length.d.ts +12 -2
- package/dist/src/utils/get-offset-and-length.d.ts.map +1 -1
- package/dist/src/utils/get-offset-and-length.js +63 -21
- package/dist/src/utils/get-offset-and-length.js.map +1 -1
- package/dist/src/utils/get-range-header.d.ts +22 -0
- package/dist/src/utils/get-range-header.d.ts.map +1 -0
- package/dist/src/utils/get-range-header.js +69 -0
- package/dist/src/utils/get-range-header.js.map +1 -0
- package/dist/src/utils/parse-url-string.d.ts +2 -1
- package/dist/src/utils/parse-url-string.d.ts.map +1 -1
- package/dist/src/utils/parse-url-string.js +46 -71
- package/dist/src/utils/parse-url-string.js.map +1 -1
- package/dist/src/utils/resource-to-cache-key.d.ts +3 -3
- package/dist/src/utils/resource-to-cache-key.js +5 -5
- package/dist/src/utils/resource-to-cache-key.js.map +1 -1
- package/dist/src/utils/response-headers.d.ts +4 -14
- package/dist/src/utils/response-headers.d.ts.map +1 -1
- package/dist/src/utils/response-headers.js +36 -36
- package/dist/src/utils/response-headers.js.map +1 -1
- package/dist/src/utils/responses.d.ts +30 -11
- package/dist/src/utils/responses.d.ts.map +1 -1
- package/dist/src/utils/responses.js +146 -39
- package/dist/src/utils/responses.js.map +1 -1
- package/dist/src/verified-fetch.d.ts +16 -15
- package/dist/src/verified-fetch.d.ts.map +1 -1
- package/dist/src/verified-fetch.js +302 -238
- package/dist/src/verified-fetch.js.map +1 -1
- package/dist/typedoc-urls.json +64 -45
- package/package.json +4 -3
- package/src/constants.ts +3 -0
- package/src/index.ts +199 -68
- package/src/plugins/index.ts +0 -6
- package/src/plugins/plugin-base.ts +8 -10
- package/src/plugins/plugin-handle-car.ts +48 -46
- package/src/plugins/plugin-handle-ipld.ts +93 -0
- package/src/plugins/plugin-handle-ipns-record.ts +31 -41
- package/src/plugins/plugin-handle-tar.ts +25 -29
- package/src/plugins/plugin-handle-unixfs.ts +217 -0
- package/src/plugins/types.ts +0 -86
- package/src/url-resolver.ts +197 -83
- package/src/utils/content-type-parser.ts +4 -3
- package/src/utils/content-types.ts +159 -0
- package/src/utils/convert-output.ts +187 -0
- package/src/utils/error-to-response.ts +49 -0
- package/src/utils/get-content-disposition-filename.ts +7 -1
- package/src/utils/get-e-tag.ts +26 -35
- package/src/utils/get-offset-and-length.ts +75 -21
- package/src/utils/get-range-header.ts +107 -0
- package/src/utils/parse-url-string.ts +51 -80
- package/src/utils/resource-to-cache-key.ts +5 -5
- package/src/utils/response-headers.ts +40 -41
- package/src/utils/responses.ts +186 -45
- package/src/verified-fetch.ts +353 -270
- package/dist/src/plugins/plugin-handle-byte-range-context.d.ts +0 -14
- package/dist/src/plugins/plugin-handle-byte-range-context.d.ts.map +0 -1
- package/dist/src/plugins/plugin-handle-byte-range-context.js +0 -25
- package/dist/src/plugins/plugin-handle-byte-range-context.js.map +0 -1
- package/dist/src/plugins/plugin-handle-cbor.d.ts +0 -17
- package/dist/src/plugins/plugin-handle-cbor.d.ts.map +0 -1
- package/dist/src/plugins/plugin-handle-cbor.js +0 -94
- package/dist/src/plugins/plugin-handle-cbor.js.map +0 -1
- package/dist/src/plugins/plugin-handle-dag-cbor-html-preview.d.ts +0 -27
- package/dist/src/plugins/plugin-handle-dag-cbor-html-preview.d.ts.map +0 -1
- package/dist/src/plugins/plugin-handle-dag-cbor-html-preview.js +0 -279
- package/dist/src/plugins/plugin-handle-dag-cbor-html-preview.js.map +0 -1
- package/dist/src/plugins/plugin-handle-dag-cbor.d.ts +0 -17
- package/dist/src/plugins/plugin-handle-dag-cbor.d.ts.map +0 -1
- package/dist/src/plugins/plugin-handle-dag-cbor.js +0 -66
- package/dist/src/plugins/plugin-handle-dag-cbor.js.map +0 -1
- package/dist/src/plugins/plugin-handle-dag-pb.d.ts +0 -17
- package/dist/src/plugins/plugin-handle-dag-pb.d.ts.map +0 -1
- package/dist/src/plugins/plugin-handle-dag-pb.js +0 -209
- package/dist/src/plugins/plugin-handle-dag-pb.js.map +0 -1
- package/dist/src/plugins/plugin-handle-dag-walk.d.ts +0 -21
- package/dist/src/plugins/plugin-handle-dag-walk.d.ts.map +0 -1
- package/dist/src/plugins/plugin-handle-dag-walk.js +0 -95
- package/dist/src/plugins/plugin-handle-dag-walk.js.map +0 -1
- package/dist/src/plugins/plugin-handle-dir-index-html.d.ts +0 -10
- package/dist/src/plugins/plugin-handle-dir-index-html.d.ts.map +0 -1
- package/dist/src/plugins/plugin-handle-dir-index-html.js +0 -59
- package/dist/src/plugins/plugin-handle-dir-index-html.js.map +0 -1
- package/dist/src/plugins/plugin-handle-json.d.ts +0 -12
- package/dist/src/plugins/plugin-handle-json.d.ts.map +0 -1
- package/dist/src/plugins/plugin-handle-json.js +0 -73
- package/dist/src/plugins/plugin-handle-json.js.map +0 -1
- package/dist/src/plugins/plugin-handle-raw.d.ts +0 -9
- package/dist/src/plugins/plugin-handle-raw.d.ts.map +0 -1
- package/dist/src/plugins/plugin-handle-raw.js +0 -92
- package/dist/src/plugins/plugin-handle-raw.js.map +0 -1
- package/dist/src/plugins/plugins.d.ts +0 -6
- package/dist/src/plugins/plugins.d.ts.map +0 -1
- package/dist/src/plugins/plugins.js +0 -6
- package/dist/src/plugins/plugins.js.map +0 -1
- package/dist/src/utils/byte-range-context.d.ts +0 -103
- package/dist/src/utils/byte-range-context.d.ts.map +0 -1
- package/dist/src/utils/byte-range-context.js +0 -504
- package/dist/src/utils/byte-range-context.js.map +0 -1
- package/dist/src/utils/dag-cbor-to-safe-json.d.ts +0 -15
- package/dist/src/utils/dag-cbor-to-safe-json.d.ts.map +0 -1
- package/dist/src/utils/dag-cbor-to-safe-json.js +0 -54
- package/dist/src/utils/dag-cbor-to-safe-json.js.map +0 -1
- package/dist/src/utils/dir-index-html.d.ts +0 -19
- package/dist/src/utils/dir-index-html.d.ts.map +0 -1
- package/dist/src/utils/dir-index-html.js +0 -438
- package/dist/src/utils/dir-index-html.js.map +0 -1
- package/dist/src/utils/get-peer-id-from-string.d.ts +0 -3
- package/dist/src/utils/get-peer-id-from-string.d.ts.map +0 -1
- package/dist/src/utils/get-peer-id-from-string.js +0 -10
- package/dist/src/utils/get-peer-id-from-string.js.map +0 -1
- package/dist/src/utils/get-resolved-accept-header.d.ts +0 -9
- package/dist/src/utils/get-resolved-accept-header.d.ts.map +0 -1
- package/dist/src/utils/get-resolved-accept-header.js +0 -27
- package/dist/src/utils/get-resolved-accept-header.js.map +0 -1
- package/dist/src/utils/get-stream-from-async-iterable.d.ts +0 -9
- package/dist/src/utils/get-stream-from-async-iterable.d.ts.map +0 -1
- package/dist/src/utils/get-stream-from-async-iterable.js +0 -43
- package/dist/src/utils/get-stream-from-async-iterable.js.map +0 -1
- package/dist/src/utils/handle-redirects.d.ts +0 -16
- package/dist/src/utils/handle-redirects.d.ts.map +0 -1
- package/dist/src/utils/handle-redirects.js +0 -84
- package/dist/src/utils/handle-redirects.js.map +0 -1
- package/dist/src/utils/is-accept-explicit.d.ts +0 -15
- package/dist/src/utils/is-accept-explicit.d.ts.map +0 -1
- package/dist/src/utils/is-accept-explicit.js +0 -26
- package/dist/src/utils/is-accept-explicit.js.map +0 -1
- package/dist/src/utils/request-headers.d.ts +0 -13
- package/dist/src/utils/request-headers.d.ts.map +0 -1
- package/dist/src/utils/request-headers.js +0 -63
- package/dist/src/utils/request-headers.js.map +0 -1
- package/dist/src/utils/select-output-type.d.ts +0 -17
- package/dist/src/utils/select-output-type.d.ts.map +0 -1
- package/dist/src/utils/select-output-type.js +0 -153
- package/dist/src/utils/select-output-type.js.map +0 -1
- package/dist/src/utils/tlru.d.ts +0 -15
- package/dist/src/utils/tlru.d.ts.map +0 -1
- package/dist/src/utils/tlru.js +0 -34
- package/dist/src/utils/tlru.js.map +0 -1
- package/dist/src/utils/walk-path.d.ts +0 -27
- package/dist/src/utils/walk-path.d.ts.map +0 -1
- package/dist/src/utils/walk-path.js +0 -45
- package/dist/src/utils/walk-path.js.map +0 -1
- package/src/plugins/plugin-handle-byte-range-context.ts +0 -30
- package/src/plugins/plugin-handle-cbor.ts +0 -107
- package/src/plugins/plugin-handle-dag-cbor-html-preview.ts +0 -295
- package/src/plugins/plugin-handle-dag-cbor.ts +0 -83
- package/src/plugins/plugin-handle-dag-pb.ts +0 -248
- package/src/plugins/plugin-handle-dag-walk.ts +0 -110
- package/src/plugins/plugin-handle-dir-index-html.ts +0 -72
- package/src/plugins/plugin-handle-json.ts +0 -80
- package/src/plugins/plugin-handle-raw.ts +0 -110
- package/src/plugins/plugins.ts +0 -5
- package/src/utils/byte-range-context.ts +0 -597
- package/src/utils/dag-cbor-to-safe-json.ts +0 -63
- package/src/utils/dir-index-html.ts +0 -505
- package/src/utils/get-peer-id-from-string.ts +0 -12
- package/src/utils/get-resolved-accept-header.ts +0 -42
- package/src/utils/get-stream-from-async-iterable.ts +0 -49
- package/src/utils/handle-redirects.ts +0 -109
- package/src/utils/is-accept-explicit.ts +0 -38
- package/src/utils/request-headers.ts +0 -65
- package/src/utils/select-output-type.ts +0 -175
- package/src/utils/tlru.ts +0 -42
- package/src/utils/walk-path.ts +0 -69
|
@@ -12,7 +12,7 @@ export function setCacheControlHeader({ ttl, protocol, response }) {
|
|
|
12
12
|
return;
|
|
13
13
|
}
|
|
14
14
|
let headerValue;
|
|
15
|
-
if (protocol === 'ipfs') {
|
|
15
|
+
if (protocol === 'ipfs:') {
|
|
16
16
|
headerValue = 'public, max-age=29030400, immutable';
|
|
17
17
|
}
|
|
18
18
|
else if (ttl == null) {
|
|
@@ -29,52 +29,52 @@ export function setCacheControlHeader({ ttl, protocol, response }) {
|
|
|
29
29
|
response.headers.set('cache-control', headerValue);
|
|
30
30
|
}
|
|
31
31
|
/**
|
|
32
|
-
* This function returns the value of the `Content-Range` header for a given
|
|
32
|
+
* This function returns the value of the `Content-Range` header for a given
|
|
33
|
+
* range.
|
|
34
|
+
*
|
|
33
35
|
* If you know the total size of the body, pass it as `byteSize`
|
|
34
36
|
*
|
|
35
37
|
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Range
|
|
36
38
|
*/
|
|
37
|
-
export function getContentRangeHeader(
|
|
38
|
-
|
|
39
|
-
|
|
39
|
+
export function getContentRangeHeader(byteSize, byteStart, byteEnd) {
|
|
40
|
+
if (byteStart != null) {
|
|
41
|
+
byteStart = BigInt(byteStart);
|
|
42
|
+
}
|
|
43
|
+
if (byteEnd != null) {
|
|
44
|
+
byteEnd = BigInt(byteEnd);
|
|
45
|
+
}
|
|
46
|
+
// if we don't know the total size, we should use *
|
|
47
|
+
const total = BigInt(byteSize);
|
|
48
|
+
// validate start/end are not outside total size
|
|
49
|
+
if ((byteEnd ?? 0n) >= total) {
|
|
40
50
|
throw new InvalidRangeError('Invalid range: Range-end index is greater than or equal to the size of the file.');
|
|
41
51
|
}
|
|
42
|
-
if ((byteStart ??
|
|
52
|
+
if ((byteStart ?? 0n) >= total) {
|
|
43
53
|
throw new InvalidRangeError('Invalid range: Range-start index is greater than or equal to the size of the file.');
|
|
44
54
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
if (
|
|
48
|
-
|
|
55
|
+
let range = '*';
|
|
56
|
+
if (byteStart == null) {
|
|
57
|
+
if (byteEnd != null) {
|
|
58
|
+
if (byteEnd < 0n) {
|
|
59
|
+
range = `${total + byteEnd}-${total - 1n}`;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
range = `0-${byteEnd}`;
|
|
63
|
+
}
|
|
49
64
|
}
|
|
50
|
-
return `bytes ${byteStart}-${byteSize - 1}/${byteSize}`;
|
|
51
65
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
66
|
+
else {
|
|
67
|
+
if (byteEnd == null) {
|
|
68
|
+
let end = '*';
|
|
69
|
+
if (byteSize != null) {
|
|
70
|
+
end = `${total - 1n}`;
|
|
71
|
+
}
|
|
72
|
+
range = `${byteStart}-${end}`;
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
range = `${byteStart}-${byteEnd}`;
|
|
56
76
|
}
|
|
57
|
-
const end = byteSize - 1;
|
|
58
|
-
const start = end - byteEnd + 1;
|
|
59
|
-
return `bytes ${start}-${end}/${byteSize}`;
|
|
60
|
-
}
|
|
61
|
-
if (byteStart == null && byteEnd == null) {
|
|
62
|
-
// neither are provided, we can't return a valid range.
|
|
63
|
-
return `bytes */${total}`;
|
|
64
|
-
}
|
|
65
|
-
return `bytes ${byteStart}-${byteEnd}/${total}`;
|
|
66
|
-
}
|
|
67
|
-
/**
|
|
68
|
-
* Sets the `X-Ipfs-Roots` header on the response if it exists.
|
|
69
|
-
*
|
|
70
|
-
* @see https://specs.ipfs.tech/http-gateways/path-gateway/#x-ipfs-roots-response-header
|
|
71
|
-
*/
|
|
72
|
-
export function setIpfsRoots(response, ipfsRoots) {
|
|
73
|
-
if (ipfsRoots != null) {
|
|
74
|
-
response.headers.set('X-Ipfs-Roots', getIpfsRoots(ipfsRoots));
|
|
75
77
|
}
|
|
76
|
-
}
|
|
77
|
-
export function getIpfsRoots(ipfsRoots) {
|
|
78
|
-
return ipfsRoots.map(cid => cid.toV1().toString()).join(',');
|
|
78
|
+
return `bytes ${range}/${total}`;
|
|
79
79
|
}
|
|
80
80
|
//# sourceMappingURL=response-headers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"response-headers.js","sourceRoot":"","sources":["../../../src/utils/response-headers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"response-headers.js","sourceRoot":"","sources":["../../../src/utils/response-headers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AAahD;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAA6B;IAC3F,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC;QAC1C,uDAAuD;QACvD,OAAM;IACR,CAAC;IAED,IAAI,WAAmB,CAAA;IAEvB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,WAAW,GAAG,qCAAqC,CAAA;IACrD,CAAC;SAAM,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB;;;;WAIG;QACH,WAAW,GAAG,qBAAqB,CAAA;IACrC,CAAC;SAAM,CAAC;QACN,WAAW,GAAG,mBAAmB,GAAG,EAAE,CAAA;IACxC,CAAC;IAED,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,WAAW,CAAC,CAAA;AACpD,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAE,QAAkC,EAAE,SAAoC,EAAE,OAAkC;IACjJ,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACtB,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;IAC/B,CAAC;IAED,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;QACpB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,CAAA;IAC3B,CAAC;IAED,mDAAmD;IACnD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAA;IAE9B,gDAAgD;IAChD,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;QAC7B,MAAM,IAAI,iBAAiB,CAAC,kFAAkF,CAAC,CAAA;IACjH,CAAC;IAED,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC;QAC/B,MAAM,IAAI,iBAAiB,CAAC,oFAAoF,CAAC,CAAA;IACnH,CAAC;IAED,IAAI,KAAK,GAAG,GAAG,CAAA;IAEf,IAAI,SAAS,IAAI,IAAI,EAAE,CAAC;QACtB,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACpB,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;gBACjB,KAAK,GAAG,GAAG,KAAK,GAAG,OAAO,IAAI,KAAK,GAAG,EAAE,EAAE,CAAA;YAC5C,CAAC;iBAAM,CAAC;gBACN,KAAK,GAAG,KAAK,OAAO,EAAE,CAAA;YACxB,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,IAAI,OAAO,IAAI,IAAI,EAAE,CAAC;YACpB,IAAI,GAAG,GAAG,GAAG,CAAA;YAEb,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACrB,GAAG,GAAG,GAAG,KAAK,GAAG,EAAE,EAAE,CAAA;YACvB,CAAC;YAED,KAAK,GAAG,GAAG,SAAS,IAAI,GAAG,EAAE,CAAA;QAC/B,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,GAAG,SAAS,IAAI,OAAO,EAAE,CAAA;QACnC,CAAC;IACH,CAAC;IAED,OAAO,SAAS,KAAK,IAAI,KAAK,EAAE,CAAA;AAClC,CAAC"}
|
|
@@ -1,28 +1,47 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
import type { Logger } from '@libp2p/interface';
|
|
1
|
+
import type { SupportedBodyTypes, ContentType } from '../index.js';
|
|
2
|
+
import type { RangeHeader } from './get-range-header.ts';
|
|
4
3
|
export interface ResponseOptions extends ResponseInit {
|
|
5
4
|
redirected?: boolean;
|
|
6
5
|
}
|
|
7
6
|
export declare function okResponse(url: string, body?: SupportedBodyTypes, init?: ResponseOptions): Response;
|
|
8
7
|
export declare function internalServerErrorResponse(url: string, body?: SupportedBodyTypes, init?: ResponseInit): Response;
|
|
8
|
+
/**
|
|
9
|
+
* A 504 Gateway Timeout for when a request made to an upstream server timed out
|
|
10
|
+
*/
|
|
11
|
+
export declare function gatewayTimeoutResponse(url: string, body?: SupportedBodyTypes, init?: ResponseInit): Response;
|
|
12
|
+
/**
|
|
13
|
+
* A 502 Bad Gateway is for when an invalid response was received from an
|
|
14
|
+
* upstream server.
|
|
15
|
+
*/
|
|
9
16
|
export declare function badGatewayResponse(url: string, body?: SupportedBodyTypes, init?: ResponseInit): Response;
|
|
10
17
|
export declare function notImplementedResponse(url: string, body?: SupportedBodyTypes, init?: ResponseInit): Response;
|
|
11
|
-
export declare function notAcceptableResponse(url: string,
|
|
18
|
+
export declare function notAcceptableResponse(url: string | URL, acceptable: ContentType[], init?: ResponseInit): Response;
|
|
12
19
|
export declare function notFoundResponse(url: string, body?: SupportedBodyTypes, init?: ResponseInit): Response;
|
|
13
20
|
export declare function badRequestResponse(url: string, errors: Error | Error[], init?: ResponseInit): Response;
|
|
14
21
|
export declare function movedPermanentlyResponse(url: string, location: string, init?: ResponseInit): Response;
|
|
15
|
-
interface
|
|
16
|
-
|
|
17
|
-
|
|
22
|
+
export interface PartialContent {
|
|
23
|
+
/**
|
|
24
|
+
* Yield data from the content starting at `start` (or 0) inclusive and ending
|
|
25
|
+
* at `end` exclusive
|
|
26
|
+
*/
|
|
27
|
+
(offset: number, length: number): AsyncGenerator<Uint8Array>;
|
|
18
28
|
}
|
|
19
|
-
export declare function
|
|
29
|
+
export declare function partialContentResponse(url: string, getSlice: PartialContent, range: RangeHeader, documentSize: number | bigint, init?: ResponseOptions): Response;
|
|
20
30
|
/**
|
|
21
|
-
* We likely need to catch errors handled by upstream helia libraries if
|
|
31
|
+
* We likely need to catch errors handled by upstream helia libraries if
|
|
32
|
+
* range-request throws an error. Some examples:
|
|
33
|
+
*
|
|
22
34
|
* - The range is out of bounds
|
|
23
35
|
* - The range is invalid
|
|
24
36
|
* - The range is not supported for the given type
|
|
25
37
|
*/
|
|
26
|
-
export declare function
|
|
27
|
-
|
|
38
|
+
export declare function notSatisfiableResponse(url: string, documentSize?: number | bigint | string, init?: ResponseInit): Response;
|
|
39
|
+
/**
|
|
40
|
+
* Error to indicate that request was formally correct, but Gateway is unable to
|
|
41
|
+
* return requested data under the additional (usually cache-related) conditions
|
|
42
|
+
* sent by the client.
|
|
43
|
+
*
|
|
44
|
+
* @see https://specs.ipfs.tech/http-gateways/path-gateway/#412-precondition-failed
|
|
45
|
+
*/
|
|
46
|
+
export declare function preconditionFailedResponse(url: string, init?: ResponseInit): Response;
|
|
28
47
|
//# sourceMappingURL=responses.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../../src/utils/responses.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"responses.d.ts","sourceRoot":"","sources":["../../../src/utils/responses.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAClE,OAAO,KAAK,EAAS,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAkC/D,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,wBAAgB,UAAU,CAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,QAAQ,CAepG;AAED,wBAAgB,2BAA2B,CAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAYlH;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAW7G;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAWzG;AAED,wBAAgB,sBAAsB,CAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAY7G;AAED,wBAAgB,qBAAqB,CAAE,GAAG,EAAE,MAAM,GAAG,GAAG,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAiBlH;AAED,wBAAgB,gBAAgB,CAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAWvG;AAMD,wBAAgB,kBAAkB,CAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAgCvG;AAED,wBAAgB,wBAAwB,CAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAetG;AAED,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;CAC7D;AAED,wBAAgB,sBAAsB,CAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,QAAQ,CAmBlK;AAoGD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAE,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CAkB3H;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAE,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,QAAQ,CActF"}
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
+
import itToBrowserReadableStream from 'it-to-browser-readablestream';
|
|
2
|
+
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
3
|
+
import { rangeToOffsetAndLength } from "./get-offset-and-length.js";
|
|
4
|
+
import { getContentRangeHeader } from "./response-headers.js";
|
|
1
5
|
function setField(response, name, value) {
|
|
2
6
|
Object.defineProperty(response, name, {
|
|
3
7
|
enumerable: true,
|
|
@@ -7,14 +11,19 @@ function setField(response, name, value) {
|
|
|
7
11
|
});
|
|
8
12
|
}
|
|
9
13
|
function setType(response, value) {
|
|
10
|
-
|
|
14
|
+
if (response.type !== value) {
|
|
15
|
+
setField(response, 'type', value);
|
|
16
|
+
}
|
|
11
17
|
}
|
|
12
18
|
function setUrl(response, value) {
|
|
19
|
+
value = value.toString();
|
|
13
20
|
const fragmentStart = value.indexOf('#');
|
|
14
21
|
if (fragmentStart > -1) {
|
|
15
22
|
value = value.substring(0, fragmentStart);
|
|
16
23
|
}
|
|
17
|
-
|
|
24
|
+
if (response.url !== value) {
|
|
25
|
+
setField(response, 'url', value);
|
|
26
|
+
}
|
|
18
27
|
}
|
|
19
28
|
function setRedirected(response) {
|
|
20
29
|
setField(response, 'redirected', true);
|
|
@@ -43,6 +52,23 @@ export function internalServerErrorResponse(url, body, init) {
|
|
|
43
52
|
setUrl(response, url);
|
|
44
53
|
return response;
|
|
45
54
|
}
|
|
55
|
+
/**
|
|
56
|
+
* A 504 Gateway Timeout for when a request made to an upstream server timed out
|
|
57
|
+
*/
|
|
58
|
+
export function gatewayTimeoutResponse(url, body, init) {
|
|
59
|
+
const response = new Response(body, {
|
|
60
|
+
...(init ?? {}),
|
|
61
|
+
status: 504,
|
|
62
|
+
statusText: 'Gateway Timeout'
|
|
63
|
+
});
|
|
64
|
+
setType(response, 'basic');
|
|
65
|
+
setUrl(response, url);
|
|
66
|
+
return response;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* A 502 Bad Gateway is for when an invalid response was received from an
|
|
70
|
+
* upstream server.
|
|
71
|
+
*/
|
|
46
72
|
export function badGatewayResponse(url, body, init) {
|
|
47
73
|
const response = new Response(body, {
|
|
48
74
|
...(init ?? {}),
|
|
@@ -64,11 +90,16 @@ export function notImplementedResponse(url, body, init) {
|
|
|
64
90
|
setUrl(response, url);
|
|
65
91
|
return response;
|
|
66
92
|
}
|
|
67
|
-
export function notAcceptableResponse(url,
|
|
68
|
-
const
|
|
93
|
+
export function notAcceptableResponse(url, acceptable, init) {
|
|
94
|
+
const headers = new Headers(init?.headers);
|
|
95
|
+
headers.set('content-type', 'application/json');
|
|
96
|
+
const response = new Response(JSON.stringify({
|
|
97
|
+
acceptable: acceptable.map(contentType => contentType.mediaType)
|
|
98
|
+
}), {
|
|
69
99
|
...(init ?? {}),
|
|
70
100
|
status: 406,
|
|
71
|
-
statusText: 'Not Acceptable'
|
|
101
|
+
statusText: 'Not Acceptable',
|
|
102
|
+
headers
|
|
72
103
|
});
|
|
73
104
|
setType(response, 'basic');
|
|
74
105
|
setUrl(response, url);
|
|
@@ -130,59 +161,135 @@ export function movedPermanentlyResponse(url, location, init) {
|
|
|
130
161
|
setUrl(response, url);
|
|
131
162
|
return response;
|
|
132
163
|
}
|
|
133
|
-
export function
|
|
134
|
-
|
|
135
|
-
|
|
164
|
+
export function partialContentResponse(url, getSlice, range, documentSize, init) {
|
|
165
|
+
let response;
|
|
166
|
+
if (range.ranges.length === 1) {
|
|
167
|
+
response = singleRangeResponse(url, getSlice, range.ranges[0], documentSize, init);
|
|
136
168
|
}
|
|
137
|
-
if (
|
|
138
|
-
|
|
169
|
+
else if (range.ranges.length > 1) {
|
|
170
|
+
response = multiRangeResponse(url, getSlice, range, documentSize, init);
|
|
139
171
|
}
|
|
140
|
-
|
|
172
|
+
else {
|
|
173
|
+
return notSatisfiableResponse(url, documentSize);
|
|
174
|
+
}
|
|
175
|
+
if (init?.redirected === true) {
|
|
176
|
+
setRedirected(response);
|
|
177
|
+
}
|
|
178
|
+
setType(response, 'basic');
|
|
179
|
+
setUrl(response, url);
|
|
180
|
+
return response;
|
|
181
|
+
}
|
|
182
|
+
function singleRangeResponse(url, getSlice, range, documentSize, init) {
|
|
141
183
|
try {
|
|
142
|
-
//
|
|
184
|
+
// create headers object with any initial headers from init
|
|
143
185
|
const headers = new Headers(init?.headers);
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
if (byteRangeContext.isMultiRangeRequest) {
|
|
151
|
-
headers.set('content-type', 'multipart/byteranges');
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
headers.set('content-range', byteRangeContext.contentRangeHeaderValue);
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
response = new Response(body, {
|
|
186
|
+
const { offset, length } = rangeToOffsetAndLength(documentSize, range.start, range.end);
|
|
187
|
+
headers.set('content-length', `${length}`);
|
|
188
|
+
// see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Range
|
|
189
|
+
headers.set('content-range', getContentRangeHeader(documentSize, range.start, range.end));
|
|
190
|
+
const stream = itToBrowserReadableStream(getSlice(offset, length));
|
|
191
|
+
return new Response(stream, {
|
|
158
192
|
...(init ?? {}),
|
|
159
193
|
status: 206,
|
|
160
194
|
statusText: 'Partial Content',
|
|
161
195
|
headers
|
|
162
196
|
});
|
|
163
197
|
}
|
|
164
|
-
catch (
|
|
165
|
-
|
|
166
|
-
|
|
198
|
+
catch (err) {
|
|
199
|
+
if (err.name === 'InvalidRangeError') {
|
|
200
|
+
return notSatisfiableResponse(url, documentSize, init);
|
|
201
|
+
}
|
|
202
|
+
return internalServerErrorResponse(url, '', init);
|
|
167
203
|
}
|
|
168
|
-
|
|
169
|
-
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/Range_requests
|
|
207
|
+
*/
|
|
208
|
+
function multiRangeResponse(url, getSlice, range, documentSize, init) {
|
|
209
|
+
// create headers object with any initial headers from init
|
|
210
|
+
const headers = new Headers(init?.headers);
|
|
211
|
+
const contentType = headers.get('content-type');
|
|
212
|
+
if (contentType == null) {
|
|
213
|
+
throw new Error('Content-Type header must be set');
|
|
170
214
|
}
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
215
|
+
headers.delete('content-type');
|
|
216
|
+
let contentLength = 0n;
|
|
217
|
+
// calculate content range based on range headers
|
|
218
|
+
const rangeHeaders = range.ranges.map(({ start, end }) => {
|
|
219
|
+
const header = uint8ArrayFromString([
|
|
220
|
+
`--${range.multipartBoundary}`,
|
|
221
|
+
// content-type of multipart part
|
|
222
|
+
`Content-Type: ${contentType}`,
|
|
223
|
+
// see https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/Content-Range
|
|
224
|
+
`Content-Range: ${getContentRangeHeader(documentSize, start, end)}`,
|
|
225
|
+
'',
|
|
226
|
+
''
|
|
227
|
+
].join('\r\n'));
|
|
228
|
+
contentLength += BigInt(header.byteLength) + (BigInt(end ?? documentSize) - BigInt(start ?? 0));
|
|
229
|
+
return header;
|
|
230
|
+
});
|
|
231
|
+
const trailer = uint8ArrayFromString([
|
|
232
|
+
`--${range.multipartBoundary}--`,
|
|
233
|
+
''
|
|
234
|
+
].join('\r\n'));
|
|
235
|
+
contentLength += BigInt(trailer.byteLength);
|
|
236
|
+
// content length is the expected length of all multipart parts
|
|
237
|
+
headers.set('content-length', `${contentLength}`);
|
|
238
|
+
// content type of response is multipart
|
|
239
|
+
headers.set('content-type', `multipart/byteranges; boundary=${range.multipartBoundary}`);
|
|
240
|
+
const stream = itToBrowserReadableStream(async function* () {
|
|
241
|
+
for (let i = 0; i < rangeHeaders.length; i++) {
|
|
242
|
+
yield rangeHeaders[i];
|
|
243
|
+
const { offset, length } = rangeToOffsetAndLength(documentSize, range.ranges[i].start, range.ranges[i].end);
|
|
244
|
+
yield* getSlice(offset, length);
|
|
245
|
+
yield uint8ArrayFromString('\r\n');
|
|
246
|
+
}
|
|
247
|
+
yield trailer;
|
|
248
|
+
}());
|
|
249
|
+
return new Response(stream, {
|
|
250
|
+
...(init ?? {}),
|
|
251
|
+
status: 206,
|
|
252
|
+
statusText: 'Partial Content',
|
|
253
|
+
headers
|
|
254
|
+
});
|
|
174
255
|
}
|
|
175
256
|
/**
|
|
176
|
-
* We likely need to catch errors handled by upstream helia libraries if
|
|
257
|
+
* We likely need to catch errors handled by upstream helia libraries if
|
|
258
|
+
* range-request throws an error. Some examples:
|
|
259
|
+
*
|
|
177
260
|
* - The range is out of bounds
|
|
178
261
|
* - The range is invalid
|
|
179
262
|
* - The range is not supported for the given type
|
|
180
263
|
*/
|
|
181
|
-
export function
|
|
182
|
-
const
|
|
183
|
-
|
|
264
|
+
export function notSatisfiableResponse(url, documentSize, init) {
|
|
265
|
+
const headers = new Headers(init?.headers);
|
|
266
|
+
if (documentSize != null) {
|
|
267
|
+
headers.set('content-range', `bytes */${documentSize}`);
|
|
268
|
+
}
|
|
269
|
+
const response = new Response('Range Not Satisfiable', {
|
|
270
|
+
...init,
|
|
271
|
+
headers,
|
|
184
272
|
status: 416,
|
|
185
|
-
statusText: '
|
|
273
|
+
statusText: 'Range Not Satisfiable'
|
|
274
|
+
});
|
|
275
|
+
setType(response, 'basic');
|
|
276
|
+
setUrl(response, url);
|
|
277
|
+
return response;
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Error to indicate that request was formally correct, but Gateway is unable to
|
|
281
|
+
* return requested data under the additional (usually cache-related) conditions
|
|
282
|
+
* sent by the client.
|
|
283
|
+
*
|
|
284
|
+
* @see https://specs.ipfs.tech/http-gateways/path-gateway/#412-precondition-failed
|
|
285
|
+
*/
|
|
286
|
+
export function preconditionFailedResponse(url, init) {
|
|
287
|
+
const headers = new Headers(init?.headers);
|
|
288
|
+
const response = new Response('Precondition Failed', {
|
|
289
|
+
...init,
|
|
290
|
+
headers,
|
|
291
|
+
status: 412,
|
|
292
|
+
statusText: 'Precondition Failed'
|
|
186
293
|
});
|
|
187
294
|
setType(response, 'basic');
|
|
188
295
|
setUrl(response, url);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responses.js","sourceRoot":"","sources":["../../../src/utils/responses.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"responses.js","sourceRoot":"","sources":["../../../src/utils/responses.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,30 +6,31 @@ export declare class VerifiedFetch {
|
|
|
6
6
|
private readonly dnsLink;
|
|
7
7
|
private readonly log;
|
|
8
8
|
private readonly contentTypeParser;
|
|
9
|
-
private readonly blockstoreSessions;
|
|
10
9
|
private readonly withServerTiming;
|
|
11
10
|
private readonly plugins;
|
|
11
|
+
private readonly urlResolver;
|
|
12
12
|
constructor(helia: Helia, init?: CreateVerifiedFetchOptions);
|
|
13
|
-
private getBlockstore;
|
|
14
13
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
14
|
+
* Load a resource from the IPFS network and ensure the retrieved data is the
|
|
15
|
+
* data that was expected to be loaded.
|
|
16
|
+
*
|
|
17
|
+
* Like [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Window/fetch)
|
|
18
|
+
* but verified.
|
|
18
19
|
*/
|
|
19
|
-
|
|
20
|
+
fetch(resource: Resource, opts?: VerifiedFetchOptions): Promise<Response>;
|
|
20
21
|
/**
|
|
21
|
-
*
|
|
22
|
-
*
|
|
22
|
+
* Returns a prioritized list of acceptable content types for the response
|
|
23
|
+
* based on the CID and a passed `Accept` header
|
|
23
24
|
*/
|
|
24
|
-
private
|
|
25
|
+
private getAcceptHeader;
|
|
25
26
|
/**
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* always exit early (and cleanly) if a given signal is aborted
|
|
27
|
+
* The last place a Response touches in verified-fetch before being returned
|
|
28
|
+
* to the user. This is where we add the Server-Timing header to the response
|
|
29
|
+
* if it has been collected. It should be used for any final processing of the
|
|
30
|
+
* response before it is returned to the user.
|
|
31
31
|
*/
|
|
32
|
-
|
|
32
|
+
private handleFinalResponse;
|
|
33
|
+
private runPluginPipeline;
|
|
33
34
|
/**
|
|
34
35
|
* Start the Helia instance
|
|
35
36
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verified-fetch.d.ts","sourceRoot":"","sources":["../../src/verified-fetch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"verified-fetch.d.ts","sourceRoot":"","sources":["../../src/verified-fetch.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAA8C,0BAA0B,EAAoB,QAAQ,EAAkB,iBAAiB,IAAI,oBAAoB,EAAqD,MAAM,YAAY,CAAA;AAElP,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAiD7C,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA+B;IACjE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;IACpD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAa;gBAE5B,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,0BAA+B;IA8ChE;;;;;;OAMG;IACG,KAAK,CAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC;IA4GhF;;;OAGG;IACH,OAAO,CAAC,eAAe;IA8HvB;;;;;OAKG;IACH,OAAO,CAAC,mBAAmB;YA0Db,iBAAiB;IA0E/B;;OAEG;IACG,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAI7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|