@helia/utils 0.3.3-5ff6998 → 0.3.3-9de08ef
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.min.js +1 -1
- package/dist/src/index.d.ts +4 -15
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -9
- package/dist/src/index.js.map +1 -1
- package/dist/src/pins.d.ts +3 -3
- package/dist/src/pins.d.ts.map +1 -1
- package/dist/src/pins.js +9 -8
- package/dist/src/pins.js.map +1 -1
- package/dist/src/utils/dag-walkers.d.ts +28 -0
- package/dist/src/utils/dag-walkers.d.ts.map +1 -0
- package/dist/src/utils/dag-walkers.js +171 -0
- package/dist/src/utils/dag-walkers.js.map +1 -0
- package/dist/src/utils/default-hashers.d.ts +3 -0
- package/dist/src/utils/default-hashers.d.ts.map +1 -0
- package/dist/src/utils/default-hashers.js +15 -0
- package/dist/src/utils/default-hashers.js.map +1 -0
- package/dist/src/utils/networked-storage.d.ts +2 -3
- package/dist/src/utils/networked-storage.d.ts.map +1 -1
- package/dist/src/utils/networked-storage.js +6 -16
- package/dist/src/utils/networked-storage.js.map +1 -1
- package/package.json +2 -2
- package/src/index.ts +13 -26
- package/src/pins.ts +12 -9
- package/src/utils/dag-walkers.ts +198 -0
- package/src/utils/default-hashers.ts +18 -0
- package/src/utils/networked-storage.ts +8 -21
- package/dist/src/utils/get-codec.d.ts +0 -4
- package/dist/src/utils/get-codec.d.ts.map +0 -1
- package/dist/src/utils/get-codec.js +0 -38
- package/dist/src/utils/get-codec.js.map +0 -1
- package/dist/src/utils/get-hasher.d.ts +0 -4
- package/dist/src/utils/get-hasher.d.ts.map +0 -1
- package/dist/src/utils/get-hasher.js +0 -32
- package/dist/src/utils/get-hasher.js.map +0 -1
- package/dist/src/utils/is-promise.d.ts +0 -2
- package/dist/src/utils/is-promise.d.ts.map +0 -1
- package/dist/src/utils/is-promise.js +0 -4
- package/dist/src/utils/is-promise.js.map +0 -1
- package/src/utils/get-codec.ts +0 -47
- package/src/utils/get-hasher.ts +0 -40
- package/src/utils/is-promise.ts +0 -3
package/dist/src/index.d.ts
CHANGED
|
@@ -17,14 +17,13 @@
|
|
|
17
17
|
* ```
|
|
18
18
|
*/
|
|
19
19
|
import { BlockStorage } from './storage.js';
|
|
20
|
-
import type {
|
|
20
|
+
import type { DAGWalker, GCOptions, Helia as HeliaInterface, Routing } from '@helia/interface';
|
|
21
21
|
import type { BlockBroker } from '@helia/interface/blocks';
|
|
22
22
|
import type { Pins } from '@helia/interface/pins';
|
|
23
23
|
import type { ComponentLogger, Metrics } from '@libp2p/interface';
|
|
24
24
|
import type { DNS } from '@multiformats/dns';
|
|
25
25
|
import type { Blockstore } from 'interface-blockstore';
|
|
26
26
|
import type { Datastore } from 'interface-datastore';
|
|
27
|
-
import type { BlockCodec } from 'multiformats';
|
|
28
27
|
import type { MultihashDigest, MultihashHasher } from 'multiformats/hashes/interface';
|
|
29
28
|
export { AbstractSession, type AbstractCreateSessionOptions } from './abstract-session.js';
|
|
30
29
|
export { BloomFilter } from './bloom-filter.js';
|
|
@@ -46,22 +45,12 @@ export interface HeliaInit {
|
|
|
46
45
|
* pass appropriate MultihashHashers here.
|
|
47
46
|
*/
|
|
48
47
|
hashers?: MultihashHasher[];
|
|
49
|
-
/**
|
|
50
|
-
* An optional function that can load a MultihashHasher on demand. May return
|
|
51
|
-
* a promise.
|
|
52
|
-
*/
|
|
53
|
-
loadHasher?(code: number): Await<MultihashHasher>;
|
|
54
48
|
/**
|
|
55
49
|
* In order to pin CIDs that correspond to a DAG, it's necessary to know
|
|
56
50
|
* how to traverse that DAG. DAGWalkers take a block and yield any CIDs
|
|
57
51
|
* encoded within that block.
|
|
58
52
|
*/
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* An optional function that can load a BlockCodec on demand. May return a
|
|
62
|
-
* promise.
|
|
63
|
-
*/
|
|
64
|
-
loadCodec?(code: number): Await<BlockCodec<any, any>>;
|
|
53
|
+
dagWalkers?: DAGWalker[];
|
|
65
54
|
/**
|
|
66
55
|
* A list of strategies used to fetch blocks when they are not present in
|
|
67
56
|
* the local blockstore
|
|
@@ -129,8 +118,8 @@ export declare class Helia implements HeliaInterface {
|
|
|
129
118
|
pins: Pins;
|
|
130
119
|
logger: ComponentLogger;
|
|
131
120
|
routing: Routing;
|
|
132
|
-
|
|
133
|
-
|
|
121
|
+
dagWalkers: Record<number, DAGWalker>;
|
|
122
|
+
hashers: Record<number, MultihashHasher>;
|
|
134
123
|
dns: DNS;
|
|
135
124
|
metrics?: Metrics;
|
|
136
125
|
private readonly log;
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AASH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAK3C,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AASH,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAK3C,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,IAAI,cAAc,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC9F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAA;AACjD,OAAO,KAAK,EAAE,eAAe,EAAU,OAAO,EAAE,MAAM,mBAAmB,CAAA;AACzE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAErF,OAAO,EAAE,eAAe,EAAE,KAAK,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;AAC1F,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAE/C;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB;;OAEG;IACH,UAAU,EAAE,UAAU,CAAA;IAEtB;;OAEG;IACH,SAAS,EAAE,SAAS,CAAA;IAEpB;;;;OAIG;IACH,OAAO,CAAC,EAAE,eAAe,EAAE,CAAA;IAE3B;;;;OAIG;IACH,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;IAExB;;;OAGG;IACH,YAAY,EAAE,KAAK,CAAC,CAAC,UAAU,EAAE,GAAG,KAAK,WAAW,CAAC,CAAA;IAErD;;;;;;;;;;;;;OAaG;IACH,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB;;;OAGG;IACH,MAAM,CAAC,EAAE,eAAe,CAAA;IAExB;;;OAGG;IACH,OAAO,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;IAEjC;;;;;;;;;;;;;;;OAeG;IACH,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAElC;;OAEG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAEhC;;OAEG;IACH,GAAG,CAAC,EAAE,GAAG,CAAA;IAET;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB;AAcD,qBAAa,KAAM,YAAW,cAAc;IACnC,UAAU,EAAE,YAAY,CAAA;IACxB,SAAS,EAAE,SAAS,CAAA;IACpB,IAAI,EAAE,IAAI,CAAA;IACV,MAAM,EAAE,eAAe,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACrC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAA;IACxC,GAAG,EAAE,GAAG,CAAA;IACR,OAAO,CAAC,EAAE,OAAO,CAAA;IACxB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;gBAEf,IAAI,EAAE,SAAS;IAuDtB,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IASvB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAQtB,EAAE,CAAE,OAAO,GAAE,SAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CA+BlD;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAE,CAAC,SAAS,MAAM,EAAG,MAAM,EAAE,eAAe,EAAE,IAAI,EAAE,CAAC,GAAG,MAAM,IAAI,eAAe,CAAC,CAAC,CAAC,CAE1G"}
|
package/dist/src/index.js
CHANGED
|
@@ -24,9 +24,9 @@ import { CustomProgressEvent } from 'progress-events';
|
|
|
24
24
|
import { PinsImpl } from './pins.js';
|
|
25
25
|
import { Routing as RoutingClass } from './routing.js';
|
|
26
26
|
import { BlockStorage } from './storage.js';
|
|
27
|
+
import { defaultDagWalkers } from './utils/dag-walkers.js';
|
|
27
28
|
import { assertDatastoreVersionIsCurrent } from './utils/datastore-version.js';
|
|
28
|
-
import {
|
|
29
|
-
import { getHasher } from './utils/get-hasher.js';
|
|
29
|
+
import { defaultHashers } from './utils/default-hashers.js';
|
|
30
30
|
import { NetworkedStorage } from './utils/networked-storage.js';
|
|
31
31
|
export { AbstractSession } from './abstract-session.js';
|
|
32
32
|
export { BloomFilter } from './bloom-filter.js';
|
|
@@ -36,26 +36,26 @@ export class Helia {
|
|
|
36
36
|
pins;
|
|
37
37
|
logger;
|
|
38
38
|
routing;
|
|
39
|
-
|
|
40
|
-
|
|
39
|
+
dagWalkers;
|
|
40
|
+
hashers;
|
|
41
41
|
dns;
|
|
42
42
|
metrics;
|
|
43
43
|
log;
|
|
44
44
|
constructor(init) {
|
|
45
45
|
this.logger = init.logger ?? defaultLogger();
|
|
46
46
|
this.log = this.logger.forComponent('helia');
|
|
47
|
-
this.
|
|
48
|
-
this.
|
|
47
|
+
this.hashers = defaultHashers(init.hashers);
|
|
48
|
+
this.dagWalkers = defaultDagWalkers(init.dagWalkers);
|
|
49
49
|
this.dns = init.dns ?? dns();
|
|
50
50
|
this.metrics = init.metrics;
|
|
51
51
|
// @ts-expect-error routing is not set
|
|
52
52
|
const components = {
|
|
53
53
|
blockstore: init.blockstore,
|
|
54
54
|
datastore: init.datastore,
|
|
55
|
+
hashers: this.hashers,
|
|
56
|
+
dagWalkers: this.dagWalkers,
|
|
55
57
|
logger: this.logger,
|
|
56
58
|
blockBrokers: [],
|
|
57
|
-
getHasher: this.getHasher,
|
|
58
|
-
getCodec: this.getCodec,
|
|
59
59
|
dns: this.dns,
|
|
60
60
|
metrics: this.metrics,
|
|
61
61
|
...(init.components ?? {})
|
|
@@ -79,7 +79,7 @@ export class Helia {
|
|
|
79
79
|
providerLookupConcurrency: init.providerLookupConcurrency
|
|
80
80
|
});
|
|
81
81
|
const networkedStorage = new NetworkedStorage(components);
|
|
82
|
-
this.pins = new PinsImpl(init.datastore, networkedStorage, this.
|
|
82
|
+
this.pins = new PinsImpl(init.datastore, networkedStorage, this.dagWalkers);
|
|
83
83
|
this.blockstore = new BlockStorage(networkedStorage, this.pins, {
|
|
84
84
|
holdGcLock: init.holdGcLock ?? true
|
|
85
85
|
});
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAA;AACvC,OAAO,KAAK,MAAM,UAAU,CAAA;AAC5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AACpC,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAC3C,OAAO,EAAE
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/pins.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { type Datastore } from 'interface-datastore';
|
|
2
2
|
import { CID, type Version } from 'multiformats/cid';
|
|
3
|
-
import type {
|
|
3
|
+
import type { DAGWalker } from '@helia/interface';
|
|
4
4
|
import type { AddOptions, IsPinnedOptions, LsOptions, Pin, Pins, RmOptions } from '@helia/interface/pins';
|
|
5
5
|
import type { Blockstore } from 'interface-blockstore';
|
|
6
6
|
export declare class PinsImpl implements Pins {
|
|
7
7
|
#private;
|
|
8
8
|
private readonly datastore;
|
|
9
9
|
private readonly blockstore;
|
|
10
|
-
private readonly
|
|
11
|
-
constructor(datastore: Datastore, blockstore: Blockstore,
|
|
10
|
+
private readonly dagWalkers;
|
|
11
|
+
constructor(datastore: Datastore, blockstore: Blockstore, dagWalkers: Record<number, DAGWalker>);
|
|
12
12
|
add(cid: CID<unknown, number, number, Version>, options?: AddOptions): AsyncGenerator<CID, void, undefined>;
|
|
13
13
|
rm(cid: CID<unknown, number, number, Version>, options?: RmOptions): AsyncGenerator<CID, void, undefined>;
|
|
14
14
|
ls(options?: LsOptions): AsyncGenerator<Pin, void, undefined>;
|
package/dist/src/pins.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pins.d.ts","sourceRoot":"","sources":["../../src/pins.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAO,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"pins.d.ts","sourceRoot":"","sources":["../../src/pins.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,SAAS,EAAO,MAAM,qBAAqB,CAAA;AAEzD,OAAO,EAAE,GAAG,EAAE,KAAK,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAGpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD,OAAO,KAAK,EAAE,UAAU,EAAgB,eAAe,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AAEvH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AA+CtD,qBAAa,QAAS,YAAW,IAAI;;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA2B;gBAEzC,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC;IAMxF,GAAG,CAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAE,UAAe,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC;IA6GhH,EAAE,CAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAE,SAAc,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC;IA6B9G,EAAE,CAAE,OAAO,GAAE,SAAc,GAAG,cAAc,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC;IAcpE,QAAQ,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,OAAO,CAAC;CAK3E"}
|
package/dist/src/pins.js
CHANGED
|
@@ -2,7 +2,6 @@ import { Queue } from '@libp2p/utils/queue';
|
|
|
2
2
|
import * as cborg from 'cborg';
|
|
3
3
|
import { Key } from 'interface-datastore';
|
|
4
4
|
import { base36 } from 'multiformats/bases/base36';
|
|
5
|
-
import { createUnsafe } from 'multiformats/block';
|
|
6
5
|
import { CID } from 'multiformats/cid';
|
|
7
6
|
import { CustomProgressEvent } from 'progress-events';
|
|
8
7
|
import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
|
|
@@ -19,11 +18,11 @@ function toDSKey(cid) {
|
|
|
19
18
|
export class PinsImpl {
|
|
20
19
|
datastore;
|
|
21
20
|
blockstore;
|
|
22
|
-
|
|
23
|
-
constructor(datastore, blockstore,
|
|
21
|
+
dagWalkers;
|
|
22
|
+
constructor(datastore, blockstore, dagWalkers) {
|
|
24
23
|
this.datastore = datastore;
|
|
25
24
|
this.blockstore = blockstore;
|
|
26
|
-
this.
|
|
25
|
+
this.dagWalkers = dagWalkers;
|
|
27
26
|
}
|
|
28
27
|
async *add(cid, options = {}) {
|
|
29
28
|
const pinKey = toDSKey(cid);
|
|
@@ -66,12 +65,14 @@ export class PinsImpl {
|
|
|
66
65
|
if (options.depth === -1) {
|
|
67
66
|
return;
|
|
68
67
|
}
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
const dagWalker = this.dagWalkers[cid.code];
|
|
69
|
+
if (dagWalker == null) {
|
|
70
|
+
throw new Error(`No dag walker found for cid codec ${cid.code}`);
|
|
71
|
+
}
|
|
72
|
+
const block = await this.blockstore.get(cid, options);
|
|
72
73
|
yield cid;
|
|
73
74
|
// walk dag, ensure all blocks are present
|
|
74
|
-
for await (const
|
|
75
|
+
for await (const cid of dagWalker.walk(block)) {
|
|
75
76
|
yield* await queue.add(async () => {
|
|
76
77
|
return this.#walkDag(cid, queue, {
|
|
77
78
|
...options,
|
package/dist/src/pins.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pins.js","sourceRoot":"","sources":["../../src/pins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,qBAAqB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAkB,GAAG,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"pins.js","sourceRoot":"","sources":["../../src/pins.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { DAGWalker } from '@helia/interface';
|
|
2
|
+
/**
|
|
3
|
+
* Dag walker for dag-pb CIDs
|
|
4
|
+
*/
|
|
5
|
+
export declare const dagPbWalker: DAGWalker;
|
|
6
|
+
/**
|
|
7
|
+
* Dag walker for raw CIDs
|
|
8
|
+
*/
|
|
9
|
+
export declare const rawWalker: DAGWalker;
|
|
10
|
+
/**
|
|
11
|
+
* Dag walker for dag-cbor CIDs. Does not actually use dag-cbor since
|
|
12
|
+
* all we are interested in is extracting the the CIDs from the block
|
|
13
|
+
* so we can just use cborg for that.
|
|
14
|
+
*/
|
|
15
|
+
export declare const dagCborWalker: DAGWalker;
|
|
16
|
+
/**
|
|
17
|
+
* Dag walker for dag-json CIDs. Does not actually use dag-json since
|
|
18
|
+
* all we are interested in is extracting the the CIDs from the block
|
|
19
|
+
* so we can just use cborg/json for that.
|
|
20
|
+
*/
|
|
21
|
+
export declare const dagJsonWalker: DAGWalker;
|
|
22
|
+
/**
|
|
23
|
+
* Dag walker for json CIDs. JSON has no facility for linking to
|
|
24
|
+
* external blocks so the walker is a no-op.
|
|
25
|
+
*/
|
|
26
|
+
export declare const jsonWalker: DAGWalker;
|
|
27
|
+
export declare function defaultDagWalkers(walkers?: DAGWalker[]): Record<number, DAGWalker>;
|
|
28
|
+
//# sourceMappingURL=dag-walkers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag-walkers.d.ts","sourceRoot":"","sources":["../../../src/utils/dag-walkers.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAEjD;;GAEG;AACH,eAAO,MAAM,WAAW,EAAE,SAOzB,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,SAKvB,CAAA;AAKD;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,SAuB3B,CAAA;AAsED;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,SA6B3B,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,SAGxB,CAAA;AAED,wBAAgB,iBAAiB,CAAE,OAAO,GAAE,SAAS,EAAO,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAevF"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/* eslint max-depth: ["error", 7] */
|
|
2
|
+
import * as dagCbor from '@ipld/dag-cbor';
|
|
3
|
+
import * as dagJson from '@ipld/dag-json';
|
|
4
|
+
import * as dagPb from '@ipld/dag-pb';
|
|
5
|
+
import * as cborg from 'cborg';
|
|
6
|
+
import { Type, Token } from 'cborg';
|
|
7
|
+
import * as cborgJson from 'cborg/json';
|
|
8
|
+
import { CID } from 'multiformats';
|
|
9
|
+
import { base64 } from 'multiformats/bases/base64';
|
|
10
|
+
import * as json from 'multiformats/codecs/json';
|
|
11
|
+
import * as raw from 'multiformats/codecs/raw';
|
|
12
|
+
/**
|
|
13
|
+
* Dag walker for dag-pb CIDs
|
|
14
|
+
*/
|
|
15
|
+
export const dagPbWalker = {
|
|
16
|
+
codec: dagPb.code,
|
|
17
|
+
*walk(block) {
|
|
18
|
+
const node = dagPb.decode(block);
|
|
19
|
+
yield* node.Links.map(l => l.Hash);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
/**
|
|
23
|
+
* Dag walker for raw CIDs
|
|
24
|
+
*/
|
|
25
|
+
export const rawWalker = {
|
|
26
|
+
codec: raw.code,
|
|
27
|
+
*walk() {
|
|
28
|
+
// no embedded CIDs in a raw block
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
// https://github.com/ipfs/go-ipfs/issues/3570#issuecomment-273931692
|
|
32
|
+
const CID_TAG = 42;
|
|
33
|
+
/**
|
|
34
|
+
* Dag walker for dag-cbor CIDs. Does not actually use dag-cbor since
|
|
35
|
+
* all we are interested in is extracting the the CIDs from the block
|
|
36
|
+
* so we can just use cborg for that.
|
|
37
|
+
*/
|
|
38
|
+
export const dagCborWalker = {
|
|
39
|
+
codec: dagCbor.code,
|
|
40
|
+
*walk(block) {
|
|
41
|
+
const cids = [];
|
|
42
|
+
const tags = [];
|
|
43
|
+
tags[CID_TAG] = (bytes) => {
|
|
44
|
+
if (bytes[0] !== 0) {
|
|
45
|
+
throw new Error('Invalid CID for CBOR tag 42; expected leading 0x00');
|
|
46
|
+
}
|
|
47
|
+
const cid = CID.decode(bytes.subarray(1)); // ignore leading 0x00
|
|
48
|
+
cids.push(cid);
|
|
49
|
+
return cid;
|
|
50
|
+
};
|
|
51
|
+
cborg.decode(block, {
|
|
52
|
+
tags
|
|
53
|
+
});
|
|
54
|
+
yield* cids;
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Borrowed from @ipld/dag-json
|
|
59
|
+
*/
|
|
60
|
+
class DagJsonTokenizer extends cborgJson.Tokenizer {
|
|
61
|
+
tokenBuffer;
|
|
62
|
+
constructor(data, options) {
|
|
63
|
+
super(data, options);
|
|
64
|
+
this.tokenBuffer = [];
|
|
65
|
+
}
|
|
66
|
+
done() {
|
|
67
|
+
return this.tokenBuffer.length === 0 && super.done();
|
|
68
|
+
}
|
|
69
|
+
_next() {
|
|
70
|
+
if (this.tokenBuffer.length > 0) {
|
|
71
|
+
// @ts-expect-error https://github.com/Microsoft/TypeScript/issues/30406
|
|
72
|
+
return this.tokenBuffer.pop();
|
|
73
|
+
}
|
|
74
|
+
return super.next();
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Implements rules outlined in https://github.com/ipld/specs/pull/356
|
|
78
|
+
*/
|
|
79
|
+
next() {
|
|
80
|
+
const token = this._next();
|
|
81
|
+
if (token.type === Type.map) {
|
|
82
|
+
const keyToken = this._next();
|
|
83
|
+
if (keyToken.type === Type.string && keyToken.value === '/') {
|
|
84
|
+
const valueToken = this._next();
|
|
85
|
+
if (valueToken.type === Type.string) { // *must* be a CID
|
|
86
|
+
const breakToken = this._next(); // swallow the end-of-map token
|
|
87
|
+
if (breakToken.type !== Type.break) {
|
|
88
|
+
throw new Error('Invalid encoded CID form');
|
|
89
|
+
}
|
|
90
|
+
this.tokenBuffer.push(valueToken); // CID.parse will pick this up after our tag token
|
|
91
|
+
return new Token(Type.tag, 42, 0);
|
|
92
|
+
}
|
|
93
|
+
if (valueToken.type === Type.map) {
|
|
94
|
+
const innerKeyToken = this._next();
|
|
95
|
+
if (innerKeyToken.type === Type.string && innerKeyToken.value === 'bytes') {
|
|
96
|
+
const innerValueToken = this._next();
|
|
97
|
+
if (innerValueToken.type === Type.string) { // *must* be Bytes
|
|
98
|
+
for (let i = 0; i < 2; i++) {
|
|
99
|
+
const breakToken = this._next(); // swallow two end-of-map tokens
|
|
100
|
+
if (breakToken.type !== Type.break) {
|
|
101
|
+
throw new Error('Invalid encoded Bytes form');
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const bytes = base64.decode(`m${innerValueToken.value}`);
|
|
105
|
+
return new Token(Type.bytes, bytes, innerValueToken.value.length);
|
|
106
|
+
}
|
|
107
|
+
this.tokenBuffer.push(innerValueToken); // bail
|
|
108
|
+
}
|
|
109
|
+
this.tokenBuffer.push(innerKeyToken); // bail
|
|
110
|
+
}
|
|
111
|
+
this.tokenBuffer.push(valueToken); // bail
|
|
112
|
+
}
|
|
113
|
+
this.tokenBuffer.push(keyToken); // bail
|
|
114
|
+
}
|
|
115
|
+
return token;
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Dag walker for dag-json CIDs. Does not actually use dag-json since
|
|
120
|
+
* all we are interested in is extracting the the CIDs from the block
|
|
121
|
+
* so we can just use cborg/json for that.
|
|
122
|
+
*/
|
|
123
|
+
export const dagJsonWalker = {
|
|
124
|
+
codec: dagJson.code,
|
|
125
|
+
*walk(block) {
|
|
126
|
+
const cids = [];
|
|
127
|
+
const tags = [];
|
|
128
|
+
tags[CID_TAG] = (string) => {
|
|
129
|
+
const cid = CID.parse(string);
|
|
130
|
+
cids.push(cid);
|
|
131
|
+
return cid;
|
|
132
|
+
};
|
|
133
|
+
cborgJson.decode(block, {
|
|
134
|
+
tags,
|
|
135
|
+
tokenizer: new DagJsonTokenizer(block, {
|
|
136
|
+
tags,
|
|
137
|
+
allowIndefinite: true,
|
|
138
|
+
allowUndefined: true,
|
|
139
|
+
allowNaN: true,
|
|
140
|
+
allowInfinity: true,
|
|
141
|
+
allowBigInt: true,
|
|
142
|
+
strict: false,
|
|
143
|
+
rejectDuplicateMapKeys: false
|
|
144
|
+
})
|
|
145
|
+
});
|
|
146
|
+
yield* cids;
|
|
147
|
+
}
|
|
148
|
+
};
|
|
149
|
+
/**
|
|
150
|
+
* Dag walker for json CIDs. JSON has no facility for linking to
|
|
151
|
+
* external blocks so the walker is a no-op.
|
|
152
|
+
*/
|
|
153
|
+
export const jsonWalker = {
|
|
154
|
+
codec: json.code,
|
|
155
|
+
*walk() { }
|
|
156
|
+
};
|
|
157
|
+
export function defaultDagWalkers(walkers = []) {
|
|
158
|
+
const output = {};
|
|
159
|
+
[
|
|
160
|
+
dagPbWalker,
|
|
161
|
+
rawWalker,
|
|
162
|
+
dagCborWalker,
|
|
163
|
+
dagJsonWalker,
|
|
164
|
+
jsonWalker,
|
|
165
|
+
...walkers
|
|
166
|
+
].forEach(dagWalker => {
|
|
167
|
+
output[dagWalker.codec] = dagWalker;
|
|
168
|
+
});
|
|
169
|
+
return output;
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=dag-walkers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dag-walkers.js","sourceRoot":"","sources":["../../../src/utils/dag-walkers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-hashers.d.ts","sourceRoot":"","sources":["../../../src/utils/default-hashers.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAEpE,wBAAgB,cAAc,CAAE,OAAO,GAAE,eAAe,EAAO,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAahG"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { identity } from 'multiformats/hashes/identity';
|
|
2
|
+
import { sha256, sha512 } from 'multiformats/hashes/sha2';
|
|
3
|
+
export function defaultHashers(hashers = []) {
|
|
4
|
+
const output = {};
|
|
5
|
+
[
|
|
6
|
+
sha256,
|
|
7
|
+
sha512,
|
|
8
|
+
identity,
|
|
9
|
+
...hashers
|
|
10
|
+
].forEach(hasher => {
|
|
11
|
+
output[hasher.code] = hasher;
|
|
12
|
+
});
|
|
13
|
+
return output;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=default-hashers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"default-hashers.js","sourceRoot":"","sources":["../../../src/utils/default-hashers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AACvD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAGzD,MAAM,UAAU,cAAc,CAAE,UAA6B,EAAE;IAC7D,MAAM,MAAM,GAAoC,EAAE,CAEjD;IAAA;QACC,MAAM;QACN,MAAM;QACN,QAAQ;QACR,GAAG,OAAO;KACX,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QACjB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,OAAO,MAAM,CAAA;AACf,CAAC"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { type ProgressOptions } from 'progress-events';
|
|
2
|
-
import type { HasherLoader } from '@helia/interface';
|
|
3
2
|
import type { BlockBroker, Blocks, Pair, DeleteManyBlocksProgressEvents, DeleteBlockProgressEvents, GetBlockProgressEvents, GetManyBlocksProgressEvents, PutManyBlocksProgressEvents, PutBlockProgressEvents, GetAllBlocksProgressEvents, GetOfflineOptions, BlockRetrievalOptions, CreateSessionOptions, SessionBlockstore } from '@helia/interface/blocks';
|
|
4
3
|
import type { AbortOptions, ComponentLogger, Logger, Startable } from '@libp2p/interface';
|
|
5
4
|
import type { Blockstore } from 'interface-blockstore';
|
|
@@ -13,11 +12,11 @@ export interface StorageComponents {
|
|
|
13
12
|
blockstore: Blockstore;
|
|
14
13
|
logger: ComponentLogger;
|
|
15
14
|
blockBrokers: BlockBroker[];
|
|
16
|
-
|
|
15
|
+
hashers: Record<number, MultihashHasher>;
|
|
17
16
|
}
|
|
18
17
|
declare class Storage implements Blockstore {
|
|
19
18
|
protected readonly child: Blockstore;
|
|
20
|
-
protected readonly
|
|
19
|
+
protected readonly hashers: Record<number, MultihashHasher>;
|
|
21
20
|
protected log: Logger;
|
|
22
21
|
protected readonly logger: ComponentLogger;
|
|
23
22
|
protected readonly components: StorageComponents;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networked-storage.d.ts","sourceRoot":"","sources":["../../../src/utils/networked-storage.ts"],"names":[],"mappings":"AAKA,OAAO,EAAuB,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAA;
|
|
1
|
+
{"version":3,"file":"networked-storage.d.ts","sourceRoot":"","sources":["../../../src/utils/networked-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,10 +5,9 @@ import filter from 'it-filter';
|
|
|
5
5
|
import forEach from 'it-foreach';
|
|
6
6
|
import { CustomProgressEvent } from 'progress-events';
|
|
7
7
|
import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
|
|
8
|
-
import { isPromise } from './is-promise.js';
|
|
9
8
|
class Storage {
|
|
10
9
|
child;
|
|
11
|
-
|
|
10
|
+
hashers;
|
|
12
11
|
log;
|
|
13
12
|
logger;
|
|
14
13
|
components;
|
|
@@ -20,7 +19,7 @@ class Storage {
|
|
|
20
19
|
this.logger = components.logger;
|
|
21
20
|
this.components = components;
|
|
22
21
|
this.child = new IdentityBlockstore(components.blockstore);
|
|
23
|
-
this.
|
|
22
|
+
this.hashers = components.hashers ?? {};
|
|
24
23
|
}
|
|
25
24
|
/**
|
|
26
25
|
* Put a block to the underlying datastore
|
|
@@ -58,10 +57,9 @@ class Storage {
|
|
|
58
57
|
*/
|
|
59
58
|
async get(cid, options = {}) {
|
|
60
59
|
if (options.offline !== true && !(await this.child.has(cid, options))) {
|
|
61
|
-
const hasher = await this.getHasher(cid.multihash.code);
|
|
62
60
|
// we do not have the block locally, get it from a block provider
|
|
63
61
|
options.onProgress?.(new CustomProgressEvent('blocks:get:providers:get', cid));
|
|
64
|
-
const block = await raceBlockRetrievers(cid, this.components.blockBrokers,
|
|
62
|
+
const block = await raceBlockRetrievers(cid, this.components.blockBrokers, this.hashers[cid.multihash.code], {
|
|
65
63
|
...options,
|
|
66
64
|
log: this.log
|
|
67
65
|
});
|
|
@@ -82,10 +80,9 @@ class Storage {
|
|
|
82
80
|
options.onProgress?.(new CustomProgressEvent('blocks:get-many:blockstore:get-many'));
|
|
83
81
|
yield* this.child.getMany(forEach(cids, async (cid) => {
|
|
84
82
|
if (options.offline !== true && !(await this.child.has(cid, options))) {
|
|
85
|
-
const hasher = await this.getHasher(cid.multihash.code);
|
|
86
83
|
// we do not have the block locally, get it from a block provider
|
|
87
84
|
options.onProgress?.(new CustomProgressEvent('blocks:get-many:providers:get', cid));
|
|
88
|
-
const block = await raceBlockRetrievers(cid, this.components.blockBrokers,
|
|
85
|
+
const block = await raceBlockRetrievers(cid, this.components.blockBrokers, this.hashers[cid.multihash.code], {
|
|
89
86
|
...options,
|
|
90
87
|
log: this.log
|
|
91
88
|
});
|
|
@@ -160,7 +157,7 @@ export class NetworkedStorage extends Storage {
|
|
|
160
157
|
return new SessionStorage({
|
|
161
158
|
blockstore: this.child,
|
|
162
159
|
blockBrokers,
|
|
163
|
-
|
|
160
|
+
hashers: this.hashers,
|
|
164
161
|
logger: this.logger
|
|
165
162
|
}, {
|
|
166
163
|
root
|
|
@@ -316,14 +313,7 @@ export const getCidBlockVerifierFunction = (cid, hasher) => {
|
|
|
316
313
|
}
|
|
317
314
|
return async (block) => {
|
|
318
315
|
// verify block
|
|
319
|
-
|
|
320
|
-
const res = hasher.digest(block);
|
|
321
|
-
if (isPromise(res)) {
|
|
322
|
-
hash = await res;
|
|
323
|
-
}
|
|
324
|
-
else {
|
|
325
|
-
hash = res;
|
|
326
|
-
}
|
|
316
|
+
const hash = await hasher.digest(block);
|
|
327
317
|
if (!uint8ArrayEquals(hash.digest, cid.multihash.digest)) {
|
|
328
318
|
// if a hash mismatch occurs for a TrustlessGatewayBlockBroker, we should try another gateway
|
|
329
319
|
throw new InvalidMultihashError('Hash of downloaded block did not match multihash from passed CID');
|