@helia/verified-fetch 4.0.0 → 4.0.1
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 +7 -49
- package/dist/index.min.js +52 -47
- package/dist/index.min.js.map +4 -4
- package/dist/src/index.d.ts +8 -50
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +8 -50
- package/dist/src/index.js.map +1 -1
- package/dist/src/plugins/index.d.ts +0 -1
- package/dist/src/plugins/index.d.ts.map +1 -1
- package/dist/src/plugins/index.js +0 -1
- package/dist/src/plugins/index.js.map +1 -1
- package/dist/src/plugins/plugin-base.d.ts.map +1 -1
- package/dist/src/plugins/plugin-base.js +3 -2
- package/dist/src/plugins/plugin-base.js.map +1 -1
- package/dist/src/plugins/plugin-handle-car.d.ts.map +1 -1
- package/dist/src/plugins/plugin-handle-car.js +0 -1
- package/dist/src/plugins/plugin-handle-car.js.map +1 -1
- package/dist/src/plugins/plugin-handle-dag-cbor-html-preview.d.ts.map +1 -1
- package/dist/src/plugins/plugin-handle-dag-cbor-html-preview.js +0 -1
- package/dist/src/plugins/plugin-handle-dag-cbor-html-preview.js.map +1 -1
- package/dist/src/plugins/plugin-handle-dag-cbor.d.ts.map +1 -1
- package/dist/src/plugins/plugin-handle-dag-cbor.js +0 -1
- package/dist/src/plugins/plugin-handle-dag-cbor.js.map +1 -1
- package/dist/src/plugins/plugin-handle-dag-pb.d.ts.map +1 -1
- package/dist/src/plugins/plugin-handle-dag-pb.js +13 -16
- package/dist/src/plugins/plugin-handle-dag-pb.js.map +1 -1
- package/dist/src/plugins/plugin-handle-dag-walk.d.ts +8 -4
- package/dist/src/plugins/plugin-handle-dag-walk.d.ts.map +1 -1
- package/dist/src/plugins/plugin-handle-dag-walk.js +8 -5
- package/dist/src/plugins/plugin-handle-dag-walk.js.map +1 -1
- package/dist/src/plugins/plugin-handle-ipns-record.d.ts +1 -1
- package/dist/src/plugins/plugin-handle-ipns-record.d.ts.map +1 -1
- package/dist/src/plugins/plugin-handle-ipns-record.js +3 -5
- package/dist/src/plugins/plugin-handle-ipns-record.js.map +1 -1
- package/dist/src/plugins/plugin-handle-json.d.ts.map +1 -1
- package/dist/src/plugins/plugin-handle-json.js +0 -1
- package/dist/src/plugins/plugin-handle-json.js.map +1 -1
- package/dist/src/plugins/plugin-handle-raw.d.ts.map +1 -1
- package/dist/src/plugins/plugin-handle-raw.js +3 -7
- package/dist/src/plugins/plugin-handle-raw.js.map +1 -1
- package/dist/src/plugins/plugin-handle-tar.d.ts.map +1 -1
- package/dist/src/plugins/plugin-handle-tar.js +0 -1
- package/dist/src/plugins/plugin-handle-tar.js.map +1 -1
- package/dist/src/plugins/types.d.ts +5 -7
- package/dist/src/plugins/types.d.ts.map +1 -1
- package/dist/src/utils/byte-range-context.d.ts +2 -2
- package/dist/src/utils/byte-range-context.d.ts.map +1 -1
- package/dist/src/utils/byte-range-context.js +1 -1
- package/dist/src/utils/byte-range-context.js.map +1 -1
- package/dist/src/utils/content-type-parser.d.ts.map +1 -1
- package/dist/src/utils/content-type-parser.js +0 -10
- package/dist/src/utils/content-type-parser.js.map +1 -1
- package/dist/src/utils/error-to-object.d.ts +6 -0
- package/dist/src/utils/error-to-object.d.ts.map +1 -0
- package/dist/src/utils/error-to-object.js +20 -0
- package/dist/src/utils/error-to-object.js.map +1 -0
- package/dist/src/utils/get-stream-from-async-iterable.d.ts +2 -2
- package/dist/src/utils/get-stream-from-async-iterable.d.ts.map +1 -1
- package/dist/src/utils/get-stream-from-async-iterable.js +2 -2
- package/dist/src/utils/get-stream-from-async-iterable.js.map +1 -1
- package/dist/src/utils/responses.d.ts +2 -1
- package/dist/src/utils/responses.d.ts.map +1 -1
- package/dist/src/utils/responses.js +12 -1
- package/dist/src/utils/responses.js.map +1 -1
- package/dist/src/utils/walk-path.js +1 -1
- package/dist/src/utils/walk-path.js.map +1 -1
- package/dist/src/verified-fetch.d.ts.map +1 -1
- package/dist/src/verified-fetch.js +36 -28
- package/dist/src/verified-fetch.js.map +1 -1
- package/dist/typedoc-urls.json +0 -2
- package/package.json +2 -2
- package/src/index.ts +8 -50
- package/src/plugins/index.ts +0 -1
- package/src/plugins/plugin-base.ts +3 -2
- package/src/plugins/plugin-handle-car.ts +0 -2
- package/src/plugins/plugin-handle-dag-cbor-html-preview.ts +2 -1
- package/src/plugins/plugin-handle-dag-cbor.ts +3 -1
- package/src/plugins/plugin-handle-dag-pb.ts +23 -15
- package/src/plugins/plugin-handle-dag-walk.ts +10 -5
- package/src/plugins/plugin-handle-ipns-record.ts +5 -5
- package/src/plugins/plugin-handle-json.ts +1 -1
- package/src/plugins/plugin-handle-raw.ts +6 -7
- package/src/plugins/plugin-handle-tar.ts +2 -1
- package/src/plugins/types.ts +6 -8
- package/src/utils/byte-range-context.ts +3 -3
- package/src/utils/content-type-parser.ts +5 -11
- package/src/utils/error-to-object.ts +22 -0
- package/src/utils/get-stream-from-async-iterable.ts +4 -4
- package/src/utils/responses.ts +15 -1
- package/src/utils/walk-path.ts +1 -1
- package/src/verified-fetch.ts +46 -28
- package/dist/src/plugins/errors.d.ts +0 -25
- package/dist/src/plugins/errors.d.ts.map +0 -1
- package/dist/src/plugins/errors.js +0 -33
- package/dist/src/plugins/errors.js.map +0 -1
- package/src/plugins/errors.ts +0 -37
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verified-fetch.d.ts","sourceRoot":"","sources":["../../src/verified-fetch.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAgC,0BAA0B,EAAoB,QAAQ,EAAkB,iBAAiB,IAAI,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAIjL,OAAO,KAAK,EAAE,KAAK,EAAqB,MAAM,kBAAkB,CAAA;AA2BhE,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,kBAAkB,CAAqC;IACxE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;gBAEvC,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,0BAA+B;
|
|
1
|
+
{"version":3,"file":"verified-fetch.d.ts","sourceRoot":"","sources":["../../src/verified-fetch.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAgC,0BAA0B,EAAoB,QAAQ,EAAkB,iBAAiB,IAAI,oBAAoB,EAAE,MAAM,YAAY,CAAA;AAIjL,OAAO,KAAK,EAAE,KAAK,EAAqB,MAAM,kBAAkB,CAAA;AA2BhE,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,kBAAkB,CAAqC;IACxE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA4B;gBAEvC,KAAK,EAAE,KAAK,EAAE,IAAI,GAAE,0BAA+B;IAoDhE,OAAO,CAAC,aAAa;IAgBrB;;;;OAIG;IACH,OAAO,CAAC,mBAAmB;IA2F3B;;;OAGG;YACW,iBAAiB;IAiG/B;;;;;;OAMG;IACG,KAAK,CAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC;IA+EhF;;OAEG;IACG,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAI7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { dnsLink } from '@helia/dnslink';
|
|
2
2
|
import { ipnsResolver } from '@helia/ipns';
|
|
3
3
|
import { AbortError } from '@libp2p/interface';
|
|
4
|
-
import { prefixLogger } from '@libp2p/logger';
|
|
5
4
|
import { CustomProgressEvent } from 'progress-events';
|
|
6
5
|
import QuickLRU from 'quick-lru';
|
|
7
6
|
import { ByteRangeContextPlugin } from './plugins/plugin-handle-byte-range-context.js';
|
|
@@ -15,6 +14,7 @@ import { RawPlugin } from './plugins/plugin-handle-raw.js';
|
|
|
15
14
|
import { TarPlugin } from './plugins/plugin-handle-tar.js';
|
|
16
15
|
import { URLResolver } from "./url-resolver.js";
|
|
17
16
|
import { contentTypeParser } from './utils/content-type-parser.js';
|
|
17
|
+
import { errorToObject } from "./utils/error-to-object.js";
|
|
18
18
|
import { getContentDispositionFilename } from './utils/get-content-disposition-filename.js';
|
|
19
19
|
import { getETag } from './utils/get-e-tag.js';
|
|
20
20
|
import { getResolvedAcceptHeader } from './utils/get-resolved-accept-header.js';
|
|
@@ -22,7 +22,7 @@ import { getRedirectResponse } from './utils/handle-redirects.js';
|
|
|
22
22
|
import { uriEncodeIPFSPath } from "./utils/ipfs-path-to-string.js";
|
|
23
23
|
import { resourceToSessionCacheKey } from './utils/resource-to-cache-key.js';
|
|
24
24
|
import { setCacheControlHeader } from './utils/response-headers.js';
|
|
25
|
-
import { badRequestResponse, notAcceptableResponse,
|
|
25
|
+
import { badRequestResponse, notAcceptableResponse, internalServerErrorResponse, notImplementedResponse } from './utils/responses.js';
|
|
26
26
|
import { selectOutputType } from './utils/select-output-type.js';
|
|
27
27
|
import { ServerTiming } from './utils/server-timing.js';
|
|
28
28
|
const SESSION_CACHE_MAX_SIZE = 100;
|
|
@@ -68,7 +68,7 @@ export class VerifiedFetch {
|
|
|
68
68
|
this.withServerTiming = init?.withServerTiming ?? false;
|
|
69
69
|
const pluginOptions = {
|
|
70
70
|
...init,
|
|
71
|
-
logger:
|
|
71
|
+
logger: helia.logger.forComponent('verified-fetch'),
|
|
72
72
|
getBlockstore: (cid, resource, useSession, options) => this.getBlockstore(cid, resource, useSession, options),
|
|
73
73
|
helia,
|
|
74
74
|
contentTypeParser: this.contentTypeParser,
|
|
@@ -97,7 +97,6 @@ export class VerifiedFetch {
|
|
|
97
97
|
else {
|
|
98
98
|
this.plugins = defaultPlugins;
|
|
99
99
|
}
|
|
100
|
-
this.log.trace('created VerifiedFetch instance');
|
|
101
100
|
}
|
|
102
101
|
getBlockstore(root, resource, useSession = true, options = {}) {
|
|
103
102
|
const key = resourceToSessionCacheKey(resource);
|
|
@@ -132,30 +131,23 @@ export class VerifiedFetch {
|
|
|
132
131
|
}
|
|
133
132
|
// set Content-Disposition header
|
|
134
133
|
let contentDisposition;
|
|
135
|
-
this.log.trace('checking for content disposition');
|
|
136
134
|
// force download if requested
|
|
137
135
|
if (context?.query?.download === true) {
|
|
136
|
+
this.log.trace('download requested');
|
|
138
137
|
contentDisposition = 'attachment';
|
|
139
138
|
}
|
|
140
|
-
else {
|
|
141
|
-
this.log.trace('download not requested');
|
|
142
|
-
}
|
|
143
139
|
// override filename if requested
|
|
144
140
|
if (context?.query?.filename != null) {
|
|
141
|
+
this.log.trace('specific filename requested');
|
|
145
142
|
if (contentDisposition == null) {
|
|
146
143
|
contentDisposition = 'inline';
|
|
147
144
|
}
|
|
148
145
|
contentDisposition = `${contentDisposition}; ${getContentDispositionFilename(context.query.filename)}`;
|
|
149
146
|
}
|
|
150
|
-
else {
|
|
151
|
-
this.log.trace('no filename specified in query');
|
|
152
|
-
}
|
|
153
147
|
if (contentDisposition != null) {
|
|
148
|
+
this.log.trace('content disposition %s', contentDisposition);
|
|
154
149
|
response.headers.set('Content-Disposition', contentDisposition);
|
|
155
150
|
}
|
|
156
|
-
else {
|
|
157
|
-
this.log.trace('no content disposition specified');
|
|
158
|
-
}
|
|
159
151
|
if (context?.cid != null && response.headers.get('etag') == null) {
|
|
160
152
|
response.headers.set('etag', getETag({
|
|
161
153
|
cid: context.pathDetails?.terminalElement.cid ?? context.cid,
|
|
@@ -211,28 +203,30 @@ export class VerifiedFetch {
|
|
|
211
203
|
while (passCount < maxPasses) {
|
|
212
204
|
this.log(`starting pipeline pass #${passCount + 1}`);
|
|
213
205
|
passCount++;
|
|
206
|
+
this.log.trace('checking which plugins can handle %c%s with accept %o', context.cid, context.path != null ? `/${context.path}` : '', context.accept);
|
|
214
207
|
// gather plugins that say they can handle the *current* context, but haven't been used yet
|
|
215
208
|
const readyPlugins = this.plugins.filter(p => !pluginsUsed.has(p.id)).filter(p => p.canHandle(context));
|
|
216
209
|
if (readyPlugins.length === 0) {
|
|
217
|
-
this.log.trace('no plugins can handle the current context
|
|
210
|
+
this.log.trace('no plugins can handle the current context, checking by CID code');
|
|
218
211
|
const plugins = this.plugins.filter(p => p.codes.includes(context.cid.code));
|
|
219
212
|
if (plugins.length > 0) {
|
|
220
213
|
readyPlugins.push(...plugins);
|
|
221
214
|
}
|
|
222
215
|
else {
|
|
223
|
-
this.log.trace('no plugins found that can handle request by CID code; exiting pipeline
|
|
216
|
+
this.log.trace('no plugins found that can handle request by CID code; exiting pipeline');
|
|
224
217
|
break;
|
|
225
218
|
}
|
|
226
219
|
}
|
|
227
|
-
this.log.trace('plugins ready to handle request: ', readyPlugins.map(p => p.id).join(', '));
|
|
220
|
+
this.log.trace('plugins ready to handle request: %s', readyPlugins.map(p => p.id).join(', '));
|
|
228
221
|
// track if any plugin changed the context or returned a response
|
|
229
222
|
let contextChanged = false;
|
|
230
223
|
let pluginHandled = false;
|
|
231
224
|
for (const plugin of readyPlugins) {
|
|
232
225
|
try {
|
|
233
|
-
this.log
|
|
226
|
+
this.log('invoking plugin: %s', plugin.id);
|
|
234
227
|
pluginsUsed.add(plugin.id);
|
|
235
228
|
const maybeResponse = await plugin.handle(context);
|
|
229
|
+
this.log('plugin response %s %o', plugin.id, maybeResponse);
|
|
236
230
|
if (maybeResponse != null) {
|
|
237
231
|
// if a plugin returns a final Response, short-circuit
|
|
238
232
|
finalResponse = maybeResponse;
|
|
@@ -244,12 +238,14 @@ export class VerifiedFetch {
|
|
|
244
238
|
if (context.options?.signal?.aborted) {
|
|
245
239
|
throw new AbortError(context.options?.signal?.reason);
|
|
246
240
|
}
|
|
247
|
-
this.log.error('error in plugin %s - %e', plugin.
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
241
|
+
this.log.error('error in plugin %s - %e', plugin.id, err);
|
|
242
|
+
return internalServerErrorResponse(context.resource, JSON.stringify({
|
|
243
|
+
error: errorToObject(err)
|
|
244
|
+
}), {
|
|
245
|
+
headers: {
|
|
246
|
+
'content-type': 'application/json'
|
|
247
|
+
}
|
|
248
|
+
});
|
|
253
249
|
}
|
|
254
250
|
finally {
|
|
255
251
|
// on each plugin call, check for changes in the context
|
|
@@ -272,7 +268,13 @@ export class VerifiedFetch {
|
|
|
272
268
|
break;
|
|
273
269
|
}
|
|
274
270
|
}
|
|
275
|
-
return finalResponse
|
|
271
|
+
return finalResponse ?? notImplementedResponse(context.resource, JSON.stringify({
|
|
272
|
+
error: errorToObject(new Error('No verified fetch plugin could handle the request'))
|
|
273
|
+
}), {
|
|
274
|
+
headers: {
|
|
275
|
+
'content-type': 'application/json'
|
|
276
|
+
}
|
|
277
|
+
});
|
|
276
278
|
}
|
|
277
279
|
/**
|
|
278
280
|
* We're starting to get to the point where we need a queue or pipeline of
|
|
@@ -308,7 +310,7 @@ export class VerifiedFetch {
|
|
|
308
310
|
options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:resolve', { cid: parsedResult.cid, path: parsedResult.path }));
|
|
309
311
|
const acceptHeader = getResolvedAcceptHeader({ query: parsedResult.query, headers: options?.headers, logger: this.helia.logger });
|
|
310
312
|
const accept = selectOutputType(parsedResult.cid, acceptHeader);
|
|
311
|
-
this.log('
|
|
313
|
+
this.log('accept %o', accept);
|
|
312
314
|
if (acceptHeader != null && accept == null) {
|
|
313
315
|
this.log.error('could not fulfil request based on accept header');
|
|
314
316
|
return this.handleFinalResponse(notAcceptableResponse(resource.toString()));
|
|
@@ -332,8 +334,14 @@ export class VerifiedFetch {
|
|
|
332
334
|
};
|
|
333
335
|
this.log.trace('finding handler for cid code "%s" and response content type "%s"', parsedResult.cid.code, responseContentType);
|
|
334
336
|
const response = await this.runPluginPipeline(context);
|
|
335
|
-
options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:end', {
|
|
336
|
-
|
|
337
|
+
options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:end', {
|
|
338
|
+
cid: parsedResult.cid,
|
|
339
|
+
path: parsedResult.path
|
|
340
|
+
}));
|
|
341
|
+
if (response == null) {
|
|
342
|
+
this.log.error('no plugin could handle request for %s', resource);
|
|
343
|
+
}
|
|
344
|
+
return this.handleFinalResponse(response, context);
|
|
337
345
|
}
|
|
338
346
|
/**
|
|
339
347
|
* 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/dist/typedoc-urls.json
CHANGED
|
@@ -4,8 +4,6 @@
|
|
|
4
4
|
"BasePlugin": "https://ipfs.github.io/helia-verified-fetch/classes/index.BasePlugin.html",
|
|
5
5
|
"DagCborHtmlPreviewPlugin": "https://ipfs.github.io/helia-verified-fetch/classes/index.DagCborHtmlPreviewPlugin.html",
|
|
6
6
|
"DirIndexHtmlPlugin": "https://ipfs.github.io/helia-verified-fetch/classes/index.DirIndexHtmlPlugin.html",
|
|
7
|
-
"PluginError": "https://ipfs.github.io/helia-verified-fetch/classes/index.PluginError.html",
|
|
8
|
-
"PluginFatalError": "https://ipfs.github.io/helia-verified-fetch/classes/index.PluginFatalError.html",
|
|
9
7
|
"CIDDetail": "https://ipfs.github.io/helia-verified-fetch/interfaces/index.CIDDetail.html",
|
|
10
8
|
".:CIDDetail": "https://ipfs.github.io/helia-verified-fetch/interfaces/index.CIDDetail.html",
|
|
11
9
|
"CIDDetailError": "https://ipfs.github.io/helia-verified-fetch/interfaces/index.CIDDetailError.html",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@helia/verified-fetch",
|
|
3
|
-
"version": "4.0.
|
|
3
|
+
"version": "4.0.1",
|
|
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",
|
|
@@ -177,7 +177,6 @@
|
|
|
177
177
|
"@ipld/dag-pb": "^4.1.5",
|
|
178
178
|
"@libp2p/interface": "^3.0.0",
|
|
179
179
|
"@libp2p/kad-dht": "^16.0.0",
|
|
180
|
-
"@libp2p/logger": "^6.0.0",
|
|
181
180
|
"@libp2p/peer-id": "^6.0.0",
|
|
182
181
|
"@libp2p/utils": "^7.0.5",
|
|
183
182
|
"@libp2p/webrtc": "^6.0.0",
|
|
@@ -206,6 +205,7 @@
|
|
|
206
205
|
"@helia/json": "^5.0.0",
|
|
207
206
|
"@ipld/car": "^5.4.2",
|
|
208
207
|
"@libp2p/crypto": "^5.1.3",
|
|
208
|
+
"@libp2p/logger": "^6.0.0",
|
|
209
209
|
"@types/sinon": "^17.0.4",
|
|
210
210
|
"aegir": "^47.0.24",
|
|
211
211
|
"browser-readablestream-to-it": "^2.0.9",
|
package/src/index.ts
CHANGED
|
@@ -641,13 +641,13 @@
|
|
|
641
641
|
* Inspects the current `PluginContext` (which includes the CID, path, query, accept header, etc.)
|
|
642
642
|
* and returns `true` if the plugin can operate on the current state of the request.
|
|
643
643
|
*
|
|
644
|
-
* - **`handle(context: PluginContext): Promise<Response |
|
|
645
|
-
* Performs the plugin’s work. It
|
|
646
|
-
*
|
|
647
|
-
*
|
|
648
|
-
*
|
|
649
|
-
*
|
|
650
|
-
*
|
|
644
|
+
* - **`handle(context: PluginContext): Promise<Response | undefined>`**
|
|
645
|
+
* Performs the plugin’s work. It will only be executed if `canHandle` previously returned `true`.
|
|
646
|
+
* It may:
|
|
647
|
+
* - **Return a `Response`**: This stops the pipeline immediately and returns the response.
|
|
648
|
+
* - **Return `undefined`**: This indicates that the plugin has only partially processed the request
|
|
649
|
+
* (for example, by performing path walking or decoding) and the pipeline should continue.
|
|
650
|
+
* - **Throw an `Error`**: An Internal Server Error will be returned
|
|
651
651
|
*
|
|
652
652
|
* ### Plugin Pipeline
|
|
653
653
|
*
|
|
@@ -784,47 +784,6 @@
|
|
|
784
784
|
* const fetch = await createVerifiedFetch(helia, { plugins })
|
|
785
785
|
* ```
|
|
786
786
|
*
|
|
787
|
-
* ---
|
|
788
|
-
*
|
|
789
|
-
* ### Error Handling in the Plugin Pipeline
|
|
790
|
-
*
|
|
791
|
-
* Verified‑Fetch distinguishes between two types of errors thrown by plugins:
|
|
792
|
-
*
|
|
793
|
-
* - **PluginError (Non‑Fatal):**
|
|
794
|
-
* - Use this when your plugin encounters an issue that should be logged but does not prevent the pipeline
|
|
795
|
-
* from continuing.
|
|
796
|
-
* - When a plugin throws a `PluginError`, the error is logged and the pipeline continues with the next plugin.
|
|
797
|
-
*
|
|
798
|
-
* - **PluginFatalError (Fatal):**
|
|
799
|
-
* - Use this when a critical error occurs that should immediately abort the request.
|
|
800
|
-
* - When a plugin throws a `PluginFatalError`, the pipeline immediately terminates and the provided error
|
|
801
|
-
* response is returned.
|
|
802
|
-
*
|
|
803
|
-
* @example Plugin error Handling
|
|
804
|
-
*
|
|
805
|
-
* ```typescript
|
|
806
|
-
* import { PluginError, PluginFatalError } from '@helia/verified-fetch'
|
|
807
|
-
*
|
|
808
|
-
* // async handle(context: PluginContext): Promise<Response | null> {
|
|
809
|
-
* const recoverable = Math.random() > 0.5 // Use more sophisticated logic here ;)
|
|
810
|
-
* if (recoverable === true) {
|
|
811
|
-
* throw new PluginError('MY_CUSTOM_WARNING', 'A non‑fatal issue occurred', {
|
|
812
|
-
* details: {
|
|
813
|
-
* someKey: 'Additional details here'
|
|
814
|
-
* }
|
|
815
|
-
* })
|
|
816
|
-
* }
|
|
817
|
-
*
|
|
818
|
-
* if (recoverable === false) {
|
|
819
|
-
* throw new PluginFatalError('MY_CUSTOM_FATAL', 'A critical error occurred', {
|
|
820
|
-
* response: new Response('Something happened', { status: 500 }) // Required: supply your own error response
|
|
821
|
-
* })
|
|
822
|
-
* }
|
|
823
|
-
*
|
|
824
|
-
* // Otherwise, continue processing...
|
|
825
|
-
* // }
|
|
826
|
-
* ```
|
|
827
|
-
*
|
|
828
787
|
* ### How the Plugin Pipeline Works
|
|
829
788
|
*
|
|
830
789
|
* - **Shared Context:**
|
|
@@ -842,8 +801,7 @@
|
|
|
842
801
|
* This means you do not have to specify a rigid order, each plugin simply checks the context and acts if appropriate.
|
|
843
802
|
*
|
|
844
803
|
* - **Error Handling:**
|
|
845
|
-
* -
|
|
846
|
-
* - A thrown `PluginFatalError` immediately stops the pipeline and returns the error response.
|
|
804
|
+
* - Any thrown error immediately stops the pipeline and returns the error response.
|
|
847
805
|
*
|
|
848
806
|
* For a detailed explanation of the pipeline, please refer to the discussion in [Issue #167](https://github.com/ipfs/helia-verified-fetch/issues/167).
|
|
849
807
|
*/
|
package/src/plugins/index.ts
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* This file is the entry into all things we export from the `src/plugins` directory.
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
|
-
export { PluginError, PluginFatalError } from './errors.js'
|
|
6
5
|
export { BasePlugin } from './plugin-base.js'
|
|
7
6
|
export type { PluginOptions, PluginContext, VerifiedFetchPluginFactory } from './types.js'
|
|
8
7
|
export * from './plugins.js'
|
|
@@ -17,9 +17,10 @@ export abstract class BasePlugin implements VerifiedFetchPlugin {
|
|
|
17
17
|
protected _log?: Logger
|
|
18
18
|
|
|
19
19
|
get log (): Logger {
|
|
20
|
-
// instantiate the logger lazily because it depends on the id, which is not
|
|
20
|
+
// instantiate the logger lazily because it depends on the id, which is not
|
|
21
|
+
// set until after the constructor is called
|
|
21
22
|
if (this._log == null) {
|
|
22
|
-
this._log = this.pluginOptions.logger.
|
|
23
|
+
this._log = this.pluginOptions.logger.newScope(this.id)
|
|
23
24
|
}
|
|
24
25
|
return this._log
|
|
25
26
|
}
|
|
@@ -47,8 +47,6 @@ export class CarPlugin extends BasePlugin {
|
|
|
47
47
|
readonly id = 'car-plugin'
|
|
48
48
|
|
|
49
49
|
canHandle (context: PluginContext): boolean {
|
|
50
|
-
this.log('checking if we can handle %c with accept %s', context.cid, context.accept)
|
|
51
|
-
|
|
52
50
|
if (context.byteRangeContext == null) {
|
|
53
51
|
return false
|
|
54
52
|
}
|
|
@@ -51,13 +51,14 @@ export class DagCborHtmlPreviewPlugin extends BasePlugin {
|
|
|
51
51
|
readonly codes = [ipldDagCbor.code]
|
|
52
52
|
|
|
53
53
|
canHandle ({ cid, accept, pathDetails }: PluginContext): boolean {
|
|
54
|
-
this.log('checking if we can handle %c with accept %s', cid, accept)
|
|
55
54
|
if (pathDetails == null) {
|
|
56
55
|
return false
|
|
57
56
|
}
|
|
57
|
+
|
|
58
58
|
if (!isObjectNode(pathDetails.terminalElement)) {
|
|
59
59
|
return false
|
|
60
60
|
}
|
|
61
|
+
|
|
61
62
|
if (cid.code !== ipldDagCbor.code) {
|
|
62
63
|
return false
|
|
63
64
|
}
|
|
@@ -16,16 +16,18 @@ export class DagCborPlugin extends BasePlugin {
|
|
|
16
16
|
readonly codes = [ipldDagCbor.code]
|
|
17
17
|
|
|
18
18
|
canHandle ({ cid, accept, pathDetails, byteRangeContext, plugins }: PluginContext): boolean {
|
|
19
|
-
this.log('checking if we can handle %c with accept %s', cid, accept)
|
|
20
19
|
if (pathDetails == null) {
|
|
21
20
|
return false
|
|
22
21
|
}
|
|
22
|
+
|
|
23
23
|
if (!isObjectNode(pathDetails.terminalElement)) {
|
|
24
24
|
return false
|
|
25
25
|
}
|
|
26
|
+
|
|
26
27
|
if (cid.code !== ipldDagCbor.code) {
|
|
27
28
|
return false
|
|
28
29
|
}
|
|
30
|
+
|
|
29
31
|
if (byteRangeContext == null) {
|
|
30
32
|
return false
|
|
31
33
|
}
|
|
@@ -6,7 +6,7 @@ import { CustomProgressEvent } from 'progress-events'
|
|
|
6
6
|
import { getContentType } from '../utils/get-content-type.js'
|
|
7
7
|
import { getStreamFromAsyncIterable } from '../utils/get-stream-from-async-iterable.js'
|
|
8
8
|
import { setIpfsRoots } from '../utils/response-headers.js'
|
|
9
|
-
import { badGatewayResponse, badRangeResponse, movedPermanentlyResponse,
|
|
9
|
+
import { badGatewayResponse, badRangeResponse, movedPermanentlyResponse, okRangeResponse } from '../utils/responses.js'
|
|
10
10
|
import { BasePlugin } from './plugin-base.js'
|
|
11
11
|
import type { PluginContext } from './types.js'
|
|
12
12
|
import type { CIDDetail } from '../index.js'
|
|
@@ -18,15 +18,21 @@ import type { UnixFSEntry } from 'ipfs-unixfs-exporter'
|
|
|
18
18
|
export class DagPbPlugin extends BasePlugin {
|
|
19
19
|
readonly id = 'dag-pb-plugin'
|
|
20
20
|
readonly codes = [dagPbCode]
|
|
21
|
+
|
|
21
22
|
canHandle ({ cid, accept, pathDetails, byteRangeContext }: PluginContext): boolean {
|
|
22
|
-
this.log('checking if we can handle %c with accept %s', cid, accept)
|
|
23
23
|
if (pathDetails == null) {
|
|
24
24
|
return false
|
|
25
25
|
}
|
|
26
|
+
|
|
26
27
|
if (byteRangeContext == null) {
|
|
27
28
|
return false
|
|
28
29
|
}
|
|
29
30
|
|
|
31
|
+
// TODO: this may be too restrictive?
|
|
32
|
+
if (accept != null && accept.mimeType !== 'application/octet-stream') {
|
|
33
|
+
return false
|
|
34
|
+
}
|
|
35
|
+
|
|
30
36
|
return cid.code === dagPbCode
|
|
31
37
|
}
|
|
32
38
|
|
|
@@ -105,21 +111,20 @@ export class DagPbPlugin extends BasePlugin {
|
|
|
105
111
|
if (options?.signal?.aborted) {
|
|
106
112
|
throw new AbortError(options?.signal?.reason)
|
|
107
113
|
}
|
|
108
|
-
|
|
114
|
+
|
|
115
|
+
this.log.error('error loading path %c/%s - %e', dirCid, rootFilePath, err)
|
|
116
|
+
|
|
109
117
|
context.isDirectory = true
|
|
110
118
|
context.directoryEntries = []
|
|
111
119
|
context.modified++
|
|
120
|
+
|
|
112
121
|
this.log.trace('attempting to get directory entries because index.html was not found')
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
context.directoryEntries.push(dirItem)
|
|
116
|
-
}
|
|
117
|
-
// dir-index-html plugin or dir-index-json (future idea?) plugin should handle this
|
|
118
|
-
return null
|
|
119
|
-
} catch (e) {
|
|
120
|
-
log.error('error listing directory %c', dirCid, e)
|
|
121
|
-
return notSupportedResponse('Unable to get directory contents')
|
|
122
|
+
for await (const dirItem of fs.ls(dirCid, { signal: options?.signal, onProgress: options?.onProgress, extended: false })) {
|
|
123
|
+
context.directoryEntries.push(dirItem)
|
|
122
124
|
}
|
|
125
|
+
|
|
126
|
+
// dir-index-html plugin or dir-index-json (future idea?) plugin should handle this
|
|
127
|
+
return null
|
|
123
128
|
} finally {
|
|
124
129
|
options?.onProgress?.(new CustomProgressEvent<CIDDetail>('verified-fetch:request:end', { cid: dirCid, path: rootFilePath }))
|
|
125
130
|
}
|
|
@@ -152,7 +157,7 @@ export class DagPbPlugin extends BasePlugin {
|
|
|
152
157
|
})
|
|
153
158
|
log('got async iterator for %c/%s', cid, path)
|
|
154
159
|
|
|
155
|
-
const streamAndFirstChunk = await context.serverTiming.time('stream-and-chunk', '', getStreamFromAsyncIterable(asyncIter, path
|
|
160
|
+
const streamAndFirstChunk = await context.serverTiming.time('stream-and-chunk', '', getStreamFromAsyncIterable(asyncIter, path, this.pluginOptions.logger, {
|
|
156
161
|
onProgress: options?.onProgress,
|
|
157
162
|
signal: options?.signal
|
|
158
163
|
}))
|
|
@@ -177,11 +182,14 @@ export class DagPbPlugin extends BasePlugin {
|
|
|
177
182
|
if (options?.signal?.aborted) {
|
|
178
183
|
throw new AbortError(options?.signal?.reason)
|
|
179
184
|
}
|
|
180
|
-
|
|
185
|
+
|
|
186
|
+
log.error('error streaming %c/%s - %e', cid, path, err)
|
|
187
|
+
|
|
181
188
|
if (byteRangeContext.isRangeRequest && err.code === 'ERR_INVALID_PARAMS') {
|
|
182
189
|
return badRangeResponse(resource)
|
|
183
190
|
}
|
|
184
|
-
|
|
191
|
+
|
|
192
|
+
return badGatewayResponse(resource, 'Unable to stream content')
|
|
185
193
|
}
|
|
186
194
|
}
|
|
187
195
|
|
|
@@ -6,19 +6,24 @@ import { BasePlugin } from './plugin-base.js'
|
|
|
6
6
|
import type { PluginContext } from './types.js'
|
|
7
7
|
|
|
8
8
|
/**
|
|
9
|
-
* This plugin should almost always run first because it's going to handle path
|
|
10
|
-
*
|
|
9
|
+
* This plugin should almost always run first because it's going to handle path
|
|
10
|
+
* walking if needed, and will only say it can handle the request if path
|
|
11
|
+
* walking is possible (path is not empty, terminalCid is unknown, and the path
|
|
12
|
+
* has not been walked yet).
|
|
11
13
|
*
|
|
12
|
-
* Once this plugin has run, the PluginContext will be updated and then this
|
|
14
|
+
* Once this plugin has run, the PluginContext will be updated and then this
|
|
15
|
+
* plugin will return false for canHandle, so it won't run again.
|
|
13
16
|
*/
|
|
14
17
|
export class DagWalkPlugin extends BasePlugin {
|
|
15
18
|
readonly id = 'dag-walk-plugin'
|
|
19
|
+
|
|
16
20
|
/**
|
|
17
|
-
* Return false if the path has already been walked, otherwise return true if
|
|
21
|
+
* Return false if the path has already been walked, otherwise return true if
|
|
22
|
+
* the CID is encoded with a codec that supports pathing.
|
|
18
23
|
*/
|
|
19
24
|
canHandle (context: PluginContext): boolean {
|
|
20
|
-
this.log('checking if we can handle %c with accept %s', context.cid, context.accept)
|
|
21
25
|
const { pathDetails, cid } = context
|
|
26
|
+
|
|
22
27
|
if (pathDetails != null) {
|
|
23
28
|
// path has already been walked
|
|
24
29
|
return false
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { marshalIPNSRecord } from 'ipns'
|
|
2
2
|
import { getPeerIdFromString } from '../utils/get-peer-id-from-string.js'
|
|
3
3
|
import { badRequestResponse, okRangeResponse } from '../utils/responses.js'
|
|
4
|
-
import { PluginFatalError } from './errors.js'
|
|
5
4
|
import { BasePlugin } from './plugin-base.js'
|
|
6
5
|
import type { PluginContext } from './types.js'
|
|
7
6
|
import type { PeerId } from '@libp2p/interface'
|
|
@@ -13,8 +12,8 @@ import type { PeerId } from '@libp2p/interface'
|
|
|
13
12
|
export class IpnsRecordPlugin extends BasePlugin {
|
|
14
13
|
readonly id = 'ipns-record-plugin'
|
|
15
14
|
readonly codes = []
|
|
16
|
-
|
|
17
|
-
|
|
15
|
+
|
|
16
|
+
canHandle ({ resource, accept, query, path, byteRangeContext }: PluginContext): boolean {
|
|
18
17
|
if (byteRangeContext == null) {
|
|
19
18
|
return false
|
|
20
19
|
}
|
|
@@ -29,13 +28,14 @@ export class IpnsRecordPlugin extends BasePlugin {
|
|
|
29
28
|
|
|
30
29
|
if (path !== '' || !(resource.startsWith('ipns://') || resource.includes('.ipns.') || resource.includes('/ipns/'))) {
|
|
31
30
|
this.log.error('invalid request for IPNS name "%s" and path "%s"', resource, path)
|
|
32
|
-
|
|
31
|
+
return badRequestResponse(resource, new Error('Invalid IPNS name'))
|
|
33
32
|
}
|
|
34
33
|
|
|
35
34
|
let peerId: PeerId
|
|
36
35
|
|
|
37
36
|
try {
|
|
38
37
|
let peerIdString: string
|
|
38
|
+
|
|
39
39
|
if (resource.startsWith('ipns://')) {
|
|
40
40
|
peerIdString = resource.replace('ipns://', '')
|
|
41
41
|
} else if (resource.includes('/ipns/')) {
|
|
@@ -49,7 +49,7 @@ export class IpnsRecordPlugin extends BasePlugin {
|
|
|
49
49
|
} catch (err: any) {
|
|
50
50
|
this.log.error('could not parse peer id from IPNS url %s', resource, err)
|
|
51
51
|
|
|
52
|
-
|
|
52
|
+
return badRequestResponse(resource, err)
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
// force download in handleFinalResponse
|
|
@@ -12,8 +12,8 @@ import type { PluginContext } from './types.js'
|
|
|
12
12
|
export class JsonPlugin extends BasePlugin {
|
|
13
13
|
readonly id = 'json-plugin'
|
|
14
14
|
readonly codes = [ipldDagJson.code, jsonCode]
|
|
15
|
+
|
|
15
16
|
canHandle ({ cid, accept, byteRangeContext }: PluginContext): boolean {
|
|
16
|
-
this.log('checking if we can handle %c with accept %s', cid, accept)
|
|
17
17
|
if (byteRangeContext == null) {
|
|
18
18
|
return false
|
|
19
19
|
}
|