@libp2p/peer-store 8.1.4 → 8.2.1
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 +9 -9
- package/dist/src/index.d.ts +3 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +5 -8
- package/dist/src/index.js.map +1 -1
- package/dist/src/store.d.ts +2 -2
- package/dist/src/store.d.ts.map +1 -1
- package/dist/src/store.js +37 -13
- package/dist/src/store.js.map +1 -1
- package/dist/src/utils/bytes-to-peer.d.ts +1 -1
- package/dist/src/utils/bytes-to-peer.d.ts.map +1 -1
- package/dist/src/utils/bytes-to-peer.js +6 -4
- package/dist/src/utils/bytes-to-peer.js.map +1 -1
- package/package.json +5 -4
- package/src/index.ts +6 -11
- package/src/store.ts +48 -15
- package/src/utils/bytes-to-peer.ts +6 -4
package/dist/src/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Libp2pEvents } from '@libp2p/interface-libp2p';
|
|
2
2
|
import type { PeerId } from '@libp2p/interface-peer-id';
|
|
3
|
-
import type { PeerStore, Peer, PeerData } from '@libp2p/interface-peer-store';
|
|
3
|
+
import type { PeerStore, Peer, PeerData, PeerQuery } from '@libp2p/interface-peer-store';
|
|
4
4
|
import type { EventEmitter } from '@libp2p/interfaces/events';
|
|
5
5
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
6
6
|
import type { Datastore } from 'interface-datastore';
|
|
@@ -27,8 +27,8 @@ export declare class PersistentPeerStore implements PeerStore {
|
|
|
27
27
|
private readonly events;
|
|
28
28
|
private readonly peerId;
|
|
29
29
|
constructor(components: PersistentPeerStoreComponents, init?: PersistentPeerStoreInit);
|
|
30
|
-
forEach(fn: (peer: Peer) => void): Promise<void>;
|
|
31
|
-
all(): Promise<Peer[]>;
|
|
30
|
+
forEach(fn: (peer: Peer) => void, query?: PeerQuery): Promise<void>;
|
|
31
|
+
all(query?: PeerQuery): Promise<Peer[]>;
|
|
32
32
|
delete(peerId: PeerId): Promise<void>;
|
|
33
33
|
has(peerId: PeerId): Promise<boolean>;
|
|
34
34
|
get(peerId: PeerId): Promise<Peer>;
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAA;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAIpD,MAAM,WAAW,6BAA6B;IAC5C,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,SAAS,CAAA;IACpB,MAAM,EAAE,YAAY,CAAC,YAAY,CAAC,CAAA;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;CACzD;AAED,MAAM,WAAW,uBAAuB;IACtC,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAED;;GAEG;AACH,qBAAa,mBAAoB,YAAW,SAAS;;IACnD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAiB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA4B;IACnD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;gBAElB,UAAU,EAAE,6BAA6B,EAAE,IAAI,GAAE,uBAA4B;IAMpF,OAAO,CAAE,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,KAAM,IAAI,EAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC;IAerE,GAAG,CAAE,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAaxC,MAAM,CAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAatC,GAAG,CAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAatC,GAAG,CAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAanC,IAAI,CAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBhD,KAAK,CAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjD,KAAK,CAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBjD,iBAAiB,CAAE,GAAG,EAAE,UAAU,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAoDnF"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { logger } from '@libp2p/logger';
|
|
2
2
|
import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record';
|
|
3
|
+
import all from 'it-all';
|
|
3
4
|
import { PersistentStore } from './store.js';
|
|
4
5
|
const log = logger('libp2p:peer-store');
|
|
5
6
|
/**
|
|
@@ -14,12 +15,12 @@ export class PersistentPeerStore {
|
|
|
14
15
|
this.peerId = components.peerId;
|
|
15
16
|
this.store = new PersistentStore(components, init);
|
|
16
17
|
}
|
|
17
|
-
async forEach(fn) {
|
|
18
|
+
async forEach(fn, query) {
|
|
18
19
|
log.trace('forEach await read lock');
|
|
19
20
|
const release = await this.store.lock.readLock();
|
|
20
21
|
log.trace('forEach got read lock');
|
|
21
22
|
try {
|
|
22
|
-
for await (const peer of this.store.all()) {
|
|
23
|
+
for await (const peer of this.store.all(query)) {
|
|
23
24
|
fn(peer);
|
|
24
25
|
}
|
|
25
26
|
}
|
|
@@ -28,16 +29,12 @@ export class PersistentPeerStore {
|
|
|
28
29
|
release();
|
|
29
30
|
}
|
|
30
31
|
}
|
|
31
|
-
async all() {
|
|
32
|
+
async all(query) {
|
|
32
33
|
log.trace('all await read lock');
|
|
33
34
|
const release = await this.store.lock.readLock();
|
|
34
35
|
log.trace('all got read lock');
|
|
35
36
|
try {
|
|
36
|
-
|
|
37
|
-
for await (const peer of this.store.all()) {
|
|
38
|
-
output.push(peer);
|
|
39
|
-
}
|
|
40
|
-
return output;
|
|
37
|
+
return await all(this.store.all(query));
|
|
41
38
|
}
|
|
42
39
|
finally {
|
|
43
40
|
log.trace('all release read lock');
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,eAAe,EAAmB,MAAM,YAAY,CAAA;AAQ7D,MAAM,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AAmBvC;;GAEG;AACH,MAAM,OAAO,mBAAmB;IACb,KAAK,CAAiB;IACtB,MAAM,CAA4B;IAClC,MAAM,CAAQ;IAE/B,YAAa,UAAyC,EAAE,OAAgC,EAAE;QACxF,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QAC/B,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QAC/B,IAAI,CAAC,KAAK,GAAG,IAAI,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;IACpD,CAAC;IAED,KAAK,CAAC,OAAO,CAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/store.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { type Mortice } from 'mortice';
|
|
|
2
2
|
import type { PersistentPeerStoreComponents, PersistentPeerStoreInit } from './index.js';
|
|
3
3
|
import type { PeerUpdate as PeerUpdateExternal } from '@libp2p/interface-libp2p';
|
|
4
4
|
import type { PeerId } from '@libp2p/interface-peer-id';
|
|
5
|
-
import type { Peer, PeerData } from '@libp2p/interface-peer-store';
|
|
5
|
+
import type { Peer, PeerData, PeerQuery } from '@libp2p/interface-peer-store';
|
|
6
6
|
/**
|
|
7
7
|
* Event detail emitted when peer data changes
|
|
8
8
|
*/
|
|
@@ -22,6 +22,6 @@ export declare class PersistentStore {
|
|
|
22
22
|
save(peerId: PeerId, data: PeerData): Promise<PeerUpdate>;
|
|
23
23
|
patch(peerId: PeerId, data: Partial<PeerData>): Promise<PeerUpdate>;
|
|
24
24
|
merge(peerId: PeerId, data: PeerData): Promise<PeerUpdate>;
|
|
25
|
-
all(): AsyncGenerator<Peer, void, unknown>;
|
|
25
|
+
all(query?: PeerQuery): AsyncGenerator<Peer, void, unknown>;
|
|
26
26
|
}
|
|
27
27
|
//# sourceMappingURL=store.d.ts.map
|
package/dist/src/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAGA,OAAgB,EAAE,KAAK,OAAO,EAAE,MAAM,SAAS,CAAA;AAQ/C,OAAO,KAAK,EAAiB,6BAA6B,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAA;AACvG,OAAO,KAAK,EAAE,UAAU,IAAI,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAChF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAG7E;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,kBAAkB;IACpD,OAAO,EAAE,OAAO,CAAA;CACjB;AAqCD,qBAAa,eAAe;;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,SAAgB,IAAI,EAAE,OAAO,CAAA;IAC7B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAe;gBAEjC,UAAU,EAAE,6BAA6B,EAAE,IAAI,GAAE,uBAA4B;IAUpF,GAAG,CAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAItC,MAAM,CAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtC,IAAI,CAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAMpC,IAAI,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAa1D,KAAK,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,UAAU,CAAC;IAcpE,KAAK,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,UAAU,CAAC;IAczD,GAAG,CAAE,KAAK,CAAC,EAAE,SAAS,GAAG,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;CAoDrE"}
|
package/dist/src/store.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interfaces/errors';
|
|
2
|
+
import { PeerMap } from '@libp2p/peer-collections';
|
|
2
3
|
import { peerIdFromBytes } from '@libp2p/peer-id';
|
|
3
4
|
import mortice from 'mortice';
|
|
4
5
|
import { base32 } from 'multiformats/bases/base32';
|
|
@@ -8,6 +9,33 @@ import { Peer as PeerPB } from './pb/peer.js';
|
|
|
8
9
|
import { bytesToPeer } from './utils/bytes-to-peer.js';
|
|
9
10
|
import { NAMESPACE_COMMON, peerIdToDatastoreKey } from './utils/peer-id-to-datastore-key.js';
|
|
10
11
|
import { toPeerPB } from './utils/to-peer-pb.js';
|
|
12
|
+
function decodePeer(key, value, cache) {
|
|
13
|
+
// /peers/${peer-id-as-libp2p-key-cid-string-in-base-32}
|
|
14
|
+
const base32Str = key.toString().split('/')[2];
|
|
15
|
+
const buf = base32.decode(base32Str);
|
|
16
|
+
const peerId = peerIdFromBytes(buf);
|
|
17
|
+
const cached = cache.get(peerId);
|
|
18
|
+
if (cached != null) {
|
|
19
|
+
return cached;
|
|
20
|
+
}
|
|
21
|
+
const peer = bytesToPeer(peerId, value);
|
|
22
|
+
cache.set(peerId, peer);
|
|
23
|
+
return peer;
|
|
24
|
+
}
|
|
25
|
+
function mapQuery(query, cache) {
|
|
26
|
+
if (query == null) {
|
|
27
|
+
return {};
|
|
28
|
+
}
|
|
29
|
+
return {
|
|
30
|
+
prefix: NAMESPACE_COMMON,
|
|
31
|
+
filters: (query.filters ?? []).map(fn => ({ key, value }) => {
|
|
32
|
+
return fn(decodePeer(key, value, cache));
|
|
33
|
+
}),
|
|
34
|
+
orders: (query.orders ?? []).map(fn => (a, b) => {
|
|
35
|
+
return fn(decodePeer(a.key, a.value, cache), decodePeer(b.key, b.value, cache));
|
|
36
|
+
})
|
|
37
|
+
};
|
|
38
|
+
}
|
|
11
39
|
export class PersistentStore {
|
|
12
40
|
peerId;
|
|
13
41
|
datastore;
|
|
@@ -58,25 +86,21 @@ export class PersistentStore {
|
|
|
58
86
|
});
|
|
59
87
|
return this.#saveIfDifferent(peerId, peerPb, existingBuf, existingPeer);
|
|
60
88
|
}
|
|
61
|
-
async *all() {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
const base32Str = key.toString().split('/')[2];
|
|
67
|
-
const buf = base32.decode(base32Str);
|
|
68
|
-
const peerId = peerIdFromBytes(buf);
|
|
69
|
-
if (peerId.equals(this.peerId)) {
|
|
89
|
+
async *all(query) {
|
|
90
|
+
const peerCache = new PeerMap();
|
|
91
|
+
for await (const { key, value } of this.datastore.query(mapQuery(query ?? {}, peerCache))) {
|
|
92
|
+
const peer = decodePeer(key, value, peerCache);
|
|
93
|
+
if (peer.id.equals(this.peerId)) {
|
|
70
94
|
// Skip self peer if present
|
|
71
95
|
continue;
|
|
72
96
|
}
|
|
73
|
-
yield
|
|
97
|
+
yield peer;
|
|
74
98
|
}
|
|
75
99
|
}
|
|
76
100
|
async #findExistingPeer(peerId) {
|
|
77
101
|
try {
|
|
78
102
|
const existingBuf = await this.datastore.get(peerIdToDatastoreKey(peerId));
|
|
79
|
-
const existingPeer =
|
|
103
|
+
const existingPeer = bytesToPeer(peerId, existingBuf);
|
|
80
104
|
return {
|
|
81
105
|
existingBuf,
|
|
82
106
|
existingPeer
|
|
@@ -93,14 +117,14 @@ export class PersistentStore {
|
|
|
93
117
|
const buf = PeerPB.encode(peer);
|
|
94
118
|
if (existingBuf != null && uint8ArrayEquals(buf, existingBuf)) {
|
|
95
119
|
return {
|
|
96
|
-
peer:
|
|
120
|
+
peer: bytesToPeer(peerId, buf),
|
|
97
121
|
previous: existingPeer,
|
|
98
122
|
updated: false
|
|
99
123
|
};
|
|
100
124
|
}
|
|
101
125
|
await this.datastore.put(peerIdToDatastoreKey(peerId), buf);
|
|
102
126
|
return {
|
|
103
|
-
peer:
|
|
127
|
+
peer: bytesToPeer(peerId, buf),
|
|
104
128
|
previous: existingPeer,
|
|
105
129
|
updated: true
|
|
106
130
|
};
|
package/dist/src/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,OAAyB,MAAM,SAAS,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClD,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAC5F,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAchD,MAAM,OAAO,eAAe;IACT,MAAM,CAAQ;IACd,SAAS,CAAW;IACrB,IAAI,CAAS;IACZ,aAAa,CAAgB;IAE9C,YAAa,UAAyC,EAAE,OAAgC,EAAE;QACxF,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QAC/B,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAA;QACrC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;QACvC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;YAClB,IAAI,EAAE,YAAY;YAClB,aAAa,EAAE,IAAI;SACpB,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,MAAc;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,MAAc;QAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YAC9B,MAAM,IAAI,SAAS,CAAC,yBAAyB,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAA;SAC7E;QAED,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,CAAC,IAAI,CAAE,MAAc;QACxB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAA;QAElE,OAAO,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CAAE,MAAc,EAAE,IAAc;QACxC,MAAM,EACJ,WAAW,EACX,YAAY,EACb,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAExC,MAAM,MAAM,GAAW,MAAM,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3D,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,KAAK,CAAE,MAAc,EAAE,IAAuB;QAClD,MAAM,EACJ,WAAW,EACX,YAAY,EACb,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAExC,MAAM,MAAM,GAAW,MAAM,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3D,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY;SACb,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,KAAK,CAAE,MAAc,EAAE,IAAc;QACzC,MAAM,EACJ,WAAW,EACX,YAAY,EACb,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAExC,MAAM,MAAM,GAAW,MAAM,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3D,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY;SACb,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,CAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,OAAyB,MAAM,SAAS,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAClD,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAA;AACnC,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AACtD,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAA;AAC5F,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAchD,SAAS,UAAU,CAAE,GAAQ,EAAE,KAAiB,EAAE,KAAoB;IACpE,wDAAwD;IACxD,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;IAEnC,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IAEhC,IAAI,MAAM,IAAI,IAAI,EAAE;QAClB,OAAO,MAAM,CAAA;KACd;IAED,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;IAEvC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IAEvB,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,QAAQ,CAAE,KAAgB,EAAE,KAAoB;IACvD,IAAI,KAAK,IAAI,IAAI,EAAE;QACjB,OAAO,EAAE,CAAA;KACV;IAED,OAAO;QACL,MAAM,EAAE,gBAAgB;QACxB,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE;YAC1D,OAAO,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;QAC1C,CAAC,CAAC;QACF,MAAM,EAAE,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC9C,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;QACjF,CAAC,CAAC;KACH,CAAA;AACH,CAAC;AAED,MAAM,OAAO,eAAe;IACT,MAAM,CAAQ;IACd,SAAS,CAAW;IACrB,IAAI,CAAS;IACZ,aAAa,CAAgB;IAE9C,YAAa,UAAyC,EAAE,OAAgC,EAAE;QACxF,IAAI,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,CAAA;QAC/B,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAA;QACrC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAA;QACvC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;YAClB,IAAI,EAAE,YAAY;YAClB,aAAa,EAAE,IAAI;SACpB,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,GAAG,CAAE,MAAc;QACvB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAA;IACzD,CAAC;IAED,KAAK,CAAC,MAAM,CAAE,MAAc;QAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE;YAC9B,MAAM,IAAI,SAAS,CAAC,yBAAyB,EAAE,KAAK,CAAC,sBAAsB,CAAC,CAAA;SAC7E;QAED,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAA;IAC3D,CAAC;IAED,KAAK,CAAC,IAAI,CAAE,MAAc;QACxB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAA;QAElE,OAAO,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CAAE,MAAc,EAAE,IAAc;QACxC,MAAM,EACJ,WAAW,EACX,YAAY,EACb,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAExC,MAAM,MAAM,GAAW,MAAM,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3D,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,KAAK,CAAE,MAAc,EAAE,IAAuB;QAClD,MAAM,EACJ,WAAW,EACX,YAAY,EACb,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAExC,MAAM,MAAM,GAAW,MAAM,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3D,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY;SACb,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,KAAK,CAAE,MAAc,EAAE,IAAc;QACzC,MAAM,EACJ,WAAW,EACX,YAAY,EACb,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAA;QAExC,MAAM,MAAM,GAAW,MAAM,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE;YAC3D,aAAa,EAAE,IAAI,CAAC,aAAa;YACjC,YAAY;SACb,CAAC,CAAA;QAEF,OAAO,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,YAAY,CAAC,CAAA;IACzE,CAAC;IAED,KAAK,CAAC,CAAE,GAAG,CAAE,KAAiB;QAC5B,MAAM,SAAS,GAAG,IAAI,OAAO,EAAQ,CAAA;QAErC,IAAI,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC,EAAE;YACzF,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,EAAE,KAAK,EAAE,SAAS,CAAC,CAAA;YAE9C,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAC/B,4BAA4B;gBAC5B,SAAQ;aACT;YAED,MAAM,IAAI,CAAA;SACX;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAE,MAAc;QACrC,IAAI;YACF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC,CAAA;YAC1E,MAAM,YAAY,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAA;YAErD,OAAO;gBACL,WAAW;gBACX,YAAY;aACb,CAAA;SACF;QAAC,OAAO,GAAQ,EAAE;YACjB,IAAI,GAAG,CAAC,IAAI,KAAK,eAAe,EAAE;gBAChC,MAAM,GAAG,CAAA;aACV;SACF;QAED,OAAO,EAAE,CAAA;IACX,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAE,MAAc,EAAE,IAAY,EAAE,WAAwB,EAAE,YAAmB;QACjG,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAE/B,IAAI,WAAW,IAAI,IAAI,IAAI,gBAAgB,CAAC,GAAG,EAAE,WAAW,CAAC,EAAE;YAC7D,OAAO;gBACL,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC;gBAC9B,QAAQ,EAAE,YAAY;gBACtB,OAAO,EAAE,KAAK;aACf,CAAA;SACF;QAED,MAAM,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,MAAM,CAAC,EAAE,GAAG,CAAC,CAAA;QAE3D,OAAO;YACL,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,GAAG,CAAC;YAC9B,QAAQ,EAAE,YAAY;YACtB,OAAO,EAAE,IAAI;SACd,CAAA;IACH,CAAC;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { PeerId } from '@libp2p/interface-peer-id';
|
|
2
2
|
import type { Peer } from '@libp2p/interface-peer-store';
|
|
3
|
-
export declare function bytesToPeer(peerId: PeerId, buf: Uint8Array):
|
|
3
|
+
export declare function bytesToPeer(peerId: PeerId, buf: Uint8Array): Peer;
|
|
4
4
|
//# sourceMappingURL=bytes-to-peer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bytes-to-peer.d.ts","sourceRoot":"","sources":["../../../src/utils/bytes-to-peer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"bytes-to-peer.d.ts","sourceRoot":"","sources":["../../../src/utils/bytes-to-peer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,EAAE,IAAI,EAAO,MAAM,8BAA8B,CAAA;AAE7D,wBAAgB,WAAW,CAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,IAAI,CAoClE"}
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createFromPubKey } from '@libp2p/peer-id-factory';
|
|
1
|
+
import { peerIdFromPeerId } from '@libp2p/peer-id';
|
|
3
2
|
import { multiaddr } from '@multiformats/multiaddr';
|
|
4
3
|
import { Peer as PeerPB } from '../pb/peer.js';
|
|
5
|
-
export
|
|
4
|
+
export function bytesToPeer(peerId, buf) {
|
|
6
5
|
const peer = PeerPB.decode(buf);
|
|
7
6
|
if (peer.publicKey != null && peerId.publicKey == null) {
|
|
8
|
-
peerId =
|
|
7
|
+
peerId = peerIdFromPeerId({
|
|
8
|
+
...peerId,
|
|
9
|
+
publicKey: peerId.publicKey
|
|
10
|
+
});
|
|
9
11
|
}
|
|
10
12
|
const tags = new Map();
|
|
11
13
|
// remove any expired tags
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bytes-to-peer.js","sourceRoot":"","sources":["../../../src/utils/bytes-to-peer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"bytes-to-peer.js","sourceRoot":"","sources":["../../../src/utils/bytes-to-peer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,IAAI,IAAI,MAAM,EAAE,MAAM,eAAe,CAAA;AAI9C,MAAM,UAAU,WAAW,CAAE,MAAc,EAAE,GAAe;IAC1D,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;IAE/B,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,IAAI,MAAM,CAAC,SAAS,IAAI,IAAI,EAAE;QACtD,MAAM,GAAG,gBAAgB,CAAC;YACxB,GAAG,MAAM;YACT,SAAS,EAAE,MAAM,CAAC,SAAS;SAC5B,CAAC,CAAA;KACH;IAED,MAAM,IAAI,GAAG,IAAI,GAAG,EAAe,CAAA;IAEnC,0BAA0B;IAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAA;IAE9B,KAAK,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE;QAC5C,IAAI,GAAG,CAAC,MAAM,IAAI,IAAI,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG,EAAE;YAC1C,SAAQ;SACT;QAED,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAA;KACnB;IAED,OAAO;QACL,GAAG,IAAI;QACP,EAAE,EAAE,MAAM;QACV,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,EAAE;YAC/D,OAAO;gBACL,SAAS,EAAE,SAAS,CAAC,EAAE,CAAC;gBACxB,WAAW,EAAE,WAAW,IAAI,KAAK;aAClC,CAAA;QACH,CAAC,CAAC;QACF,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,IAAI,SAAS;QACxD,IAAI;KACL,CAAA;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/peer-store",
|
|
3
|
-
"version": "8.1
|
|
3
|
+
"version": "8.2.1",
|
|
4
4
|
"description": "Stores information about peers libp2p knows on the network",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p-peer-store#readme",
|
|
@@ -144,17 +144,18 @@
|
|
|
144
144
|
"docs": "aegir docs"
|
|
145
145
|
},
|
|
146
146
|
"dependencies": {
|
|
147
|
-
"@libp2p/crypto": "^1.0.15",
|
|
148
147
|
"@libp2p/interface-libp2p": "^3.1.0",
|
|
149
148
|
"@libp2p/interface-peer-id": "^2.0.0",
|
|
150
|
-
"@libp2p/interface-peer-store": "^2.0.
|
|
149
|
+
"@libp2p/interface-peer-store": "^2.0.4",
|
|
151
150
|
"@libp2p/interfaces": "^3.2.0",
|
|
152
151
|
"@libp2p/logger": "^2.0.7",
|
|
152
|
+
"@libp2p/peer-collections": "^3.0.1",
|
|
153
153
|
"@libp2p/peer-id": "^2.0.0",
|
|
154
154
|
"@libp2p/peer-id-factory": "^2.0.0",
|
|
155
155
|
"@libp2p/peer-record": "^5.0.3",
|
|
156
156
|
"@multiformats/multiaddr": "^12.0.0",
|
|
157
157
|
"interface-datastore": "^8.0.0",
|
|
158
|
+
"it-all": "^3.0.2",
|
|
158
159
|
"mortice": "^3.0.1",
|
|
159
160
|
"multiformats": "^11.0.0",
|
|
160
161
|
"protons-runtime": "^5.0.0",
|
|
@@ -167,7 +168,7 @@
|
|
|
167
168
|
"datastore-core": "^9.0.1",
|
|
168
169
|
"delay": "^6.0.0",
|
|
169
170
|
"p-defer": "^4.0.0",
|
|
170
|
-
"p-event": "^
|
|
171
|
+
"p-event": "^6.0.0",
|
|
171
172
|
"protons": "^7.0.2",
|
|
172
173
|
"sinon": "^15.0.1"
|
|
173
174
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { logger } from '@libp2p/logger'
|
|
2
2
|
import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record'
|
|
3
|
+
import all from 'it-all'
|
|
3
4
|
import { PersistentStore, type PeerUpdate } from './store.js'
|
|
4
5
|
import type { Libp2pEvents } from '@libp2p/interface-libp2p'
|
|
5
6
|
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
6
|
-
import type { PeerStore, Peer, PeerData } from '@libp2p/interface-peer-store'
|
|
7
|
+
import type { PeerStore, Peer, PeerData, PeerQuery } from '@libp2p/interface-peer-store'
|
|
7
8
|
import type { EventEmitter } from '@libp2p/interfaces/events'
|
|
8
9
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
9
10
|
import type { Datastore } from 'interface-datastore'
|
|
@@ -41,13 +42,13 @@ export class PersistentPeerStore implements PeerStore {
|
|
|
41
42
|
this.store = new PersistentStore(components, init)
|
|
42
43
|
}
|
|
43
44
|
|
|
44
|
-
async forEach (fn: (peer: Peer) => void): Promise<void> {
|
|
45
|
+
async forEach (fn: (peer: Peer,) => void, query?: PeerQuery): Promise<void> {
|
|
45
46
|
log.trace('forEach await read lock')
|
|
46
47
|
const release = await this.store.lock.readLock()
|
|
47
48
|
log.trace('forEach got read lock')
|
|
48
49
|
|
|
49
50
|
try {
|
|
50
|
-
for await (const peer of this.store.all()) {
|
|
51
|
+
for await (const peer of this.store.all(query)) {
|
|
51
52
|
fn(peer)
|
|
52
53
|
}
|
|
53
54
|
} finally {
|
|
@@ -56,19 +57,13 @@ export class PersistentPeerStore implements PeerStore {
|
|
|
56
57
|
}
|
|
57
58
|
}
|
|
58
59
|
|
|
59
|
-
async all (): Promise<Peer[]> {
|
|
60
|
+
async all (query?: PeerQuery): Promise<Peer[]> {
|
|
60
61
|
log.trace('all await read lock')
|
|
61
62
|
const release = await this.store.lock.readLock()
|
|
62
63
|
log.trace('all got read lock')
|
|
63
64
|
|
|
64
65
|
try {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
for await (const peer of this.store.all()) {
|
|
68
|
-
output.push(peer)
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
return output
|
|
66
|
+
return await all(this.store.all(query))
|
|
72
67
|
} finally {
|
|
73
68
|
log.trace('all release read lock')
|
|
74
69
|
release()
|
package/src/store.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { CodeError } from '@libp2p/interfaces/errors'
|
|
2
|
+
import { PeerMap } from '@libp2p/peer-collections'
|
|
2
3
|
import { peerIdFromBytes } from '@libp2p/peer-id'
|
|
3
4
|
import mortice, { type Mortice } from 'mortice'
|
|
4
5
|
import { base32 } from 'multiformats/bases/base32'
|
|
@@ -11,8 +12,8 @@ import { toPeerPB } from './utils/to-peer-pb.js'
|
|
|
11
12
|
import type { AddressFilter, PersistentPeerStoreComponents, PersistentPeerStoreInit } from './index.js'
|
|
12
13
|
import type { PeerUpdate as PeerUpdateExternal } from '@libp2p/interface-libp2p'
|
|
13
14
|
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
14
|
-
import type { Peer, PeerData } from '@libp2p/interface-peer-store'
|
|
15
|
-
import type { Datastore } from 'interface-datastore'
|
|
15
|
+
import type { Peer, PeerData, PeerQuery } from '@libp2p/interface-peer-store'
|
|
16
|
+
import type { Datastore, Key, Query } from 'interface-datastore'
|
|
16
17
|
|
|
17
18
|
/**
|
|
18
19
|
* Event detail emitted when peer data changes
|
|
@@ -21,6 +22,41 @@ export interface PeerUpdate extends PeerUpdateExternal {
|
|
|
21
22
|
updated: boolean
|
|
22
23
|
}
|
|
23
24
|
|
|
25
|
+
function decodePeer (key: Key, value: Uint8Array, cache: PeerMap<Peer>): Peer {
|
|
26
|
+
// /peers/${peer-id-as-libp2p-key-cid-string-in-base-32}
|
|
27
|
+
const base32Str = key.toString().split('/')[2]
|
|
28
|
+
const buf = base32.decode(base32Str)
|
|
29
|
+
const peerId = peerIdFromBytes(buf)
|
|
30
|
+
|
|
31
|
+
const cached = cache.get(peerId)
|
|
32
|
+
|
|
33
|
+
if (cached != null) {
|
|
34
|
+
return cached
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
const peer = bytesToPeer(peerId, value)
|
|
38
|
+
|
|
39
|
+
cache.set(peerId, peer)
|
|
40
|
+
|
|
41
|
+
return peer
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function mapQuery (query: PeerQuery, cache: PeerMap<Peer>): Query {
|
|
45
|
+
if (query == null) {
|
|
46
|
+
return {}
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
prefix: NAMESPACE_COMMON,
|
|
51
|
+
filters: (query.filters ?? []).map(fn => ({ key, value }) => {
|
|
52
|
+
return fn(decodePeer(key, value, cache))
|
|
53
|
+
}),
|
|
54
|
+
orders: (query.orders ?? []).map(fn => (a, b) => {
|
|
55
|
+
return fn(decodePeer(a.key, a.value, cache), decodePeer(b.key, b.value, cache))
|
|
56
|
+
})
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
24
60
|
export class PersistentStore {
|
|
25
61
|
private readonly peerId: PeerId
|
|
26
62
|
private readonly datastore: Datastore
|
|
@@ -96,28 +132,25 @@ export class PersistentStore {
|
|
|
96
132
|
return this.#saveIfDifferent(peerId, peerPb, existingBuf, existingPeer)
|
|
97
133
|
}
|
|
98
134
|
|
|
99
|
-
async * all (): AsyncGenerator<Peer, void, unknown> {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
})) {
|
|
103
|
-
|
|
104
|
-
const base32Str = key.toString().split('/')[2]
|
|
105
|
-
const buf = base32.decode(base32Str)
|
|
106
|
-
const peerId = peerIdFromBytes(buf)
|
|
135
|
+
async * all (query?: PeerQuery): AsyncGenerator<Peer, void, unknown> {
|
|
136
|
+
const peerCache = new PeerMap<Peer>()
|
|
137
|
+
|
|
138
|
+
for await (const { key, value } of this.datastore.query(mapQuery(query ?? {}, peerCache))) {
|
|
139
|
+
const peer = decodePeer(key, value, peerCache)
|
|
107
140
|
|
|
108
|
-
if (
|
|
141
|
+
if (peer.id.equals(this.peerId)) {
|
|
109
142
|
// Skip self peer if present
|
|
110
143
|
continue
|
|
111
144
|
}
|
|
112
145
|
|
|
113
|
-
yield
|
|
146
|
+
yield peer
|
|
114
147
|
}
|
|
115
148
|
}
|
|
116
149
|
|
|
117
150
|
async #findExistingPeer (peerId: PeerId): Promise<{ existingBuf?: Uint8Array, existingPeer?: Peer }> {
|
|
118
151
|
try {
|
|
119
152
|
const existingBuf = await this.datastore.get(peerIdToDatastoreKey(peerId))
|
|
120
|
-
const existingPeer =
|
|
153
|
+
const existingPeer = bytesToPeer(peerId, existingBuf)
|
|
121
154
|
|
|
122
155
|
return {
|
|
123
156
|
existingBuf,
|
|
@@ -137,7 +170,7 @@ export class PersistentStore {
|
|
|
137
170
|
|
|
138
171
|
if (existingBuf != null && uint8ArrayEquals(buf, existingBuf)) {
|
|
139
172
|
return {
|
|
140
|
-
peer:
|
|
173
|
+
peer: bytesToPeer(peerId, buf),
|
|
141
174
|
previous: existingPeer,
|
|
142
175
|
updated: false
|
|
143
176
|
}
|
|
@@ -146,7 +179,7 @@ export class PersistentStore {
|
|
|
146
179
|
await this.datastore.put(peerIdToDatastoreKey(peerId), buf)
|
|
147
180
|
|
|
148
181
|
return {
|
|
149
|
-
peer:
|
|
182
|
+
peer: bytesToPeer(peerId, buf),
|
|
150
183
|
previous: existingPeer,
|
|
151
184
|
updated: true
|
|
152
185
|
}
|
|
@@ -1,15 +1,17 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { createFromPubKey } from '@libp2p/peer-id-factory'
|
|
1
|
+
import { peerIdFromPeerId } from '@libp2p/peer-id'
|
|
3
2
|
import { multiaddr } from '@multiformats/multiaddr'
|
|
4
3
|
import { Peer as PeerPB } from '../pb/peer.js'
|
|
5
4
|
import type { PeerId } from '@libp2p/interface-peer-id'
|
|
6
5
|
import type { Peer, Tag } from '@libp2p/interface-peer-store'
|
|
7
6
|
|
|
8
|
-
export
|
|
7
|
+
export function bytesToPeer (peerId: PeerId, buf: Uint8Array): Peer {
|
|
9
8
|
const peer = PeerPB.decode(buf)
|
|
10
9
|
|
|
11
10
|
if (peer.publicKey != null && peerId.publicKey == null) {
|
|
12
|
-
peerId =
|
|
11
|
+
peerId = peerIdFromPeerId({
|
|
12
|
+
...peerId,
|
|
13
|
+
publicKey: peerId.publicKey
|
|
14
|
+
})
|
|
13
15
|
}
|
|
14
16
|
|
|
15
17
|
const tags = new Map<string, Tag>()
|