@helia/verified-fetch 0.0.0-31cdfa8
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/LICENSE +4 -0
- package/README.md +299 -0
- package/dist/index.min.js +115 -0
- package/dist/src/index.d.ts +321 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +290 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/singleton.d.ts +3 -0
- package/dist/src/singleton.d.ts.map +1 -0
- package/dist/src/singleton.js +15 -0
- package/dist/src/singleton.js.map +1 -0
- package/dist/src/utils/get-stream-from-async-iterable.d.ts +10 -0
- package/dist/src/utils/get-stream-from-async-iterable.d.ts.map +1 -0
- package/dist/src/utils/get-stream-from-async-iterable.js +38 -0
- package/dist/src/utils/get-stream-from-async-iterable.js.map +1 -0
- package/dist/src/utils/parse-resource.d.ts +18 -0
- package/dist/src/utils/parse-resource.d.ts.map +1 -0
- package/dist/src/utils/parse-resource.js +24 -0
- package/dist/src/utils/parse-resource.js.map +1 -0
- package/dist/src/utils/parse-url-string.d.ts +26 -0
- package/dist/src/utils/parse-url-string.d.ts.map +1 -0
- package/dist/src/utils/parse-url-string.js +109 -0
- package/dist/src/utils/parse-url-string.js.map +1 -0
- package/dist/src/utils/tlru.d.ts +15 -0
- package/dist/src/utils/tlru.d.ts.map +1 -0
- package/dist/src/utils/tlru.js +40 -0
- package/dist/src/utils/tlru.js.map +1 -0
- package/dist/src/utils/walk-path.d.ts +13 -0
- package/dist/src/utils/walk-path.d.ts.map +1 -0
- package/dist/src/utils/walk-path.js +17 -0
- package/dist/src/utils/walk-path.js.map +1 -0
- package/dist/src/verified-fetch.d.ts +67 -0
- package/dist/src/verified-fetch.d.ts.map +1 -0
- package/dist/src/verified-fetch.js +303 -0
- package/dist/src/verified-fetch.js.map +1 -0
- package/package.json +180 -0
- package/src/index.ts +377 -0
- package/src/singleton.ts +20 -0
- package/src/utils/get-stream-from-async-iterable.ts +45 -0
- package/src/utils/parse-resource.ts +40 -0
- package/src/utils/parse-url-string.ts +139 -0
- package/src/utils/tlru.ts +52 -0
- package/src/utils/walk-path.ts +34 -0
- package/src/verified-fetch.ts +370 -0
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { VerifiedFetchInit } from '../index.js';
|
|
2
|
+
import type { ComponentLogger } from '@libp2p/interface';
|
|
3
|
+
/**
|
|
4
|
+
* Converts an async iterator of Uint8Array bytes to a stream and returns the first chunk of bytes
|
|
5
|
+
*/
|
|
6
|
+
export declare function getStreamFromAsyncIterable(iterator: AsyncIterable<Uint8Array>, path: string, logger: ComponentLogger, options?: Pick<VerifiedFetchInit, 'onProgress'>): Promise<{
|
|
7
|
+
stream: ReadableStream<Uint8Array>;
|
|
8
|
+
firstChunk: Uint8Array;
|
|
9
|
+
}>;
|
|
10
|
+
//# sourceMappingURL=get-stream-from-async-iterable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-stream-from-async-iterable.d.ts","sourceRoot":"","sources":["../../../src/utils/get-stream-from-async-iterable.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AAExD;;GAEG;AACH,wBAAsB,0BAA0B,CAAE,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,YAAY,CAAC,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,cAAc,CAAC,UAAU,CAAC,CAAC;IAAC,UAAU,EAAE,UAAU,CAAA;CAAE,CAAC,CAqCtP"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { CustomProgressEvent } from 'progress-events';
|
|
2
|
+
/**
|
|
3
|
+
* Converts an async iterator of Uint8Array bytes to a stream and returns the first chunk of bytes
|
|
4
|
+
*/
|
|
5
|
+
export async function getStreamFromAsyncIterable(iterator, path, logger, options) {
|
|
6
|
+
const log = logger.forComponent('helia:verified-fetch:get-stream-from-async-iterable');
|
|
7
|
+
const reader = iterator[Symbol.asyncIterator]();
|
|
8
|
+
const { value: firstChunk, done } = await reader.next();
|
|
9
|
+
if (done === true) {
|
|
10
|
+
log.error('No content found for path', path);
|
|
11
|
+
throw new Error('No content found');
|
|
12
|
+
}
|
|
13
|
+
const stream = new ReadableStream({
|
|
14
|
+
async start(controller) {
|
|
15
|
+
// the initial value is already available
|
|
16
|
+
options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:progress:chunk'));
|
|
17
|
+
controller.enqueue(firstChunk);
|
|
18
|
+
},
|
|
19
|
+
async pull(controller) {
|
|
20
|
+
const { value, done } = await reader.next();
|
|
21
|
+
if (done === true) {
|
|
22
|
+
if (value != null) {
|
|
23
|
+
options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:progress:chunk'));
|
|
24
|
+
controller.enqueue(value);
|
|
25
|
+
}
|
|
26
|
+
controller.close();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
options?.onProgress?.(new CustomProgressEvent('verified-fetch:request:progress:chunk'));
|
|
30
|
+
controller.enqueue(value);
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
return {
|
|
34
|
+
stream,
|
|
35
|
+
firstChunk
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=get-stream-from-async-iterable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-stream-from-async-iterable.js","sourceRoot":"","sources":["../../../src/utils/get-stream-from-async-iterable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAIrD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAAE,QAAmC,EAAE,IAAY,EAAE,MAAuB,EAAE,OAA+C;IAC3K,MAAM,GAAG,GAAG,MAAM,CAAC,YAAY,CAAC,qDAAqD,CAAC,CAAA;IACtF,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,CAAA;IAC/C,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;IAEvD,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;QAClB,GAAG,CAAC,KAAK,CAAC,2BAA2B,EAAE,IAAI,CAAC,CAAA;QAC5C,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACrC,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,cAAc,CAAC;QAChC,KAAK,CAAC,KAAK,CAAE,UAAU;YACrB,yCAAyC;YACzC,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAO,uCAAuC,CAAC,CAAC,CAAA;YAC7F,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAChC,CAAC;QACD,KAAK,CAAC,IAAI,CAAE,UAAU;YACpB,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YAE3C,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;gBAClB,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;oBAClB,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAO,uCAAuC,CAAC,CAAC,CAAA;oBAC7F,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;gBAC3B,CAAC;gBACD,UAAU,CAAC,KAAK,EAAE,CAAA;gBAClB,OAAM;YACR,CAAC;YAED,OAAO,EAAE,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAO,uCAAuC,CAAC,CAAC,CAAA;YAC7F,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;QAC3B,CAAC;KACF,CAAC,CAAA;IAEF,OAAO;QACL,MAAM;QACN,UAAU;KACX,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ParsedUrlStringResults } from './parse-url-string.js';
|
|
2
|
+
import type { Resource } from '../index.js';
|
|
3
|
+
import type { IPNS, IPNSRoutingEvents, ResolveDnsLinkProgressEvents, ResolveProgressEvents } from '@helia/ipns';
|
|
4
|
+
import type { ComponentLogger } from '@libp2p/interface';
|
|
5
|
+
import type { ProgressOptions } from 'progress-events';
|
|
6
|
+
export interface ParseResourceComponents {
|
|
7
|
+
ipns: IPNS;
|
|
8
|
+
logger: ComponentLogger;
|
|
9
|
+
}
|
|
10
|
+
export interface ParseResourceOptions extends ProgressOptions<ResolveProgressEvents | IPNSRoutingEvents | ResolveDnsLinkProgressEvents> {
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Handles the different use cases for the `resource` argument.
|
|
14
|
+
* The resource can represent an IPFS path, IPNS path, or CID.
|
|
15
|
+
* If the resource represents an IPNS path, we need to resolve it to a CID.
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseResource(resource: Resource, { ipns, logger }: ParseResourceComponents, options?: ParseResourceOptions): Promise<ParsedUrlStringResults>;
|
|
18
|
+
//# sourceMappingURL=parse-resource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-resource.d.ts","sourceRoot":"","sources":["../../../src/utils/parse-resource.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAA;AACnE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAC3C,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAC/G,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,MAAM,WAAW,oBAAqB,SAAQ,eAAe,CAAC,qBAAqB,GAAG,iBAAiB,GAAG,4BAA4B,CAAC;CAEtI;AACD;;;;GAIG;AACH,wBAAsB,aAAa,CAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,uBAAuB,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAkBnK"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { CID } from 'multiformats/cid';
|
|
2
|
+
import { parseUrlString } from './parse-url-string.js';
|
|
3
|
+
/**
|
|
4
|
+
* Handles the different use cases for the `resource` argument.
|
|
5
|
+
* The resource can represent an IPFS path, IPNS path, or CID.
|
|
6
|
+
* If the resource represents an IPNS path, we need to resolve it to a CID.
|
|
7
|
+
*/
|
|
8
|
+
export async function parseResource(resource, { ipns, logger }, options) {
|
|
9
|
+
if (typeof resource === 'string') {
|
|
10
|
+
return parseUrlString({ urlString: resource, ipns, logger }, { onProgress: options?.onProgress });
|
|
11
|
+
}
|
|
12
|
+
const cid = CID.asCID(resource);
|
|
13
|
+
if (cid != null) {
|
|
14
|
+
// an actual CID
|
|
15
|
+
return {
|
|
16
|
+
cid,
|
|
17
|
+
protocol: 'ipfs',
|
|
18
|
+
path: '',
|
|
19
|
+
query: {}
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
throw new TypeError(`Invalid resource. Cannot determine CID from resource: ${resource}`);
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=parse-resource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-resource.js","sourceRoot":"","sources":["../../../src/utils/parse-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAetD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAE,QAAkB,EAAE,EAAE,IAAI,EAAE,MAAM,EAA2B,EAAE,OAA8B;IAChI,IAAI,OAAO,QAAQ,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,cAAc,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAA;IACnG,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAA;IAE/B,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,gBAAgB;QAChB,OAAO;YACL,GAAG;YACH,QAAQ,EAAE,MAAM;YAChB,IAAI,EAAE,EAAE;YACR,KAAK,EAAE,EAAE;SACV,CAAA;IACH,CAAC;IAED,MAAM,IAAI,SAAS,CAAC,yDAAyD,QAAQ,EAAE,CAAC,CAAA;AAC1F,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { CID } from 'multiformats/cid';
|
|
2
|
+
import type { IPNS, IPNSRoutingEvents, ResolveDnsLinkProgressEvents, ResolveProgressEvents } from '@helia/ipns';
|
|
3
|
+
import type { ComponentLogger } from '@libp2p/interface';
|
|
4
|
+
import type { ProgressOptions } from 'progress-events';
|
|
5
|
+
export interface ParseUrlStringInput {
|
|
6
|
+
urlString: string;
|
|
7
|
+
ipns: IPNS;
|
|
8
|
+
logger: ComponentLogger;
|
|
9
|
+
}
|
|
10
|
+
export interface ParseUrlStringOptions extends ProgressOptions<ResolveProgressEvents | IPNSRoutingEvents | ResolveDnsLinkProgressEvents> {
|
|
11
|
+
}
|
|
12
|
+
export interface ParsedUrlStringResults {
|
|
13
|
+
protocol: string;
|
|
14
|
+
path: string;
|
|
15
|
+
cid: CID;
|
|
16
|
+
query: Record<string, string>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A function that parses ipfs:// and ipns:// URLs, returning an object with easily recognizable properties.
|
|
20
|
+
*
|
|
21
|
+
* After determining the protocol successfully, we process the cidOrPeerIdOrDnsLink:
|
|
22
|
+
* * If it's ipfs, it parses the CID or throws an Aggregate error
|
|
23
|
+
* * If it's ipns, it attempts to resolve the PeerId and then the DNSLink. If both fail, an Aggregate error is thrown.
|
|
24
|
+
*/
|
|
25
|
+
export declare function parseUrlString({ urlString, ipns, logger }: ParseUrlStringInput, options?: ParseUrlStringOptions): Promise<ParsedUrlStringResults>;
|
|
26
|
+
//# sourceMappingURL=parse-url-string.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-url-string.d.ts","sourceRoot":"","sources":["../../../src/utils/parse-url-string.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAEtC,OAAO,KAAK,EAAE,IAAI,EAAE,iBAAiB,EAAE,4BAA4B,EAAE,qBAAqB,EAAiB,MAAM,aAAa,CAAA;AAC9H,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAItD,MAAM,WAAW,mBAAmB;IAClC,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,EAAE,eAAe,CAAA;CACxB;AACD,MAAM,WAAW,qBAAsB,SAAQ,eAAe,CAAC,qBAAqB,GAAG,iBAAiB,GAAG,4BAA4B,CAAC;CAEvI;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,GAAG,CAAA;IACR,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAC9B;AAID;;;;;;GAMG;AACH,wBAAsB,cAAc,CAAE,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAwGxJ"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { peerIdFromString } from '@libp2p/peer-id';
|
|
2
|
+
import { CID } from 'multiformats/cid';
|
|
3
|
+
import { TLRU } from './tlru.js';
|
|
4
|
+
const ipnsCache = new TLRU(1000);
|
|
5
|
+
const URL_REGEX = /^(?<protocol>ip[fn]s):\/\/(?<cidOrPeerIdOrDnsLink>[^/$?]+)\/?(?<path>[^$?]*)\??(?<queryString>.*)$/;
|
|
6
|
+
/**
|
|
7
|
+
* A function that parses ipfs:// and ipns:// URLs, returning an object with easily recognizable properties.
|
|
8
|
+
*
|
|
9
|
+
* After determining the protocol successfully, we process the cidOrPeerIdOrDnsLink:
|
|
10
|
+
* * If it's ipfs, it parses the CID or throws an Aggregate error
|
|
11
|
+
* * If it's ipns, it attempts to resolve the PeerId and then the DNSLink. If both fail, an Aggregate error is thrown.
|
|
12
|
+
*/
|
|
13
|
+
export async function parseUrlString({ urlString, ipns, logger }, options) {
|
|
14
|
+
const log = logger.forComponent('helia:verified-fetch:parse-url-string');
|
|
15
|
+
const match = urlString.match(URL_REGEX);
|
|
16
|
+
if (match == null || match.groups == null) {
|
|
17
|
+
throw new TypeError(`Invalid URL: ${urlString}, please use ipfs:// or ipns:// URLs only.`);
|
|
18
|
+
}
|
|
19
|
+
const { protocol, cidOrPeerIdOrDnsLink, path: urlPath, queryString } = match.groups;
|
|
20
|
+
let cid;
|
|
21
|
+
let resolvedPath;
|
|
22
|
+
const errors = [];
|
|
23
|
+
if (protocol === 'ipfs') {
|
|
24
|
+
try {
|
|
25
|
+
cid = CID.parse(cidOrPeerIdOrDnsLink);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
log.error(err);
|
|
29
|
+
errors.push(new TypeError('Invalid CID for ipfs://<cid> URL'));
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
let resolveResult = ipnsCache.get(cidOrPeerIdOrDnsLink);
|
|
34
|
+
if (resolveResult != null) {
|
|
35
|
+
cid = resolveResult.cid;
|
|
36
|
+
resolvedPath = resolveResult.path;
|
|
37
|
+
log.trace('resolved %s to %c from cache', cidOrPeerIdOrDnsLink, cid);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// protocol is ipns
|
|
41
|
+
log.trace('Attempting to resolve PeerId for %s', cidOrPeerIdOrDnsLink);
|
|
42
|
+
let peerId = null;
|
|
43
|
+
try {
|
|
44
|
+
peerId = peerIdFromString(cidOrPeerIdOrDnsLink);
|
|
45
|
+
resolveResult = await ipns.resolve(peerId, { onProgress: options?.onProgress });
|
|
46
|
+
cid = resolveResult?.cid;
|
|
47
|
+
resolvedPath = resolveResult?.path;
|
|
48
|
+
log.trace('resolved %s to %c', cidOrPeerIdOrDnsLink, cid);
|
|
49
|
+
ipnsCache.set(cidOrPeerIdOrDnsLink, resolveResult, 60 * 1000 * 2);
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
if (peerId == null) {
|
|
53
|
+
log.error('Could not parse PeerId string "%s"', cidOrPeerIdOrDnsLink, err);
|
|
54
|
+
errors.push(new TypeError(`Could not parse PeerId in ipns url "${cidOrPeerIdOrDnsLink}", ${err.message}`));
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
log.error('Could not resolve PeerId %c', peerId, err);
|
|
58
|
+
errors.push(new TypeError(`Could not resolve PeerId "${cidOrPeerIdOrDnsLink}", ${err.message}`));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (cid == null) {
|
|
62
|
+
log.trace('Attempting to resolve DNSLink for %s', cidOrPeerIdOrDnsLink);
|
|
63
|
+
try {
|
|
64
|
+
resolveResult = await ipns.resolveDns(cidOrPeerIdOrDnsLink, { onProgress: options?.onProgress });
|
|
65
|
+
cid = resolveResult?.cid;
|
|
66
|
+
resolvedPath = resolveResult?.path;
|
|
67
|
+
log.trace('resolved %s to %c', cidOrPeerIdOrDnsLink, cid);
|
|
68
|
+
ipnsCache.set(cidOrPeerIdOrDnsLink, resolveResult, 60 * 1000 * 2);
|
|
69
|
+
}
|
|
70
|
+
catch (err) {
|
|
71
|
+
log.error('Could not resolve DnsLink for "%s"', cidOrPeerIdOrDnsLink, err);
|
|
72
|
+
errors.push(err);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (cid == null) {
|
|
78
|
+
throw new AggregateError(errors, `Invalid resource. Cannot determine CID from URL "${urlString}"`);
|
|
79
|
+
}
|
|
80
|
+
// parse query string
|
|
81
|
+
const query = {};
|
|
82
|
+
if (queryString != null && queryString.length > 0) {
|
|
83
|
+
const queryParts = queryString.split('&');
|
|
84
|
+
for (const part of queryParts) {
|
|
85
|
+
const [key, value] = part.split('=');
|
|
86
|
+
query[key] = decodeURIComponent(value);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* join the path from resolve result & given path.
|
|
91
|
+
* e.g. /ipns/<peerId>/ that is resolved to /ipfs/<cid>/<path1>, when requested as /ipns/<peerId>/<path2>, should be
|
|
92
|
+
* resolved to /ipfs/<cid>/<path1>/<path2>
|
|
93
|
+
*/
|
|
94
|
+
const pathParts = [];
|
|
95
|
+
if (urlPath.length > 0) {
|
|
96
|
+
pathParts.push(urlPath);
|
|
97
|
+
}
|
|
98
|
+
if (resolvedPath != null && resolvedPath.length > 0) {
|
|
99
|
+
pathParts.push(resolvedPath);
|
|
100
|
+
}
|
|
101
|
+
const path = pathParts.join('/');
|
|
102
|
+
return {
|
|
103
|
+
protocol,
|
|
104
|
+
cid,
|
|
105
|
+
path,
|
|
106
|
+
query
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=parse-url-string.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-url-string.js","sourceRoot":"","sources":["../../../src/utils/parse-url-string.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Time Aware Least Recent Used Cache
|
|
3
|
+
*
|
|
4
|
+
* @see https://arxiv.org/pdf/1801.00390
|
|
5
|
+
*/
|
|
6
|
+
export declare class TLRU<T> {
|
|
7
|
+
private readonly lru;
|
|
8
|
+
constructor(maxSize: number);
|
|
9
|
+
get(key: string): T | undefined;
|
|
10
|
+
set(key: string, value: T, ttl: number): void;
|
|
11
|
+
has(key: string): boolean;
|
|
12
|
+
remove(key: string): void;
|
|
13
|
+
clear(): void;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=tlru.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tlru.d.ts","sourceRoot":"","sources":["../../../src/utils/tlru.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,qBAAa,IAAI,CAAC,CAAC;IACjB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAA4B;gBAEnC,OAAO,EAAE,MAAM;IAI5B,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAgBhC,GAAG,CAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAI9C,GAAG,CAAE,GAAG,EAAE,MAAM,GAAG,OAAO;IAU1B,MAAM,CAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAI1B,KAAK,IAAK,IAAI;CAGf"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import hashlru from 'hashlru';
|
|
2
|
+
/**
|
|
3
|
+
* Time Aware Least Recent Used Cache
|
|
4
|
+
*
|
|
5
|
+
* @see https://arxiv.org/pdf/1801.00390
|
|
6
|
+
*/
|
|
7
|
+
export class TLRU {
|
|
8
|
+
lru;
|
|
9
|
+
constructor(maxSize) {
|
|
10
|
+
this.lru = hashlru(maxSize);
|
|
11
|
+
}
|
|
12
|
+
get(key) {
|
|
13
|
+
const value = this.lru.get(key);
|
|
14
|
+
if (value != null) {
|
|
15
|
+
if (value.expire != null && value.expire < Date.now()) {
|
|
16
|
+
this.lru.remove(key);
|
|
17
|
+
return undefined;
|
|
18
|
+
}
|
|
19
|
+
return value.value;
|
|
20
|
+
}
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
set(key, value, ttl) {
|
|
24
|
+
this.lru.set(key, { value, expire: Date.now() + ttl });
|
|
25
|
+
}
|
|
26
|
+
has(key) {
|
|
27
|
+
const value = this.get(key);
|
|
28
|
+
if (value != null) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
remove(key) {
|
|
34
|
+
this.lru.remove(key);
|
|
35
|
+
}
|
|
36
|
+
clear() {
|
|
37
|
+
this.lru.clear();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=tlru.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tlru.js","sourceRoot":"","sources":["../../../src/utils/tlru.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,SAAS,CAAA;AAE7B;;;;GAIG;AACH,MAAM,OAAO,IAAI;IACE,GAAG,CAA4B;IAEhD,YAAa,OAAe;QAC1B,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAC7B,CAAC;IAED,GAAG,CAAE,GAAW;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAE/B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,IAAI,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;gBACtD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;gBAEpB,OAAO,SAAS,CAAA;YAClB,CAAC;YAED,OAAO,KAAK,CAAC,KAAK,CAAA;QACpB,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,GAAG,CAAE,GAAW,EAAE,KAAQ,EAAE,GAAW;QACrC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,CAAA;IACxD,CAAC;IAED,GAAG,CAAE,GAAW;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAE3B,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;YAClB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,OAAO,KAAK,CAAA;IACd,CAAC;IAED,MAAM,CAAE,GAAW;QACjB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IACtB,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,CAAA;IAClB,CAAC;CACF"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type ExporterOptions, type ReadableStorage, type UnixFSEntry } from 'ipfs-unixfs-exporter';
|
|
2
|
+
import type { CID } from 'multiformats/cid';
|
|
3
|
+
export interface PathWalkerOptions extends ExporterOptions {
|
|
4
|
+
}
|
|
5
|
+
export interface PathWalkerResponse {
|
|
6
|
+
ipfsRoots: CID[];
|
|
7
|
+
terminalElement: UnixFSEntry;
|
|
8
|
+
}
|
|
9
|
+
export interface PathWalkerFn {
|
|
10
|
+
(blockstore: ReadableStorage, path: string, options?: PathWalkerOptions): Promise<PathWalkerResponse>;
|
|
11
|
+
}
|
|
12
|
+
export declare function walkPath(blockstore: ReadableStorage, path: string, options?: PathWalkerOptions): Promise<PathWalkerResponse>;
|
|
13
|
+
//# sourceMappingURL=walk-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk-path.d.ts","sourceRoot":"","sources":["../../../src/utils/walk-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,KAAK,eAAe,EAAE,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAC7H,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C,MAAM,WAAW,iBAAkB,SAAQ,eAAe;CAEzD;AACD,MAAM,WAAW,kBAAkB;IACjC,SAAS,EAAE,GAAG,EAAE,CAAA;IAChB,eAAe,EAAE,WAAW,CAAA;CAE7B;AAED,MAAM,WAAW,YAAY;IAC3B,CAAC,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAA;CACtG;AAED,wBAAsB,QAAQ,CAAE,UAAU,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAiBnI"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { walkPath as exporterWalk } from 'ipfs-unixfs-exporter';
|
|
2
|
+
export async function walkPath(blockstore, path, options) {
|
|
3
|
+
const ipfsRoots = [];
|
|
4
|
+
let terminalElement;
|
|
5
|
+
for await (const entry of exporterWalk(path, blockstore, options)) {
|
|
6
|
+
ipfsRoots.push(entry.cid);
|
|
7
|
+
terminalElement = entry;
|
|
8
|
+
}
|
|
9
|
+
if (terminalElement == null) {
|
|
10
|
+
throw new Error('No terminal element found');
|
|
11
|
+
}
|
|
12
|
+
return {
|
|
13
|
+
ipfsRoots,
|
|
14
|
+
terminalElement
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=walk-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk-path.js","sourceRoot":"","sources":["../../../src/utils/walk-path.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,YAAY,EAAgE,MAAM,sBAAsB,CAAA;AAgB7H,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAE,UAA2B,EAAE,IAAY,EAAE,OAA2B;IACpG,MAAM,SAAS,GAAU,EAAE,CAAA;IAC3B,IAAI,eAAwC,CAAA;IAE5C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,CAAC;QAClE,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACzB,eAAe,GAAG,KAAK,CAAA;IACzB,CAAC;IAED,IAAI,eAAe,IAAI,IAAI,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;IAC9C,CAAC;IAED,OAAO;QACL,SAAS;QACT,eAAe;KAChB,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { type DAGCBOR } from '@helia/dag-cbor';
|
|
2
|
+
import { type DAGJSON } from '@helia/dag-json';
|
|
3
|
+
import { type IPNS } from '@helia/ipns';
|
|
4
|
+
import { type JSON } from '@helia/json';
|
|
5
|
+
import { type UnixFS as HeliaUnixFs } from '@helia/unixfs';
|
|
6
|
+
import { type PathWalkerFn } from './utils/walk-path.js';
|
|
7
|
+
import type { ContentTypeParser, Resource, VerifiedFetchInit as VerifiedFetchOptions } from './index.js';
|
|
8
|
+
import type { Helia } from '@helia/interface';
|
|
9
|
+
interface VerifiedFetchComponents {
|
|
10
|
+
helia: Helia;
|
|
11
|
+
ipns?: IPNS;
|
|
12
|
+
unixfs?: HeliaUnixFs;
|
|
13
|
+
dagJson?: DAGJSON;
|
|
14
|
+
json?: JSON;
|
|
15
|
+
dagCbor?: DAGCBOR;
|
|
16
|
+
pathWalker?: PathWalkerFn;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Potential future options for the VerifiedFetch constructor.
|
|
20
|
+
*/
|
|
21
|
+
interface VerifiedFetchInit {
|
|
22
|
+
contentTypeParser?: ContentTypeParser;
|
|
23
|
+
}
|
|
24
|
+
export declare class VerifiedFetch {
|
|
25
|
+
private readonly helia;
|
|
26
|
+
private readonly ipns;
|
|
27
|
+
private readonly unixfs;
|
|
28
|
+
private readonly dagJson;
|
|
29
|
+
private readonly dagCbor;
|
|
30
|
+
private readonly json;
|
|
31
|
+
private readonly pathWalker;
|
|
32
|
+
private readonly log;
|
|
33
|
+
private readonly contentTypeParser;
|
|
34
|
+
constructor({ helia, ipns, unixfs, dagJson, json, dagCbor, pathWalker }: VerifiedFetchComponents, init?: VerifiedFetchInit);
|
|
35
|
+
private handleIPNSRecord;
|
|
36
|
+
private handleIPLDCar;
|
|
37
|
+
private handleDagJson;
|
|
38
|
+
private handleJson;
|
|
39
|
+
private handleDagCbor;
|
|
40
|
+
private handleDagPb;
|
|
41
|
+
private handleRaw;
|
|
42
|
+
private setContentType;
|
|
43
|
+
/**
|
|
44
|
+
* Determines the format requested by the client, defaults to `null` if no format is requested.
|
|
45
|
+
*
|
|
46
|
+
* @see https://specs.ipfs.tech/http-gateways/path-gateway/#format-request-query-parameter
|
|
47
|
+
* @default 'raw'
|
|
48
|
+
*/
|
|
49
|
+
private getFormat;
|
|
50
|
+
/**
|
|
51
|
+
* Map of format to specific handlers for that format.
|
|
52
|
+
* These format handlers should adjust the response headers as specified in https://specs.ipfs.tech/http-gateways/path-gateway/#response-headers
|
|
53
|
+
*/
|
|
54
|
+
private readonly formatHandlers;
|
|
55
|
+
private readonly codecHandlers;
|
|
56
|
+
fetch(resource: Resource, opts?: VerifiedFetchOptions): Promise<Response>;
|
|
57
|
+
/**
|
|
58
|
+
* Start the Helia instance
|
|
59
|
+
*/
|
|
60
|
+
start(): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Shut down the Helia instance
|
|
63
|
+
*/
|
|
64
|
+
stop(): Promise<void>;
|
|
65
|
+
}
|
|
66
|
+
export {};
|
|
67
|
+
//# sourceMappingURL=verified-fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"verified-fetch.d.ts","sourceRoot":"","sources":["../../src/verified-fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAA2B,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAA;AACvE,OAAO,EAAqB,KAAK,IAAI,EAAE,MAAM,aAAa,CAAA;AAE1D,OAAO,EAAqB,KAAK,IAAI,EAAE,MAAM,aAAa,CAAA;AAC1D,OAAO,EAAyB,KAAK,MAAM,IAAI,WAAW,EAAoB,MAAM,eAAe,CAAA;AAUnG,OAAO,EAAY,KAAK,YAAY,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,KAAK,EAAa,iBAAiB,EAAE,QAAQ,EAAE,iBAAiB,IAAI,oBAAoB,EAAE,MAAM,YAAY,CAAA;AACnH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAK7C,UAAU,uBAAuB;IAC/B,KAAK,EAAE,KAAK,CAAA;IACZ,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,CAAC,EAAE,IAAI,CAAA;IACX,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,UAAU,CAAC,EAAE,YAAY,CAAA;CAC1B;AAED;;GAEG;AACH,UAAU,iBAAiB;IACzB,iBAAiB,CAAC,EAAE,iBAAiB,CAAA;CACtC;AA0CD,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAO;IAC7B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAa;IACpC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAM;IAC3B,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAc;IACzC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA+B;gBAEpD,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,uBAAuB,EAAE,IAAI,CAAC,EAAE,iBAAiB;YAmB7G,gBAAgB;YAOhB,aAAa;YAMb,aAAa;YAab,UAAU;YAaV,aAAa;YAab,WAAW;YA6CX,SAAS;YAUT,cAAc;IA0B5B;;;;;OAKG;IACH,OAAO,CAAC,SAAS;IAyBjB;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,cAAc,CAS9B;IAED,OAAO,CAAC,QAAQ,CAAC,aAAa,CAO7B;IAEK,KAAK,CAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,QAAQ,CAAC;IAuDhF;;OAEG;IACG,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAI7B;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CAG7B"}
|