@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
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { BasePlugin } from './plugin-base.js';
|
|
2
|
-
import type { PluginContext } from './types.js';
|
|
3
|
-
/**
|
|
4
|
-
* This plugin simply adds the ByteRangeContext to the PluginContext.
|
|
5
|
-
*/
|
|
6
|
-
export declare class ByteRangeContextPlugin extends BasePlugin {
|
|
7
|
-
readonly id = "byte-range-context-plugin";
|
|
8
|
-
/**
|
|
9
|
-
* Return false if the ByteRangeContext has already been set, otherwise return true.
|
|
10
|
-
*/
|
|
11
|
-
canHandle(context: PluginContext): boolean;
|
|
12
|
-
handle(context: PluginContext): Promise<Response | null>;
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=plugin-handle-byte-range-context.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-handle-byte-range-context.d.ts","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-byte-range-context.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAE/C;;GAEG;AACH,qBAAa,sBAAuB,SAAQ,UAAU;IACpD,QAAQ,CAAC,EAAE,+BAA8B;IAEzC;;OAEG;IACH,SAAS,CAAE,OAAO,EAAE,aAAa,GAAG,OAAO;IAIrC,MAAM,CAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;CAWhE"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { ByteRangeContext } from '../utils/byte-range-context.js';
|
|
2
|
-
import { badRangeResponse } from '../utils/responses.js';
|
|
3
|
-
import { BasePlugin } from './plugin-base.js';
|
|
4
|
-
/**
|
|
5
|
-
* This plugin simply adds the ByteRangeContext to the PluginContext.
|
|
6
|
-
*/
|
|
7
|
-
export class ByteRangeContextPlugin extends BasePlugin {
|
|
8
|
-
id = 'byte-range-context-plugin';
|
|
9
|
-
/**
|
|
10
|
-
* Return false if the ByteRangeContext has already been set, otherwise return true.
|
|
11
|
-
*/
|
|
12
|
-
canHandle(context) {
|
|
13
|
-
return context.byteRangeContext == null;
|
|
14
|
-
}
|
|
15
|
-
async handle(context) {
|
|
16
|
-
context.byteRangeContext = new ByteRangeContext(this.pluginOptions.logger, context.options?.headers);
|
|
17
|
-
context.modified++;
|
|
18
|
-
if (context.byteRangeContext.isRangeRequest && !context.byteRangeContext.isValidRangeRequest) {
|
|
19
|
-
// invalid range request.. fail
|
|
20
|
-
return badRangeResponse(context.resource);
|
|
21
|
-
}
|
|
22
|
-
return null;
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
//# sourceMappingURL=plugin-handle-byte-range-context.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-handle-byte-range-context.js","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-byte-range-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAG7C;;GAEG;AACH,MAAM,OAAO,sBAAuB,SAAQ,UAAU;IAC3C,EAAE,GAAG,2BAA2B,CAAA;IAEzC;;OAEG;IACH,SAAS,CAAE,OAAsB;QAC/B,OAAO,OAAO,CAAC,gBAAgB,IAAI,IAAI,CAAA;IACzC,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,OAAsB;QAClC,OAAO,CAAC,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACpG,OAAO,CAAC,QAAQ,EAAE,CAAA;QAElB,IAAI,OAAO,CAAC,gBAAgB,CAAC,cAAc,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC;YAC7F,+BAA+B;YAC/B,OAAO,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;QAC3C,CAAC;QAED,OAAO,IAAI,CAAA;IACb,CAAC;CACF"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { BasePlugin } from './plugin-base.js';
|
|
2
|
-
import type { PluginContext } from './types.js';
|
|
3
|
-
import type { ObjectNode } from 'ipfs-unixfs-exporter';
|
|
4
|
-
/**
|
|
5
|
-
* Handles `cbor` content
|
|
6
|
-
*/
|
|
7
|
-
export declare class CborPlugin extends BasePlugin {
|
|
8
|
-
readonly id = "cbor-plugin";
|
|
9
|
-
readonly codes: number[];
|
|
10
|
-
canHandle({ cid, pathDetails, byteRangeContext }: PluginContext): boolean;
|
|
11
|
-
handle(context: PluginContext & Required<Pick<PluginContext, 'byteRangeContext' | 'pathDetails'>> & {
|
|
12
|
-
pathDetails: {
|
|
13
|
-
terminalElement: ObjectNode;
|
|
14
|
-
};
|
|
15
|
-
}): Promise<Response>;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=plugin-handle-cbor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-handle-cbor.d.ts","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-cbor.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD;;GAEG;AACH,qBAAa,UAAW,SAAQ,UAAU;IACxC,QAAQ,CAAC,EAAE,iBAAgB;IAC3B,QAAQ,CAAC,KAAK,WAAe;IAE7B,SAAS,CAAE,EAAE,GAAG,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAE,aAAa,GAAG,OAAO;IAoBpE,MAAM,CAAE,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,aAAa,CAAC,CAAC,GAAG;QAAE,WAAW,EAAE;YAAE,eAAe,EAAE,UAAU,CAAA;SAAE,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;CAiDhL"}
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
import * as ipldDagCbor from '@ipld/dag-cbor';
|
|
2
|
-
import { CID } from 'multiformats/cid';
|
|
3
|
-
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
4
|
-
import { CODEC_CBOR } from "../constants.js";
|
|
5
|
-
import { cborToObject, dagCborToSafeJSON } from '../utils/dag-cbor-to-safe-json.js';
|
|
6
|
-
import { setIpfsRoots } from '../utils/response-headers.js';
|
|
7
|
-
import { notAcceptableResponse, okRangeResponse } from '../utils/responses.js';
|
|
8
|
-
import { isObjectNode } from '../utils/walk-path.js';
|
|
9
|
-
import { BasePlugin } from './plugin-base.js';
|
|
10
|
-
/**
|
|
11
|
-
* Handles `cbor` content
|
|
12
|
-
*/
|
|
13
|
-
export class CborPlugin extends BasePlugin {
|
|
14
|
-
id = 'cbor-plugin';
|
|
15
|
-
codes = [CODEC_CBOR];
|
|
16
|
-
canHandle({ cid, pathDetails, byteRangeContext }) {
|
|
17
|
-
if (pathDetails == null) {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
if (!isObjectNode(pathDetails.terminalElement)) {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
if (cid.code !== CODEC_CBOR) {
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
if (byteRangeContext == null) {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
return true;
|
|
30
|
-
}
|
|
31
|
-
async handle(context) {
|
|
32
|
-
const { cid, path, resource, accept, pathDetails: { terminalElement, ipfsRoots } } = context;
|
|
33
|
-
this.log.trace('fetching %c/%s with accept header %s', cid, path.join('/'), accept?.mimeType);
|
|
34
|
-
const block = terminalElement.node;
|
|
35
|
-
let responseContentType = 'application/cbor';
|
|
36
|
-
let body = block;
|
|
37
|
-
if (accept?.mimeType === 'application/json' || accept?.mimeType === 'application/vnd.ipld.dag-json') {
|
|
38
|
-
try {
|
|
39
|
-
body = dagCborToSafeJSON(block);
|
|
40
|
-
responseContentType = accept.mimeType;
|
|
41
|
-
}
|
|
42
|
-
catch (err) {
|
|
43
|
-
this.log.error('could not decode CBOR as JSON-safe - %e', err);
|
|
44
|
-
return notAcceptableResponse(resource);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
else if (accept?.mimeType === 'application/vnd.ipld.dag-cbor') {
|
|
48
|
-
try {
|
|
49
|
-
const obj = cborToObject(block);
|
|
50
|
-
convert(obj);
|
|
51
|
-
body = ipldDagCbor.encode(obj);
|
|
52
|
-
responseContentType = accept.mimeType;
|
|
53
|
-
}
|
|
54
|
-
catch (err) {
|
|
55
|
-
this.log.error('could not translate CBOR to DAG-CBOR - %e', err);
|
|
56
|
-
return notAcceptableResponse(resource);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
else if (accept?.mimeType === 'application/octet-stream' || accept?.mimeType === 'application/vnd.ipld.raw') {
|
|
60
|
-
responseContentType = accept.mimeType;
|
|
61
|
-
}
|
|
62
|
-
context.byteRangeContext.setBody(body);
|
|
63
|
-
const response = okRangeResponse(resource, context.byteRangeContext.getBody(responseContentType), { byteRangeContext: context.byteRangeContext, log: this.log });
|
|
64
|
-
response.headers.set('content-type', context.byteRangeContext.getContentType() ?? responseContentType);
|
|
65
|
-
if (responseContentType !== 'application/json') {
|
|
66
|
-
context.query.download = true;
|
|
67
|
-
context.query.filename ??= `${cid}.cbor`;
|
|
68
|
-
}
|
|
69
|
-
this.log.trace('setting content type to "%s"', context.byteRangeContext.getContentType() ?? responseContentType);
|
|
70
|
-
setIpfsRoots(response, ipfsRoots);
|
|
71
|
-
return response;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
/**
|
|
75
|
-
* Turns `{ "/": string }` properties into `CID` instances and
|
|
76
|
-
* `{ "/": { "bytes": base64 } }` into `Uint8Array`s
|
|
77
|
-
*/
|
|
78
|
-
function convert(obj) {
|
|
79
|
-
try {
|
|
80
|
-
for (const key of Object.getOwnPropertyNames(obj)) {
|
|
81
|
-
if (typeof obj[key]?.['/'] === 'string') {
|
|
82
|
-
obj[key] = CID.parse(obj[key]['/']);
|
|
83
|
-
}
|
|
84
|
-
else if (typeof obj[key]?.['/']?.['bytes'] === 'string') {
|
|
85
|
-
obj[key] = uint8ArrayFromString(obj[key]['/']['bytes'], 'base64');
|
|
86
|
-
}
|
|
87
|
-
else {
|
|
88
|
-
convert(obj[key]);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
catch { }
|
|
93
|
-
}
|
|
94
|
-
//# sourceMappingURL=plugin-handle-cbor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-handle-cbor.js","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-cbor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { CID } from 'multiformats/cid';
|
|
2
|
-
import { BasePlugin } from './plugin-base.js';
|
|
3
|
-
import type { PluginContext, VerifiedFetchPluginFactory } from './types.js';
|
|
4
|
-
import type { ObjectNode } from 'ipfs-unixfs-exporter';
|
|
5
|
-
/**
|
|
6
|
-
* Handles `dag-cbor` content where the Accept: `text/html` header is present.
|
|
7
|
-
*/
|
|
8
|
-
export declare class DagCborHtmlPreviewPlugin extends BasePlugin {
|
|
9
|
-
readonly id = "dag-cbor-plugin-html-preview";
|
|
10
|
-
readonly codes: 113[];
|
|
11
|
-
canHandle({ cid, accept, pathDetails }: PluginContext): boolean;
|
|
12
|
-
handle(context: PluginContext & Required<Pick<PluginContext, 'byteRangeContext' | 'pathDetails'>> & {
|
|
13
|
-
pathDetails: {
|
|
14
|
-
terminalElement: ObjectNode;
|
|
15
|
-
};
|
|
16
|
-
}): Promise<Response>;
|
|
17
|
-
getHtml({ path, obj, cid }: {
|
|
18
|
-
path?: string[];
|
|
19
|
-
obj: Record<string, any>;
|
|
20
|
-
cid: CID;
|
|
21
|
-
}): string;
|
|
22
|
-
valueHTML(value: any, link: string[]): string;
|
|
23
|
-
private renderValue;
|
|
24
|
-
renderRows(obj: Record<string, any>, currentPath?: string[]): string;
|
|
25
|
-
}
|
|
26
|
-
export declare const dagCborHtmlPreviewPluginFactory: VerifiedFetchPluginFactory;
|
|
27
|
-
//# sourceMappingURL=plugin-handle-dag-cbor-html-preview.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-handle-dag-cbor-html-preview.d.ts","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-dag-cbor-html-preview.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAMtC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,0BAA0B,EAAE,MAAM,YAAY,CAAA;AAC3E,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAmCtD;;GAEG;AACH,qBAAa,wBAAyB,SAAQ,UAAU;IACtD,QAAQ,CAAC,EAAE,kCAAiC;IAC5C,QAAQ,CAAC,KAAK,QAAqB;IAEnC,SAAS,CAAE,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,aAAa,GAAG,OAAO;IAoB1D,MAAM,CAAE,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,aAAa,CAAC,CAAC,GAAG;QAAE,WAAW,EAAE;YAAE,eAAe,EAAE,UAAU,CAAA;SAAE,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;IA4B/K,OAAO,CAAE,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAAC,GAAG,EAAE,GAAG,CAAA;KAAE,GAAG,MAAM;IAgJ7F,SAAS,CAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM;IAiB9C,OAAO,CAAC,WAAW;IAgBnB,UAAU,CAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,WAAW,GAAE,MAAM,EAAO,GAAG,MAAM;CAe1E;AAED,eAAO,MAAM,+BAA+B,EAAE,0BAAyE,CAAA"}
|
|
@@ -1,279 +0,0 @@
|
|
|
1
|
-
import * as ipldDagCbor from '@ipld/dag-cbor';
|
|
2
|
-
import { base32 } from 'multiformats/bases/base32';
|
|
3
|
-
import { CID } from 'multiformats/cid';
|
|
4
|
-
import { sha256 } from 'multiformats/hashes/sha2';
|
|
5
|
-
import { isLink } from 'multiformats/link';
|
|
6
|
-
import { getETag } from '../utils/get-e-tag.js';
|
|
7
|
-
import { getIpfsRoots } from '../utils/response-headers.js';
|
|
8
|
-
import { isObjectNode } from '../utils/walk-path.js';
|
|
9
|
-
import { BasePlugin } from './plugin-base.js';
|
|
10
|
-
function isPrimitive(value) {
|
|
11
|
-
return value === null ||
|
|
12
|
-
value === undefined ||
|
|
13
|
-
typeof value === 'string' ||
|
|
14
|
-
typeof value === 'number' ||
|
|
15
|
-
typeof value === 'boolean' ||
|
|
16
|
-
typeof value === 'bigint' ||
|
|
17
|
-
typeof value === 'symbol';
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* Converts a cborObject and it's children into a small hash that can be used in the etag header.
|
|
21
|
-
*
|
|
22
|
-
* @see https://github.com/ipfs/boxo/blob/dc60fe747c375c631a92fcfd6c7456f44a760d24/gateway/assets/assets.go#L84
|
|
23
|
-
* @see https://github.com/ipfs/boxo/blob/dc60fe747c375c631a92fcfd6c7456f44a760d24/gateway/handler_unixfs_dir.go#L233-L235
|
|
24
|
-
*/
|
|
25
|
-
async function getAssetHash(cborObject) {
|
|
26
|
-
/**
|
|
27
|
-
* Plugin Version represents a "version of gateway implementation" that allows for cache busting if necessary.
|
|
28
|
-
*
|
|
29
|
-
* @see https://specs.ipfs.tech/http-gateways/path-gateway/#etag-response-header
|
|
30
|
-
*/
|
|
31
|
-
const pluginVersion = '0.0.1';
|
|
32
|
-
const entryDetails = Object.entries(cborObject).reduce((acc, [key, value]) => {
|
|
33
|
-
if (isPrimitive(value)) {
|
|
34
|
-
return `${acc}${key}${value}`;
|
|
35
|
-
}
|
|
36
|
-
return `${acc}${key}${getAssetHash(value)}`;
|
|
37
|
-
}, '');
|
|
38
|
-
const hashBytes = await sha256.encode(new TextEncoder().encode(pluginVersion + entryDetails));
|
|
39
|
-
return base32.encode(hashBytes);
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Handles `dag-cbor` content where the Accept: `text/html` header is present.
|
|
43
|
-
*/
|
|
44
|
-
export class DagCborHtmlPreviewPlugin extends BasePlugin {
|
|
45
|
-
id = 'dag-cbor-plugin-html-preview';
|
|
46
|
-
codes = [ipldDagCbor.code];
|
|
47
|
-
canHandle({ cid, accept, pathDetails }) {
|
|
48
|
-
if (pathDetails == null) {
|
|
49
|
-
return false;
|
|
50
|
-
}
|
|
51
|
-
if (!isObjectNode(pathDetails.terminalElement)) {
|
|
52
|
-
return false;
|
|
53
|
-
}
|
|
54
|
-
if (cid.code !== ipldDagCbor.code) {
|
|
55
|
-
return false;
|
|
56
|
-
}
|
|
57
|
-
if (accept == null || !accept?.mimeType.includes('text/html')) {
|
|
58
|
-
return false;
|
|
59
|
-
}
|
|
60
|
-
return isObjectNode(pathDetails.terminalElement);
|
|
61
|
-
}
|
|
62
|
-
async handle(context) {
|
|
63
|
-
const { cid, path, pathDetails: { terminalElement, ipfsRoots } } = context;
|
|
64
|
-
this.log.trace('generating html preview for %c/%s', cid, path);
|
|
65
|
-
const block = terminalElement.node;
|
|
66
|
-
let obj;
|
|
67
|
-
try {
|
|
68
|
-
obj = ipldDagCbor.decode(block);
|
|
69
|
-
}
|
|
70
|
-
catch (err) {
|
|
71
|
-
return new Response(`<pre>Failed to decode DAG-CBOR: ${String(err)}</pre>`, {
|
|
72
|
-
status: 500,
|
|
73
|
-
headers: { 'Content-Type': 'text/html' }
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
const html = this.getHtml({ path, obj, cid });
|
|
77
|
-
return new Response(html, {
|
|
78
|
-
status: 200,
|
|
79
|
-
headers: {
|
|
80
|
-
'Content-Type': 'text/html',
|
|
81
|
-
'X-Ipfs-Roots': getIpfsRoots(ipfsRoots),
|
|
82
|
-
'Cache-Control': 'public, max-age=604800, stale-while-revalidate=2678400',
|
|
83
|
-
Etag: getETag({ cid, reqFormat: context.reqFormat, contentPrefix: `DagIndex-${await getAssetHash(obj)}_CID-` })
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
}
|
|
87
|
-
getHtml({ path, obj, cid }) {
|
|
88
|
-
const style = `
|
|
89
|
-
:root {
|
|
90
|
-
--sans-serif: "Plex", system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, sans-serif;
|
|
91
|
-
--monospace: Consolas, monaco, monospace;
|
|
92
|
-
--navy: #073a53;
|
|
93
|
-
--teal: #6bc4ce;
|
|
94
|
-
--turquoise: #47AFB4;
|
|
95
|
-
--steel-gray: #3f5667;
|
|
96
|
-
--dark-white: #d9dbe2;
|
|
97
|
-
--light-white: #edf0f4;
|
|
98
|
-
--near-white: #f7f8fa;
|
|
99
|
-
--radius: 4px;
|
|
100
|
-
}
|
|
101
|
-
body {
|
|
102
|
-
color: #34373f;
|
|
103
|
-
font-family: var(--sans-serif);
|
|
104
|
-
line-height: 1.43;
|
|
105
|
-
margin: 0;
|
|
106
|
-
word-break: break-all;
|
|
107
|
-
-webkit-text-size-adjust: 100%;
|
|
108
|
-
-ms-text-size-adjust: 100%;
|
|
109
|
-
-webkit-tap-highlight-color: transparent;
|
|
110
|
-
}
|
|
111
|
-
main {
|
|
112
|
-
border: 1px solid var(--dark-white);
|
|
113
|
-
border-radius: var(--radius);
|
|
114
|
-
overflow: hidden;
|
|
115
|
-
margin: 1em;
|
|
116
|
-
font-size: .875em;
|
|
117
|
-
}
|
|
118
|
-
main section header {
|
|
119
|
-
background-color: var(--near-white);
|
|
120
|
-
}
|
|
121
|
-
main header, main section:not(:last-child) {
|
|
122
|
-
border-bottom: 1px solid var(--dark-white);
|
|
123
|
-
}
|
|
124
|
-
main header {
|
|
125
|
-
padding-top: .7em;
|
|
126
|
-
padding-bottom: .7em;
|
|
127
|
-
background-color: var(--light-white);
|
|
128
|
-
}
|
|
129
|
-
main header, main .container {
|
|
130
|
-
padding-left: 1em;
|
|
131
|
-
padding-right: 1em;
|
|
132
|
-
}
|
|
133
|
-
section {
|
|
134
|
-
display: block;
|
|
135
|
-
}
|
|
136
|
-
.grid.dag {
|
|
137
|
-
grid-template-columns: max-content 1fr;
|
|
138
|
-
}
|
|
139
|
-
.grid {
|
|
140
|
-
display: grid;
|
|
141
|
-
overflow-x: auto;
|
|
142
|
-
}
|
|
143
|
-
.grid.dag > div {
|
|
144
|
-
background: white;
|
|
145
|
-
}
|
|
146
|
-
.grid.dag > div:nth-of-type(2n+1) {
|
|
147
|
-
padding-left: 1em;
|
|
148
|
-
}
|
|
149
|
-
.grid.dag > div:nth-child(4n), .grid.dag > div:nth-child(4n+3) {
|
|
150
|
-
background-color: var(--near-white);
|
|
151
|
-
}
|
|
152
|
-
.grid.dag .grid {
|
|
153
|
-
padding: 0;
|
|
154
|
-
}
|
|
155
|
-
/* change coloring of nested grid
|
|
156
|
-
.grid.dag .grid.dag > div:nth-child(4n), .grid.dag .grid.dag > div:nth-child(4n+3) {
|
|
157
|
-
background-color: white;
|
|
158
|
-
}
|
|
159
|
-
.grid.dag .grid.dag div:nth-child(4n+1), .grid.dag .grid.dag div:nth-child(4n+2) {
|
|
160
|
-
background-color: var(--near-white);
|
|
161
|
-
} */
|
|
162
|
-
.grid.dag > div:nth-last-child(-n+2) {
|
|
163
|
-
border-bottom: 0;
|
|
164
|
-
}
|
|
165
|
-
.grid .grid {
|
|
166
|
-
overflow-x: visible;
|
|
167
|
-
}
|
|
168
|
-
.grid > div {
|
|
169
|
-
padding: .7em;
|
|
170
|
-
border-bottom: 1px solid var(--dark-white);
|
|
171
|
-
}
|
|
172
|
-
.nowrap {
|
|
173
|
-
white-space: nowrap;
|
|
174
|
-
}
|
|
175
|
-
pre, code {
|
|
176
|
-
font-family: var(--monospace);
|
|
177
|
-
}
|
|
178
|
-
strong {
|
|
179
|
-
font-weight: bolder;
|
|
180
|
-
}
|
|
181
|
-
a:active, a:visited {
|
|
182
|
-
color: #00b0e9;
|
|
183
|
-
}
|
|
184
|
-
.ipfs-hash {
|
|
185
|
-
color: #7f8491;
|
|
186
|
-
font-family: var(--monospace);
|
|
187
|
-
}
|
|
188
|
-
a {
|
|
189
|
-
color: #117eb3;
|
|
190
|
-
text-decoration: none;
|
|
191
|
-
}
|
|
192
|
-
header { margin-bottom: 2em; }
|
|
193
|
-
.ipfs-logo { width: 32px; height: 32px; background: url('data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlo89/56ZQ/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUjDu1lo89/6mhTP+zrVP/nplD/5+aRK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNiIS6Wjz3/ubFY/761W/+vp1D/urRZ/8vDZf/GvmH/nplD/1BNIm8AAAAAAAAAAAAAAAAAAAAAAAAAAJaPPf+knEj/vrVb/761W/++tVv/r6dQ/7q0Wf/Lw2X/y8Nl/8vDZf+tpk7/nplD/wAAAAAAAAAAAAAAAJaPPf+2rVX/vrVb/761W/++tVv/vrVb/6+nUP+6tFn/y8Nl/8vDZf/Lw2X/y8Nl/8G6Xv+emUP/AAAAAAAAAACWjz3/vrVb/761W/++tVv/vrVb/761W/+vp1D/urRZ/8vDZf/Lw2X/y8Nl/8vDZf/Lw2X/nplD/wAAAAAAAAAAlo89/761W/++tVv/vrVb/761W/++tVv/r6dQ/7q0Wf/Lw2X/y8Nl/8vDZf/Lw2X/y8Nl/56ZQ/8AAAAAAAAAAJaPPf++tVv/vrVb/761W/++tVv/vbRa/5aPPf+emUP/y8Nl/8vDZf/Lw2X/y8Nl/8vDZf+emUP/AAAAAAAAAACWjz3/vrVb/761W/++tVv/vrVb/5qTQP+inkb/op5G/6KdRv/Lw2X/y8Nl/8vDZf/Lw2X/nplD/wAAAAAAAAAAlo89/761W/++tVv/sqlS/56ZQ//LxWb/0Mlp/9DJaf/Kw2X/oJtE/7+3XP/Lw2X/y8Nl/56ZQ/8AAAAAAAAAAJaPPf+9tFr/mJE+/7GsUv/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav+xrFL/nplD/8vDZf+emUP/AAAAAAAAAACWjz3/op5G/9HKav/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav+inkb/nplD/wAAAAAAAAAAAAAAAKKeRv+3slb/0cpq/9HKav/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav+1sFX/op5G/wAAAAAAAAAAAAAAAAAAAAAAAAAAop5GUKKeRv/Nxmf/0cpq/9HKav/Rymr/0cpq/83GZ/+inkb/op5GSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAop5G16KeRv/LxWb/y8Vm/6KeRv+inkaPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAop5G/6KeRtcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/n8AAPgfAADwDwAAwAMAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAwAMAAPAPAAD4HwAA/n8AAA==') no-repeat center/contain; display: inline-block; }
|
|
194
|
-
`;
|
|
195
|
-
return `<!DOCTYPE html>
|
|
196
|
-
<html lang="en">
|
|
197
|
-
<head>
|
|
198
|
-
<meta charset="utf-8">
|
|
199
|
-
<meta name="description" content="Content-addressed dag-cbor document hosted on IPFS.">
|
|
200
|
-
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
201
|
-
<link rel="shortcut icon" href="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlo89/56ZQ/8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACUjDu1lo89/6mhTP+zrVP/nplD/5+aRK8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNiIS6Wjz3/ubFY/761W/+vp1D/urRZ/8vDZf/GvmH/nplD/1BNIm8AAAAAAAAAAAAAAAAAAAAAAAAAAJaPPf+knEj/vrVb/761W/++tVv/r6dQ/7q0Wf/Lw2X/y8Nl/8vDZf+tpk7/nplD/wAAAAAAAAAAAAAAAJaPPf+2rVX/vrVb/761W/++tVv/vrVb/6+nUP+6tFn/y8Nl/8vDZf/Lw2X/y8Nl/8G6Xv+emUP/AAAAAAAAAACWjz3/vrVb/761W/++tVv/vrVb/761W/+vp1D/urRZ/8vDZf/Lw2X/y8Nl/8vDZf/Lw2X/nplD/wAAAAAAAAAAlo89/761W/++tVv/vrVb/761W/++tVv/r6dQ/7q0Wf/Lw2X/y8Nl/8vDZf/Lw2X/y8Nl/56ZQ/8AAAAAAAAAAJaPPf++tVv/vrVb/761W/++tVv/vbRa/5aPPf+emUP/y8Nl/8vDZf/Lw2X/y8Nl/8vDZf+emUP/AAAAAAAAAACWjz3/vrVb/761W/++tVv/vrVb/5qTQP+inkb/op5G/6KdRv/Lw2X/y8Nl/8vDZf/Lw2X/nplD/wAAAAAAAAAAlo89/761W/++tVv/sqlS/56ZQ//LxWb/0Mlp/9DJaf/Kw2X/oJtE/7+3XP/Lw2X/y8Nl/56ZQ/8AAAAAAAAAAJaPPf+9tFr/mJE+/7GsUv/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav+xrFL/nplD/8vDZf+emUP/AAAAAAAAAACWjz3/op5G/9HKav/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav+inkb/nplD/wAAAAAAAAAAAAAAAKKeRv+3slb/0cpq/9HKav/Rymr/0cpq/9HKav/Rymr/0cpq/9HKav+1sFX/op5G/wAAAAAAAAAAAAAAAAAAAAAAAAAAop5GUKKeRv/Nxmf/0cpq/9HKav/Rymr/0cpq/83GZ/+inkb/op5GSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAop5G16KeRv/LxWb/y8Vm/6KeRv+inkaPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAop5G/6KeRtcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/n8AAPgfAADwDwAAwAMAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAwAMAAPAPAAD4HwAA/n8AAA==">
|
|
202
|
-
<title>${cid.toString()} DAG-CBOR Preview</title>
|
|
203
|
-
<style>${style}</style>
|
|
204
|
-
</head>
|
|
205
|
-
<body>
|
|
206
|
-
<main>
|
|
207
|
-
<header>
|
|
208
|
-
<div><strong>CID: </strong> <code class="nowrap">${cid}</code></div>
|
|
209
|
-
<div><strong>Codec: </strong> ${this.valueHTML('dag-cbor (0x71)', [])}</div>
|
|
210
|
-
</header>
|
|
211
|
-
<section class="container">
|
|
212
|
-
<p>You can download this block as:</p>
|
|
213
|
-
<ul>
|
|
214
|
-
<li><a href="?format=raw&download=true&filename=${cid.toString()}.bin" rel="nofollow" download="${cid.toString()}.bin">Raw Block</a> (no conversion)</li>
|
|
215
|
-
<li><a href="?format=dag-json&download=true&filename=${cid.toString()}.json" rel="nofollow" download="${cid.toString()}">Valid DAG-JSON</a> (specs at <a href="https://ipld.io/specs/codecs/dag-json/spec/" target="_blank" rel="noopener noreferrer">IPLD</a> and <a href="https://www.iana.org/assignments/media-types/application/vnd.ipld.dag-json" target="_blank" rel="noopener noreferrer">IANA</a>)</li>
|
|
216
|
-
<li><a href="?format=dag-cbor&download=true&filename=${cid.toString()}.dag-cbor" rel="nofollow" download="${cid.toString()}.dag-cbor">Valid DAG-CBOR</a> (specs at <a href="https://ipld.io/specs/codecs/dag-cbor/spec/" target="_blank" rel="noopener noreferrer">IPLD</a> and <a href="https://www.iana.org/assignments/media-types/application/vnd.ipld.dag-cbor" target="_blank" rel="noopener noreferrer">IANA</a>)</li>
|
|
217
|
-
</ul>
|
|
218
|
-
</section>
|
|
219
|
-
<section>
|
|
220
|
-
<header><strong>DAG-CBOR Preview</strong></header>
|
|
221
|
-
<div class="grid dag">
|
|
222
|
-
${this.renderRows(obj, path)}
|
|
223
|
-
</div>
|
|
224
|
-
</section>
|
|
225
|
-
</main>
|
|
226
|
-
</body>
|
|
227
|
-
</html>`;
|
|
228
|
-
}
|
|
229
|
-
valueHTML(value, link) {
|
|
230
|
-
let valueString;
|
|
231
|
-
const isALinkObject = isLink(value);
|
|
232
|
-
if (!isALinkObject && typeof value !== 'string') {
|
|
233
|
-
valueString = JSON.stringify(value);
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
// it can be a string or a link object.. call .toString() on it
|
|
237
|
-
valueString = value.toString();
|
|
238
|
-
}
|
|
239
|
-
const valueCodeBlock = `<code class="nowrap">${valueString}</code>`;
|
|
240
|
-
if (isALinkObject && link != null) {
|
|
241
|
-
return `<a class="ipfs-hash" href="/${link}">${valueCodeBlock}</a>`;
|
|
242
|
-
}
|
|
243
|
-
return valueCodeBlock;
|
|
244
|
-
}
|
|
245
|
-
renderValue(key, value, currentPath) {
|
|
246
|
-
let rows = '';
|
|
247
|
-
value.forEach((item, idx) => {
|
|
248
|
-
const itemPath = [...currentPath, key, idx.toString()];
|
|
249
|
-
rows += `<div>${this.valueHTML(idx, [])}</div>`;
|
|
250
|
-
if (isPrimitive(item)) {
|
|
251
|
-
rows += `<div>${this.valueHTML(item, itemPath)}</div>`;
|
|
252
|
-
}
|
|
253
|
-
else {
|
|
254
|
-
rows += '<div class="grid dag">';
|
|
255
|
-
rows += this.renderRows(item, itemPath);
|
|
256
|
-
rows += '</div>';
|
|
257
|
-
}
|
|
258
|
-
});
|
|
259
|
-
return rows;
|
|
260
|
-
}
|
|
261
|
-
renderRows(obj, currentPath = []) {
|
|
262
|
-
let rows = '';
|
|
263
|
-
for (const [key, value] of Object.entries(obj)) {
|
|
264
|
-
if (Array.isArray(value)) {
|
|
265
|
-
rows += `<div>${key}</div>`;
|
|
266
|
-
rows += '<div class="grid dag">';
|
|
267
|
-
rows += this.renderValue(key, value, currentPath);
|
|
268
|
-
rows += '</div>';
|
|
269
|
-
}
|
|
270
|
-
else {
|
|
271
|
-
const valuePath = [...currentPath, key];
|
|
272
|
-
rows += `<div>${key}</div><div>${this.valueHTML(value, valuePath)}</div>`;
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
return rows;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
export const dagCborHtmlPreviewPluginFactory = (opts) => new DagCborHtmlPreviewPlugin(opts);
|
|
279
|
-
//# sourceMappingURL=plugin-handle-dag-cbor-html-preview.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-handle-dag-cbor-html-preview.js","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-dag-cbor-html-preview.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { BasePlugin } from './plugin-base.js';
|
|
2
|
-
import type { PluginContext } from './types.js';
|
|
3
|
-
import type { ObjectNode } from 'ipfs-unixfs-exporter';
|
|
4
|
-
/**
|
|
5
|
-
* Handles `dag-cbor` content, including requests with Accept: `application/vnd.ipld.dag-json` and `application/json`.
|
|
6
|
-
*/
|
|
7
|
-
export declare class DagCborPlugin extends BasePlugin {
|
|
8
|
-
readonly id = "dag-cbor-plugin";
|
|
9
|
-
readonly codes: 113[];
|
|
10
|
-
canHandle({ cid, accept, pathDetails, byteRangeContext, plugins }: PluginContext): boolean;
|
|
11
|
-
handle(context: PluginContext & Required<Pick<PluginContext, 'byteRangeContext' | 'pathDetails'>> & {
|
|
12
|
-
pathDetails: {
|
|
13
|
-
terminalElement: ObjectNode;
|
|
14
|
-
};
|
|
15
|
-
}): Promise<Response>;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=plugin-handle-dag-cbor.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-handle-dag-cbor.d.ts","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-dag-cbor.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEtD;;GAEG;AACH,qBAAa,aAAc,SAAQ,UAAU;IAC3C,QAAQ,CAAC,EAAE,qBAAoB;IAC/B,QAAQ,CAAC,KAAK,QAAqB;IAEnC,SAAS,CAAE,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,aAAa,GAAG,OAAO;IAyBrF,MAAM,CAAE,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,aAAa,CAAC,CAAC,GAAG;QAAE,WAAW,EAAE;YAAE,eAAe,EAAE,UAAU,CAAA;SAAE,CAAA;KAAE,GAAG,OAAO,CAAC,QAAQ,CAAC;CAyChL"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import * as ipldDagCbor from '@ipld/dag-cbor';
|
|
2
|
-
import { dagCborToSafeJSON } from "../utils/dag-cbor-to-safe-json.js";
|
|
3
|
-
import { setIpfsRoots } from '../utils/response-headers.js';
|
|
4
|
-
import { notAcceptableResponse, okRangeResponse } from '../utils/responses.js';
|
|
5
|
-
import { isObjectNode } from '../utils/walk-path.js';
|
|
6
|
-
import { BasePlugin } from './plugin-base.js';
|
|
7
|
-
/**
|
|
8
|
-
* Handles `dag-cbor` content, including requests with Accept: `application/vnd.ipld.dag-json` and `application/json`.
|
|
9
|
-
*/
|
|
10
|
-
export class DagCborPlugin extends BasePlugin {
|
|
11
|
-
id = 'dag-cbor-plugin';
|
|
12
|
-
codes = [ipldDagCbor.code];
|
|
13
|
-
canHandle({ cid, accept, pathDetails, byteRangeContext, plugins }) {
|
|
14
|
-
if (pathDetails == null) {
|
|
15
|
-
return false;
|
|
16
|
-
}
|
|
17
|
-
if (!isObjectNode(pathDetails.terminalElement)) {
|
|
18
|
-
return false;
|
|
19
|
-
}
|
|
20
|
-
if (cid.code !== ipldDagCbor.code) {
|
|
21
|
-
return false;
|
|
22
|
-
}
|
|
23
|
-
if (byteRangeContext == null) {
|
|
24
|
-
return false;
|
|
25
|
-
}
|
|
26
|
-
if (accept != null && accept.mimeType === 'text/html' && plugins.includes('dag-cbor-plugin-html-preview')) {
|
|
27
|
-
// let the dag-cbor-html-preview plugin handle it
|
|
28
|
-
return false;
|
|
29
|
-
}
|
|
30
|
-
return isObjectNode(pathDetails.terminalElement);
|
|
31
|
-
}
|
|
32
|
-
async handle(context) {
|
|
33
|
-
const { cid, path, resource, accept, pathDetails: { terminalElement, ipfsRoots } } = context;
|
|
34
|
-
this.log.trace('fetching %c/%s with accept header %s', cid, path.join('/'), accept?.mimeType);
|
|
35
|
-
const block = terminalElement.node;
|
|
36
|
-
let responseContentType = 'application/cbor';
|
|
37
|
-
let body = block;
|
|
38
|
-
if (accept?.mimeType === 'application/json' || accept?.mimeType === 'application/vnd.ipld.dag-json') {
|
|
39
|
-
try {
|
|
40
|
-
// if vnd.ipld.dag-json has been specified, convert to the format - note
|
|
41
|
-
// that this supports more data types than regular JSON
|
|
42
|
-
body = dagCborToSafeJSON(body);
|
|
43
|
-
responseContentType = accept.mimeType;
|
|
44
|
-
}
|
|
45
|
-
catch (err) {
|
|
46
|
-
this.log.error('could not decode CBOR as JSON-safe - %e', err);
|
|
47
|
-
return notAcceptableResponse(resource);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
else if (accept?.mimeType === 'application/octet-stream' || accept?.mimeType === 'application/vnd.ipld.raw' || accept?.mimeType === 'application/vnd.ipld.dag-cbor') {
|
|
51
|
-
responseContentType = accept.mimeType;
|
|
52
|
-
}
|
|
53
|
-
context.byteRangeContext.setBody(body);
|
|
54
|
-
// const responseContentType = accept?.mimeType ?? (body instanceof Uint8Array ? 'application/octet-stream' : 'application/json')
|
|
55
|
-
const response = okRangeResponse(resource, context.byteRangeContext.getBody(responseContentType), { byteRangeContext: context.byteRangeContext, log: this.log });
|
|
56
|
-
response.headers.set('content-type', context.byteRangeContext.getContentType() ?? responseContentType);
|
|
57
|
-
if (responseContentType !== 'application/json') {
|
|
58
|
-
context.query.download = true;
|
|
59
|
-
context.query.filename ??= `${cid}.cbor`;
|
|
60
|
-
}
|
|
61
|
-
this.log.trace('setting content type to "%s"', context.byteRangeContext.getContentType() ?? responseContentType);
|
|
62
|
-
setIpfsRoots(response, ipfsRoots);
|
|
63
|
-
return response;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=plugin-handle-dag-cbor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-handle-dag-cbor.js","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-dag-cbor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAA;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAA;AAC3D,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAA;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAI7C;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,UAAU;IAClC,EAAE,GAAG,iBAAiB,CAAA;IACtB,KAAK,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IAEnC,SAAS,CAAE,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,OAAO,EAAiB;QAC/E,IAAI,WAAW,IAAI,IAAI,EAAE,CAAC;YACxB,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,eAAe,CAAC,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IAAI,gBAAgB,IAAI,IAAI,EAAE,CAAC;YAC7B,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EAAE,CAAC;YAC1G,iDAAiD;YACjD,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,YAAY,CAAC,WAAW,CAAC,eAAe,CAAC,CAAA;IAClD,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,OAA6I;QACzJ,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,eAAe,EAAE,SAAS,EAAE,EAAE,GAAG,OAAO,CAAA;QAE5F,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAA;QAE7F,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,CAAA;QAElC,IAAI,mBAAmB,GAAG,kBAAkB,CAAA;QAC5C,IAAI,IAAI,GAAwB,KAAK,CAAA;QAErC,IAAI,MAAM,EAAE,QAAQ,KAAK,kBAAkB,IAAI,MAAM,EAAE,QAAQ,KAAK,+BAA+B,EAAE,CAAC;YACpG,IAAI,CAAC;gBACH,wEAAwE;gBACxE,uDAAuD;gBACvD,IAAI,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAA;gBAC9B,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAA;YACvC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAA;gBAC9D,OAAO,qBAAqB,CAAC,QAAQ,CAAC,CAAA;YACxC,CAAC;QACH,CAAC;aAAM,IAAI,MAAM,EAAE,QAAQ,KAAK,0BAA0B,IAAI,MAAM,EAAE,QAAQ,KAAK,0BAA0B,IAAI,MAAM,EAAE,QAAQ,KAAK,+BAA+B,EAAE,CAAC;YACtK,mBAAmB,GAAG,MAAM,CAAC,QAAQ,CAAA;QACvC,CAAC;QAED,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAEtC,iIAAiI;QACjI,MAAM,QAAQ,GAAG,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,OAAO,CAAC,mBAAmB,CAAC,EAAE,EAAE,gBAAgB,EAAE,OAAO,CAAC,gBAAgB,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;QAEhK,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,mBAAmB,CAAC,CAAA;QAEtG,IAAI,mBAAmB,KAAK,kBAAkB,EAAE,CAAC;YAC/C,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;YAC7B,OAAO,CAAC,KAAK,CAAC,QAAQ,KAAK,GAAG,GAAG,OAAO,CAAA;QAC1C,CAAC;QAED,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,8BAA8B,EAAE,OAAO,CAAC,gBAAgB,CAAC,cAAc,EAAE,IAAI,mBAAmB,CAAC,CAAA;QAChH,YAAY,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;QAEjC,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF"}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { BasePlugin } from './plugin-base.js';
|
|
2
|
-
import type { PluginContext } from './types.js';
|
|
3
|
-
/**
|
|
4
|
-
* Handles UnixFS and dag-pb content.
|
|
5
|
-
*/
|
|
6
|
-
export declare class DagPbPlugin extends BasePlugin {
|
|
7
|
-
readonly id = "dag-pb-plugin";
|
|
8
|
-
readonly codes: 112[];
|
|
9
|
-
canHandle({ cid, accept, pathDetails, byteRangeContext }: PluginContext): boolean;
|
|
10
|
-
/**
|
|
11
|
-
* @see https://specs.ipfs.tech/http-gateways/path-gateway/#use-in-directory-url-normalization
|
|
12
|
-
*/
|
|
13
|
-
getRedirectUrl(context: PluginContext): string | null;
|
|
14
|
-
handle(context: PluginContext & Required<Pick<PluginContext, 'byteRangeContext' | 'pathDetails'>>): Promise<Response | null>;
|
|
15
|
-
private handleRangeRequest;
|
|
16
|
-
}
|
|
17
|
-
//# sourceMappingURL=plugin-handle-dag-pb.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-handle-dag-pb.d.ts","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-dag-pb.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAI/C;;GAEG;AACH,qBAAa,WAAY,SAAQ,UAAU;IACzC,QAAQ,CAAC,EAAE,mBAAkB;IAC7B,QAAQ,CAAC,KAAK,QAAc;IAE5B,SAAS,CAAE,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,gBAAgB,EAAE,EAAE,aAAa,GAAG,OAAO;IAiBlF;;OAEG;IACH,cAAc,CAAE,OAAO,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI;IAuBhD,MAAM,CAAE,OAAO,EAAE,aAAa,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,EAAE,kBAAkB,GAAG,aAAa,CAAC,CAAC,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;YAqJrH,kBAAkB;CAkCjC"}
|