@helia/utils 0.3.2-f16c9ea → 0.3.3-23e62e1
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/abstract-session.d.ts.map +1 -1
- package/dist/src/abstract-session.js +3 -3
- package/dist/src/abstract-session.js.map +1 -1
- package/dist/src/index.d.ts +22 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +17 -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 -10
- package/dist/src/pins.js.map +1 -1
- package/dist/src/routing.d.ts.map +1 -1
- package/dist/src/routing.js +7 -6
- package/dist/src/routing.js.map +1 -1
- package/dist/src/utils/get-codec.d.ts +4 -0
- package/dist/src/utils/get-codec.d.ts.map +1 -0
- package/dist/src/utils/get-codec.js +38 -0
- package/dist/src/utils/get-codec.js.map +1 -0
- package/dist/src/utils/get-hasher.d.ts +4 -0
- package/dist/src/utils/get-hasher.d.ts.map +1 -0
- package/dist/src/utils/get-hasher.js +32 -0
- package/dist/src/utils/get-hasher.js.map +1 -0
- package/dist/src/utils/is-promise.d.ts +2 -0
- package/dist/src/utils/is-promise.d.ts.map +1 -0
- package/dist/src/utils/is-promise.js +4 -0
- package/dist/src/utils/is-promise.js.map +1 -0
- package/dist/src/utils/networked-storage.d.ts +3 -2
- package/dist/src/utils/networked-storage.d.ts.map +1 -1
- package/dist/src/utils/networked-storage.js +19 -9
- package/dist/src/utils/networked-storage.js.map +1 -1
- package/package.json +12 -12
- package/src/abstract-session.ts +3 -3
- package/src/index.ts +36 -14
- package/src/pins.ts +10 -13
- package/src/routing.ts +7 -6
- package/src/utils/get-codec.ts +47 -0
- package/src/utils/get-hasher.ts +40 -0
- package/src/utils/is-promise.ts +3 -0
- package/src/utils/networked-storage.ts +24 -11
- package/dist/src/utils/dag-walkers.d.ts +0 -28
- package/dist/src/utils/dag-walkers.d.ts.map +0 -1
- package/dist/src/utils/dag-walkers.js +0 -171
- package/dist/src/utils/dag-walkers.js.map +0 -1
- package/dist/src/utils/default-hashers.d.ts +0 -3
- package/dist/src/utils/default-hashers.d.ts.map +0 -1
- package/dist/src/utils/default-hashers.js +0 -15
- package/dist/src/utils/default-hashers.js.map +0 -1
- package/src/utils/dag-walkers.ts +0 -198
- package/src/utils/default-hashers.ts +0 -18
|
@@ -1,13 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InvalidMultihashError, InvalidParametersError, setMaxListeners, start, stop } from '@libp2p/interface';
|
|
2
2
|
import { anySignal } from 'any-signal';
|
|
3
3
|
import { IdentityBlockstore } from 'blockstore-core/identity';
|
|
4
4
|
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';
|
|
8
9
|
class Storage {
|
|
9
10
|
child;
|
|
10
|
-
|
|
11
|
+
getHasher;
|
|
11
12
|
log;
|
|
12
13
|
logger;
|
|
13
14
|
components;
|
|
@@ -19,7 +20,7 @@ class Storage {
|
|
|
19
20
|
this.logger = components.logger;
|
|
20
21
|
this.components = components;
|
|
21
22
|
this.child = new IdentityBlockstore(components.blockstore);
|
|
22
|
-
this.
|
|
23
|
+
this.getHasher = components.getHasher;
|
|
23
24
|
}
|
|
24
25
|
/**
|
|
25
26
|
* Put a block to the underlying datastore
|
|
@@ -57,9 +58,10 @@ class Storage {
|
|
|
57
58
|
*/
|
|
58
59
|
async get(cid, options = {}) {
|
|
59
60
|
if (options.offline !== true && !(await this.child.has(cid, options))) {
|
|
61
|
+
const hasher = await this.getHasher(cid.multihash.code);
|
|
60
62
|
// we do not have the block locally, get it from a block provider
|
|
61
63
|
options.onProgress?.(new CustomProgressEvent('blocks:get:providers:get', cid));
|
|
62
|
-
const block = await raceBlockRetrievers(cid, this.components.blockBrokers,
|
|
64
|
+
const block = await raceBlockRetrievers(cid, this.components.blockBrokers, hasher, {
|
|
63
65
|
...options,
|
|
64
66
|
log: this.log
|
|
65
67
|
});
|
|
@@ -80,9 +82,10 @@ class Storage {
|
|
|
80
82
|
options.onProgress?.(new CustomProgressEvent('blocks:get-many:blockstore:get-many'));
|
|
81
83
|
yield* this.child.getMany(forEach(cids, async (cid) => {
|
|
82
84
|
if (options.offline !== true && !(await this.child.has(cid, options))) {
|
|
85
|
+
const hasher = await this.getHasher(cid.multihash.code);
|
|
83
86
|
// we do not have the block locally, get it from a block provider
|
|
84
87
|
options.onProgress?.(new CustomProgressEvent('blocks:get-many:providers:get', cid));
|
|
85
|
-
const block = await raceBlockRetrievers(cid, this.components.blockBrokers,
|
|
88
|
+
const block = await raceBlockRetrievers(cid, this.components.blockBrokers, hasher, {
|
|
86
89
|
...options,
|
|
87
90
|
log: this.log
|
|
88
91
|
});
|
|
@@ -157,7 +160,7 @@ export class NetworkedStorage extends Storage {
|
|
|
157
160
|
return new SessionStorage({
|
|
158
161
|
blockstore: this.child,
|
|
159
162
|
blockBrokers,
|
|
160
|
-
|
|
163
|
+
getHasher: this.getHasher,
|
|
161
164
|
logger: this.logger
|
|
162
165
|
}, {
|
|
163
166
|
root
|
|
@@ -309,14 +312,21 @@ function isRetrievingBlockBroker(broker) {
|
|
|
309
312
|
}
|
|
310
313
|
export const getCidBlockVerifierFunction = (cid, hasher) => {
|
|
311
314
|
if (hasher == null) {
|
|
312
|
-
throw new
|
|
315
|
+
throw new InvalidParametersError(`No hasher configured for multihash code 0x${cid.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`);
|
|
313
316
|
}
|
|
314
317
|
return async (block) => {
|
|
315
318
|
// verify block
|
|
316
|
-
|
|
319
|
+
let hash;
|
|
320
|
+
const res = hasher.digest(block);
|
|
321
|
+
if (isPromise(res)) {
|
|
322
|
+
hash = await res;
|
|
323
|
+
}
|
|
324
|
+
else {
|
|
325
|
+
hash = res;
|
|
326
|
+
}
|
|
317
327
|
if (!uint8ArrayEquals(hash.digest, cid.multihash.digest)) {
|
|
318
328
|
// if a hash mismatch occurs for a TrustlessGatewayBlockBroker, we should try another gateway
|
|
319
|
-
throw new
|
|
329
|
+
throw new InvalidMultihashError('Hash of downloaded block did not match multihash from passed CID');
|
|
320
330
|
}
|
|
321
331
|
};
|
|
322
332
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"networked-storage.js","sourceRoot":"","sources":["../../../src/utils/networked-storage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"networked-storage.js","sourceRoot":"","sources":["../../../src/utils/networked-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": "0.3.
|
|
3
|
+
"version": "0.3.3-23e62e1",
|
|
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",
|
|
@@ -53,22 +53,22 @@
|
|
|
53
53
|
"test:electron-main": "aegir test -t electron-main"
|
|
54
54
|
},
|
|
55
55
|
"dependencies": {
|
|
56
|
-
"@helia/interface": "4.3.
|
|
56
|
+
"@helia/interface": "4.3.1-23e62e1",
|
|
57
57
|
"@ipld/dag-cbor": "^9.2.0",
|
|
58
58
|
"@ipld/dag-json": "^10.2.0",
|
|
59
59
|
"@ipld/dag-pb": "^4.1.0",
|
|
60
|
-
"@libp2p/crypto": "^
|
|
61
|
-
"@libp2p/interface": "^
|
|
62
|
-
"@libp2p/logger": "^
|
|
63
|
-
"@libp2p/utils": "^
|
|
60
|
+
"@libp2p/crypto": "^5.0.0",
|
|
61
|
+
"@libp2p/interface": "^2.0.0",
|
|
62
|
+
"@libp2p/logger": "^5.0.0",
|
|
63
|
+
"@libp2p/utils": "^6.0.0",
|
|
64
64
|
"@multiformats/dns": "^1.0.1",
|
|
65
65
|
"@types/murmurhash3js-revisited": "^3.0.3",
|
|
66
66
|
"any-signal": "^4.1.1",
|
|
67
|
-
"blockstore-core": "^
|
|
67
|
+
"blockstore-core": "^5.0.0",
|
|
68
68
|
"cborg": "^4.0.9",
|
|
69
69
|
"interface-blockstore": "^5.2.10",
|
|
70
70
|
"interface-datastore": "^8.2.11",
|
|
71
|
-
"interface-store": "^
|
|
71
|
+
"interface-store": "^6.0.0",
|
|
72
72
|
"it-drain": "^3.0.5",
|
|
73
73
|
"it-filter": "^3.0.4",
|
|
74
74
|
"it-foreach": "^2.0.6",
|
|
@@ -82,14 +82,14 @@
|
|
|
82
82
|
"uint8arrays": "^5.0.2"
|
|
83
83
|
},
|
|
84
84
|
"devDependencies": {
|
|
85
|
-
"@libp2p/peer-id
|
|
85
|
+
"@libp2p/peer-id": "^5.0.0",
|
|
86
86
|
"@types/sinon": "^17.0.3",
|
|
87
|
-
"aegir": "^
|
|
88
|
-
"datastore-core": "^
|
|
87
|
+
"aegir": "^44.0.1",
|
|
88
|
+
"datastore-core": "^10.0.0",
|
|
89
89
|
"delay": "^6.0.0",
|
|
90
90
|
"it-all": "^3.0.4",
|
|
91
91
|
"race-signal": "^1.0.2",
|
|
92
|
-
"sinon": "^
|
|
92
|
+
"sinon": "^19.0.2",
|
|
93
93
|
"sinon-ts": "^2.0.0"
|
|
94
94
|
},
|
|
95
95
|
"browser": {
|
package/src/abstract-session.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { DEFAULT_SESSION_MIN_PROVIDERS, DEFAULT_SESSION_MAX_PROVIDERS } from '@helia/interface'
|
|
2
|
-
import {
|
|
1
|
+
import { DEFAULT_SESSION_MIN_PROVIDERS, DEFAULT_SESSION_MAX_PROVIDERS, InsufficientProvidersError } from '@helia/interface'
|
|
2
|
+
import { TypedEventEmitter, setMaxListeners } from '@libp2p/interface'
|
|
3
3
|
import { Queue } from '@libp2p/utils/queue'
|
|
4
4
|
import { base64 } from 'multiformats/bases/base64'
|
|
5
5
|
import pDefer from 'p-defer'
|
|
@@ -249,7 +249,7 @@ export abstract class AbstractSession<Provider, RetrieveBlockProgressEvents exte
|
|
|
249
249
|
this.log('found %d/%d new session peers', found, this.maxProviders)
|
|
250
250
|
|
|
251
251
|
if (found < count) {
|
|
252
|
-
throw new
|
|
252
|
+
throw new InsufficientProvidersError(`Found ${found} of ${count} ${this.name} providers for ${cid}`)
|
|
253
253
|
}
|
|
254
254
|
})
|
|
255
255
|
.catch(err => {
|
package/src/index.ts
CHANGED
|
@@ -25,19 +25,20 @@ import { CustomProgressEvent } from 'progress-events'
|
|
|
25
25
|
import { PinsImpl } from './pins.js'
|
|
26
26
|
import { Routing as RoutingClass } from './routing.js'
|
|
27
27
|
import { BlockStorage } from './storage.js'
|
|
28
|
-
import { defaultDagWalkers } from './utils/dag-walkers.js'
|
|
29
28
|
import { assertDatastoreVersionIsCurrent } from './utils/datastore-version.js'
|
|
30
|
-
import {
|
|
29
|
+
import { getCodec } from './utils/get-codec.js'
|
|
30
|
+
import { getHasher } from './utils/get-hasher.js'
|
|
31
31
|
import { NetworkedStorage } from './utils/networked-storage.js'
|
|
32
|
-
import type {
|
|
32
|
+
import type { Await, CodecLoader, GCOptions, HasherLoader, Helia as HeliaInterface, Routing } from '@helia/interface'
|
|
33
33
|
import type { BlockBroker } from '@helia/interface/blocks'
|
|
34
34
|
import type { Pins } from '@helia/interface/pins'
|
|
35
35
|
import type { ComponentLogger, Logger, Metrics } from '@libp2p/interface'
|
|
36
36
|
import type { DNS } from '@multiformats/dns'
|
|
37
37
|
import type { Blockstore } from 'interface-blockstore'
|
|
38
38
|
import type { Datastore } from 'interface-datastore'
|
|
39
|
+
import type { BlockCodec } from 'multiformats'
|
|
39
40
|
import type { CID } from 'multiformats/cid'
|
|
40
|
-
import type { MultihashHasher } from 'multiformats/hashes/interface'
|
|
41
|
+
import type { MultihashDigest, MultihashHasher } from 'multiformats/hashes/interface'
|
|
41
42
|
|
|
42
43
|
export { AbstractSession, type AbstractCreateSessionOptions } from './abstract-session.js'
|
|
43
44
|
export { BloomFilter } from './bloom-filter.js'
|
|
@@ -63,12 +64,24 @@ export interface HeliaInit {
|
|
|
63
64
|
*/
|
|
64
65
|
hashers?: MultihashHasher[]
|
|
65
66
|
|
|
67
|
+
/**
|
|
68
|
+
* An optional function that can load a MultihashHasher on demand. May return
|
|
69
|
+
* a promise.
|
|
70
|
+
*/
|
|
71
|
+
loadHasher?(code: number): Await<MultihashHasher>
|
|
72
|
+
|
|
66
73
|
/**
|
|
67
74
|
* In order to pin CIDs that correspond to a DAG, it's necessary to know
|
|
68
75
|
* how to traverse that DAG. DAGWalkers take a block and yield any CIDs
|
|
69
76
|
* encoded within that block.
|
|
70
77
|
*/
|
|
71
|
-
|
|
78
|
+
codecs?: Array<BlockCodec<any, any>>
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* An optional function that can load a BlockCodec on demand. May return a
|
|
82
|
+
* promise.
|
|
83
|
+
*/
|
|
84
|
+
loadCodec?(code: number): Await<BlockCodec<any, any>>
|
|
72
85
|
|
|
73
86
|
/**
|
|
74
87
|
* A list of strategies used to fetch blocks when they are not present in
|
|
@@ -142,13 +155,13 @@ export interface HeliaInit {
|
|
|
142
155
|
interface Components {
|
|
143
156
|
blockstore: Blockstore
|
|
144
157
|
datastore: Datastore
|
|
145
|
-
hashers: Record<number, MultihashHasher>
|
|
146
|
-
dagWalkers: Record<number, DAGWalker>
|
|
147
158
|
logger: ComponentLogger
|
|
148
159
|
blockBrokers: BlockBroker[]
|
|
149
160
|
routing: Routing
|
|
150
161
|
dns: DNS
|
|
151
162
|
metrics?: Metrics
|
|
163
|
+
getCodec: CodecLoader
|
|
164
|
+
getHasher: HasherLoader
|
|
152
165
|
}
|
|
153
166
|
|
|
154
167
|
export class Helia implements HeliaInterface {
|
|
@@ -157,8 +170,8 @@ export class Helia implements HeliaInterface {
|
|
|
157
170
|
public pins: Pins
|
|
158
171
|
public logger: ComponentLogger
|
|
159
172
|
public routing: Routing
|
|
160
|
-
public
|
|
161
|
-
public
|
|
173
|
+
public getCodec: CodecLoader
|
|
174
|
+
public getHasher: HasherLoader
|
|
162
175
|
public dns: DNS
|
|
163
176
|
public metrics?: Metrics
|
|
164
177
|
private readonly log: Logger
|
|
@@ -166,8 +179,8 @@ export class Helia implements HeliaInterface {
|
|
|
166
179
|
constructor (init: HeliaInit) {
|
|
167
180
|
this.logger = init.logger ?? defaultLogger()
|
|
168
181
|
this.log = this.logger.forComponent('helia')
|
|
169
|
-
this.
|
|
170
|
-
this.
|
|
182
|
+
this.getHasher = getHasher(init.hashers, init.loadHasher)
|
|
183
|
+
this.getCodec = getCodec(init.codecs, init.loadCodec)
|
|
171
184
|
this.dns = init.dns ?? dns()
|
|
172
185
|
this.metrics = init.metrics
|
|
173
186
|
|
|
@@ -175,10 +188,10 @@ export class Helia implements HeliaInterface {
|
|
|
175
188
|
const components: Components = {
|
|
176
189
|
blockstore: init.blockstore,
|
|
177
190
|
datastore: init.datastore,
|
|
178
|
-
hashers: this.hashers,
|
|
179
|
-
dagWalkers: this.dagWalkers,
|
|
180
191
|
logger: this.logger,
|
|
181
192
|
blockBrokers: [],
|
|
193
|
+
getHasher: this.getHasher,
|
|
194
|
+
getCodec: this.getCodec,
|
|
182
195
|
dns: this.dns,
|
|
183
196
|
metrics: this.metrics,
|
|
184
197
|
...(init.components ?? {})
|
|
@@ -207,7 +220,7 @@ export class Helia implements HeliaInterface {
|
|
|
207
220
|
})
|
|
208
221
|
|
|
209
222
|
const networkedStorage = new NetworkedStorage(components)
|
|
210
|
-
this.pins = new PinsImpl(init.datastore, networkedStorage, this.
|
|
223
|
+
this.pins = new PinsImpl(init.datastore, networkedStorage, this.getCodec)
|
|
211
224
|
this.blockstore = new BlockStorage(networkedStorage, this.pins, {
|
|
212
225
|
holdGcLock: init.holdGcLock ?? true
|
|
213
226
|
})
|
|
@@ -267,3 +280,12 @@ export class Helia implements HeliaInterface {
|
|
|
267
280
|
this.log('gc finished')
|
|
268
281
|
}
|
|
269
282
|
}
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* Used to check that the passed multihash has the passed code
|
|
286
|
+
*
|
|
287
|
+
* Remove after https://github.com/multiformats/js-multiformats/pull/308
|
|
288
|
+
*/
|
|
289
|
+
export function hasCode <T extends number> (digest: MultihashDigest, code: T): digest is MultihashDigest<T> {
|
|
290
|
+
return digest.code === code
|
|
291
|
+
}
|
package/src/pins.ts
CHANGED
|
@@ -2,10 +2,11 @@ import { Queue } from '@libp2p/utils/queue'
|
|
|
2
2
|
import * as cborg from 'cborg'
|
|
3
3
|
import { type Datastore, Key } from 'interface-datastore'
|
|
4
4
|
import { base36 } from 'multiformats/bases/base36'
|
|
5
|
+
import { createUnsafe } from 'multiformats/block'
|
|
5
6
|
import { CID, type Version } from 'multiformats/cid'
|
|
6
7
|
import { CustomProgressEvent, type ProgressOptions } from 'progress-events'
|
|
7
8
|
import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
|
|
8
|
-
import type {
|
|
9
|
+
import type { CodecLoader } from '@helia/interface'
|
|
9
10
|
import type { GetBlockProgressEvents } from '@helia/interface/blocks'
|
|
10
11
|
import type { AddOptions, AddPinEvents, IsPinnedOptions, LsOptions, Pin, Pins, RmOptions } from '@helia/interface/pins'
|
|
11
12
|
import type { AbortOptions } from '@libp2p/interface'
|
|
@@ -59,12 +60,12 @@ function toDSKey (cid: CID): Key {
|
|
|
59
60
|
export class PinsImpl implements Pins {
|
|
60
61
|
private readonly datastore: Datastore
|
|
61
62
|
private readonly blockstore: Blockstore
|
|
62
|
-
private readonly
|
|
63
|
+
private readonly getCodec: CodecLoader
|
|
63
64
|
|
|
64
|
-
constructor (datastore: Datastore, blockstore: Blockstore,
|
|
65
|
+
constructor (datastore: Datastore, blockstore: Blockstore, getCodec: CodecLoader) {
|
|
65
66
|
this.datastore = datastore
|
|
66
67
|
this.blockstore = blockstore
|
|
67
|
-
this.
|
|
68
|
+
this.getCodec = getCodec
|
|
68
69
|
}
|
|
69
70
|
|
|
70
71
|
async * add (cid: CID<unknown, number, number, Version>, options: AddOptions = {}): AsyncGenerator<CID, void, undefined> {
|
|
@@ -119,18 +120,14 @@ export class PinsImpl implements Pins {
|
|
|
119
120
|
return
|
|
120
121
|
}
|
|
121
122
|
|
|
122
|
-
const
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
throw new Error(`No dag walker found for cid codec ${cid.code}`)
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
const block = await this.blockstore.get(cid, options)
|
|
123
|
+
const codec = await this.getCodec(cid.code)
|
|
124
|
+
const bytes = await this.blockstore.get(cid, options)
|
|
125
|
+
const block = createUnsafe({ bytes, cid, codec })
|
|
129
126
|
|
|
130
127
|
yield cid
|
|
131
128
|
|
|
132
129
|
// walk dag, ensure all blocks are present
|
|
133
|
-
for await (const cid of
|
|
130
|
+
for await (const [,cid] of block.links()) {
|
|
134
131
|
yield * await queue.add(async () => {
|
|
135
132
|
return this.#walkDag(cid, queue, {
|
|
136
133
|
...options,
|
|
@@ -154,7 +151,7 @@ export class PinsImpl implements Pins {
|
|
|
154
151
|
try {
|
|
155
152
|
pinnedBlock = cborg.decode(await this.datastore.get(blockKey, options))
|
|
156
153
|
} catch (err: any) {
|
|
157
|
-
if (err.
|
|
154
|
+
if (err.name !== 'NotFoundError') {
|
|
158
155
|
throw err
|
|
159
156
|
}
|
|
160
157
|
}
|
package/src/routing.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { NoRoutersAvailableError } from '@helia/interface'
|
|
2
|
+
import { NotFoundError, start, stop } from '@libp2p/interface'
|
|
2
3
|
import { PeerQueue } from '@libp2p/utils/peer-queue'
|
|
3
4
|
import merge from 'it-merge'
|
|
4
5
|
import type { Routing as RoutingInterface, Provider, RoutingOptions } from '@helia/interface'
|
|
@@ -41,7 +42,7 @@ export class Routing implements RoutingInterface, Startable {
|
|
|
41
42
|
*/
|
|
42
43
|
async * findProviders (key: CID, options: RoutingOptions = {}): AsyncIterable<Provider> {
|
|
43
44
|
if (this.routers.length === 0) {
|
|
44
|
-
throw new
|
|
45
|
+
throw new NoRoutersAvailableError('No content routers available')
|
|
45
46
|
}
|
|
46
47
|
|
|
47
48
|
// provider multiaddrs are only cached for a limited time, so they can come
|
|
@@ -103,7 +104,7 @@ export class Routing implements RoutingInterface, Startable {
|
|
|
103
104
|
*/
|
|
104
105
|
async provide (key: CID, options: AbortOptions = {}): Promise<void> {
|
|
105
106
|
if (this.routers.length === 0) {
|
|
106
|
-
throw new
|
|
107
|
+
throw new NoRoutersAvailableError('No content routers available')
|
|
107
108
|
}
|
|
108
109
|
|
|
109
110
|
await Promise.all(
|
|
@@ -144,7 +145,7 @@ export class Routing implements RoutingInterface, Startable {
|
|
|
144
145
|
*/
|
|
145
146
|
async findPeer (id: PeerId, options?: RoutingOptions): Promise<PeerInfo> {
|
|
146
147
|
if (this.routers.length === 0) {
|
|
147
|
-
throw new
|
|
148
|
+
throw new NoRoutersAvailableError('No peer routers available')
|
|
148
149
|
}
|
|
149
150
|
|
|
150
151
|
const self = this
|
|
@@ -167,7 +168,7 @@ export class Routing implements RoutingInterface, Startable {
|
|
|
167
168
|
return peer
|
|
168
169
|
}
|
|
169
170
|
|
|
170
|
-
throw new
|
|
171
|
+
throw new NotFoundError('Could not find peer in routing')
|
|
171
172
|
}
|
|
172
173
|
|
|
173
174
|
/**
|
|
@@ -175,7 +176,7 @@ export class Routing implements RoutingInterface, Startable {
|
|
|
175
176
|
*/
|
|
176
177
|
async * getClosestPeers (key: Uint8Array, options: RoutingOptions = {}): AsyncIterable<PeerInfo> {
|
|
177
178
|
if (this.routers.length === 0) {
|
|
178
|
-
throw new
|
|
179
|
+
throw new NoRoutersAvailableError('No peer routers available')
|
|
179
180
|
}
|
|
180
181
|
|
|
181
182
|
for await (const peer of merge(
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/* eslint max-depth: ["error", 7] */
|
|
2
|
+
|
|
3
|
+
import { UnknownCodecError } from '@helia/interface'
|
|
4
|
+
import * as dagCbor from '@ipld/dag-cbor'
|
|
5
|
+
import * as dagJson from '@ipld/dag-json'
|
|
6
|
+
import * as dagPb from '@ipld/dag-pb'
|
|
7
|
+
import * as json from 'multiformats/codecs/json'
|
|
8
|
+
import * as raw from 'multiformats/codecs/raw'
|
|
9
|
+
import { isPromise } from './is-promise.js'
|
|
10
|
+
import type { Await } from '@helia/interface'
|
|
11
|
+
import type { BlockCodec } from 'multiformats/codecs/interface'
|
|
12
|
+
|
|
13
|
+
export function getCodec <T = any, Code extends number = any> (initialCodecs: Array<BlockCodec<any, any>> = [], loadCodec?: (code: number) => Await<BlockCodec<any, any>>): (code: Code) => Await<BlockCodec<Code, T>> {
|
|
14
|
+
const codecs: Record<number, BlockCodec<any, any>> = {
|
|
15
|
+
[dagPb.code]: dagPb,
|
|
16
|
+
[raw.code]: raw,
|
|
17
|
+
[dagCbor.code]: dagCbor,
|
|
18
|
+
[dagJson.code]: dagJson,
|
|
19
|
+
[json.code]: json
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
initialCodecs.forEach(codec => {
|
|
23
|
+
codecs[codec.code] = codec
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
return async (code) => {
|
|
27
|
+
let codec = codecs[code]
|
|
28
|
+
|
|
29
|
+
if (codec == null && loadCodec != null) {
|
|
30
|
+
const res = loadCodec(code)
|
|
31
|
+
|
|
32
|
+
if (isPromise(res)) {
|
|
33
|
+
codec = await res
|
|
34
|
+
} else {
|
|
35
|
+
codec = res
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
codecs[codec.code] = codec
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
if (codec != null) {
|
|
42
|
+
return codec
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
throw new UnknownCodecError(`Could not load codec for ${code}`)
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { UnknownHashAlgorithmError } from '@helia/interface'
|
|
2
|
+
import { identity } from 'multiformats/hashes/identity'
|
|
3
|
+
import { sha256, sha512 } from 'multiformats/hashes/sha2'
|
|
4
|
+
import { isPromise } from './is-promise.js'
|
|
5
|
+
import type { Await } from '@helia/interface'
|
|
6
|
+
import type { MultihashHasher } from 'multiformats/hashes/interface'
|
|
7
|
+
|
|
8
|
+
export function getHasher (initialHashers: MultihashHasher[] = [], loadHasher?: (code: number) => Await<MultihashHasher>): (code: number) => Await<MultihashHasher> {
|
|
9
|
+
const hashers: Record<number, MultihashHasher> = {
|
|
10
|
+
[sha256.code]: sha256,
|
|
11
|
+
[sha512.code]: sha512,
|
|
12
|
+
[identity.code]: identity
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
initialHashers.forEach(hasher => {
|
|
16
|
+
hashers[hasher.code] = hasher
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
return async (code) => {
|
|
20
|
+
let hasher = hashers[code]
|
|
21
|
+
|
|
22
|
+
if (hasher == null && loadHasher != null) {
|
|
23
|
+
const res = loadHasher(code)
|
|
24
|
+
|
|
25
|
+
if (isPromise(res)) {
|
|
26
|
+
hasher = await res
|
|
27
|
+
} else {
|
|
28
|
+
hasher = res
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
hashers[hasher.code] = hasher
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if (hasher != null) {
|
|
35
|
+
return hasher
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
throw new UnknownHashAlgorithmError(`No hasher configured for multihash code 0x${code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InvalidMultihashError, InvalidParametersError, setMaxListeners, start, stop } from '@libp2p/interface'
|
|
2
2
|
import { anySignal } from 'any-signal'
|
|
3
3
|
import { IdentityBlockstore } from 'blockstore-core/identity'
|
|
4
4
|
import filter from 'it-filter'
|
|
5
5
|
import forEach from 'it-foreach'
|
|
6
6
|
import { CustomProgressEvent, type ProgressOptions } from 'progress-events'
|
|
7
7
|
import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
|
|
8
|
+
import { isPromise } from './is-promise.js'
|
|
9
|
+
import type { HasherLoader } from '@helia/interface'
|
|
8
10
|
import type { BlockBroker, Blocks, Pair, DeleteManyBlocksProgressEvents, DeleteBlockProgressEvents, GetBlockProgressEvents, GetManyBlocksProgressEvents, PutManyBlocksProgressEvents, PutBlockProgressEvents, GetAllBlocksProgressEvents, GetOfflineOptions, BlockRetrievalOptions, CreateSessionOptions, SessionBlockstore } from '@helia/interface/blocks'
|
|
9
11
|
import type { AbortOptions, ComponentLogger, Logger, LoggerOptions, Startable } from '@libp2p/interface'
|
|
10
12
|
import type { Blockstore } from 'interface-blockstore'
|
|
11
13
|
import type { AwaitIterable } from 'interface-store'
|
|
12
14
|
import type { CID } from 'multiformats/cid'
|
|
13
|
-
import type { MultihashHasher } from 'multiformats/hashes/interface'
|
|
15
|
+
import type { MultihashDigest, MultihashHasher } from 'multiformats/hashes/interface'
|
|
14
16
|
|
|
15
17
|
export interface GetOptions extends AbortOptions {
|
|
16
18
|
progress?(evt: Event): void
|
|
@@ -20,12 +22,12 @@ export interface StorageComponents {
|
|
|
20
22
|
blockstore: Blockstore
|
|
21
23
|
logger: ComponentLogger
|
|
22
24
|
blockBrokers: BlockBroker[]
|
|
23
|
-
|
|
25
|
+
getHasher: HasherLoader
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
class Storage implements Blockstore {
|
|
27
29
|
protected readonly child: Blockstore
|
|
28
|
-
protected readonly
|
|
30
|
+
protected readonly getHasher: HasherLoader
|
|
29
31
|
protected log: Logger
|
|
30
32
|
protected readonly logger: ComponentLogger
|
|
31
33
|
protected readonly components: StorageComponents
|
|
@@ -38,7 +40,7 @@ class Storage implements Blockstore {
|
|
|
38
40
|
this.logger = components.logger
|
|
39
41
|
this.components = components
|
|
40
42
|
this.child = new IdentityBlockstore(components.blockstore)
|
|
41
|
-
this.
|
|
43
|
+
this.getHasher = components.getHasher
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
/**
|
|
@@ -91,9 +93,11 @@ class Storage implements Blockstore {
|
|
|
91
93
|
*/
|
|
92
94
|
async get (cid: CID, options: GetOfflineOptions & AbortOptions & ProgressOptions<GetBlockProgressEvents> = {}): Promise<Uint8Array> {
|
|
93
95
|
if (options.offline !== true && !(await this.child.has(cid, options))) {
|
|
96
|
+
const hasher = await this.getHasher(cid.multihash.code)
|
|
97
|
+
|
|
94
98
|
// we do not have the block locally, get it from a block provider
|
|
95
99
|
options.onProgress?.(new CustomProgressEvent<CID>('blocks:get:providers:get', cid))
|
|
96
|
-
const block = await raceBlockRetrievers(cid, this.components.blockBrokers,
|
|
100
|
+
const block = await raceBlockRetrievers(cid, this.components.blockBrokers, hasher, {
|
|
97
101
|
...options,
|
|
98
102
|
log: this.log
|
|
99
103
|
})
|
|
@@ -122,9 +126,11 @@ class Storage implements Blockstore {
|
|
|
122
126
|
|
|
123
127
|
yield * this.child.getMany(forEach(cids, async (cid): Promise<void> => {
|
|
124
128
|
if (options.offline !== true && !(await this.child.has(cid, options))) {
|
|
129
|
+
const hasher = await this.getHasher(cid.multihash.code)
|
|
130
|
+
|
|
125
131
|
// we do not have the block locally, get it from a block provider
|
|
126
132
|
options.onProgress?.(new CustomProgressEvent<CID>('blocks:get-many:providers:get', cid))
|
|
127
|
-
const block = await raceBlockRetrievers(cid, this.components.blockBrokers,
|
|
133
|
+
const block = await raceBlockRetrievers(cid, this.components.blockBrokers, hasher, {
|
|
128
134
|
...options,
|
|
129
135
|
log: this.log
|
|
130
136
|
})
|
|
@@ -219,7 +225,7 @@ export class NetworkedStorage extends Storage implements Blocks, Startable {
|
|
|
219
225
|
return new SessionStorage({
|
|
220
226
|
blockstore: this.child,
|
|
221
227
|
blockBrokers,
|
|
222
|
-
|
|
228
|
+
getHasher: this.getHasher,
|
|
223
229
|
logger: this.logger
|
|
224
230
|
}, {
|
|
225
231
|
root
|
|
@@ -390,16 +396,23 @@ function isRetrievingBlockBroker (broker: BlockBroker): broker is Required<Pick<
|
|
|
390
396
|
|
|
391
397
|
export const getCidBlockVerifierFunction = (cid: CID, hasher: MultihashHasher): Required<BlockRetrievalOptions>['validateFn'] => {
|
|
392
398
|
if (hasher == null) {
|
|
393
|
-
throw new
|
|
399
|
+
throw new InvalidParametersError(`No hasher configured for multihash code 0x${cid.multihash.code.toString(16)}, please configure one. You can look up which hash this is at https://github.com/multiformats/multicodec/blob/master/table.csv`)
|
|
394
400
|
}
|
|
395
401
|
|
|
396
402
|
return async (block: Uint8Array): Promise<void> => {
|
|
397
403
|
// verify block
|
|
398
|
-
|
|
404
|
+
let hash: MultihashDigest<number>
|
|
405
|
+
const res = hasher.digest(block)
|
|
406
|
+
|
|
407
|
+
if (isPromise(res)) {
|
|
408
|
+
hash = await res
|
|
409
|
+
} else {
|
|
410
|
+
hash = res
|
|
411
|
+
}
|
|
399
412
|
|
|
400
413
|
if (!uint8ArrayEquals(hash.digest, cid.multihash.digest)) {
|
|
401
414
|
// if a hash mismatch occurs for a TrustlessGatewayBlockBroker, we should try another gateway
|
|
402
|
-
throw new
|
|
415
|
+
throw new InvalidMultihashError('Hash of downloaded block did not match multihash from passed CID')
|
|
403
416
|
}
|
|
404
417
|
}
|
|
405
418
|
}
|