@helia/verified-fetch 2.6.1 → 2.6.3
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/dist/index.min.js +39 -39
- package/dist/src/plugins/plugin-handle-car.d.ts.map +1 -1
- package/dist/src/plugins/plugin-handle-car.js +12 -4
- package/dist/src/plugins/plugin-handle-car.js.map +1 -1
- package/dist/src/plugins/types.d.ts +1 -2
- package/dist/src/plugins/types.d.ts.map +1 -1
- package/dist/src/utils/content-type-parser.d.ts.map +1 -1
- package/dist/src/utils/content-type-parser.js +34 -10
- package/dist/src/utils/content-type-parser.js.map +1 -1
- package/dist/src/verified-fetch.d.ts.map +1 -1
- package/dist/src/verified-fetch.js +21 -35
- package/dist/src/verified-fetch.js.map +1 -1
- package/package.json +1 -1
- package/src/plugins/plugin-handle-car.ts +14 -4
- package/src/plugins/types.ts +1 -2
- package/src/utils/content-type-parser.ts +32 -9
- package/src/verified-fetch.ts +23 -47
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-handle-car.d.ts","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-car.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin-handle-car.d.ts","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-car.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAY/C;;;GAGG;AACH,qBAAa,SAAU,SAAQ,UAAU;IACvC,SAAS,CAAE,OAAO,EAAE,aAAa,GAAG,OAAO;IAKrC,MAAM,CAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC;CAezD"}
|
|
@@ -2,6 +2,14 @@ import { car } from '@helia/car';
|
|
|
2
2
|
import toBrowserReadableStream from 'it-to-browser-readablestream';
|
|
3
3
|
import { okResponse } from '../utils/responses.js';
|
|
4
4
|
import { BasePlugin } from './plugin-base.js';
|
|
5
|
+
function getFilename({ cid, ipfsPath, query }) {
|
|
6
|
+
if (query.filename != null) {
|
|
7
|
+
return query.filename;
|
|
8
|
+
}
|
|
9
|
+
// convert context.ipfsPath to a filename. replace all / with _, replace prefix protocol with empty string
|
|
10
|
+
const filename = ipfsPath.replace(/\/ipfs\//, '').replace(/\/ipns\//, '').replace(/\//g, '_');
|
|
11
|
+
return `${filename}.car`;
|
|
12
|
+
}
|
|
5
13
|
/**
|
|
6
14
|
* Accepts a `CID` and returns a `Response` with a body stream that is a CAR
|
|
7
15
|
* of the `DAG` referenced by the `CID`.
|
|
@@ -12,14 +20,14 @@ export class CarPlugin extends BasePlugin {
|
|
|
12
20
|
return context.accept?.startsWith('application/vnd.ipld.car') === true || context.query.format === 'car'; // application/vnd.ipld.car
|
|
13
21
|
}
|
|
14
22
|
async handle(context) {
|
|
15
|
-
const { options } = context;
|
|
23
|
+
const { options, pathDetails, cid } = context;
|
|
16
24
|
const { getBlockstore, helia } = this.pluginOptions;
|
|
17
25
|
context.reqFormat = 'car';
|
|
18
26
|
context.query.download = true;
|
|
19
|
-
context.query.filename = context
|
|
20
|
-
const blockstore = getBlockstore(
|
|
27
|
+
context.query.filename = getFilename(context);
|
|
28
|
+
const blockstore = getBlockstore(cid, context.resource, options?.session ?? true, options);
|
|
21
29
|
const c = car({ blockstore, getCodec: helia.getCodec });
|
|
22
|
-
const stream = toBrowserReadableStream(c.stream(
|
|
30
|
+
const stream = toBrowserReadableStream(c.stream(pathDetails?.terminalElement.cid ?? cid, options));
|
|
23
31
|
const response = okResponse(context.resource, stream);
|
|
24
32
|
response.headers.set('content-type', 'application/vnd.ipld.car; version=1');
|
|
25
33
|
return response;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-handle-car.js","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-car.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAChC,OAAO,uBAAuB,MAAM,8BAA8B,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAG7C;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,UAAU;IACvC,SAAS,CAAE,OAAsB;QAC/B,IAAI,CAAC,GAAG,CAAC,6CAA6C,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QACpF,OAAO,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,0BAA0B,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAA,CAAC,2BAA2B;IACtI,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,OAAsB;QAClC,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"plugin-handle-car.js","sourceRoot":"","sources":["../../../src/plugins/plugin-handle-car.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAA;AAChC,OAAO,uBAAuB,MAAM,8BAA8B,CAAA;AAClE,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAG7C,SAAS,WAAW,CAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAqD;IAC/F,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,QAAQ,CAAA;IACvB,CAAC;IAED,0GAA0G;IAC1G,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;IAE7F,OAAO,GAAG,QAAQ,MAAM,CAAA;AAC1B,CAAC;AACD;;;GAGG;AACH,MAAM,OAAO,SAAU,SAAQ,UAAU;IACvC,SAAS,CAAE,OAAsB;QAC/B,IAAI,CAAC,GAAG,CAAC,6CAA6C,EAAE,OAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;QACpF,OAAO,OAAO,CAAC,MAAM,EAAE,UAAU,CAAC,0BAA0B,CAAC,KAAK,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,KAAK,CAAA,CAAC,2BAA2B;IACtI,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,OAAsB;QAClC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;QAC7C,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,aAAa,CAAA;QACnD,OAAO,CAAC,SAAS,GAAG,KAAK,CAAA;QACzB,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAA;QAC7B,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,CAAA;QAC7C,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,EAAE,OAAO,CAAC,QAAQ,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,OAAO,CAAC,CAAA;QAC1F,MAAM,CAAC,GAAG,GAAG,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAA;QACvD,MAAM,MAAM,GAAG,uBAAuB,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,eAAe,CAAC,GAAG,IAAI,GAAG,EAAE,OAAO,CAAC,CAAC,CAAA;QAElG,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;QACrD,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,qCAAqC,CAAC,CAAA;QAE3E,OAAO,QAAQ,CAAA;IACjB,CAAC;CACF"}
|
|
@@ -27,7 +27,7 @@ export interface PluginOptions {
|
|
|
27
27
|
* - Shared Data: Allows plugins to communicate partial results, discovered data, or interim errors.
|
|
28
28
|
* - Ephemeral: Typically discarded once fetch(...) completes.
|
|
29
29
|
*/
|
|
30
|
-
export interface PluginContext {
|
|
30
|
+
export interface PluginContext extends ParsedUrlStringResults {
|
|
31
31
|
readonly cid: CID;
|
|
32
32
|
readonly path: string;
|
|
33
33
|
readonly resource: string;
|
|
@@ -45,7 +45,6 @@ export interface PluginContext {
|
|
|
45
45
|
errors?: PluginError[];
|
|
46
46
|
reqFormat?: RequestFormatShorthand;
|
|
47
47
|
pathDetails?: PathWalkerResponse;
|
|
48
|
-
query: ParsedUrlStringResults['query'];
|
|
49
48
|
[key: string]: unknown;
|
|
50
49
|
}
|
|
51
50
|
export interface VerifiedFetchPlugin {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugins/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAC5E,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAA;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAC9E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,OAAO,CAAA;AAClC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AACvD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAE1D;;;;GAIG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,eAAe,CAAA;IACvB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,GAAG,GAAG,EAAE,UAAU,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,UAAU,CAAA;IACzG,kBAAkB,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACrH,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;IACrC,KAAK,EAAE,KAAK,CAAA;CACb;AAED;;;;;GAKG;AACH,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/plugins/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-type-parser.d.ts","sourceRoot":"","sources":["../../../src/utils/content-type-parser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"content-type-parser.d.ts","sourceRoot":"","sources":["../../../src/utils/content-type-parser.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe,6BAA6B,CAAA;AAgCzD,wBAAsB,iBAAiB,CAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAyD9F"}
|
|
@@ -2,14 +2,14 @@ import { logger } from '@libp2p/logger';
|
|
|
2
2
|
import { fileTypeFromBuffer } from 'file-type';
|
|
3
3
|
const log = logger('helia:verified-fetch:content-type-parser');
|
|
4
4
|
export const defaultMimeType = 'application/octet-stream';
|
|
5
|
-
function checkForSvg(
|
|
5
|
+
function checkForSvg(text) {
|
|
6
6
|
log('checking for svg');
|
|
7
|
-
return /^(<\?xml[^>]+>)?[^<^\w]+<svg/ig.test(
|
|
7
|
+
return /^(<\?xml[^>]+>)?[^<^\w]+<svg/ig.test(text);
|
|
8
8
|
}
|
|
9
|
-
async function checkForJson(
|
|
9
|
+
async function checkForJson(text) {
|
|
10
10
|
log('checking for json');
|
|
11
11
|
try {
|
|
12
|
-
JSON.parse(
|
|
12
|
+
JSON.parse(text);
|
|
13
13
|
return true;
|
|
14
14
|
}
|
|
15
15
|
catch (err) {
|
|
@@ -17,6 +17,20 @@ async function checkForJson(bytes) {
|
|
|
17
17
|
return false;
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
|
+
function getText(bytes) {
|
|
21
|
+
log('checking for text');
|
|
22
|
+
const decoder = new TextDecoder('utf-8', { fatal: true });
|
|
23
|
+
try {
|
|
24
|
+
return decoder.decode(bytes);
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
async function checkForHtml(text) {
|
|
31
|
+
log('checking for html');
|
|
32
|
+
return /^\s*<(?:!doctype\s+html|html|head|body)\b/i.test(text);
|
|
33
|
+
}
|
|
20
34
|
export async function contentTypeParser(bytes, fileName) {
|
|
21
35
|
log('contentTypeParser called for fileName: %s, byte size=%s', fileName, bytes.length);
|
|
22
36
|
const detectedType = (await fileTypeFromBuffer(bytes))?.mime;
|
|
@@ -26,12 +40,22 @@ export async function contentTypeParser(bytes, fileName) {
|
|
|
26
40
|
}
|
|
27
41
|
log('no detectedType');
|
|
28
42
|
if (fileName == null) {
|
|
29
|
-
// no other way to determine file-type.
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
43
|
+
// it's likely text... no other way to determine file-type.
|
|
44
|
+
const text = getText(bytes);
|
|
45
|
+
if (text != null) {
|
|
46
|
+
// check for svg, json, html, or it's plain text.
|
|
47
|
+
if (checkForSvg(text)) {
|
|
48
|
+
return 'image/svg+xml';
|
|
49
|
+
}
|
|
50
|
+
else if (await checkForJson(text)) {
|
|
51
|
+
return 'application/json';
|
|
52
|
+
}
|
|
53
|
+
else if (await checkForHtml(text)) {
|
|
54
|
+
return 'text/html; charset=utf-8';
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
return 'text/plain; charset=utf-8';
|
|
58
|
+
}
|
|
35
59
|
}
|
|
36
60
|
return defaultMimeType;
|
|
37
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-type-parser.js","sourceRoot":"","sources":["../../../src/utils/content-type-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAA;AAE9C,MAAM,GAAG,GAAG,MAAM,CAAC,0CAA0C,CAAC,CAAA;AAE9D,MAAM,CAAC,MAAM,eAAe,GAAG,0BAA0B,CAAA;AACzD,SAAS,WAAW,CAAE,
|
|
1
|
+
{"version":3,"file":"content-type-parser.js","sourceRoot":"","sources":["../../../src/utils/content-type-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verified-fetch.d.ts","sourceRoot":"","sources":["../../src/verified-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,IAAI,EAAE,MAAM,aAAa,CAAA;AA0B1D,OAAO,KAAK,EAAgC,0BAA0B,EAAE,QAAQ,EAAkB,iBAAiB,IAAI,oBAAoB,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"verified-fetch.d.ts","sourceRoot":"","sources":["../../src/verified-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqB,KAAK,IAAI,EAAE,MAAM,aAAa,CAAA;AA0B1D,OAAO,KAAK,EAAgC,0BAA0B,EAAE,QAAQ,EAAkB,iBAAiB,IAAI,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAE/J,OAAO,KAAK,EAAE,KAAK,EAAqB,MAAM,kBAAkB,CAAA;AAMhE,UAAU,uBAAuB;IAC/B,KAAK,EAAE,KAAK,CAAA;IACZ,IAAI,CAAC,EAAE,IAAI,CAAA;CACZ;AAoBD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA+B;IACjE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqC;IACxE,OAAO,CAAC,mBAAmB,CAAe;IAC1C,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;gBAEvC,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,uBAAuB,EAAE,IAAI,CAAC,EAAE,0BAA0B;IAoDxF,OAAO,CAAC,aAAa;YAgBP,kBAAkB;IAahC;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IAkD3B;;;OAGG;YACW,iBAAiB;IA8E/B;;;;;;OAMG;IACG,KAAK,CAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAwDhF;;OAEG;IACG,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAI7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -124,7 +124,7 @@ export class VerifiedFetch {
|
|
|
124
124
|
* Server-Timing header to the response if it has been collected. It should be used for any final processing of the
|
|
125
125
|
* response before it is returned to the user.
|
|
126
126
|
*/
|
|
127
|
-
handleFinalResponse(response, { query, cid, reqFormat, ttl, protocol, ipfsPath } = {}) {
|
|
127
|
+
handleFinalResponse(response, { query, cid, reqFormat, ttl, protocol, ipfsPath, pathDetails } = {}) {
|
|
128
128
|
if (this.serverTimingHeaders.length > 0) {
|
|
129
129
|
const headerString = this.serverTimingHeaders.join(', ');
|
|
130
130
|
response.headers.set('Server-Timing', headerString);
|
|
@@ -157,7 +157,7 @@ export class VerifiedFetch {
|
|
|
157
157
|
this.log.trace('no content disposition specified');
|
|
158
158
|
}
|
|
159
159
|
if (cid != null && response.headers.get('etag') == null) {
|
|
160
|
-
response.headers.set('etag', getETag({ cid, reqFormat, weak: false }));
|
|
160
|
+
response.headers.set('etag', getETag({ cid: pathDetails?.terminalElement.cid ?? cid, reqFormat, weak: false }));
|
|
161
161
|
}
|
|
162
162
|
if (protocol != null) {
|
|
163
163
|
setCacheControlHeader({ response, ttl, protocol });
|
|
@@ -252,55 +252,41 @@ export class VerifiedFetch {
|
|
|
252
252
|
const options = convertOptions(opts);
|
|
253
253
|
const withServerTiming = options?.withServerTiming ?? this.withServerTiming;
|
|
254
254
|
options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:start', { resource }));
|
|
255
|
-
|
|
256
|
-
let cid;
|
|
257
|
-
let path;
|
|
258
|
-
let query;
|
|
259
|
-
let ttl;
|
|
260
|
-
let protocol;
|
|
261
|
-
let ipfsPath;
|
|
255
|
+
let parsedResult;
|
|
262
256
|
try {
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
path = result.path;
|
|
266
|
-
query = result.query;
|
|
267
|
-
ttl = result.ttl;
|
|
268
|
-
protocol = result.protocol;
|
|
269
|
-
ipfsPath = result.ipfsPath;
|
|
270
|
-
this.serverTimingHeaders.push(...result.serverTimings.map(({ header }) => header));
|
|
257
|
+
parsedResult = await this.handleServerTiming('parse-resource', '', async () => parseResource(resource, { ipns: this.ipns, logger: this.helia.logger }, { withServerTiming, ...options }), withServerTiming);
|
|
258
|
+
this.serverTimingHeaders.push(...parsedResult.serverTimings.map(({ header }) => header));
|
|
271
259
|
}
|
|
272
260
|
catch (err) {
|
|
273
261
|
options?.signal?.throwIfAborted();
|
|
274
262
|
this.log.error('error parsing resource %s', resource, err);
|
|
275
263
|
return this.handleFinalResponse(badRequestResponse(resource.toString(), err));
|
|
276
264
|
}
|
|
277
|
-
options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:resolve', { cid, path }));
|
|
278
|
-
const acceptHeader = getResolvedAcceptHeader({ query, headers: options?.headers, logger: this.helia.logger });
|
|
279
|
-
const accept = selectOutputType(cid, acceptHeader);
|
|
265
|
+
options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:resolve', { cid: parsedResult.cid, path: parsedResult.path }));
|
|
266
|
+
const acceptHeader = getResolvedAcceptHeader({ query: parsedResult.query, headers: options?.headers, logger: this.helia.logger });
|
|
267
|
+
const accept = selectOutputType(parsedResult.cid, acceptHeader);
|
|
280
268
|
this.log('output type %s', accept);
|
|
281
269
|
if (acceptHeader != null && accept == null) {
|
|
282
270
|
return this.handleFinalResponse(notAcceptableResponse(resource.toString()));
|
|
283
271
|
}
|
|
284
272
|
const responseContentType = accept?.split(';')[0] ?? 'application/octet-stream';
|
|
285
|
-
const redirectResponse = await getRedirectResponse({ resource, options, logger: this.helia.logger, cid });
|
|
273
|
+
const redirectResponse = await getRedirectResponse({ resource, options, logger: this.helia.logger, cid: parsedResult.cid });
|
|
286
274
|
if (redirectResponse != null) {
|
|
287
275
|
return this.handleFinalResponse(redirectResponse);
|
|
288
276
|
}
|
|
289
|
-
const context = {
|
|
290
|
-
|
|
277
|
+
const context = {
|
|
278
|
+
...parsedResult,
|
|
279
|
+
resource: resource.toString(),
|
|
280
|
+
accept,
|
|
281
|
+
options,
|
|
282
|
+
withServerTiming,
|
|
283
|
+
onProgress: options?.onProgress,
|
|
284
|
+
modified: 0
|
|
285
|
+
};
|
|
286
|
+
this.log.trace('finding handler for cid code "%s" and response content type "%s"', parsedResult.cid.code, responseContentType);
|
|
291
287
|
const response = await this.runPluginPipeline(context);
|
|
292
|
-
options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:end', { cid, path }));
|
|
293
|
-
return this.handleFinalResponse(response ?? notSupportedResponse(resource.toString()),
|
|
294
|
-
query: {
|
|
295
|
-
...query,
|
|
296
|
-
...context.query
|
|
297
|
-
},
|
|
298
|
-
cid,
|
|
299
|
-
reqFormat: context.reqFormat,
|
|
300
|
-
ttl,
|
|
301
|
-
protocol,
|
|
302
|
-
ipfsPath
|
|
303
|
-
});
|
|
288
|
+
options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:end', { cid: parsedResult.cid, path: parsedResult.path }));
|
|
289
|
+
return this.handleFinalResponse(response ?? notSupportedResponse(resource.toString()), context);
|
|
304
290
|
}
|
|
305
291
|
/**
|
|
306
292
|
* Start the Helia instance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verified-fetch.js","sourceRoot":"","sources":["../../src/verified-fetch.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"verified-fetch.js","sourceRoot":"","sources":["../../src/verified-fetch.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@helia/verified-fetch",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.3",
|
|
4
4
|
"description": "A fetch-like API for obtaining verified & trustless IPFS content on the web",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/ipfs/helia-verified-fetch/tree/main/packages/verified-fetch#readme",
|
|
@@ -4,6 +4,16 @@ import { okResponse } from '../utils/responses.js'
|
|
|
4
4
|
import { BasePlugin } from './plugin-base.js'
|
|
5
5
|
import type { PluginContext } from './types.js'
|
|
6
6
|
|
|
7
|
+
function getFilename ({ cid, ipfsPath, query }: Pick<PluginContext, 'query' | 'cid' | 'ipfsPath'>): string {
|
|
8
|
+
if (query.filename != null) {
|
|
9
|
+
return query.filename
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// convert context.ipfsPath to a filename. replace all / with _, replace prefix protocol with empty string
|
|
13
|
+
const filename = ipfsPath.replace(/\/ipfs\//, '').replace(/\/ipns\//, '').replace(/\//g, '_')
|
|
14
|
+
|
|
15
|
+
return `${filename}.car`
|
|
16
|
+
}
|
|
7
17
|
/**
|
|
8
18
|
* Accepts a `CID` and returns a `Response` with a body stream that is a CAR
|
|
9
19
|
* of the `DAG` referenced by the `CID`.
|
|
@@ -15,14 +25,14 @@ export class CarPlugin extends BasePlugin {
|
|
|
15
25
|
}
|
|
16
26
|
|
|
17
27
|
async handle (context: PluginContext): Promise<Response> {
|
|
18
|
-
const { options } = context
|
|
28
|
+
const { options, pathDetails, cid } = context
|
|
19
29
|
const { getBlockstore, helia } = this.pluginOptions
|
|
20
30
|
context.reqFormat = 'car'
|
|
21
31
|
context.query.download = true
|
|
22
|
-
context.query.filename = context
|
|
23
|
-
const blockstore = getBlockstore(
|
|
32
|
+
context.query.filename = getFilename(context)
|
|
33
|
+
const blockstore = getBlockstore(cid, context.resource, options?.session ?? true, options)
|
|
24
34
|
const c = car({ blockstore, getCodec: helia.getCodec })
|
|
25
|
-
const stream = toBrowserReadableStream(c.stream(
|
|
35
|
+
const stream = toBrowserReadableStream(c.stream(pathDetails?.terminalElement.cid ?? cid, options))
|
|
26
36
|
|
|
27
37
|
const response = okResponse(context.resource, stream)
|
|
28
38
|
response.headers.set('content-type', 'application/vnd.ipld.car; version=1')
|
package/src/plugins/types.ts
CHANGED
|
@@ -29,7 +29,7 @@ export interface PluginOptions {
|
|
|
29
29
|
* - Shared Data: Allows plugins to communicate partial results, discovered data, or interim errors.
|
|
30
30
|
* - Ephemeral: Typically discarded once fetch(...) completes.
|
|
31
31
|
*/
|
|
32
|
-
export interface PluginContext {
|
|
32
|
+
export interface PluginContext extends ParsedUrlStringResults {
|
|
33
33
|
readonly cid: CID
|
|
34
34
|
readonly path: string
|
|
35
35
|
readonly resource: string
|
|
@@ -47,7 +47,6 @@ export interface PluginContext {
|
|
|
47
47
|
errors?: PluginError[]
|
|
48
48
|
reqFormat?: RequestFormatShorthand
|
|
49
49
|
pathDetails?: PathWalkerResponse
|
|
50
|
-
query: ParsedUrlStringResults['query']
|
|
51
50
|
[key: string]: unknown
|
|
52
51
|
}
|
|
53
52
|
|
|
@@ -4,15 +4,15 @@ import { fileTypeFromBuffer } from 'file-type'
|
|
|
4
4
|
const log = logger('helia:verified-fetch:content-type-parser')
|
|
5
5
|
|
|
6
6
|
export const defaultMimeType = 'application/octet-stream'
|
|
7
|
-
function checkForSvg (
|
|
7
|
+
function checkForSvg (text: string): boolean {
|
|
8
8
|
log('checking for svg')
|
|
9
|
-
return /^(<\?xml[^>]+>)?[^<^\w]+<svg/ig.test(
|
|
9
|
+
return /^(<\?xml[^>]+>)?[^<^\w]+<svg/ig.test(text)
|
|
10
10
|
}
|
|
11
11
|
|
|
12
|
-
async function checkForJson (
|
|
12
|
+
async function checkForJson (text: string): Promise<boolean> {
|
|
13
13
|
log('checking for json')
|
|
14
14
|
try {
|
|
15
|
-
JSON.parse(
|
|
15
|
+
JSON.parse(text)
|
|
16
16
|
return true
|
|
17
17
|
} catch (err) {
|
|
18
18
|
log('failed to parse as json', err)
|
|
@@ -20,6 +20,21 @@ async function checkForJson (bytes: Uint8Array): Promise<boolean> {
|
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
+
function getText (bytes: Uint8Array): string | null {
|
|
24
|
+
log('checking for text')
|
|
25
|
+
const decoder = new TextDecoder('utf-8', { fatal: true })
|
|
26
|
+
try {
|
|
27
|
+
return decoder.decode(bytes)
|
|
28
|
+
} catch (err) {
|
|
29
|
+
return null
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
async function checkForHtml (text: string): Promise<boolean> {
|
|
34
|
+
log('checking for html')
|
|
35
|
+
return /^\s*<(?:!doctype\s+html|html|head|body)\b/i.test(text)
|
|
36
|
+
}
|
|
37
|
+
|
|
23
38
|
export async function contentTypeParser (bytes: Uint8Array, fileName?: string): Promise<string> {
|
|
24
39
|
log('contentTypeParser called for fileName: %s, byte size=%s', fileName, bytes.length)
|
|
25
40
|
const detectedType = (await fileTypeFromBuffer(bytes))?.mime
|
|
@@ -30,11 +45,19 @@ export async function contentTypeParser (bytes: Uint8Array, fileName?: string):
|
|
|
30
45
|
log('no detectedType')
|
|
31
46
|
|
|
32
47
|
if (fileName == null) {
|
|
33
|
-
// no other way to determine file-type.
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
48
|
+
// it's likely text... no other way to determine file-type.
|
|
49
|
+
const text = getText(bytes)
|
|
50
|
+
if (text != null) {
|
|
51
|
+
// check for svg, json, html, or it's plain text.
|
|
52
|
+
if (checkForSvg(text)) {
|
|
53
|
+
return 'image/svg+xml'
|
|
54
|
+
} else if (await checkForJson(text)) {
|
|
55
|
+
return 'application/json'
|
|
56
|
+
} else if (await checkForHtml(text)) {
|
|
57
|
+
return 'text/html; charset=utf-8'
|
|
58
|
+
} else {
|
|
59
|
+
return 'text/plain; charset=utf-8'
|
|
60
|
+
}
|
|
38
61
|
}
|
|
39
62
|
return defaultMimeType
|
|
40
63
|
}
|
package/src/verified-fetch.ts
CHANGED
|
@@ -26,7 +26,6 @@ import { selectOutputType } from './utils/select-output-type.js'
|
|
|
26
26
|
import { serverTiming } from './utils/server-timing.js'
|
|
27
27
|
import type { CIDDetail, ContentTypeParser, CreateVerifiedFetchOptions, Resource, ResourceDetail, VerifiedFetchInit as VerifiedFetchOptions } from './index.js'
|
|
28
28
|
import type { VerifiedFetchPlugin, PluginContext, PluginOptions } from './plugins/types.js'
|
|
29
|
-
import type { RequestFormatShorthand } from './types.js'
|
|
30
29
|
import type { Helia, SessionBlockstore } from '@helia/interface'
|
|
31
30
|
import type { Blockstore } from 'interface-blockstore'
|
|
32
31
|
|
|
@@ -56,16 +55,6 @@ function convertOptions (options?: VerifiedFetchOptions): (Omit<VerifiedFetchOpt
|
|
|
56
55
|
}
|
|
57
56
|
}
|
|
58
57
|
|
|
59
|
-
// TODO: merge/combine with PluginContext
|
|
60
|
-
interface FinalResponseContext {
|
|
61
|
-
cid?: ParsedUrlStringResults['cid']
|
|
62
|
-
reqFormat?: RequestFormatShorthand
|
|
63
|
-
ttl?: ParsedUrlStringResults['ttl']
|
|
64
|
-
protocol?: ParsedUrlStringResults['protocol']
|
|
65
|
-
ipfsPath?: string
|
|
66
|
-
query?: ParsedUrlStringResults['query']
|
|
67
|
-
}
|
|
68
|
-
|
|
69
58
|
export class VerifiedFetch {
|
|
70
59
|
private readonly helia: Helia
|
|
71
60
|
private readonly ipns: IPNS
|
|
@@ -162,7 +151,7 @@ export class VerifiedFetch {
|
|
|
162
151
|
* Server-Timing header to the response if it has been collected. It should be used for any final processing of the
|
|
163
152
|
* response before it is returned to the user.
|
|
164
153
|
*/
|
|
165
|
-
private handleFinalResponse (response: Response, { query, cid, reqFormat, ttl, protocol, ipfsPath }:
|
|
154
|
+
private handleFinalResponse (response: Response, { query, cid, reqFormat, ttl, protocol, ipfsPath, pathDetails }: Partial<PluginContext> = {}): Response {
|
|
166
155
|
if (this.serverTimingHeaders.length > 0) {
|
|
167
156
|
const headerString = this.serverTimingHeaders.join(', ')
|
|
168
157
|
response.headers.set('Server-Timing', headerString)
|
|
@@ -199,7 +188,7 @@ export class VerifiedFetch {
|
|
|
199
188
|
}
|
|
200
189
|
|
|
201
190
|
if (cid != null && response.headers.get('etag') == null) {
|
|
202
|
-
response.headers.set('etag', getETag({ cid, reqFormat, weak: false }))
|
|
191
|
+
response.headers.set('etag', getETag({ cid: pathDetails?.terminalElement.cid ?? cid, reqFormat, weak: false }))
|
|
203
192
|
}
|
|
204
193
|
|
|
205
194
|
if (protocol != null) {
|
|
@@ -308,22 +297,11 @@ export class VerifiedFetch {
|
|
|
308
297
|
const withServerTiming = options?.withServerTiming ?? this.withServerTiming
|
|
309
298
|
|
|
310
299
|
options?.onProgress?.(new CustomProgressEvent<ResourceDetail>('verified-fetch:request:start', { resource }))
|
|
311
|
-
|
|
312
|
-
let
|
|
313
|
-
let path: ParsedUrlStringResults['path']
|
|
314
|
-
let query: ParsedUrlStringResults['query']
|
|
315
|
-
let ttl: ParsedUrlStringResults['ttl']
|
|
316
|
-
let protocol: ParsedUrlStringResults['protocol']
|
|
317
|
-
let ipfsPath: string
|
|
300
|
+
|
|
301
|
+
let parsedResult: ParsedUrlStringResults
|
|
318
302
|
try {
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
path = result.path
|
|
322
|
-
query = result.query
|
|
323
|
-
ttl = result.ttl
|
|
324
|
-
protocol = result.protocol
|
|
325
|
-
ipfsPath = result.ipfsPath
|
|
326
|
-
this.serverTimingHeaders.push(...result.serverTimings.map(({ header }) => header))
|
|
303
|
+
parsedResult = await this.handleServerTiming('parse-resource', '', async () => parseResource(resource, { ipns: this.ipns, logger: this.helia.logger }, { withServerTiming, ...options }), withServerTiming)
|
|
304
|
+
this.serverTimingHeaders.push(...parsedResult.serverTimings.map(({ header }) => header))
|
|
327
305
|
} catch (err: any) {
|
|
328
306
|
options?.signal?.throwIfAborted()
|
|
329
307
|
this.log.error('error parsing resource %s', resource, err)
|
|
@@ -331,11 +309,11 @@ export class VerifiedFetch {
|
|
|
331
309
|
return this.handleFinalResponse(badRequestResponse(resource.toString(), err))
|
|
332
310
|
}
|
|
333
311
|
|
|
334
|
-
options?.onProgress?.(new CustomProgressEvent<CIDDetail>('verified-fetch:request:resolve', { cid, path }))
|
|
312
|
+
options?.onProgress?.(new CustomProgressEvent<CIDDetail>('verified-fetch:request:resolve', { cid: parsedResult.cid, path: parsedResult.path }))
|
|
335
313
|
|
|
336
|
-
const acceptHeader = getResolvedAcceptHeader({ query, headers: options?.headers, logger: this.helia.logger })
|
|
314
|
+
const acceptHeader = getResolvedAcceptHeader({ query: parsedResult.query, headers: options?.headers, logger: this.helia.logger })
|
|
337
315
|
|
|
338
|
-
const accept: string | undefined = selectOutputType(cid, acceptHeader)
|
|
316
|
+
const accept: string | undefined = selectOutputType(parsedResult.cid, acceptHeader)
|
|
339
317
|
this.log('output type %s', accept)
|
|
340
318
|
|
|
341
319
|
if (acceptHeader != null && accept == null) {
|
|
@@ -344,30 +322,28 @@ export class VerifiedFetch {
|
|
|
344
322
|
|
|
345
323
|
const responseContentType: string = accept?.split(';')[0] ?? 'application/octet-stream'
|
|
346
324
|
|
|
347
|
-
const redirectResponse = await getRedirectResponse({ resource, options, logger: this.helia.logger, cid })
|
|
325
|
+
const redirectResponse = await getRedirectResponse({ resource, options, logger: this.helia.logger, cid: parsedResult.cid })
|
|
348
326
|
if (redirectResponse != null) {
|
|
349
327
|
return this.handleFinalResponse(redirectResponse)
|
|
350
328
|
}
|
|
351
329
|
|
|
352
|
-
const context: PluginContext = {
|
|
330
|
+
const context: PluginContext = {
|
|
331
|
+
...parsedResult,
|
|
332
|
+
resource: resource.toString(),
|
|
333
|
+
accept,
|
|
334
|
+
options,
|
|
335
|
+
withServerTiming,
|
|
336
|
+
onProgress: options?.onProgress,
|
|
337
|
+
modified: 0
|
|
338
|
+
}
|
|
353
339
|
|
|
354
|
-
this.log.trace('finding handler for cid code "%s" and response content type "%s"', cid.code, responseContentType)
|
|
340
|
+
this.log.trace('finding handler for cid code "%s" and response content type "%s"', parsedResult.cid.code, responseContentType)
|
|
355
341
|
|
|
356
342
|
const response = await this.runPluginPipeline(context)
|
|
357
343
|
|
|
358
|
-
options?.onProgress?.(new CustomProgressEvent<CIDDetail>('verified-fetch:request:end', { cid, path }))
|
|
359
|
-
|
|
360
|
-
return this.handleFinalResponse(response ?? notSupportedResponse(resource.toString()),
|
|
361
|
-
query: {
|
|
362
|
-
...query,
|
|
363
|
-
...context.query
|
|
364
|
-
},
|
|
365
|
-
cid,
|
|
366
|
-
reqFormat: context.reqFormat,
|
|
367
|
-
ttl,
|
|
368
|
-
protocol,
|
|
369
|
-
ipfsPath
|
|
370
|
-
})
|
|
344
|
+
options?.onProgress?.(new CustomProgressEvent<CIDDetail>('verified-fetch:request:end', { cid: parsedResult.cid, path: parsedResult.path }))
|
|
345
|
+
|
|
346
|
+
return this.handleFinalResponse(response ?? notSupportedResponse(resource.toString()), context)
|
|
371
347
|
}
|
|
372
348
|
|
|
373
349
|
/**
|