@libp2p/peer-store 0.0.0
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/LICENSE +4 -0
- package/README.md +44 -0
- package/dist/src/address-book.d.ts +31 -0
- package/dist/src/address-book.d.ts.map +1 -0
- package/dist/src/address-book.js +265 -0
- package/dist/src/address-book.js.map +1 -0
- package/dist/src/errors.d.ts +5 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +5 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/index.d.ts +43 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +88 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/key-book.d.ts +21 -0
- package/dist/src/key-book.d.ts.map +1 -0
- package/dist/src/key-book.js +98 -0
- package/dist/src/key-book.js.map +1 -0
- package/dist/src/metadata-book.d.ts +28 -0
- package/dist/src/metadata-book.d.ts.map +1 -0
- package/dist/src/metadata-book.js +168 -0
- package/dist/src/metadata-book.js.map +1 -0
- package/dist/src/pb/peer.d.ts +222 -0
- package/dist/src/pb/peer.js +641 -0
- package/dist/src/proto-book.d.ts +18 -0
- package/dist/src/proto-book.d.ts.map +1 -0
- package/dist/src/proto-book.js +170 -0
- package/dist/src/proto-book.js.map +1 -0
- package/dist/src/store.d.ts +37 -0
- package/dist/src/store.d.ts.map +1 -0
- package/dist/src/store.js +169 -0
- package/dist/src/store.js.map +1 -0
- package/package.json +162 -0
- package/src/README.md +145 -0
- package/src/address-book.ts +330 -0
- package/src/errors.ts +5 -0
- package/src/index.ts +123 -0
- package/src/key-book.ts +117 -0
- package/src/metadata-book.ts +200 -0
- package/src/pb/peer.d.ts +222 -0
- package/src/pb/peer.js +641 -0
- package/src/pb/peer.proto +31 -0
- package/src/proto-book.ts +204 -0
- package/src/store.ts +224 -0
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
import { logger } from '@libp2p/logger';
|
|
2
|
+
import errcode from 'err-code';
|
|
3
|
+
import { codes } from './errors.js';
|
|
4
|
+
import { PeerId } from '@libp2p/peer-id';
|
|
5
|
+
import { base58btc } from 'multiformats/bases/base58';
|
|
6
|
+
const log = logger('libp2p:peer-store:proto-book');
|
|
7
|
+
const EVENT_NAME = 'change:protocols';
|
|
8
|
+
export class PeerStoreProtoBook {
|
|
9
|
+
/**
|
|
10
|
+
* The ProtoBook is responsible for keeping the known supported
|
|
11
|
+
* protocols of a peer
|
|
12
|
+
*/
|
|
13
|
+
constructor(emit, store) {
|
|
14
|
+
this.emit = emit;
|
|
15
|
+
this.store = store;
|
|
16
|
+
}
|
|
17
|
+
async get(peerId) {
|
|
18
|
+
log('get wait for read lock');
|
|
19
|
+
const release = await this.store.lock.readLock();
|
|
20
|
+
log('get got read lock');
|
|
21
|
+
try {
|
|
22
|
+
const peer = await this.store.load(peerId);
|
|
23
|
+
return peer.protocols;
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
if (err.code !== codes.ERR_NOT_FOUND) {
|
|
27
|
+
throw err;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
finally {
|
|
31
|
+
log('get release read lock');
|
|
32
|
+
release();
|
|
33
|
+
}
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
async set(peerId, protocols) {
|
|
37
|
+
peerId = PeerId.fromPeerId(peerId);
|
|
38
|
+
if (!Array.isArray(protocols)) {
|
|
39
|
+
log.error('protocols must be provided to store data');
|
|
40
|
+
throw errcode(new Error('protocols must be provided'), codes.ERR_INVALID_PARAMETERS);
|
|
41
|
+
}
|
|
42
|
+
log('set await write lock');
|
|
43
|
+
const release = await this.store.lock.writeLock();
|
|
44
|
+
log('set got write lock');
|
|
45
|
+
let updatedPeer;
|
|
46
|
+
try {
|
|
47
|
+
try {
|
|
48
|
+
const peer = await this.store.load(peerId);
|
|
49
|
+
if (new Set([
|
|
50
|
+
...protocols
|
|
51
|
+
]).size === peer.protocols.length) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
catch (err) {
|
|
56
|
+
if (err.code !== codes.ERR_NOT_FOUND) {
|
|
57
|
+
throw err;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
updatedPeer = await this.store.patchOrCreate(peerId, {
|
|
61
|
+
protocols
|
|
62
|
+
});
|
|
63
|
+
log(`stored provided protocols for ${peerId.toString(base58btc)}`);
|
|
64
|
+
}
|
|
65
|
+
finally {
|
|
66
|
+
log('set release write lock');
|
|
67
|
+
release();
|
|
68
|
+
}
|
|
69
|
+
this.emit(EVENT_NAME, { peerId, protocols: updatedPeer.protocols });
|
|
70
|
+
}
|
|
71
|
+
async add(peerId, protocols) {
|
|
72
|
+
peerId = PeerId.fromPeerId(peerId);
|
|
73
|
+
if (!Array.isArray(protocols)) {
|
|
74
|
+
log.error('protocols must be provided to store data');
|
|
75
|
+
throw errcode(new Error('protocols must be provided'), codes.ERR_INVALID_PARAMETERS);
|
|
76
|
+
}
|
|
77
|
+
log('add await write lock');
|
|
78
|
+
const release = await this.store.lock.writeLock();
|
|
79
|
+
log('add got write lock');
|
|
80
|
+
let updatedPeer;
|
|
81
|
+
try {
|
|
82
|
+
try {
|
|
83
|
+
const peer = await this.store.load(peerId);
|
|
84
|
+
if (new Set([
|
|
85
|
+
...peer.protocols,
|
|
86
|
+
...protocols
|
|
87
|
+
]).size === peer.protocols.length) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (err) {
|
|
92
|
+
if (err.code !== codes.ERR_NOT_FOUND) {
|
|
93
|
+
throw err;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
updatedPeer = await this.store.mergeOrCreate(peerId, {
|
|
97
|
+
protocols
|
|
98
|
+
});
|
|
99
|
+
log(`added provided protocols for ${peerId.toString(base58btc)}`);
|
|
100
|
+
}
|
|
101
|
+
finally {
|
|
102
|
+
log('add release write lock');
|
|
103
|
+
release();
|
|
104
|
+
}
|
|
105
|
+
this.emit(EVENT_NAME, { peerId, protocols: updatedPeer.protocols });
|
|
106
|
+
}
|
|
107
|
+
async remove(peerId, protocols) {
|
|
108
|
+
peerId = PeerId.fromPeerId(peerId);
|
|
109
|
+
if (!Array.isArray(protocols)) {
|
|
110
|
+
log.error('protocols must be provided to store data');
|
|
111
|
+
throw errcode(new Error('protocols must be provided'), codes.ERR_INVALID_PARAMETERS);
|
|
112
|
+
}
|
|
113
|
+
log('remove await write lock');
|
|
114
|
+
const release = await this.store.lock.writeLock();
|
|
115
|
+
log('remove got write lock');
|
|
116
|
+
let updatedPeer;
|
|
117
|
+
try {
|
|
118
|
+
try {
|
|
119
|
+
const peer = await this.store.load(peerId);
|
|
120
|
+
const protocolSet = new Set(peer.protocols);
|
|
121
|
+
for (const protocol of protocols) {
|
|
122
|
+
protocolSet.delete(protocol);
|
|
123
|
+
}
|
|
124
|
+
if (peer.protocols.length === protocolSet.size) {
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
protocols = Array.from(protocolSet);
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
if (err.code !== codes.ERR_NOT_FOUND) {
|
|
131
|
+
throw err;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
updatedPeer = await this.store.patchOrCreate(peerId, {
|
|
135
|
+
protocols
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
finally {
|
|
139
|
+
log('remove release write lock');
|
|
140
|
+
release();
|
|
141
|
+
}
|
|
142
|
+
this.emit(EVENT_NAME, { peerId, protocols: updatedPeer.protocols });
|
|
143
|
+
}
|
|
144
|
+
async delete(peerId) {
|
|
145
|
+
peerId = PeerId.fromPeerId(peerId);
|
|
146
|
+
log('delete await write lock');
|
|
147
|
+
const release = await this.store.lock.writeLock();
|
|
148
|
+
log('delete got write lock');
|
|
149
|
+
let has;
|
|
150
|
+
try {
|
|
151
|
+
has = await this.store.has(peerId);
|
|
152
|
+
await this.store.patchOrCreate(peerId, {
|
|
153
|
+
protocols: []
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
catch (err) {
|
|
157
|
+
if (err.code !== codes.ERR_NOT_FOUND) {
|
|
158
|
+
throw err;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
finally {
|
|
162
|
+
log('delete release write lock');
|
|
163
|
+
release();
|
|
164
|
+
}
|
|
165
|
+
if (has) {
|
|
166
|
+
this.emit(EVENT_NAME, { peerId, protocols: [] });
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
//# sourceMappingURL=proto-book.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proto-book.js","sourceRoot":"","sources":["../../src/proto-book.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { PeerId } from '@libp2p/peer-id';
|
|
2
|
+
import { Key } from 'interface-datastore/key';
|
|
3
|
+
import type { Peer } from '@libp2p/interfaces/peer-store';
|
|
4
|
+
import type { Datastore } from 'interface-datastore';
|
|
5
|
+
export interface Store {
|
|
6
|
+
has: (peerId: PeerId) => Promise<boolean>;
|
|
7
|
+
save: (peer: Peer) => Promise<Peer>;
|
|
8
|
+
load: (peerId: PeerId) => Promise<Peer>;
|
|
9
|
+
delete(peerId: PeerId): Promise<void>;
|
|
10
|
+
merge: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>;
|
|
11
|
+
mergeOrCreate: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>;
|
|
12
|
+
patch: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>;
|
|
13
|
+
patchOrCreate: (peerId: PeerId, data: Partial<Peer>) => Promise<Peer>;
|
|
14
|
+
all: () => AsyncIterable<Peer>;
|
|
15
|
+
lock: {
|
|
16
|
+
readLock: () => Promise<() => void>;
|
|
17
|
+
writeLock: () => Promise<() => void>;
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
export declare class PersistentStore {
|
|
21
|
+
private datastore;
|
|
22
|
+
lock: any;
|
|
23
|
+
constructor(datastore: Datastore);
|
|
24
|
+
_peerIdToDatastoreKey(peerId: PeerId): Key;
|
|
25
|
+
has(peerId: PeerId): Promise<boolean>;
|
|
26
|
+
delete(peerId: PeerId): Promise<void>;
|
|
27
|
+
load(peerId: PeerId): Promise<Peer>;
|
|
28
|
+
save(peer: Peer): Promise<Peer>;
|
|
29
|
+
patch(peerId: PeerId, data: Partial<Peer>): Promise<Peer>;
|
|
30
|
+
patchOrCreate(peerId: PeerId, data: Partial<Peer>): Promise<Peer>;
|
|
31
|
+
_patch(peerId: PeerId, data: Partial<Peer>, peer: Peer): Promise<Peer>;
|
|
32
|
+
merge(peerId: PeerId, data: Partial<Peer>): Promise<Peer>;
|
|
33
|
+
mergeOrCreate(peerId: PeerId, data: Partial<Peer>): Promise<Peer>;
|
|
34
|
+
_merge(peerId: PeerId, data: Partial<Peer>, peer: Peer): Promise<Peer>;
|
|
35
|
+
all(): AsyncGenerator<Peer, void, unknown>;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAGxC,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAA;AAM7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,+BAA+B,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAMpD,MAAM,WAAW,KAAK;IACpB,GAAG,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,CAAA;IACzC,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACvC,MAAM,CAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACtC,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7D,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAC7D,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrE,GAAG,EAAE,MAAM,aAAa,CAAC,IAAI,CAAC,CAAA;IAE9B,IAAI,EAAE;QACJ,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,IAAI,CAAC,CAAA;QACnC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,IAAI,CAAC,CAAA;KACrC,CAAA;CACF;AAGD,qBAAa,eAAe;IAC1B,OAAO,CAAC,SAAS,CAAW;IACrB,IAAI,EAAE,GAAG,CAAA;gBAEH,SAAS,EAAE,SAAS;IAQjC,qBAAqB,CAAE,MAAM,EAAE,MAAM;IAU/B,GAAG,CAAE,MAAM,EAAE,MAAM;IAInB,MAAM,CAAE,MAAM,EAAE,MAAM;IAItB,IAAI,CAAE,MAAM,EAAE,MAAM;IAqBpB,IAAI,CAAE,IAAI,EAAE,IAAI;IAqChB,KAAK,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;IAM1C,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;IAgBlD,MAAM,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI;IAQvD,KAAK,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;IAM1C,aAAa,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC;IAiBlD,MAAM,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI;IAoCrD,GAAG;CAWZ"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { logger } from '@libp2p/logger';
|
|
2
|
+
import { PeerId } from '@libp2p/peer-id';
|
|
3
|
+
import errcode from 'err-code';
|
|
4
|
+
import { codes } from './errors.js';
|
|
5
|
+
import { Key } from 'interface-datastore/key';
|
|
6
|
+
import { base32 } from 'multiformats/bases/base32';
|
|
7
|
+
import { Multiaddr } from '@multiformats/multiaddr';
|
|
8
|
+
import { Peer as PeerPB } from './pb/peer.js';
|
|
9
|
+
import mortice from 'mortice';
|
|
10
|
+
import { equals as uint8arrayEquals } from 'uint8arrays/equals';
|
|
11
|
+
const log = logger('libp2p:peer-store:store');
|
|
12
|
+
const NAMESPACE_COMMON = '/peers/';
|
|
13
|
+
export class PersistentStore {
|
|
14
|
+
constructor(datastore) {
|
|
15
|
+
this.datastore = datastore;
|
|
16
|
+
this.lock = mortice({
|
|
17
|
+
name: 'peer-store',
|
|
18
|
+
singleProcess: true
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
_peerIdToDatastoreKey(peerId) {
|
|
22
|
+
if (peerId.type == null) {
|
|
23
|
+
log.error('peerId must be an instance of peer-id to store data');
|
|
24
|
+
throw errcode(new Error('peerId must be an instance of peer-id'), codes.ERR_INVALID_PARAMETERS);
|
|
25
|
+
}
|
|
26
|
+
const b32key = peerId.toString(base32);
|
|
27
|
+
return new Key(`${NAMESPACE_COMMON}b${b32key}`);
|
|
28
|
+
}
|
|
29
|
+
async has(peerId) {
|
|
30
|
+
return this.datastore.has(this._peerIdToDatastoreKey(peerId));
|
|
31
|
+
}
|
|
32
|
+
async delete(peerId) {
|
|
33
|
+
await this.datastore.delete(this._peerIdToDatastoreKey(peerId));
|
|
34
|
+
}
|
|
35
|
+
async load(peerId) {
|
|
36
|
+
const buf = await this.datastore.get(this._peerIdToDatastoreKey(peerId));
|
|
37
|
+
const peer = PeerPB.decode(buf);
|
|
38
|
+
const metadata = new Map();
|
|
39
|
+
for (const meta of peer.metadata) {
|
|
40
|
+
metadata.set(meta.key, meta.value);
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
...peer,
|
|
44
|
+
id: peerId,
|
|
45
|
+
addresses: peer.addresses.map(({ multiaddr, isCertified }) => ({
|
|
46
|
+
multiaddr: new Multiaddr(multiaddr),
|
|
47
|
+
isCertified: isCertified || false
|
|
48
|
+
})),
|
|
49
|
+
metadata,
|
|
50
|
+
peerRecordEnvelope: peer.peerRecordEnvelope || undefined
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
async save(peer) {
|
|
54
|
+
if (peer.pubKey != null && peer.id.publicKey != null && !uint8arrayEquals(peer.pubKey, peer.id.publicKey)) {
|
|
55
|
+
log.error('peer publicKey bytes do not match peer id publicKey bytes');
|
|
56
|
+
throw errcode(new Error('publicKey bytes do not match peer id publicKey bytes'), codes.ERR_INVALID_PARAMETERS);
|
|
57
|
+
}
|
|
58
|
+
// dedupe addresses
|
|
59
|
+
const addressSet = new Set();
|
|
60
|
+
const buf = PeerPB.encode({
|
|
61
|
+
addresses: peer.addresses
|
|
62
|
+
.filter(address => {
|
|
63
|
+
if (addressSet.has(address.multiaddr.toString())) {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
addressSet.add(address.multiaddr.toString());
|
|
67
|
+
return true;
|
|
68
|
+
})
|
|
69
|
+
.sort((a, b) => {
|
|
70
|
+
return a.multiaddr.toString().localeCompare(b.multiaddr.toString());
|
|
71
|
+
})
|
|
72
|
+
.map(({ multiaddr, isCertified }) => ({
|
|
73
|
+
multiaddr: multiaddr.bytes,
|
|
74
|
+
isCertified
|
|
75
|
+
})),
|
|
76
|
+
protocols: peer.protocols.sort(),
|
|
77
|
+
pubKey: peer.pubKey,
|
|
78
|
+
metadata: [...peer.metadata.keys()].sort().map(key => ({ key, value: peer.metadata.get(key) })),
|
|
79
|
+
peerRecordEnvelope: peer.peerRecordEnvelope
|
|
80
|
+
}).finish();
|
|
81
|
+
await this.datastore.put(this._peerIdToDatastoreKey(peer.id), buf);
|
|
82
|
+
return this.load(peer.id);
|
|
83
|
+
}
|
|
84
|
+
async patch(peerId, data) {
|
|
85
|
+
const peer = await this.load(peerId);
|
|
86
|
+
return await this._patch(peerId, data, peer);
|
|
87
|
+
}
|
|
88
|
+
async patchOrCreate(peerId, data) {
|
|
89
|
+
let peer;
|
|
90
|
+
try {
|
|
91
|
+
peer = await this.load(peerId);
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
if (err.code !== codes.ERR_NOT_FOUND) {
|
|
95
|
+
throw err;
|
|
96
|
+
}
|
|
97
|
+
peer = { id: peerId, addresses: [], protocols: [], metadata: new Map() };
|
|
98
|
+
}
|
|
99
|
+
return await this._patch(peerId, data, peer);
|
|
100
|
+
}
|
|
101
|
+
async _patch(peerId, data, peer) {
|
|
102
|
+
return await this.save({
|
|
103
|
+
...peer,
|
|
104
|
+
...data,
|
|
105
|
+
id: peerId
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
async merge(peerId, data) {
|
|
109
|
+
const peer = await this.load(peerId);
|
|
110
|
+
return this._merge(peerId, data, peer);
|
|
111
|
+
}
|
|
112
|
+
async mergeOrCreate(peerId, data) {
|
|
113
|
+
/** @type {Peer} */
|
|
114
|
+
let peer;
|
|
115
|
+
try {
|
|
116
|
+
peer = await this.load(peerId);
|
|
117
|
+
}
|
|
118
|
+
catch (err) {
|
|
119
|
+
if (err.code !== codes.ERR_NOT_FOUND) {
|
|
120
|
+
throw err;
|
|
121
|
+
}
|
|
122
|
+
peer = { id: peerId, addresses: [], protocols: [], metadata: new Map() };
|
|
123
|
+
}
|
|
124
|
+
return await this._merge(peerId, data, peer);
|
|
125
|
+
}
|
|
126
|
+
async _merge(peerId, data, peer) {
|
|
127
|
+
// if the peer has certified addresses, use those in
|
|
128
|
+
// favour of the supplied versions
|
|
129
|
+
/** @type {Map<string, boolean>} */
|
|
130
|
+
const addresses = new Map();
|
|
131
|
+
(data.addresses || []).forEach(addr => {
|
|
132
|
+
addresses.set(addr.multiaddr.toString(), addr.isCertified);
|
|
133
|
+
});
|
|
134
|
+
peer.addresses.forEach(({ multiaddr, isCertified }) => {
|
|
135
|
+
const addrStr = multiaddr.toString();
|
|
136
|
+
addresses.set(addrStr, Boolean(addresses.get(addrStr) || isCertified));
|
|
137
|
+
});
|
|
138
|
+
return await this.save({
|
|
139
|
+
id: peerId,
|
|
140
|
+
addresses: Array.from(addresses.entries()).map(([addrStr, isCertified]) => {
|
|
141
|
+
return {
|
|
142
|
+
multiaddr: new Multiaddr(addrStr),
|
|
143
|
+
isCertified
|
|
144
|
+
};
|
|
145
|
+
}),
|
|
146
|
+
protocols: Array.from(new Set([
|
|
147
|
+
...(peer.protocols || []),
|
|
148
|
+
...(data.protocols || [])
|
|
149
|
+
])),
|
|
150
|
+
metadata: new Map([
|
|
151
|
+
...(peer.metadata ? peer.metadata.entries() : []),
|
|
152
|
+
...(data.metadata ? data.metadata.entries() : [])
|
|
153
|
+
]),
|
|
154
|
+
pubKey: data.pubKey || (peer != null ? peer.pubKey : undefined),
|
|
155
|
+
peerRecordEnvelope: data.peerRecordEnvelope || (peer != null ? peer.peerRecordEnvelope : undefined)
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
async *all() {
|
|
159
|
+
for await (const key of this.datastore.queryKeys({
|
|
160
|
+
prefix: NAMESPACE_COMMON
|
|
161
|
+
})) {
|
|
162
|
+
// /peers/${peer-id-as-libp2p-key-cid-string-in-base-32}
|
|
163
|
+
const base32Str = key.toString().split('/')[2];
|
|
164
|
+
const buf = base32.decode(base32Str);
|
|
165
|
+
yield this.load(PeerId.fromBytes(buf));
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/store.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@libp2p/peer-store",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "Stores information about peers libp2p knows on the network",
|
|
5
|
+
"license": "Apache-2.0 OR MIT",
|
|
6
|
+
"homepage": "https://github.com/libp2p/js-libp2p-interfaces/tree/master/packages/libp2p-peer-store#readme",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/libp2p/js-libp2p-interfaces.git"
|
|
10
|
+
},
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/libp2p/js-libp2p-interfaces/issues"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"IPFS"
|
|
16
|
+
],
|
|
17
|
+
"engines": {
|
|
18
|
+
"node": ">=16.0.0",
|
|
19
|
+
"npm": ">=7.0.0"
|
|
20
|
+
},
|
|
21
|
+
"type": "module",
|
|
22
|
+
"types": "./dist/src/index.d.ts",
|
|
23
|
+
"files": [
|
|
24
|
+
"src",
|
|
25
|
+
"dist/src",
|
|
26
|
+
"!dist/test",
|
|
27
|
+
"!**/*.tsbuildinfo"
|
|
28
|
+
],
|
|
29
|
+
"exports": {
|
|
30
|
+
".": {
|
|
31
|
+
"import": "./dist/src/index.js"
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"eslintConfig": {
|
|
35
|
+
"extends": "ipfs",
|
|
36
|
+
"parserOptions": {
|
|
37
|
+
"sourceType": "module"
|
|
38
|
+
},
|
|
39
|
+
"ignorePatterns": [
|
|
40
|
+
"*.d.ts"
|
|
41
|
+
]
|
|
42
|
+
},
|
|
43
|
+
"release": {
|
|
44
|
+
"branches": [
|
|
45
|
+
"master"
|
|
46
|
+
],
|
|
47
|
+
"plugins": [
|
|
48
|
+
[
|
|
49
|
+
"@semantic-release/commit-analyzer",
|
|
50
|
+
{
|
|
51
|
+
"preset": "conventionalcommits",
|
|
52
|
+
"releaseRules": [
|
|
53
|
+
{
|
|
54
|
+
"breaking": true,
|
|
55
|
+
"release": "major"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"revert": true,
|
|
59
|
+
"release": "patch"
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
"type": "feat",
|
|
63
|
+
"release": "minor"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"type": "fix",
|
|
67
|
+
"release": "patch"
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
"type": "chore",
|
|
71
|
+
"release": "patch"
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"type": "docs",
|
|
75
|
+
"release": "patch"
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
"type": "test",
|
|
79
|
+
"release": "patch"
|
|
80
|
+
},
|
|
81
|
+
{
|
|
82
|
+
"scope": "no-release",
|
|
83
|
+
"release": false
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
}
|
|
87
|
+
],
|
|
88
|
+
[
|
|
89
|
+
"@semantic-release/release-notes-generator",
|
|
90
|
+
{
|
|
91
|
+
"preset": "conventionalcommits",
|
|
92
|
+
"presetConfig": {
|
|
93
|
+
"types": [
|
|
94
|
+
{
|
|
95
|
+
"type": "feat",
|
|
96
|
+
"section": "Features"
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"type": "fix",
|
|
100
|
+
"section": "Bug Fixes"
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
"type": "chore",
|
|
104
|
+
"section": "Trivial Changes"
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
"type": "docs",
|
|
108
|
+
"section": "Trivial Changes"
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
"type": "test",
|
|
112
|
+
"section": "Tests"
|
|
113
|
+
}
|
|
114
|
+
]
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
"@semantic-release/changelog",
|
|
119
|
+
"@semantic-release/npm",
|
|
120
|
+
"@semantic-release/github",
|
|
121
|
+
"@semantic-release/git"
|
|
122
|
+
]
|
|
123
|
+
},
|
|
124
|
+
"scripts": {
|
|
125
|
+
"lint": "aegir lint",
|
|
126
|
+
"dep-check": "aegir dep-check dist/src/**/*.js",
|
|
127
|
+
"build": "tsc",
|
|
128
|
+
"postbuild": "npm run build:copy-proto-files",
|
|
129
|
+
"generate": "npm run generate:proto && npm run generate:proto-types && tsc",
|
|
130
|
+
"generate:proto": "pbjs -t static-module -w es6 -r libp2p-peer-store --force-number --no-verify --no-delimited --no-create --no-beautify --no-defaults --lint eslint-disable -o src/pb/peer.js ./src/pb/peer.proto",
|
|
131
|
+
"generate:proto-types": "pbts -o src/pb/peer.d.ts src/pb/peer.js",
|
|
132
|
+
"build:copy-proto-files": "mkdir -p dist/src/pb && cp src/pb/*.js dist/src/pb && cp src/pb/*.d.ts dist/src/pb",
|
|
133
|
+
"pretest": "npm run build",
|
|
134
|
+
"test": "aegir test -f ./dist/test",
|
|
135
|
+
"test:chrome": "npm run test -- -t browser",
|
|
136
|
+
"test:chrome-webworker": "npm run test -- -t webworker",
|
|
137
|
+
"test:firefox": "npm run test -- -t browser -- --browser firefox",
|
|
138
|
+
"test:firefox-webworker": "npm run test -- -t webworker -- --browser firefox",
|
|
139
|
+
"test:node": "npm run test -- -t node --cov",
|
|
140
|
+
"test:electron-main": "npm run test -- -t electron-main"
|
|
141
|
+
},
|
|
142
|
+
"dependencies": {
|
|
143
|
+
"@libp2p/interfaces": "^1.0.0",
|
|
144
|
+
"protobufjs": "^6.10.2",
|
|
145
|
+
"@libp2p/logger": "^1.0.1",
|
|
146
|
+
"interface-datastore": "^6.1.0",
|
|
147
|
+
"@multiformats/multiaddr": "^10.1.5",
|
|
148
|
+
"it-all": "^1.0.6",
|
|
149
|
+
"it-filter": "^1.0.3",
|
|
150
|
+
"it-pipe": "^2.0.3",
|
|
151
|
+
"it-map": "^1.0.6",
|
|
152
|
+
"it-foreach": "^0.1.1",
|
|
153
|
+
"mortice": "^3.0.0",
|
|
154
|
+
"multiformats": "^9.6.3",
|
|
155
|
+
"@libp2p/peer-record": "^0.0.0"
|
|
156
|
+
},
|
|
157
|
+
"devDependencies": {
|
|
158
|
+
"aegir": "^36.1.3",
|
|
159
|
+
"sinon": "^13.0.1",
|
|
160
|
+
"datastore-core": "^7.0.1"
|
|
161
|
+
}
|
|
162
|
+
}
|