@helia/utils 2.5.2-a464d83a → 2.5.2-ed6c3b79
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 +8 -8
- package/dist/index.min.js.map +4 -4
- package/dist/src/graph-walker.d.ts +21 -3
- package/dist/src/graph-walker.d.ts.map +1 -1
- package/dist/src/graph-walker.js +17 -20
- package/dist/src/graph-walker.js.map +1 -1
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/pins.d.ts +1 -1
- package/dist/src/pins.d.ts.map +1 -1
- package/dist/src/pins.js +39 -11
- package/dist/src/pins.js.map +1 -1
- package/dist/src/storage.d.ts +2 -2
- package/dist/src/storage.d.ts.map +1 -1
- package/dist/src/utils/networked-storage.d.ts +1 -1
- package/dist/src/utils/networked-storage.d.ts.map +1 -1
- package/dist/src/utils/session-storage.d.ts +1 -1
- package/dist/src/utils/session-storage.d.ts.map +1 -1
- package/dist/src/utils/storage.d.ts +1 -1
- package/dist/src/utils/storage.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/graph-walker.ts +43 -30
- package/src/index.ts +2 -2
- package/src/pins.ts +50 -12
- package/src/storage.ts +2 -2
- package/src/utils/networked-storage.ts +1 -1
- package/src/utils/session-storage.ts +1 -1
- package/src/utils/storage.ts +1 -1
|
@@ -1,8 +1,22 @@
|
|
|
1
1
|
import { Queue } from '@libp2p/utils';
|
|
2
|
-
import type {
|
|
2
|
+
import type { CodecLoader } from '@helia/interface';
|
|
3
3
|
import type { AbortOptions } from '@libp2p/interface';
|
|
4
|
-
import type {
|
|
5
|
-
|
|
4
|
+
import type { Blockstore } from 'interface-blockstore';
|
|
5
|
+
import type { BlockView, CID, Version } from 'multiformats';
|
|
6
|
+
export interface GraphWalkerComponents {
|
|
7
|
+
blockstore: Blockstore;
|
|
8
|
+
getCodec: CodecLoader;
|
|
9
|
+
}
|
|
10
|
+
export interface GraphWalkerInit {
|
|
11
|
+
}
|
|
12
|
+
export interface GraphNode<T = unknown, C extends number = number, A extends number = number, V extends Version = 0 | 1> {
|
|
13
|
+
block: BlockView<T, C, A, V>;
|
|
14
|
+
depth: number;
|
|
15
|
+
path: CID[];
|
|
16
|
+
}
|
|
17
|
+
export interface GraphWalker {
|
|
18
|
+
walk<T = any>(cid: CID, options?: WalkOptions<T>): AsyncGenerator<GraphNode<T>>;
|
|
19
|
+
}
|
|
6
20
|
/**
|
|
7
21
|
* A depth-first walker descends into child blocks before processing successor
|
|
8
22
|
* sibling blocks
|
|
@@ -22,6 +36,9 @@ interface JobOptions extends AbortOptions {
|
|
|
22
36
|
depth: number;
|
|
23
37
|
path: CID[];
|
|
24
38
|
}
|
|
39
|
+
export interface WalkOptions<T> extends AbortOptions {
|
|
40
|
+
includeChild?(child: CID, parent: BlockView<T, number, number, 0 | 1>): boolean;
|
|
41
|
+
}
|
|
25
42
|
declare abstract class AbstractGraphWalker {
|
|
26
43
|
private readonly components;
|
|
27
44
|
constructor(components: GraphWalkerComponents, init?: GraphWalkerInit);
|
|
@@ -31,4 +48,5 @@ declare abstract class AbstractGraphWalker {
|
|
|
31
48
|
export declare class NaturalOrderGraphWalker extends AbstractGraphWalker {
|
|
32
49
|
getQueue<T>(): Queue<GraphNode<T> | undefined, JobOptions>;
|
|
33
50
|
}
|
|
51
|
+
export {};
|
|
34
52
|
//# sourceMappingURL=graph-walker.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-walker.d.ts","sourceRoot":"","sources":["../../src/graph-walker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAIrC,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"graph-walker.d.ts","sourceRoot":"","sources":["../../src/graph-walker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AAIrC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3D,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,UAAU,CAAA;IACtB,QAAQ,EAAE,WAAW,CAAA;CACtB;AAED,MAAM,WAAW,eAAe;CAE/B;AAED,MAAM,WAAW,SAAS,CAAE,CAAC,GAAG,OAAO,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,EAAE,CAAC,SAAS,OAAO,GAAG,CAAC,GAAG,CAAC;IACtH,KAAK,EAAE,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC5B,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,GAAG,EAAE,CAAA;CACZ;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAE,CAAC,GAAG,GAAG,EAAG,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;CAClF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAE,IAAI,CAAC,EAAE,eAAe,GAAG,CAAC,UAAU,EAAE,qBAAqB,KAAK,WAAW,CAE5G;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAE,IAAI,CAAC,EAAE,eAAe,GAAG,CAAC,UAAU,EAAE,qBAAqB,KAAK,WAAW,CAE9G;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAE,IAAI,CAAC,EAAE,eAAe,GAAG,CAAC,UAAU,EAAE,qBAAqB,KAAK,WAAW,CAE9G;AAED,UAAU,UAAW,SAAQ,YAAY;IACvC,GAAG,EAAE,GAAG,CAAA;IACR,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,GAAG,EAAE,CAAA;CACZ;AAED,MAAM,WAAW,WAAW,CAAC,CAAC,CAAE,SAAQ,YAAY;IAClD,YAAY,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO,CAAA;CAChF;AAED,uBAAe,mBAAmB;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuB;gBAErC,UAAU,EAAE,qBAAqB,EAAE,IAAI,GAAE,eAAoB;IAIlE,IAAI,CAAE,CAAC,GAAG,GAAG,EAAG,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;IAiEzF,QAAQ,CAAC,QAAQ,CAAE,CAAC,KAAM,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,UAAU,CAAC;CACtE;AAwCD,qBAAa,uBAAwB,SAAQ,mBAAmB;IAC9D,QAAQ,CAAC,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,EAAE,UAAU,CAAC;CAK3D"}
|
package/dist/src/graph-walker.js
CHANGED
|
@@ -31,7 +31,6 @@ class AbstractGraphWalker {
|
|
|
31
31
|
const queue = this.getQueue();
|
|
32
32
|
const gen = filter(queue.toGenerator(options), (node) => node != null);
|
|
33
33
|
let finished = false;
|
|
34
|
-
const maxDepth = options?.depth ?? Infinity;
|
|
35
34
|
const job = async (opts) => {
|
|
36
35
|
const cid = opts.cid;
|
|
37
36
|
const bytes = await toBuffer(this.components.blockstore.get(cid, opts));
|
|
@@ -40,26 +39,24 @@ class AbstractGraphWalker {
|
|
|
40
39
|
bytes,
|
|
41
40
|
codec: await this.components.getCodec(cid.code)
|
|
42
41
|
});
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
continue;
|
|
47
|
-
}
|
|
48
|
-
queue.add(job, {
|
|
49
|
-
...opts,
|
|
50
|
-
cid: linkedCid,
|
|
51
|
-
depth: opts.depth + 1,
|
|
52
|
-
path: [...opts.path, linkedCid]
|
|
53
|
-
})
|
|
54
|
-
// eslint-disable-next-line no-loop-func
|
|
55
|
-
.catch(err => {
|
|
56
|
-
// only throw if the generator is still yielding results, otherwise
|
|
57
|
-
// it can cause unhandled promise rejections
|
|
58
|
-
if (!finished) {
|
|
59
|
-
gen.throw(err);
|
|
60
|
-
}
|
|
61
|
-
});
|
|
42
|
+
for (const [, linkedCid] of block.links()) {
|
|
43
|
+
if (options?.includeChild?.(linkedCid, block) === false) {
|
|
44
|
+
continue;
|
|
62
45
|
}
|
|
46
|
+
queue.add(job, {
|
|
47
|
+
...opts,
|
|
48
|
+
cid: linkedCid,
|
|
49
|
+
depth: opts.depth + 1,
|
|
50
|
+
path: [...opts.path, linkedCid]
|
|
51
|
+
})
|
|
52
|
+
// eslint-disable-next-line no-loop-func
|
|
53
|
+
.catch(err => {
|
|
54
|
+
// only throw if the generator is still yielding results, otherwise
|
|
55
|
+
// it can cause unhandled promise rejections
|
|
56
|
+
if (!finished) {
|
|
57
|
+
gen.throw(err);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
63
60
|
}
|
|
64
61
|
return {
|
|
65
62
|
block,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-walker.js","sourceRoot":"","sources":["../../src/graph-walker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,MAAM,MAAM,WAAW,CAAA;AAC9B,OAAO,QAAQ,MAAM,cAAc,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"graph-walker.js","sourceRoot":"","sources":["../../src/graph-walker.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -9,8 +9,8 @@ import { Routing as RoutingClass } from './routing.ts';
|
|
|
9
9
|
import { BlockStorage } from './storage.ts';
|
|
10
10
|
import type { BlockStorageInit } from './storage.ts';
|
|
11
11
|
import type { CodecLoader, GCOptions, HasherLoader, Helia as HeliaInterface, HeliaEvents, CryptoLoader, Crypto, NodeInfo, Router, HeliaMixin } from '@helia/interface';
|
|
12
|
-
import type { BlockBroker } from '@helia/interface';
|
|
13
|
-
import type { Pins } from '@helia/interface';
|
|
12
|
+
import type { BlockBroker } from '@helia/interface/blocks';
|
|
13
|
+
import type { Pins } from '@helia/interface/pins';
|
|
14
14
|
import type { Keychain, KeychainInit } from '@ipshipyard/keychain';
|
|
15
15
|
import type { ComponentLogger, Metrics } from '@libp2p/interface';
|
|
16
16
|
import type { DNS } from '@multiformats/dns';
|
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;;;;;GAKG;AAGH,OAAO,EAAe,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAQlE,OAAO,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,cAAc,CAAA;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAM3C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,IAAI,cAAc,EAAE,WAAW,EAAW,YAAY,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC/K,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/pins.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CID } from 'multiformats/cid';
|
|
2
2
|
import type { CodecLoader } from '@helia/interface';
|
|
3
|
-
import type { AddOptions, IsPinnedOptions, LsOptions, Pin, Pins, RmOptions } from '@helia/interface';
|
|
3
|
+
import type { AddOptions, IsPinnedOptions, LsOptions, Pin, Pins, RmOptions } from '@helia/interface/pins';
|
|
4
4
|
import type { AbortOptions } from '@libp2p/interface';
|
|
5
5
|
import type { Blockstore } from 'interface-blockstore';
|
|
6
6
|
import type { Datastore } from 'interface-datastore';
|
package/dist/src/pins.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pins.d.ts","sourceRoot":"","sources":["../../src/pins.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pins.d.ts","sourceRoot":"","sources":["../../src/pins.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAItC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEnD,OAAO,KAAK,EAAE,UAAU,EAAgB,eAAe,EAAE,SAAS,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAA;AACvH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAgD/C,qBAAa,QAAS,YAAW,IAAI;;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;IACvC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAEzB,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW;IAMxE,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;IAyGhH,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;IAMpE,GAAG,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC;IAOpD,WAAW,CAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;CASrI"}
|
package/dist/src/pins.js
CHANGED
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
import { InvalidParametersError } from '@libp2p/interface';
|
|
2
|
+
import { Queue } from '@libp2p/utils';
|
|
2
3
|
import * as cborg from 'cborg';
|
|
3
4
|
import { Key } from 'interface-datastore';
|
|
5
|
+
import toBuffer from 'it-to-buffer';
|
|
4
6
|
import { base36 } from 'multiformats/bases/base36';
|
|
7
|
+
import { createUnsafe } from 'multiformats/block';
|
|
5
8
|
import { CID } from 'multiformats/cid';
|
|
6
9
|
import { CustomProgressEvent } from 'progress-events';
|
|
7
10
|
import { equals as uint8ArrayEquals } from 'uint8arrays/equals';
|
|
8
11
|
import { AlreadyPinnedError } from "./errors.js";
|
|
9
|
-
import { depthFirstWalker } from "./graph-walker.js";
|
|
10
12
|
const DATASTORE_PIN_PREFIX = '/pin/';
|
|
11
13
|
const DATASTORE_BLOCK_PREFIX = '/pinned-block/';
|
|
12
14
|
const DATASTORE_ENCODING = base36;
|
|
15
|
+
const DAG_WALK_QUEUE_CONCURRENCY = 1;
|
|
13
16
|
function toDSKey(cid) {
|
|
14
17
|
if (cid.version === 0) {
|
|
15
18
|
cid = cid.toV1();
|
|
@@ -34,12 +37,14 @@ export class PinsImpl {
|
|
|
34
37
|
if (depth < 0) {
|
|
35
38
|
throw new InvalidParametersError('Depth must be greater than or equal to 0');
|
|
36
39
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
// use a queue to walk the DAG instead of recursion so we can traverse very large DAGs
|
|
41
|
+
const queue = new Queue({
|
|
42
|
+
concurrency: DAG_WALK_QUEUE_CONCURRENCY
|
|
40
43
|
});
|
|
41
|
-
for await (const
|
|
42
|
-
|
|
44
|
+
for await (const childCid of this.#walkDag(cid, queue, {
|
|
45
|
+
...options,
|
|
46
|
+
depth
|
|
47
|
+
})) {
|
|
43
48
|
await this.#updatePinnedBlock(childCid, (pinnedBlock) => {
|
|
44
49
|
// do not update pinned block if this block is already pinned by this CID
|
|
45
50
|
if (pinnedBlock.pinnedBy.find(c => uint8ArrayEquals(c, cid.bytes)) != null) {
|
|
@@ -57,6 +62,27 @@ export class PinsImpl {
|
|
|
57
62
|
};
|
|
58
63
|
await this.datastore.put(pinKey, cborg.encode(pin), options);
|
|
59
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Walk a DAG in an iterable fashion
|
|
67
|
+
*/
|
|
68
|
+
async *#walkDag(cid, queue, options) {
|
|
69
|
+
if (options.depth === -1) {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const codec = await this.getCodec(cid.code);
|
|
73
|
+
const bytes = await toBuffer(this.blockstore.get(cid, options));
|
|
74
|
+
const block = createUnsafe({ bytes, cid, codec });
|
|
75
|
+
yield cid;
|
|
76
|
+
// walk dag, ensure all blocks are present
|
|
77
|
+
for (const [, cid] of block.links()) {
|
|
78
|
+
yield* await queue.add(async () => {
|
|
79
|
+
return this.#walkDag(cid, queue, {
|
|
80
|
+
...options,
|
|
81
|
+
depth: options.depth - 1
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
60
86
|
/**
|
|
61
87
|
* Update the pin count for the CID
|
|
62
88
|
*/
|
|
@@ -92,12 +118,14 @@ export class PinsImpl {
|
|
|
92
118
|
const buf = await this.datastore.get(pinKey, options);
|
|
93
119
|
const pin = cborg.decode(buf);
|
|
94
120
|
await this.datastore.delete(pinKey, options);
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
121
|
+
// use a queue to walk the DAG instead of recursion so we can traverse very large DAGs
|
|
122
|
+
const queue = new Queue({
|
|
123
|
+
concurrency: DAG_WALK_QUEUE_CONCURRENCY
|
|
98
124
|
});
|
|
99
|
-
for await (const
|
|
100
|
-
|
|
125
|
+
for await (const childCid of this.#walkDag(cid, queue, {
|
|
126
|
+
...options,
|
|
127
|
+
depth: pin.depth
|
|
128
|
+
})) {
|
|
101
129
|
await this.#updatePinnedBlock(childCid, (pinnedBlock) => {
|
|
102
130
|
pinnedBlock.pinCount--;
|
|
103
131
|
pinnedBlock.pinnedBy = pinnedBlock.pinnedBy.filter(c => uint8ArrayEquals(c, cid.bytes));
|
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,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAA;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClD,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"pins.js","sourceRoot":"","sources":["../../src/pins.ts"],"names":[],"mappings":"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"}
|
package/dist/src/storage.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Routing } from '@helia/interface';
|
|
2
|
-
import type { Blocks, Pair, DeleteManyBlocksProgressEvents, DeleteBlockProgressEvents, GetBlockProgressEvents, GetManyBlocksProgressEvents, PutManyBlocksProgressEvents, PutBlockProgressEvents, GetAllBlocksProgressEvents, GetOfflineOptions, SessionBlockstore } from '@helia/interface';
|
|
3
|
-
import type { Pins } from '@helia/interface';
|
|
2
|
+
import type { Blocks, Pair, DeleteManyBlocksProgressEvents, DeleteBlockProgressEvents, GetBlockProgressEvents, GetManyBlocksProgressEvents, PutManyBlocksProgressEvents, PutBlockProgressEvents, GetAllBlocksProgressEvents, GetOfflineOptions, SessionBlockstore } from '@helia/interface/blocks';
|
|
3
|
+
import type { Pins } from '@helia/interface/pins';
|
|
4
4
|
import type { AbortOptions, Startable } from '@libp2p/interface';
|
|
5
5
|
import type { Blockstore, InputPair } from 'interface-blockstore';
|
|
6
6
|
import type { Mortice } from 'mortice';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Storage } from './storage.ts';
|
|
2
2
|
import type { StorageComponents, StorageInit } from './storage.ts';
|
|
3
|
-
import type { BlockBroker, Blocks, CreateSessionOptions, SessionBlockstore } from '@helia/interface';
|
|
3
|
+
import type { BlockBroker, Blocks, CreateSessionOptions, SessionBlockstore } from '@helia/interface/blocks';
|
|
4
4
|
import type { Startable } from '@libp2p/interface';
|
|
5
5
|
import type { AbortOptions } from 'abort-error';
|
|
6
6
|
import type { Blockstore } from 'interface-blockstore';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networked-storage.d.ts","sourceRoot":"","sources":["../../../src/utils/networked-storage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"networked-storage.d.ts","sourceRoot":"","sources":["../../../src/utils/networked-storage.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAClE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAC3G,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C,MAAM,WAAW,UAAW,SAAQ,YAAY;IAC9C,QAAQ,CAAC,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,CAAA;CAC5B;AAED,MAAM,MAAM,0BAA0B,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAA;AAEvE;;;GAGG;AACH,qBAAa,gBAAiB,SAAQ,OAAO,CAAC,WAAW,CAAE,YAAW,MAAM,EAAE,SAAS;IACrF,OAAO,CAAC,OAAO,CAAS;IAExB;;OAEG;gBACU,UAAU,EAAE,0BAA0B,EAAE,IAAI,GAAE,WAAgB;IAM3E,SAAS,IAAK,OAAO;IAIf,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAKvB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAK5B,MAAM,IAAK,UAAU;IAIrB,aAAa,CAAE,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,iBAAiB;CAsB7E"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Storage } from './storage.ts';
|
|
2
2
|
import type { StorageComponents } from './storage.ts';
|
|
3
|
-
import type { Pair, DeleteManyBlocksProgressEvents, DeleteBlockProgressEvents, GetBlockProgressEvents, GetManyBlocksProgressEvents, PutManyBlocksProgressEvents, PutBlockProgressEvents, GetAllBlocksProgressEvents, GetOfflineOptions, SessionBlockstore, SessionBlockBroker } from '@helia/interface';
|
|
3
|
+
import type { Pair, DeleteManyBlocksProgressEvents, DeleteBlockProgressEvents, GetBlockProgressEvents, GetManyBlocksProgressEvents, PutManyBlocksProgressEvents, PutBlockProgressEvents, GetAllBlocksProgressEvents, GetOfflineOptions, SessionBlockstore, SessionBlockBroker } from '@helia/interface/blocks';
|
|
4
4
|
import type { AbortOptions } from '@libp2p/interface';
|
|
5
5
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
6
6
|
import type { InputPair } from 'interface-blockstore';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-storage.d.ts","sourceRoot":"","sources":["../../../src/utils/session-storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"session-storage.d.ts","sourceRoot":"","sources":["../../../src/utils/session-storage.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AACtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,KAAK,EAAE,IAAI,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC9S,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAEtD,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,GAAG,CAAA;CACV;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,OAAO,CAAC,kBAAkB,CAAE,YAAW,iBAAiB;IAC1F,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAiB;gBAEpC,UAAU,EAAE,iBAAiB,CAAC,kBAAkB,CAAC,EAAE,IAAI,EAAE,kBAAkB;IAYxF,KAAK,IAAK,IAAI;IAIR,OAAO,CAAE,IAAI,EAAE,GAAG,GAAG,SAAS,GAAG,SAAS,EAAE,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IAO1F;;OAEG;IACG,GAAG,CAAE,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,GAAE,YAAY,GAAG,eAAe,CAAC,sBAAsB,CAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAc3H;;OAEG;IACK,OAAO,CAAE,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,aAAa,CAAC,SAAS,CAAC,EAAE,OAAO,GAAE,YAAY,GAAG,eAAe,CAAC,2BAA2B,CAAM,GAAG,cAAc,CAAC,GAAG,CAAC;IAcxK;;OAEG;IACK,GAAG,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,iBAAiB,GAAG,YAAY,GAAG,eAAe,CAAC,sBAAsB,CAAM,GAAG,cAAc,CAAC,UAAU,CAAC;IAc5I;;OAEG;IACK,OAAO,CAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,GAAE,iBAAiB,GAAG,YAAY,GAAG,eAAe,CAAC,2BAA2B,CAAM,GAAG,cAAc,CAAC,IAAI,CAAC;IAc/K;;OAEG;IACG,MAAM,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,YAAY,GAAG,eAAe,CAAC,yBAAyB,CAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc/G;;OAEG;IACK,UAAU,CAAE,IAAI,EAAE,QAAQ,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,EAAE,OAAO,GAAE,YAAY,GAAG,eAAe,CAAC,8BAA8B,CAAM,GAAG,cAAc,CAAC,GAAG,CAAC;IAc1J,GAAG,CAAE,GAAG,EAAE,GAAG,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,OAAO,CAAC;IAc1D,MAAM,CAAE,OAAO,GAAE,YAAY,GAAG,eAAe,CAAC,0BAA0B,CAAM,GAAG,cAAc,CAAC,IAAI,CAAC;CAahH"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { HasherLoader } from '@helia/interface';
|
|
2
|
-
import type { BlockBroker, Pair, DeleteManyBlocksProgressEvents, DeleteBlockProgressEvents, GetBlockProgressEvents, GetManyBlocksProgressEvents, PutManyBlocksProgressEvents, PutBlockProgressEvents, GetAllBlocksProgressEvents, GetOfflineOptions, BlockRetrievalOptions } from '@helia/interface';
|
|
2
|
+
import type { BlockBroker, Pair, DeleteManyBlocksProgressEvents, DeleteBlockProgressEvents, GetBlockProgressEvents, GetManyBlocksProgressEvents, PutManyBlocksProgressEvents, PutBlockProgressEvents, GetAllBlocksProgressEvents, GetOfflineOptions, BlockRetrievalOptions } from '@helia/interface/blocks';
|
|
3
3
|
import type { AbortOptions, ComponentLogger, Logger } from '@libp2p/interface';
|
|
4
4
|
import type { Blockstore, InputPair } from 'interface-blockstore';
|
|
5
5
|
import type { CID } from 'multiformats/cid';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/utils/storage.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,8BAA8B,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../../src/utils/storage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@helia/utils",
|
|
3
|
-
"version": "2.5.2-
|
|
3
|
+
"version": "2.5.2-ed6c3b79",
|
|
4
4
|
"description": "Shared code that implements the Helia API",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/ipfs/helia/tree/main/packages/utils#readme",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"test:electron-main": "aegir test -t electron-main"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@helia/interface": "6.2.1-
|
|
51
|
+
"@helia/interface": "6.2.1-ed6c3b79",
|
|
52
52
|
"@ipld/dag-cbor": "^10.0.1",
|
|
53
53
|
"@ipld/dag-json": "^11.0.0",
|
|
54
54
|
"@ipld/dag-pb": "^4.1.7",
|
package/src/graph-walker.ts
CHANGED
|
@@ -2,17 +2,29 @@ import { Queue } from '@libp2p/utils'
|
|
|
2
2
|
import filter from 'it-filter'
|
|
3
3
|
import toBuffer from 'it-to-buffer'
|
|
4
4
|
import { createUnsafe } from 'multiformats/block'
|
|
5
|
-
import type {
|
|
6
|
-
GraphWalker,
|
|
7
|
-
GraphWalkerComponents,
|
|
8
|
-
GraphWalkerInit,
|
|
9
|
-
GraphNode,
|
|
10
|
-
WalkOptions
|
|
11
|
-
} from '@helia/interface'
|
|
5
|
+
import type { CodecLoader } from '@helia/interface'
|
|
12
6
|
import type { AbortOptions } from '@libp2p/interface'
|
|
13
|
-
import type {
|
|
7
|
+
import type { Blockstore } from 'interface-blockstore'
|
|
8
|
+
import type { BlockView, CID, Version } from 'multiformats'
|
|
14
9
|
|
|
15
|
-
export
|
|
10
|
+
export interface GraphWalkerComponents {
|
|
11
|
+
blockstore: Blockstore
|
|
12
|
+
getCodec: CodecLoader
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface GraphWalkerInit {
|
|
16
|
+
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface GraphNode <T = unknown, C extends number = number, A extends number = number, V extends Version = 0 | 1> {
|
|
20
|
+
block: BlockView<T, C, A, V>
|
|
21
|
+
depth: number
|
|
22
|
+
path: CID[]
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export interface GraphWalker {
|
|
26
|
+
walk <T = any> (cid: CID, options?: WalkOptions<T>): AsyncGenerator<GraphNode<T>>
|
|
27
|
+
}
|
|
16
28
|
|
|
17
29
|
/**
|
|
18
30
|
* A depth-first walker descends into child blocks before processing successor
|
|
@@ -43,6 +55,10 @@ interface JobOptions extends AbortOptions {
|
|
|
43
55
|
path: CID[]
|
|
44
56
|
}
|
|
45
57
|
|
|
58
|
+
export interface WalkOptions<T> extends AbortOptions {
|
|
59
|
+
includeChild?(child: CID, parent: BlockView<T, number, number, 0 | 1>): boolean
|
|
60
|
+
}
|
|
61
|
+
|
|
46
62
|
abstract class AbstractGraphWalker {
|
|
47
63
|
private readonly components: GraphWalkerComponents
|
|
48
64
|
|
|
@@ -54,7 +70,6 @@ abstract class AbstractGraphWalker {
|
|
|
54
70
|
const queue = this.getQueue()
|
|
55
71
|
const gen = filter(queue.toGenerator(options), (node) => node != null) as AsyncGenerator<GraphNode<T>>
|
|
56
72
|
let finished = false
|
|
57
|
-
const maxDepth = options?.depth ?? Infinity
|
|
58
73
|
|
|
59
74
|
const job = async (opts: JobOptions): Promise<GraphNode<T> | undefined> => {
|
|
60
75
|
const cid = opts.cid
|
|
@@ -65,27 +80,25 @@ abstract class AbstractGraphWalker {
|
|
|
65
80
|
codec: await this.components.getCodec(cid.code)
|
|
66
81
|
})
|
|
67
82
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
continue
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
queue.add(job, {
|
|
75
|
-
...opts,
|
|
76
|
-
cid: linkedCid,
|
|
77
|
-
depth: opts.depth + 1,
|
|
78
|
-
path: [...opts.path, linkedCid]
|
|
79
|
-
})
|
|
80
|
-
// eslint-disable-next-line no-loop-func
|
|
81
|
-
.catch(err => {
|
|
82
|
-
// only throw if the generator is still yielding results, otherwise
|
|
83
|
-
// it can cause unhandled promise rejections
|
|
84
|
-
if (!finished) {
|
|
85
|
-
gen.throw(err)
|
|
86
|
-
}
|
|
87
|
-
})
|
|
83
|
+
for (const [, linkedCid] of block.links()) {
|
|
84
|
+
if (options?.includeChild?.(linkedCid, block) === false) {
|
|
85
|
+
continue
|
|
88
86
|
}
|
|
87
|
+
|
|
88
|
+
queue.add(job, {
|
|
89
|
+
...opts,
|
|
90
|
+
cid: linkedCid,
|
|
91
|
+
depth: opts.depth + 1,
|
|
92
|
+
path: [...opts.path, linkedCid]
|
|
93
|
+
})
|
|
94
|
+
// eslint-disable-next-line no-loop-func
|
|
95
|
+
.catch(err => {
|
|
96
|
+
// only throw if the generator is still yielding results, otherwise
|
|
97
|
+
// it can cause unhandled promise rejections
|
|
98
|
+
if (!finished) {
|
|
99
|
+
gen.throw(err)
|
|
100
|
+
}
|
|
101
|
+
})
|
|
89
102
|
}
|
|
90
103
|
|
|
91
104
|
return {
|
package/src/index.ts
CHANGED
|
@@ -23,8 +23,8 @@ import { getHasher } from './utils/get-hasher.ts'
|
|
|
23
23
|
import { NetworkedStorage } from './utils/networked-storage.ts'
|
|
24
24
|
import type { BlockStorageInit } from './storage.ts'
|
|
25
25
|
import type { CodecLoader, GCOptions, HasherLoader, Helia as HeliaInterface, HeliaEvents, Routing, CryptoLoader, Crypto, NodeInfo, Router, HeliaMixin } from '@helia/interface'
|
|
26
|
-
import type { BlockBroker } from '@helia/interface'
|
|
27
|
-
import type { Pins } from '@helia/interface'
|
|
26
|
+
import type { BlockBroker } from '@helia/interface/blocks'
|
|
27
|
+
import type { Pins } from '@helia/interface/pins'
|
|
28
28
|
import type { Keychain, KeychainInit } from '@ipshipyard/keychain'
|
|
29
29
|
import type { ComponentLogger, Logger, Metrics } from '@libp2p/interface'
|
|
30
30
|
import type { DNS } from '@multiformats/dns'
|
package/src/pins.ts
CHANGED
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import { InvalidParametersError } from '@libp2p/interface'
|
|
2
|
+
import { Queue } from '@libp2p/utils'
|
|
2
3
|
import * as cborg from 'cborg'
|
|
3
4
|
import { Key } from 'interface-datastore'
|
|
5
|
+
import toBuffer from 'it-to-buffer'
|
|
4
6
|
import { base36 } from 'multiformats/bases/base36'
|
|
7
|
+
import { createUnsafe } from 'multiformats/block'
|
|
5
8
|
import { CID } from 'multiformats/cid'
|
|
6
9
|
import { CustomProgressEvent } from 'progress-events'
|
|
7
10
|
import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
|
|
8
11
|
import { AlreadyPinnedError } from './errors.ts'
|
|
9
|
-
import { depthFirstWalker } from './graph-walker.ts'
|
|
10
12
|
import type { CodecLoader } from '@helia/interface'
|
|
11
|
-
import type {
|
|
13
|
+
import type { GetBlockProgressEvents } from '@helia/interface/blocks'
|
|
14
|
+
import type { AddOptions, AddPinEvents, IsPinnedOptions, LsOptions, Pin, Pins, RmOptions } from '@helia/interface/pins'
|
|
12
15
|
import type { AbortOptions } from '@libp2p/interface'
|
|
13
16
|
import type { Blockstore } from 'interface-blockstore'
|
|
14
17
|
import type { Datastore } from 'interface-datastore'
|
|
15
18
|
import type { Version } from 'multiformats/cid'
|
|
19
|
+
import type { ProgressOptions } from 'progress-events'
|
|
16
20
|
|
|
17
21
|
interface DatastorePin {
|
|
18
22
|
/**
|
|
@@ -45,6 +49,11 @@ interface WithPinnedBlockCallback {
|
|
|
45
49
|
const DATASTORE_PIN_PREFIX = '/pin/'
|
|
46
50
|
const DATASTORE_BLOCK_PREFIX = '/pinned-block/'
|
|
47
51
|
const DATASTORE_ENCODING = base36
|
|
52
|
+
const DAG_WALK_QUEUE_CONCURRENCY = 1
|
|
53
|
+
|
|
54
|
+
interface WalkDagOptions extends AbortOptions, ProgressOptions<GetBlockProgressEvents | AddPinEvents> {
|
|
55
|
+
depth: number
|
|
56
|
+
}
|
|
48
57
|
|
|
49
58
|
function toDSKey (cid: CID): Key {
|
|
50
59
|
if (cid.version === 0) {
|
|
@@ -78,13 +87,15 @@ export class PinsImpl implements Pins {
|
|
|
78
87
|
throw new InvalidParametersError('Depth must be greater than or equal to 0')
|
|
79
88
|
}
|
|
80
89
|
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
90
|
+
// use a queue to walk the DAG instead of recursion so we can traverse very large DAGs
|
|
91
|
+
const queue = new Queue<AsyncGenerator<CID>>({
|
|
92
|
+
concurrency: DAG_WALK_QUEUE_CONCURRENCY
|
|
84
93
|
})
|
|
85
94
|
|
|
86
|
-
for await (const
|
|
87
|
-
|
|
95
|
+
for await (const childCid of this.#walkDag(cid, queue, {
|
|
96
|
+
...options,
|
|
97
|
+
depth
|
|
98
|
+
})) {
|
|
88
99
|
await this.#updatePinnedBlock(childCid, (pinnedBlock: DatastorePinnedBlock) => {
|
|
89
100
|
// do not update pinned block if this block is already pinned by this CID
|
|
90
101
|
if (pinnedBlock.pinnedBy.find(c => uint8ArrayEquals(c, cid.bytes)) != null) {
|
|
@@ -107,6 +118,31 @@ export class PinsImpl implements Pins {
|
|
|
107
118
|
await this.datastore.put(pinKey, cborg.encode(pin), options)
|
|
108
119
|
}
|
|
109
120
|
|
|
121
|
+
/**
|
|
122
|
+
* Walk a DAG in an iterable fashion
|
|
123
|
+
*/
|
|
124
|
+
async * #walkDag (cid: CID, queue: Queue<AsyncGenerator<CID>>, options: WalkDagOptions): AsyncGenerator<CID> {
|
|
125
|
+
if (options.depth === -1) {
|
|
126
|
+
return
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
const codec = await this.getCodec(cid.code)
|
|
130
|
+
const bytes = await toBuffer(this.blockstore.get(cid, options))
|
|
131
|
+
const block = createUnsafe({ bytes, cid, codec })
|
|
132
|
+
|
|
133
|
+
yield cid
|
|
134
|
+
|
|
135
|
+
// walk dag, ensure all blocks are present
|
|
136
|
+
for (const [,cid] of block.links()) {
|
|
137
|
+
yield * await queue.add(async () => {
|
|
138
|
+
return this.#walkDag(cid, queue, {
|
|
139
|
+
...options,
|
|
140
|
+
depth: options.depth - 1
|
|
141
|
+
})
|
|
142
|
+
})
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
110
146
|
/**
|
|
111
147
|
* Update the pin count for the CID
|
|
112
148
|
*/
|
|
@@ -150,13 +186,15 @@ export class PinsImpl implements Pins {
|
|
|
150
186
|
|
|
151
187
|
await this.datastore.delete(pinKey, options)
|
|
152
188
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
189
|
+
// use a queue to walk the DAG instead of recursion so we can traverse very large DAGs
|
|
190
|
+
const queue = new Queue<AsyncGenerator<CID>>({
|
|
191
|
+
concurrency: DAG_WALK_QUEUE_CONCURRENCY
|
|
156
192
|
})
|
|
157
193
|
|
|
158
|
-
for await (const
|
|
159
|
-
|
|
194
|
+
for await (const childCid of this.#walkDag(cid, queue, {
|
|
195
|
+
...options,
|
|
196
|
+
depth: pin.depth
|
|
197
|
+
})) {
|
|
160
198
|
await this.#updatePinnedBlock(childCid, (pinnedBlock): boolean => {
|
|
161
199
|
pinnedBlock.pinCount--
|
|
162
200
|
pinnedBlock.pinnedBy = pinnedBlock.pinnedBy.filter(c => uint8ArrayEquals(c, cid.bytes))
|