@helia/ipns 1.1.0 → 1.1.2
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 +14 -14
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +18 -5
- package/dist/src/index.js.map +1 -1
- package/dist/src/routing/dht.d.ts +4 -4
- package/dist/src/routing/dht.d.ts.map +1 -1
- package/dist/src/routing/dht.js +3 -41
- package/dist/src/routing/dht.js.map +1 -1
- package/dist/src/routing/local-store.js +2 -2
- package/dist/src/routing/local-store.js.map +1 -1
- package/package.json +2 -1
- package/src/index.ts +22 -6
- package/src/routing/dht.ts +6 -48
- package/src/routing/local-store.ts +2 -2
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAY,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAE5D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AACrC,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACxE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js
CHANGED
|
@@ -70,6 +70,7 @@ var _DefaultIPNS_instances, _DefaultIPNS_resolve, _DefaultIPNS_findIpnsRecord;
|
|
|
70
70
|
import { isPeerId } from '@libp2p/interface-peer-id';
|
|
71
71
|
import { create, marshal, peerIdToRoutingKey, unmarshal } from 'ipns';
|
|
72
72
|
import { ipnsValidator } from 'ipns/validator';
|
|
73
|
+
import { ipnsSelector } from 'ipns/selector';
|
|
73
74
|
import { CID } from 'multiformats/cid';
|
|
74
75
|
import { resolveDnslink } from './utils/resolve-dns-link.js';
|
|
75
76
|
import { logger } from '@libp2p/logger';
|
|
@@ -78,6 +79,7 @@ import { CustomProgressEvent } from 'progress-events';
|
|
|
78
79
|
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
79
80
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
80
81
|
import { localStore } from './routing/local-store.js';
|
|
82
|
+
import { CodeError } from '@libp2p/interfaces/errors';
|
|
81
83
|
const log = logger('helia:ipns');
|
|
82
84
|
const MINUTE = 60 * 1000;
|
|
83
85
|
const HOUR = 60 * MINUTE;
|
|
@@ -184,12 +186,23 @@ _DefaultIPNS_instances = new WeakSet(), _DefaultIPNS_resolve = async function _D
|
|
|
184
186
|
this.localStore
|
|
185
187
|
];
|
|
186
188
|
}
|
|
187
|
-
const
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
189
|
+
const records = [];
|
|
190
|
+
await Promise.all(routers.map(async (router) => {
|
|
191
|
+
try {
|
|
192
|
+
const record = await router.get(routingKey, options);
|
|
193
|
+
await ipnsValidator(routingKey, record);
|
|
194
|
+
records.push(record);
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
log.error('error finding IPNS record', err);
|
|
198
|
+
}
|
|
191
199
|
}));
|
|
192
|
-
|
|
200
|
+
if (records.length === 0) {
|
|
201
|
+
throw new CodeError('Could not find record for routing key', 'ERR_NOT_FOUND');
|
|
202
|
+
}
|
|
203
|
+
const record = records[ipnsSelector(routingKey, records)];
|
|
204
|
+
await this.localStore.put(routingKey, record, options);
|
|
205
|
+
return unmarshal(record);
|
|
193
206
|
};
|
|
194
207
|
export function ipns(components, routers = []) {
|
|
195
208
|
return new DefaultIPNS(components, routers);
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8DG;;;;;;;AAGH,OAAO,EAAE,QAAQ,EAAU,MAAM,2BAA2B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,kBAAkB,EAAE,SAAS,EAAE,MAAM,MAAM,CAAA;AAGrE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAC5D,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAElD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACrD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAE5E,OAAO,EAAE,UAAU,EAAc,MAAM,0BAA0B,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import type { IPNSRouting } from '../index.js';
|
|
2
|
-
import type { DHT, QueryEvent } from '@libp2p/interface-dht';
|
|
3
2
|
import type { GetOptions, PutOptions } from './index.js';
|
|
4
3
|
import { ProgressEvent } from 'progress-events';
|
|
4
|
+
import type { ContentRouting } from '@libp2p/interface-content-routing';
|
|
5
5
|
export interface DHTRoutingComponents {
|
|
6
6
|
libp2p: {
|
|
7
|
-
|
|
7
|
+
contentRouting: ContentRouting;
|
|
8
8
|
};
|
|
9
9
|
}
|
|
10
|
-
export type DHTProgressEvents = ProgressEvent<'ipns:routing:dht:
|
|
10
|
+
export type DHTProgressEvents = ProgressEvent<'ipns:routing:dht:error', Error>;
|
|
11
11
|
export declare class DHTRouting implements IPNSRouting {
|
|
12
|
-
private readonly
|
|
12
|
+
private readonly contentRouting;
|
|
13
13
|
constructor(components: DHTRoutingComponents);
|
|
14
14
|
put(routingKey: Uint8Array, marshaledRecord: Uint8Array, options?: PutOptions): Promise<void>;
|
|
15
15
|
get(routingKey: Uint8Array, options?: GetOptions): Promise<Uint8Array>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dht.d.ts","sourceRoot":"","sources":["../../../src/routing/dht.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dht.d.ts","sourceRoot":"","sources":["../../../src/routing/dht.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAC9C,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACxD,OAAO,EAAuB,aAAa,EAAE,MAAM,iBAAiB,CAAA;AACpE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAA;AAEvE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE;QACN,cAAc,EAAE,cAAc,CAAA;KAC/B,CAAA;CACF;AAED,MAAM,MAAM,iBAAiB,GAC3B,aAAa,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAA;AAEhD,qBAAa,UAAW,YAAW,WAAW;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;gBAElC,UAAU,EAAE,oBAAoB;IAIvC,GAAG,CAAE,UAAU,EAAE,UAAU,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAQlG,GAAG,CAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,UAAU,CAAC;CASlF;AAED,wBAAgB,GAAG,CAAE,UAAU,EAAE,oBAAoB,GAAG,WAAW,CAElE"}
|
package/dist/src/routing/dht.js
CHANGED
|
@@ -1,37 +1,19 @@
|
|
|
1
|
-
import { logger } from '@libp2p/logger';
|
|
2
1
|
import { CustomProgressEvent } from 'progress-events';
|
|
3
|
-
const log = logger('helia:ipns:routing:dht');
|
|
4
2
|
export class DHTRouting {
|
|
5
3
|
constructor(components) {
|
|
6
|
-
this.
|
|
4
|
+
this.contentRouting = components.libp2p.contentRouting;
|
|
7
5
|
}
|
|
8
6
|
async put(routingKey, marshaledRecord, options = {}) {
|
|
9
|
-
let putValue = false;
|
|
10
7
|
try {
|
|
11
|
-
|
|
12
|
-
logEvent('DHT put event', event);
|
|
13
|
-
options.onProgress?.(new CustomProgressEvent('ipns:routing:dht:query', event));
|
|
14
|
-
if (event.name === 'PEER_RESPONSE' && event.messageName === 'PUT_VALUE') {
|
|
15
|
-
putValue = true;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
8
|
+
await this.contentRouting.put(routingKey, marshaledRecord, options);
|
|
18
9
|
}
|
|
19
10
|
catch (err) {
|
|
20
11
|
options.onProgress?.(new CustomProgressEvent('ipns:routing:dht:error', err));
|
|
21
12
|
}
|
|
22
|
-
if (!putValue) {
|
|
23
|
-
throw new Error('Could not put value to DHT');
|
|
24
|
-
}
|
|
25
13
|
}
|
|
26
14
|
async get(routingKey, options = {}) {
|
|
27
15
|
try {
|
|
28
|
-
|
|
29
|
-
logEvent('DHT get event', event);
|
|
30
|
-
options.onProgress?.(new CustomProgressEvent('ipns:routing:dht:query', event));
|
|
31
|
-
if (event.name === 'VALUE') {
|
|
32
|
-
return event.value;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
16
|
+
return await this.contentRouting.get(routingKey, options);
|
|
35
17
|
}
|
|
36
18
|
catch (err) {
|
|
37
19
|
options.onProgress?.(new CustomProgressEvent('ipns:routing:dht:error', err));
|
|
@@ -39,26 +21,6 @@ export class DHTRouting {
|
|
|
39
21
|
throw new Error('Not found');
|
|
40
22
|
}
|
|
41
23
|
}
|
|
42
|
-
function logEvent(prefix, event) {
|
|
43
|
-
if (event.name === 'SENDING_QUERY') {
|
|
44
|
-
log(prefix, event.name, event.messageName, '->', event.to.toString());
|
|
45
|
-
}
|
|
46
|
-
else if (event.name === 'PEER_RESPONSE') {
|
|
47
|
-
log(prefix, event.name, event.messageName, '<-', event.from.toString());
|
|
48
|
-
}
|
|
49
|
-
else if (event.name === 'FINAL_PEER') {
|
|
50
|
-
log(prefix, event.name, event.peer.id.toString());
|
|
51
|
-
}
|
|
52
|
-
else if (event.name === 'QUERY_ERROR') {
|
|
53
|
-
log(prefix, event.name, event.error.message);
|
|
54
|
-
}
|
|
55
|
-
else if (event.name === 'PROVIDER') {
|
|
56
|
-
log(prefix, event.name, event.providers.map(p => p.id.toString()).join(', '));
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
log(prefix, event.name);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
24
|
export function dht(components) {
|
|
63
25
|
return new DHTRouting(components);
|
|
64
26
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dht.js","sourceRoot":"","sources":["../../../src/routing/dht.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dht.js","sourceRoot":"","sources":["../../../src/routing/dht.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,mBAAmB,EAAiB,MAAM,iBAAiB,CAAA;AAYpE,MAAM,OAAO,UAAU;IAGrB,YAAa,UAAgC;QAC3C,IAAI,CAAC,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAA;IACxD,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,eAA2B,EAAE,UAAsB,EAAE;QACtF,IAAI;YACF,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,eAAe,EAAE,OAAO,CAAC,CAAA;SACpE;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAQ,wBAAwB,EAAE,GAAG,CAAC,CAAC,CAAA;SACpF;IACH,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,UAAsB,EAAE;QACzD,IAAI;YACF,OAAO,MAAM,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAA;SAC1D;QAAC,OAAO,GAAQ,EAAE;YACjB,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAQ,wBAAwB,EAAE,GAAG,CAAC,CAAC,CAAA;SACpF;QAED,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAA;IAC9B,CAAC;CACF;AAED,MAAM,UAAU,GAAG,CAAE,UAAgC;IACnD,OAAO,IAAI,UAAU,CAAC,UAAU,CAAC,CAAA;AACnC,CAAC"}
|
|
@@ -12,11 +12,11 @@ function dhtRoutingKey(key) {
|
|
|
12
12
|
*/
|
|
13
13
|
export function localStore(datastore) {
|
|
14
14
|
return {
|
|
15
|
-
async put(routingKey,
|
|
15
|
+
async put(routingKey, marshalledRecord, options = {}) {
|
|
16
16
|
try {
|
|
17
17
|
const key = dhtRoutingKey(routingKey);
|
|
18
18
|
// Marshal to libp2p record as the DHT does
|
|
19
|
-
const record = new Libp2pRecord(routingKey,
|
|
19
|
+
const record = new Libp2pRecord(routingKey, marshalledRecord, new Date());
|
|
20
20
|
options.onProgress?.(new CustomProgressEvent('ipns:routing:datastore:put'));
|
|
21
21
|
await datastore.put(key, record.serialize(), options);
|
|
22
22
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-store.js","sourceRoot":"","sources":["../../../src/routing/local-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAiB,MAAM,iBAAiB,CAAA;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAa,GAAG,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAGtE,SAAS,aAAa,CAAE,GAAe;IACrC,OAAO,IAAI,GAAG,CAAC,cAAc,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;AAC3E,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAE,SAAoB;IAC9C,OAAO;QACL,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"local-store.js","sourceRoot":"","sources":["../../../src/routing/local-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAiB,MAAM,iBAAiB,CAAA;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAC7C,OAAO,EAAa,GAAG,EAAE,MAAM,qBAAqB,CAAA;AACpD,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAGtE,SAAS,aAAa,CAAE,GAAe;IACrC,OAAO,IAAI,GAAG,CAAC,cAAc,GAAG,kBAAkB,CAAC,GAAG,EAAE,QAAQ,CAAC,EAAE,KAAK,CAAC,CAAA;AAC3E,CAAC;AAWD;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAE,SAAoB;IAC9C,OAAO;QACL,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,gBAA4B,EAAE,UAAsB,EAAE;YACvF,IAAI;gBACF,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;gBAErC,2CAA2C;gBAC3C,MAAM,MAAM,GAAG,IAAI,YAAY,CAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,IAAI,EAAE,CAAC,CAAA;gBAEzE,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAC,4BAA4B,CAAC,CAAC,CAAA;gBAC3E,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,EAAE,EAAE,OAAO,CAAC,CAAA;aACtD;YAAC,OAAO,GAAQ,EAAE;gBACjB,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAQ,8BAA8B,EAAE,GAAG,CAAC,CAAC,CAAA;gBACzF,MAAM,GAAG,CAAA;aACV;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,UAAsB,EAAE;YACzD,IAAI;gBACF,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;gBAErC,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAC,4BAA4B,CAAC,CAAC,CAAA;gBAC3E,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;gBAE7C,0CAA0C;gBAC1C,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;gBAE5C,OAAO,MAAM,CAAC,KAAK,CAAA;aACpB;YAAC,OAAO,GAAQ,EAAE;gBACjB,OAAO,CAAC,UAAU,EAAE,CAAC,IAAI,mBAAmB,CAAQ,8BAA8B,EAAE,GAAG,CAAC,CAAC,CAAA;gBACzF,MAAM,GAAG,CAAA;aACV;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAE,UAAsB,EAAE,UAAwB,EAAE;YAC3D,MAAM,GAAG,GAAG,aAAa,CAAC,UAAU,CAAC,CAAA;YACrC,OAAO,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;QAC1C,CAAC;KACF,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@helia/ipns",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.2",
|
|
4
4
|
"description": "An implementation of IPNS for Helia",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/ipfs/helia-ipns/tree/master/packages/ipns#readme",
|
|
@@ -159,6 +159,7 @@
|
|
|
159
159
|
"release": "aegir release"
|
|
160
160
|
},
|
|
161
161
|
"dependencies": {
|
|
162
|
+
"@libp2p/interface-content-routing": "^2.1.0",
|
|
162
163
|
"@libp2p/interface-dht": "^2.0.1",
|
|
163
164
|
"@libp2p/interface-peer-id": "^2.0.1",
|
|
164
165
|
"@libp2p/interface-pubsub": "^3.0.6",
|
package/src/index.ts
CHANGED
|
@@ -68,6 +68,7 @@ import { create, marshal, peerIdToRoutingKey, unmarshal } from 'ipns'
|
|
|
68
68
|
import type { IPNSEntry } from 'ipns'
|
|
69
69
|
import type { IPNSRouting, IPNSRoutingEvents } from './routing/index.js'
|
|
70
70
|
import { ipnsValidator } from 'ipns/validator'
|
|
71
|
+
import { ipnsSelector } from 'ipns/selector'
|
|
71
72
|
import { CID } from 'multiformats/cid'
|
|
72
73
|
import { resolveDnslink } from './utils/resolve-dns-link.js'
|
|
73
74
|
import { logger } from '@libp2p/logger'
|
|
@@ -78,6 +79,7 @@ import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
|
|
|
78
79
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
79
80
|
import type { Datastore } from 'interface-datastore'
|
|
80
81
|
import { localStore, LocalStore } from './routing/local-store.js'
|
|
82
|
+
import { CodeError } from '@libp2p/interfaces/errors'
|
|
81
83
|
|
|
82
84
|
const log = logger('helia:ipns')
|
|
83
85
|
|
|
@@ -295,16 +297,30 @@ class DefaultIPNS implements IPNS {
|
|
|
295
297
|
]
|
|
296
298
|
}
|
|
297
299
|
|
|
298
|
-
const
|
|
299
|
-
routers.map(async (router) => {
|
|
300
|
-
const unmarshaledRecord = await router.get(routingKey, options)
|
|
301
|
-
await ipnsValidator(routingKey, unmarshaledRecord)
|
|
300
|
+
const records: Uint8Array[] = []
|
|
302
301
|
|
|
303
|
-
|
|
302
|
+
await Promise.all(
|
|
303
|
+
routers.map(async (router) => {
|
|
304
|
+
try {
|
|
305
|
+
const record = await router.get(routingKey, options)
|
|
306
|
+
await ipnsValidator(routingKey, record)
|
|
307
|
+
|
|
308
|
+
records.push(record)
|
|
309
|
+
} catch (err) {
|
|
310
|
+
log.error('error finding IPNS record', err)
|
|
311
|
+
}
|
|
304
312
|
})
|
|
305
313
|
)
|
|
306
314
|
|
|
307
|
-
|
|
315
|
+
if (records.length === 0) {
|
|
316
|
+
throw new CodeError('Could not find record for routing key', 'ERR_NOT_FOUND')
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
const record = records[ipnsSelector(routingKey, records)]
|
|
320
|
+
|
|
321
|
+
await this.localStore.put(routingKey, record, options)
|
|
322
|
+
|
|
323
|
+
return unmarshal(record)
|
|
308
324
|
}
|
|
309
325
|
}
|
|
310
326
|
|
package/src/routing/dht.ts
CHANGED
|
@@ -1,61 +1,35 @@
|
|
|
1
|
-
import { logger } from '@libp2p/logger'
|
|
2
1
|
import type { IPNSRouting } from '../index.js'
|
|
3
|
-
import type { DHT, QueryEvent } from '@libp2p/interface-dht'
|
|
4
2
|
import type { GetOptions, PutOptions } from './index.js'
|
|
5
3
|
import { CustomProgressEvent, ProgressEvent } from 'progress-events'
|
|
6
|
-
|
|
7
|
-
const log = logger('helia:ipns:routing:dht')
|
|
4
|
+
import type { ContentRouting } from '@libp2p/interface-content-routing'
|
|
8
5
|
|
|
9
6
|
export interface DHTRoutingComponents {
|
|
10
7
|
libp2p: {
|
|
11
|
-
|
|
8
|
+
contentRouting: ContentRouting
|
|
12
9
|
}
|
|
13
10
|
}
|
|
14
11
|
|
|
15
12
|
export type DHTProgressEvents =
|
|
16
|
-
ProgressEvent<'ipns:routing:dht:query', QueryEvent> |
|
|
17
13
|
ProgressEvent<'ipns:routing:dht:error', Error>
|
|
18
14
|
|
|
19
15
|
export class DHTRouting implements IPNSRouting {
|
|
20
|
-
private readonly
|
|
16
|
+
private readonly contentRouting: ContentRouting
|
|
21
17
|
|
|
22
18
|
constructor (components: DHTRoutingComponents) {
|
|
23
|
-
this.
|
|
19
|
+
this.contentRouting = components.libp2p.contentRouting
|
|
24
20
|
}
|
|
25
21
|
|
|
26
22
|
async put (routingKey: Uint8Array, marshaledRecord: Uint8Array, options: PutOptions = {}): Promise<void> {
|
|
27
|
-
let putValue = false
|
|
28
|
-
|
|
29
23
|
try {
|
|
30
|
-
|
|
31
|
-
logEvent('DHT put event', event)
|
|
32
|
-
|
|
33
|
-
options.onProgress?.(new CustomProgressEvent<QueryEvent>('ipns:routing:dht:query', event))
|
|
34
|
-
|
|
35
|
-
if (event.name === 'PEER_RESPONSE' && event.messageName === 'PUT_VALUE') {
|
|
36
|
-
putValue = true
|
|
37
|
-
}
|
|
38
|
-
}
|
|
24
|
+
await this.contentRouting.put(routingKey, marshaledRecord, options)
|
|
39
25
|
} catch (err: any) {
|
|
40
26
|
options.onProgress?.(new CustomProgressEvent<Error>('ipns:routing:dht:error', err))
|
|
41
27
|
}
|
|
42
|
-
|
|
43
|
-
if (!putValue) {
|
|
44
|
-
throw new Error('Could not put value to DHT')
|
|
45
|
-
}
|
|
46
28
|
}
|
|
47
29
|
|
|
48
30
|
async get (routingKey: Uint8Array, options: GetOptions = {}): Promise<Uint8Array> {
|
|
49
31
|
try {
|
|
50
|
-
|
|
51
|
-
logEvent('DHT get event', event)
|
|
52
|
-
|
|
53
|
-
options.onProgress?.(new CustomProgressEvent<QueryEvent>('ipns:routing:dht:query', event))
|
|
54
|
-
|
|
55
|
-
if (event.name === 'VALUE') {
|
|
56
|
-
return event.value
|
|
57
|
-
}
|
|
58
|
-
}
|
|
32
|
+
return await this.contentRouting.get(routingKey, options)
|
|
59
33
|
} catch (err: any) {
|
|
60
34
|
options.onProgress?.(new CustomProgressEvent<Error>('ipns:routing:dht:error', err))
|
|
61
35
|
}
|
|
@@ -64,22 +38,6 @@ export class DHTRouting implements IPNSRouting {
|
|
|
64
38
|
}
|
|
65
39
|
}
|
|
66
40
|
|
|
67
|
-
function logEvent (prefix: string, event: QueryEvent): void {
|
|
68
|
-
if (event.name === 'SENDING_QUERY') {
|
|
69
|
-
log(prefix, event.name, event.messageName, '->', event.to.toString())
|
|
70
|
-
} else if (event.name === 'PEER_RESPONSE') {
|
|
71
|
-
log(prefix, event.name, event.messageName, '<-', event.from.toString())
|
|
72
|
-
} else if (event.name === 'FINAL_PEER') {
|
|
73
|
-
log(prefix, event.name, event.peer.id.toString())
|
|
74
|
-
} else if (event.name === 'QUERY_ERROR') {
|
|
75
|
-
log(prefix, event.name, event.error.message)
|
|
76
|
-
} else if (event.name === 'PROVIDER') {
|
|
77
|
-
log(prefix, event.name, event.providers.map(p => p.id.toString()).join(', '))
|
|
78
|
-
} else {
|
|
79
|
-
log(prefix, event.name)
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
41
|
export function dht (components: DHTRoutingComponents): IPNSRouting {
|
|
84
42
|
return new DHTRouting(components)
|
|
85
43
|
}
|
|
@@ -25,12 +25,12 @@ export interface LocalStore extends IPNSRouting {
|
|
|
25
25
|
*/
|
|
26
26
|
export function localStore (datastore: Datastore): LocalStore {
|
|
27
27
|
return {
|
|
28
|
-
async put (routingKey: Uint8Array,
|
|
28
|
+
async put (routingKey: Uint8Array, marshalledRecord: Uint8Array, options: PutOptions = {}) {
|
|
29
29
|
try {
|
|
30
30
|
const key = dhtRoutingKey(routingKey)
|
|
31
31
|
|
|
32
32
|
// Marshal to libp2p record as the DHT does
|
|
33
|
-
const record = new Libp2pRecord(routingKey,
|
|
33
|
+
const record = new Libp2pRecord(routingKey, marshalledRecord, new Date())
|
|
34
34
|
|
|
35
35
|
options.onProgress?.(new CustomProgressEvent('ipns:routing:datastore:put'))
|
|
36
36
|
await datastore.put(key, record.serialize(), options)
|