@helia/verified-fetch 2.3.0 → 2.4.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 +8 -0
- package/dist/index.min.js +28 -31
- package/dist/src/index.d.ts +22 -11
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/types.d.ts +17 -0
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/parse-resource.d.ts +2 -1
- package/dist/src/utils/parse-resource.d.ts.map +1 -1
- package/dist/src/utils/parse-resource.js +4 -3
- package/dist/src/utils/parse-resource.js.map +1 -1
- package/dist/src/utils/parse-url-string.d.ts +8 -3
- package/dist/src/utils/parse-url-string.d.ts.map +1 -1
- package/dist/src/utils/parse-url-string.js +30 -4
- package/dist/src/utils/parse-url-string.js.map +1 -1
- package/dist/src/utils/server-timing.d.ts +13 -0
- package/dist/src/utils/server-timing.d.ts.map +1 -0
- package/dist/src/utils/server-timing.js +19 -0
- package/dist/src/utils/server-timing.js.map +1 -0
- package/dist/src/utils/set-content-type.d.ts +12 -0
- package/dist/src/utils/set-content-type.d.ts.map +1 -0
- package/dist/src/utils/set-content-type.js +28 -0
- package/dist/src/utils/set-content-type.js.map +1 -0
- package/dist/src/utils/type-guards.d.ts +2 -0
- package/dist/src/utils/type-guards.d.ts.map +1 -0
- package/dist/src/utils/type-guards.js +4 -0
- package/dist/src/utils/type-guards.js.map +1 -0
- package/dist/src/utils/walk-path.d.ts +0 -1
- package/dist/src/utils/walk-path.d.ts.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 +9 -1
- package/dist/src/verified-fetch.d.ts.map +1 -1
- package/dist/src/verified-fetch.js +50 -46
- package/dist/src/verified-fetch.js.map +1 -1
- package/dist/typedoc-urls.json +0 -1
- package/package.json +2 -2
- package/src/index.ts +24 -11
- package/src/types.ts +19 -0
- package/src/utils/parse-resource.ts +5 -4
- package/src/utils/parse-url-string.ts +38 -7
- package/src/utils/server-timing.ts +37 -0
- package/src/utils/set-content-type.ts +38 -0
- package/src/utils/type-guards.ts +3 -0
- package/src/utils/walk-path.ts +1 -1
- package/src/verified-fetch.ts +59 -51
|
@@ -32,6 +32,8 @@ import { resourceToSessionCacheKey } from './utils/resource-to-cache-key.js';
|
|
|
32
32
|
import { setCacheControlHeader, setIpfsRoots } from './utils/response-headers.js';
|
|
33
33
|
import { badRequestResponse, movedPermanentlyResponse, notAcceptableResponse, notSupportedResponse, okResponse, badRangeResponse, okRangeResponse, badGatewayResponse, notFoundResponse } from './utils/responses.js';
|
|
34
34
|
import { selectOutputType } from './utils/select-output-type.js';
|
|
35
|
+
import { serverTiming } from './utils/server-timing.js';
|
|
36
|
+
import { setContentType } from './utils/set-content-type.js';
|
|
35
37
|
import { handlePathWalking, isObjectNode } from './utils/walk-path.js';
|
|
36
38
|
const SESSION_CACHE_MAX_SIZE = 100;
|
|
37
39
|
const SESSION_CACHE_TTL_MS = 60 * 1000;
|
|
@@ -88,6 +90,8 @@ export class VerifiedFetch {
|
|
|
88
90
|
log;
|
|
89
91
|
contentTypeParser;
|
|
90
92
|
blockstoreSessions;
|
|
93
|
+
serverTimingHeaders = [];
|
|
94
|
+
withServerTiming;
|
|
91
95
|
constructor({ helia, ipns }, init) {
|
|
92
96
|
this.helia = helia;
|
|
93
97
|
this.log = helia.logger.forComponent('helia:verified-fetch');
|
|
@@ -100,6 +104,7 @@ export class VerifiedFetch {
|
|
|
100
104
|
store.close();
|
|
101
105
|
}
|
|
102
106
|
});
|
|
107
|
+
this.withServerTiming = init?.withServerTiming ?? false;
|
|
103
108
|
this.log.trace('created VerifiedFetch instance');
|
|
104
109
|
}
|
|
105
110
|
getBlockstore(root, resource, useSession, options) {
|
|
@@ -206,12 +211,12 @@ export class VerifiedFetch {
|
|
|
206
211
|
response.headers.set('content-type', accept ?? 'application/json');
|
|
207
212
|
return response;
|
|
208
213
|
}
|
|
209
|
-
async handleDagCbor({ resource, cid, path, accept, session, options }) {
|
|
214
|
+
async handleDagCbor({ resource, cid, path, accept, session, options, withServerTiming }) {
|
|
210
215
|
this.log.trace('fetching %c/%s', cid, path);
|
|
211
216
|
let terminalElement;
|
|
212
217
|
const blockstore = this.getBlockstore(cid, resource, session, options);
|
|
213
218
|
// need to walk path, if it exists, to get the terminal element
|
|
214
|
-
const pathDetails = await handlePathWalking({ cid, path, resource, options, blockstore, log: this.log });
|
|
219
|
+
const pathDetails = await this.handleServerTiming('path-walking', '', async () => handlePathWalking({ cid, path, resource, options, blockstore, log: this.log, withServerTiming }), withServerTiming);
|
|
215
220
|
if (pathDetails instanceof Response) {
|
|
216
221
|
return pathDetails;
|
|
217
222
|
}
|
|
@@ -264,11 +269,11 @@ export class VerifiedFetch {
|
|
|
264
269
|
setIpfsRoots(response, ipfsRoots);
|
|
265
270
|
return response;
|
|
266
271
|
}
|
|
267
|
-
async handleDagPb({ cid, path, resource, session, options }) {
|
|
272
|
+
async handleDagPb({ cid, path, resource, session, options, withServerTiming }) {
|
|
268
273
|
let redirected = false;
|
|
269
274
|
const byteRangeContext = new ByteRangeContext(this.helia.logger, options?.headers);
|
|
270
275
|
const blockstore = this.getBlockstore(cid, resource, session, options);
|
|
271
|
-
const pathDetails = await handlePathWalking({ cid, path, resource, options, blockstore, log: this.log });
|
|
276
|
+
const pathDetails = await this.handleServerTiming('path-walking', '', async () => handlePathWalking({ cid, path, resource, options, blockstore, log: this.log, withServerTiming }), withServerTiming);
|
|
272
277
|
if (pathDetails instanceof Response) {
|
|
273
278
|
return pathDetails;
|
|
274
279
|
}
|
|
@@ -295,10 +300,10 @@ export class VerifiedFetch {
|
|
|
295
300
|
const rootFilePath = 'index.html';
|
|
296
301
|
try {
|
|
297
302
|
this.log.trace('found directory at %c/%s, looking for index.html', cid, path);
|
|
298
|
-
const entry = await exporter(`/ipfs/${dirCid}/${rootFilePath}`, this.helia.blockstore, {
|
|
303
|
+
const entry = await this.handleServerTiming('exporter-dir', '', async () => exporter(`/ipfs/${dirCid}/${rootFilePath}`, this.helia.blockstore, {
|
|
299
304
|
signal: options?.signal,
|
|
300
305
|
onProgress: options?.onProgress
|
|
301
|
-
});
|
|
306
|
+
}), withServerTiming);
|
|
302
307
|
this.log.trace('found root file at %c/%s with cid %c', dirCid, rootFilePath, entry.cid);
|
|
303
308
|
path = rootFilePath;
|
|
304
309
|
resolvedCID = entry.cid;
|
|
@@ -321,10 +326,10 @@ export class VerifiedFetch {
|
|
|
321
326
|
const length = byteRangeContext.length;
|
|
322
327
|
this.log.trace('calling exporter for %c/%s with offset=%o & length=%o', resolvedCID, path, offset, length);
|
|
323
328
|
try {
|
|
324
|
-
const entry = await exporter(resolvedCID, this.helia.blockstore, {
|
|
329
|
+
const entry = await this.handleServerTiming('exporter-file', '', async () => exporter(resolvedCID, this.helia.blockstore, {
|
|
325
330
|
signal: options?.signal,
|
|
326
331
|
onProgress: options?.onProgress
|
|
327
|
-
});
|
|
332
|
+
}), withServerTiming);
|
|
328
333
|
const asyncIter = entry.content({
|
|
329
334
|
signal: options?.signal,
|
|
330
335
|
onProgress: options?.onProgress,
|
|
@@ -332,16 +337,16 @@ export class VerifiedFetch {
|
|
|
332
337
|
length
|
|
333
338
|
});
|
|
334
339
|
this.log('got async iterator for %c/%s', cid, path);
|
|
335
|
-
const { stream, firstChunk } = await getStreamFromAsyncIterable(asyncIter, path ?? '', this.helia.logger, {
|
|
340
|
+
const { stream, firstChunk } = await this.handleServerTiming('stream-and-chunk', '', async () => getStreamFromAsyncIterable(asyncIter, path ?? '', this.helia.logger, {
|
|
336
341
|
onProgress: options?.onProgress,
|
|
337
342
|
signal: options?.signal
|
|
338
|
-
});
|
|
343
|
+
}), withServerTiming);
|
|
339
344
|
byteRangeContext.setBody(stream);
|
|
340
345
|
// if not a valid range request, okRangeRequest will call okResponse
|
|
341
346
|
const response = okRangeResponse(resource, byteRangeContext.getBody(), { byteRangeContext, log: this.log }, {
|
|
342
347
|
redirected
|
|
343
348
|
});
|
|
344
|
-
await this.setContentType(firstChunk, path, response);
|
|
349
|
+
await this.handleServerTiming('set-content-type', '', async () => setContentType({ bytes: firstChunk, path, response, contentTypeParser: this.contentTypeParser, log: this.log }), withServerTiming);
|
|
345
350
|
setIpfsRoots(response, ipfsRoots);
|
|
346
351
|
return response;
|
|
347
352
|
}
|
|
@@ -374,33 +379,9 @@ export class VerifiedFetch {
|
|
|
374
379
|
// if the user has specified an `Accept` header that corresponds to a raw
|
|
375
380
|
// type, honour that header, so for example they don't request
|
|
376
381
|
// `application/vnd.ipld.raw` but get `application/octet-stream`
|
|
377
|
-
await
|
|
382
|
+
await setContentType({ bytes: result, path, response, defaultContentType: getOverridenRawContentType({ headers: options?.headers, accept }), contentTypeParser: this.contentTypeParser, log: this.log });
|
|
378
383
|
return response;
|
|
379
384
|
}
|
|
380
|
-
async setContentType(bytes, path, response, defaultContentType = 'application/octet-stream') {
|
|
381
|
-
let contentType;
|
|
382
|
-
if (this.contentTypeParser != null) {
|
|
383
|
-
try {
|
|
384
|
-
let fileName = path.split('/').pop()?.trim();
|
|
385
|
-
fileName = fileName === '' ? undefined : fileName;
|
|
386
|
-
const parsed = this.contentTypeParser(bytes, fileName);
|
|
387
|
-
if (isPromise(parsed)) {
|
|
388
|
-
const result = await parsed;
|
|
389
|
-
if (result != null) {
|
|
390
|
-
contentType = result;
|
|
391
|
-
}
|
|
392
|
-
}
|
|
393
|
-
else if (parsed != null) {
|
|
394
|
-
contentType = parsed;
|
|
395
|
-
}
|
|
396
|
-
}
|
|
397
|
-
catch (err) {
|
|
398
|
-
this.log.error('error parsing content type', err);
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
this.log.trace('setting content type to "%s"', contentType ?? defaultContentType);
|
|
402
|
-
response.headers.set('content-type', contentType ?? defaultContentType);
|
|
403
|
-
}
|
|
404
385
|
/**
|
|
405
386
|
* If the user has not specified an Accept header or format query string arg,
|
|
406
387
|
* use the CID codec to choose an appropriate handler for the block data.
|
|
@@ -413,6 +394,30 @@ export class VerifiedFetch {
|
|
|
413
394
|
[rawCode]: this.handleRaw,
|
|
414
395
|
[identity.code]: this.handleRaw
|
|
415
396
|
};
|
|
397
|
+
async handleServerTiming(name, description, fn, withServerTiming) {
|
|
398
|
+
if (!withServerTiming) {
|
|
399
|
+
return fn();
|
|
400
|
+
}
|
|
401
|
+
const { error, result, header } = await serverTiming(name, description, fn);
|
|
402
|
+
this.serverTimingHeaders.push(header);
|
|
403
|
+
if (error != null) {
|
|
404
|
+
throw error;
|
|
405
|
+
}
|
|
406
|
+
return result;
|
|
407
|
+
}
|
|
408
|
+
/**
|
|
409
|
+
* The last place a Response touches in verified-fetch before being returned to the user. This is where we add the
|
|
410
|
+
* Server-Timing header to the response if it has been collected. It should be used for any final processing of the
|
|
411
|
+
* response before it is returned to the user.
|
|
412
|
+
*/
|
|
413
|
+
handleFinalResponse(response) {
|
|
414
|
+
if (this.serverTimingHeaders.length > 0) {
|
|
415
|
+
const headerString = this.serverTimingHeaders.join(', ');
|
|
416
|
+
response.headers.set('Server-Timing', headerString);
|
|
417
|
+
this.serverTimingHeaders = [];
|
|
418
|
+
}
|
|
419
|
+
return response;
|
|
420
|
+
}
|
|
416
421
|
/**
|
|
417
422
|
* We're starting to get to the point where we need a queue or pipeline of
|
|
418
423
|
* operations to perform and a single place to handle errors.
|
|
@@ -423,6 +428,7 @@ export class VerifiedFetch {
|
|
|
423
428
|
async fetch(resource, opts) {
|
|
424
429
|
this.log('fetch %s', resource);
|
|
425
430
|
const options = convertOptions(opts);
|
|
431
|
+
const withServerTiming = options?.withServerTiming ?? this.withServerTiming;
|
|
426
432
|
options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:start', { resource }));
|
|
427
433
|
// resolve the CID/path from the requested resource
|
|
428
434
|
let cid;
|
|
@@ -432,33 +438,34 @@ export class VerifiedFetch {
|
|
|
432
438
|
let protocol;
|
|
433
439
|
let ipfsPath;
|
|
434
440
|
try {
|
|
435
|
-
const result = await parseResource(resource, { ipns: this.ipns, logger: this.helia.logger }, options);
|
|
441
|
+
const result = await this.handleServerTiming('parse-resource', '', async () => parseResource(resource, { ipns: this.ipns, logger: this.helia.logger }, { withServerTiming, ...options }), withServerTiming);
|
|
436
442
|
cid = result.cid;
|
|
437
443
|
path = result.path;
|
|
438
444
|
query = result.query;
|
|
439
445
|
ttl = result.ttl;
|
|
440
446
|
protocol = result.protocol;
|
|
441
447
|
ipfsPath = result.ipfsPath;
|
|
448
|
+
this.serverTimingHeaders.push(...result.serverTimings.map(({ header }) => header));
|
|
442
449
|
}
|
|
443
450
|
catch (err) {
|
|
444
451
|
options?.signal?.throwIfAborted();
|
|
445
452
|
this.log.error('error parsing resource %s', resource, err);
|
|
446
|
-
return badRequestResponse(resource.toString(), err);
|
|
453
|
+
return this.handleFinalResponse(badRequestResponse(resource.toString(), err));
|
|
447
454
|
}
|
|
448
455
|
options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:resolve', { cid, path }));
|
|
449
456
|
const acceptHeader = getResolvedAcceptHeader({ query, headers: options?.headers, logger: this.helia.logger });
|
|
450
457
|
const accept = selectOutputType(cid, acceptHeader);
|
|
451
458
|
this.log('output type %s', accept);
|
|
452
459
|
if (acceptHeader != null && accept == null) {
|
|
453
|
-
return notAcceptableResponse(resource.toString());
|
|
460
|
+
return this.handleFinalResponse(notAcceptableResponse(resource.toString()));
|
|
454
461
|
}
|
|
455
462
|
let response;
|
|
456
463
|
let reqFormat;
|
|
457
464
|
const redirectResponse = await getRedirectResponse({ resource, options, logger: this.helia.logger, cid });
|
|
458
465
|
if (redirectResponse != null) {
|
|
459
|
-
return redirectResponse;
|
|
466
|
+
return this.handleFinalResponse(redirectResponse);
|
|
460
467
|
}
|
|
461
|
-
const handlerArgs = { resource: resource.toString(), cid, path, accept, session: options?.session ?? true, options };
|
|
468
|
+
const handlerArgs = { resource: resource.toString(), cid, path, accept, session: options?.session ?? true, options, withServerTiming };
|
|
462
469
|
if (accept === 'application/vnd.ipfs.ipns-record') {
|
|
463
470
|
// the user requested a raw IPNS record
|
|
464
471
|
reqFormat = 'ipns-record';
|
|
@@ -490,7 +497,7 @@ export class VerifiedFetch {
|
|
|
490
497
|
// derive the handler from the CID type
|
|
491
498
|
const codecHandler = this.codecHandlers[cid.code];
|
|
492
499
|
if (codecHandler == null) {
|
|
493
|
-
return notSupportedResponse(`Support for codec with code ${cid.code} is not yet implemented. Please open an issue at https://github.com/ipfs/helia-verified-fetch/issues/new`);
|
|
500
|
+
return this.handleFinalResponse(notSupportedResponse(`Support for codec with code ${cid.code} is not yet implemented. Please open an issue at https://github.com/ipfs/helia-verified-fetch/issues/new`));
|
|
494
501
|
}
|
|
495
502
|
this.log.trace('calling handler "%s"', codecHandler.name);
|
|
496
503
|
response = await codecHandler.call(this, handlerArgs);
|
|
@@ -515,7 +522,7 @@ export class VerifiedFetch {
|
|
|
515
522
|
response.headers.set('Content-Disposition', contentDisposition);
|
|
516
523
|
}
|
|
517
524
|
options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:end', { cid, path }));
|
|
518
|
-
return response;
|
|
525
|
+
return this.handleFinalResponse(response);
|
|
519
526
|
}
|
|
520
527
|
/**
|
|
521
528
|
* Start the Helia instance
|
|
@@ -530,7 +537,4 @@ export class VerifiedFetch {
|
|
|
530
537
|
await this.helia.stop();
|
|
531
538
|
}
|
|
532
539
|
}
|
|
533
|
-
function isPromise(p) {
|
|
534
|
-
return p?.then != null;
|
|
535
|
-
}
|
|
536
540
|
//# sourceMappingURL=verified-fetch.js.map
|
|
@@ -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,7 +4,6 @@
|
|
|
4
4
|
"CIDDetailError": "https://ipfs.github.io/helia-verified-fetch/interfaces/CIDDetailError.html",
|
|
5
5
|
".:CIDDetailError": "https://ipfs.github.io/helia-verified-fetch/interfaces/CIDDetailError.html",
|
|
6
6
|
"ContentTypeParser": "https://ipfs.github.io/helia-verified-fetch/interfaces/ContentTypeParser.html",
|
|
7
|
-
".:ContentTypeParser": "https://ipfs.github.io/helia-verified-fetch/interfaces/ContentTypeParser.html",
|
|
8
7
|
"CreateVerifiedFetchInit": "https://ipfs.github.io/helia-verified-fetch/interfaces/CreateVerifiedFetchInit.html",
|
|
9
8
|
".:CreateVerifiedFetchInit": "https://ipfs.github.io/helia-verified-fetch/interfaces/CreateVerifiedFetchInit.html",
|
|
10
9
|
"CreateVerifiedFetchOptions": "https://ipfs.github.io/helia-verified-fetch/interfaces/CreateVerifiedFetchOptions.html",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@helia/verified-fetch",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
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",
|
|
@@ -198,7 +198,7 @@
|
|
|
198
198
|
"it-to-buffer": "^4.0.7",
|
|
199
199
|
"magic-bytes.js": "^1.10.0",
|
|
200
200
|
"p-defer": "^4.0.1",
|
|
201
|
-
"sinon": "^
|
|
201
|
+
"sinon": "^19.0.2",
|
|
202
202
|
"sinon-ts": "^2.0.0"
|
|
203
203
|
},
|
|
204
204
|
"browser": {
|
package/src/index.ts
CHANGED
|
@@ -604,6 +604,14 @@
|
|
|
604
604
|
* * https://specs.ipfs.tech/http-gateways/trustless-gateway/#response-headers
|
|
605
605
|
* * https://specs.ipfs.tech/http-gateways/subdomain-gateway/#response-headers
|
|
606
606
|
*
|
|
607
|
+
* #### Server Timing headers
|
|
608
|
+
*
|
|
609
|
+
* By default, we do not include [Server Timing](https://developer.mozilla.org/en-US/docs/Web/API/Performance_API/Server_timing) headers in responses. If you want to include them, you can pass an
|
|
610
|
+
* `withServerTiming` option to the `createVerifiedFetch` function to include them in all future responses. You can
|
|
611
|
+
* also pass the `withServerTiming` option to each fetch call to include them only for that specific response.
|
|
612
|
+
*
|
|
613
|
+
* See PR where this was added, https://github.com/ipfs/helia-verified-fetch/pull/164, for more information.
|
|
614
|
+
*
|
|
607
615
|
* ### Possible Scenarios that could cause confusion
|
|
608
616
|
*
|
|
609
617
|
* #### Attempting to fetch the CID for content that does not make sense
|
|
@@ -628,6 +636,7 @@ import { type Libp2p, type ServiceMap } from '@libp2p/interface'
|
|
|
628
636
|
import { dns } from '@multiformats/dns'
|
|
629
637
|
import { createHelia, type HeliaInit } from 'helia'
|
|
630
638
|
import { createLibp2p, type Libp2pOptions } from 'libp2p'
|
|
639
|
+
import { type ContentTypeParser } from './types.js'
|
|
631
640
|
import { getLibp2pConfig } from './utils/libp2p-defaults.js'
|
|
632
641
|
import { VerifiedFetch as VerifiedFetchClass } from './verified-fetch.js'
|
|
633
642
|
import type { GetBlockProgressEvents, Helia, Routing } from '@helia/interface'
|
|
@@ -749,22 +758,18 @@ export interface CreateVerifiedFetchOptions {
|
|
|
749
758
|
* @default 60000
|
|
750
759
|
*/
|
|
751
760
|
sessionTTLms?: number
|
|
752
|
-
}
|
|
753
761
|
|
|
754
|
-
/**
|
|
755
|
-
* A ContentTypeParser attempts to return the mime type of a given file. It
|
|
756
|
-
* receives the first chunk of the file data and the file name, if it is
|
|
757
|
-
* available. The function can be sync or async and if it returns/resolves to
|
|
758
|
-
* `undefined`, `application/octet-stream` will be used.
|
|
759
|
-
*/
|
|
760
|
-
export interface ContentTypeParser {
|
|
761
762
|
/**
|
|
762
|
-
*
|
|
763
|
-
*
|
|
763
|
+
* Whether to include server-timing headers in responses. This option can be overridden on a per-request basis.
|
|
764
|
+
*
|
|
765
|
+
* @default false
|
|
766
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Server-Timing
|
|
764
767
|
*/
|
|
765
|
-
|
|
768
|
+
withServerTiming?: boolean
|
|
766
769
|
}
|
|
767
770
|
|
|
771
|
+
export type { ContentTypeParser } from './types.js'
|
|
772
|
+
|
|
768
773
|
export type BubbledProgressEvents =
|
|
769
774
|
// unixfs-exporter
|
|
770
775
|
ExporterProgressEvents |
|
|
@@ -828,6 +833,14 @@ export interface VerifiedFetchInit extends RequestInit, ProgressOptions<BubbledP
|
|
|
828
833
|
* @default false
|
|
829
834
|
*/
|
|
830
835
|
allowInsecure?: boolean
|
|
836
|
+
|
|
837
|
+
/**
|
|
838
|
+
* Whether to include server-timing headers in the response for an individual request.
|
|
839
|
+
*
|
|
840
|
+
* @default false
|
|
841
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Server-Timing
|
|
842
|
+
*/
|
|
843
|
+
withServerTiming?: boolean
|
|
831
844
|
}
|
|
832
845
|
|
|
833
846
|
/**
|
package/src/types.ts
CHANGED
|
@@ -29,4 +29,23 @@ export interface FetchHandlerFunctionArg {
|
|
|
29
29
|
* The originally requested resource
|
|
30
30
|
*/
|
|
31
31
|
resource: string
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Whether to include server-timing headers in the response.
|
|
35
|
+
*/
|
|
36
|
+
withServerTiming: boolean
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* A ContentTypeParser attempts to return the mime type of a given file. It
|
|
41
|
+
* receives the first chunk of the file data and the file name, if it is
|
|
42
|
+
* available. The function can be sync or async and if it returns/resolves to
|
|
43
|
+
* `undefined`, `application/octet-stream` will be used.
|
|
44
|
+
*/
|
|
45
|
+
export interface ContentTypeParser {
|
|
46
|
+
/**
|
|
47
|
+
* Attempt to determine a mime type, either via of the passed bytes or the
|
|
48
|
+
* filename if it is available.
|
|
49
|
+
*/
|
|
50
|
+
(bytes: Uint8Array, fileName?: string): Promise<string | undefined> | string | undefined
|
|
32
51
|
}
|
|
@@ -11,16 +11,16 @@ export interface ParseResourceComponents {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
export interface ParseResourceOptions extends ParseUrlStringOptions {
|
|
14
|
-
|
|
14
|
+
withServerTiming?: boolean
|
|
15
15
|
}
|
|
16
16
|
/**
|
|
17
17
|
* Handles the different use cases for the `resource` argument.
|
|
18
18
|
* The resource can represent an IPFS path, IPNS path, or CID.
|
|
19
19
|
* If the resource represents an IPNS path, we need to resolve it to a CID.
|
|
20
20
|
*/
|
|
21
|
-
export async function parseResource (resource: Resource, { ipns, logger }: ParseResourceComponents, options
|
|
21
|
+
export async function parseResource (resource: Resource, { ipns, logger }: ParseResourceComponents, { withServerTiming = false, ...options }: ParseResourceOptions = { withServerTiming: false }): Promise<ParsedUrlStringResults> {
|
|
22
22
|
if (typeof resource === 'string') {
|
|
23
|
-
return parseUrlString({ urlString: resource, ipns, logger }, options)
|
|
23
|
+
return parseUrlString({ urlString: resource, ipns, logger, withServerTiming }, options)
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
const cid = CID.asCID(resource)
|
|
@@ -33,7 +33,8 @@ export async function parseResource (resource: Resource, { ipns, logger }: Parse
|
|
|
33
33
|
path: '',
|
|
34
34
|
query: {},
|
|
35
35
|
ipfsPath: `/ipfs/${cid.toString()}`,
|
|
36
|
-
ttl: 29030400 // 1 year for ipfs content
|
|
36
|
+
ttl: 29030400, // 1 year for ipfs content
|
|
37
|
+
serverTimings: []
|
|
37
38
|
} satisfies ParsedUrlStringResults
|
|
38
39
|
}
|
|
39
40
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { CID } from 'multiformats/cid'
|
|
2
2
|
import { getPeerIdFromString } from './get-peer-id-from-string.js'
|
|
3
|
+
import { serverTiming, type ServerTimingResult } from './server-timing.js'
|
|
3
4
|
import { TLRU } from './tlru.js'
|
|
4
5
|
import type { RequestFormatShorthand } from '../types.js'
|
|
5
6
|
import type { DNSLinkResolveResult, IPNS, IPNSResolveResult, IPNSRoutingEvents, ResolveDNSLinkProgressEvents, ResolveProgressEvents, ResolveResult } from '@helia/ipns'
|
|
@@ -12,6 +13,7 @@ export interface ParseUrlStringInput {
|
|
|
12
13
|
urlString: string
|
|
13
14
|
ipns: IPNS
|
|
14
15
|
logger: ComponentLogger
|
|
16
|
+
withServerTiming?: boolean
|
|
15
17
|
}
|
|
16
18
|
export interface ParseUrlStringOptions extends ProgressOptions<ResolveProgressEvents | IPNSRoutingEvents | ResolveDNSLinkProgressEvents>, AbortOptions {
|
|
17
19
|
|
|
@@ -23,7 +25,7 @@ export interface ParsedUrlQuery extends Record<string, string | unknown> {
|
|
|
23
25
|
filename?: string
|
|
24
26
|
}
|
|
25
27
|
|
|
26
|
-
interface
|
|
28
|
+
export interface ParsedUrlStringResults extends ResolveResult {
|
|
27
29
|
protocol: 'ipfs' | 'ipns'
|
|
28
30
|
query: ParsedUrlQuery
|
|
29
31
|
|
|
@@ -41,9 +43,12 @@ interface ParsedUrlStringResultsBase extends ResolveResult {
|
|
|
41
43
|
* seconds as a number
|
|
42
44
|
*/
|
|
43
45
|
ttl?: number
|
|
44
|
-
}
|
|
45
46
|
|
|
46
|
-
|
|
47
|
+
/**
|
|
48
|
+
* serverTiming items
|
|
49
|
+
*/
|
|
50
|
+
serverTimings: Array<ServerTimingResult<any>>
|
|
51
|
+
}
|
|
47
52
|
|
|
48
53
|
const URL_REGEX = /^(?<protocol>ip[fn]s):\/\/(?<cidOrPeerIdOrDnsLink>[^/?]+)\/?(?<path>[^?]*)\??(?<queryString>.*)$/
|
|
49
54
|
const PATH_REGEX = /^\/(?<protocol>ip[fn]s)\/(?<cidOrPeerIdOrDnsLink>[^/?]+)\/?(?<path>[^?]*)\??(?<queryString>.*)$/
|
|
@@ -145,7 +150,7 @@ function dnsLinkLabelDecoder (linkLabel: string): string {
|
|
|
145
150
|
* @todo we need to break out each step of this function (cid parsing, ipns resolving, dnslink resolving) into separate functions and then remove the eslint-disable comment
|
|
146
151
|
*/
|
|
147
152
|
// eslint-disable-next-line complexity
|
|
148
|
-
export async function parseUrlString ({ urlString, ipns, logger }: ParseUrlStringInput, options?: ParseUrlStringOptions): Promise<ParsedUrlStringResults> {
|
|
153
|
+
export async function parseUrlString ({ urlString, ipns, logger, withServerTiming = false }: ParseUrlStringInput, options?: ParseUrlStringOptions): Promise<ParsedUrlStringResults> {
|
|
149
154
|
const log = logger.forComponent('helia:verified-fetch:parse-url-string')
|
|
150
155
|
const { protocol, cidOrPeerIdOrDnsLink, path: urlPath, queryString } = matchURLString(urlString)
|
|
151
156
|
|
|
@@ -153,6 +158,7 @@ export async function parseUrlString ({ urlString, ipns, logger }: ParseUrlStrin
|
|
|
153
158
|
let resolvedPath: string | undefined
|
|
154
159
|
const errors: Error[] = []
|
|
155
160
|
let resolveResult: IPNSResolveResult | DNSLinkResolveResult | undefined
|
|
161
|
+
const serverTimings: Array<ServerTimingResult<any>> = []
|
|
156
162
|
|
|
157
163
|
if (protocol === 'ipfs') {
|
|
158
164
|
try {
|
|
@@ -182,7 +188,19 @@ export async function parseUrlString ({ urlString, ipns, logger }: ParseUrlStrin
|
|
|
182
188
|
if (peerId.publicKey == null) {
|
|
183
189
|
throw new TypeError('cidOrPeerIdOrDnsLink contains no public key')
|
|
184
190
|
}
|
|
185
|
-
|
|
191
|
+
|
|
192
|
+
if (withServerTiming) {
|
|
193
|
+
const resolveResultWithServerTiming = await serverTiming('ipns.resolve', `Resolve IPNS name ${cidOrPeerIdOrDnsLink}`, ipns.resolve.bind(null, peerId.publicKey, options))
|
|
194
|
+
serverTimings.push(resolveResultWithServerTiming)
|
|
195
|
+
|
|
196
|
+
// eslint-disable-next-line max-depth
|
|
197
|
+
if (resolveResultWithServerTiming.error != null) {
|
|
198
|
+
throw resolveResultWithServerTiming.error
|
|
199
|
+
}
|
|
200
|
+
resolveResult = resolveResultWithServerTiming.result
|
|
201
|
+
} else {
|
|
202
|
+
resolveResult = await ipns.resolve(peerId.publicKey, options)
|
|
203
|
+
}
|
|
186
204
|
cid = resolveResult?.cid
|
|
187
205
|
resolvedPath = resolveResult?.path
|
|
188
206
|
log.trace('resolved %s to %c', cidOrPeerIdOrDnsLink, cid)
|
|
@@ -207,7 +225,19 @@ export async function parseUrlString ({ urlString, ipns, logger }: ParseUrlStrin
|
|
|
207
225
|
log.trace('Attempting to resolve DNSLink for %s', decodedDnsLinkLabel)
|
|
208
226
|
|
|
209
227
|
try {
|
|
210
|
-
|
|
228
|
+
// eslint-disable-next-line max-depth
|
|
229
|
+
if (withServerTiming) {
|
|
230
|
+
const resolveResultWithServerTiming = await serverTiming('ipns.resolveDNSLink', `Resolve DNSLink ${decodedDnsLinkLabel}`, ipns.resolveDNSLink.bind(ipns, decodedDnsLinkLabel, options))
|
|
231
|
+
serverTimings.push(resolveResultWithServerTiming)
|
|
232
|
+
// eslint-disable-next-line max-depth
|
|
233
|
+
if (resolveResultWithServerTiming.error != null) {
|
|
234
|
+
throw resolveResultWithServerTiming.error
|
|
235
|
+
}
|
|
236
|
+
resolveResult = resolveResultWithServerTiming.result
|
|
237
|
+
} else {
|
|
238
|
+
resolveResult = await ipns.resolveDNSLink(decodedDnsLinkLabel, options)
|
|
239
|
+
}
|
|
240
|
+
|
|
211
241
|
cid = resolveResult?.cid
|
|
212
242
|
resolvedPath = resolveResult?.path
|
|
213
243
|
log.trace('resolved %s to %c', decodedDnsLinkLabel, cid)
|
|
@@ -263,7 +293,8 @@ export async function parseUrlString ({ urlString, ipns, logger }: ParseUrlStrin
|
|
|
263
293
|
path: joinPaths(resolvedPath, urlPath ?? ''),
|
|
264
294
|
query,
|
|
265
295
|
ttl,
|
|
266
|
-
ipfsPath: `/${protocol}/${cidOrPeerIdOrDnsLink}${urlPath != null && urlPath !== '' ? `/${urlPath}` : ''}
|
|
296
|
+
ipfsPath: `/${protocol}/${cidOrPeerIdOrDnsLink}${urlPath != null && urlPath !== '' ? `/${urlPath}` : ''}`,
|
|
297
|
+
serverTimings
|
|
267
298
|
} satisfies ParsedUrlStringResults
|
|
268
299
|
}
|
|
269
300
|
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface ServerTimingSuccess<T> {
|
|
2
|
+
error: null
|
|
3
|
+
result: T
|
|
4
|
+
header: string
|
|
5
|
+
}
|
|
6
|
+
export interface ServerTimingError {
|
|
7
|
+
result: null
|
|
8
|
+
error: Error
|
|
9
|
+
header: string
|
|
10
|
+
}
|
|
11
|
+
export type ServerTimingResult<T> = ServerTimingSuccess<T> | ServerTimingError
|
|
12
|
+
|
|
13
|
+
export async function serverTiming<T> (
|
|
14
|
+
name: string,
|
|
15
|
+
description: string,
|
|
16
|
+
fn: () => Promise<T>
|
|
17
|
+
): Promise<ServerTimingResult<T>> {
|
|
18
|
+
const startTime = performance.now()
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
const result = await fn() // Execute the function
|
|
22
|
+
const endTime = performance.now()
|
|
23
|
+
|
|
24
|
+
const duration = (endTime - startTime).toFixed(1) // Duration in milliseconds
|
|
25
|
+
|
|
26
|
+
// Create the Server-Timing header string
|
|
27
|
+
const header = `${name};dur=${duration};desc="${description}"`
|
|
28
|
+
return { result, header, error: null }
|
|
29
|
+
} catch (error: any) {
|
|
30
|
+
const endTime = performance.now()
|
|
31
|
+
const duration = (endTime - startTime).toFixed(1)
|
|
32
|
+
|
|
33
|
+
// Still return a timing header even on error
|
|
34
|
+
const header = `${name};dur=${duration};desc="${description}"`
|
|
35
|
+
return { result: null, error, header } // Pass error with timing info
|
|
36
|
+
}
|
|
37
|
+
}
|