@libp2p/peer-store 11.2.1 → 11.2.2-2a7425cdb
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/index.min.js.map +4 -4
- package/dist/src/index.d.ts +3 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +36 -68
- package/dist/src/index.js.map +1 -1
- package/dist/src/store.d.ts +18 -9
- package/dist/src/store.d.ts.map +1 -1
- package/dist/src/store.js +79 -27
- package/dist/src/store.js.map +1 -1
- package/dist/src/utils/bytes-to-peer.d.ts.map +1 -1
- package/dist/src/utils/bytes-to-peer.js +1 -4
- package/dist/src/utils/bytes-to-peer.js.map +1 -1
- package/dist/src/utils/dedupe-addresses.d.ts +2 -1
- package/dist/src/utils/dedupe-addresses.d.ts.map +1 -1
- package/dist/src/utils/dedupe-addresses.js +2 -2
- package/dist/src/utils/dedupe-addresses.js.map +1 -1
- package/dist/src/utils/to-peer-pb.d.ts +2 -1
- package/dist/src/utils/to-peer-pb.d.ts.map +1 -1
- package/dist/src/utils/to-peer-pb.js +7 -4
- package/dist/src/utils/to-peer-pb.js.map +1 -1
- package/package.json +10 -9
- package/src/index.ts +42 -70
- package/src/store.ts +99 -28
- package/src/utils/bytes-to-peer.ts +3 -5
- package/src/utils/dedupe-addresses.ts +3 -2
- package/src/utils/to-peer-pb.ts +12 -5
- package/dist/typedoc-urls.json +0 -10
|
@@ -2,7 +2,8 @@ import type { AddressFilter } from '../index.js';
|
|
|
2
2
|
import type { Peer as PeerPB } from '../pb/peer.js';
|
|
3
3
|
import type { ExistingPeer } from '../store.js';
|
|
4
4
|
import type { PeerId, PeerData } from '@libp2p/interface';
|
|
5
|
-
|
|
5
|
+
import type { AbortOptions } from '@multiformats/multiaddr';
|
|
6
|
+
export interface ToPBPeerOptions extends AbortOptions {
|
|
6
7
|
addressFilter?: AddressFilter;
|
|
7
8
|
existingPeer?: ExistingPeer;
|
|
8
9
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"to-peer-pb.d.ts","sourceRoot":"","sources":["../../../src/utils/to-peer-pb.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAO,IAAI,IAAI,MAAM,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAW,QAAQ,EAAc,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"to-peer-pb.d.ts","sourceRoot":"","sources":["../../../src/utils/to-peer-pb.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAO,IAAI,IAAI,MAAM,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,MAAM,EAAW,QAAQ,EAAc,MAAM,mBAAmB,CAAA;AAC9E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE3D,MAAM,WAAW,eAAgB,SAAQ,YAAY;IACnD,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,YAAY,CAAC,EAAE,YAAY,CAAA;CAC5B;AAED,wBAAsB,QAAQ,CAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,EAAE,QAAQ,EAAE,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CA8J/I"}
|
|
@@ -112,7 +112,7 @@ export async function toPeerPB(peerId, data, strategy, options) {
|
|
|
112
112
|
publicKey = publicKeyToProtobuf(peerId.publicKey);
|
|
113
113
|
}
|
|
114
114
|
const output = {
|
|
115
|
-
addresses: await dedupeFilterAndSortAddresses(peerId, options.addressFilter ?? (async () => true), addresses, options.existingPeer?.peerPB.addresses),
|
|
115
|
+
addresses: await dedupeFilterAndSortAddresses(peerId, options.addressFilter ?? (async () => true), addresses, options.existingPeer?.peerPB.addresses, options),
|
|
116
116
|
protocols: [...protocols.values()].sort((a, b) => {
|
|
117
117
|
return a.localeCompare(b);
|
|
118
118
|
}),
|
|
@@ -189,9 +189,12 @@ function mapTag(key, tag) {
|
|
|
189
189
|
if (tag.ttl != null) {
|
|
190
190
|
expiry = BigInt(Date.now() + Number(tag.ttl));
|
|
191
191
|
}
|
|
192
|
-
|
|
193
|
-
value: tag.value ?? 0
|
|
194
|
-
expiry
|
|
192
|
+
const output = {
|
|
193
|
+
value: tag.value ?? 0
|
|
195
194
|
};
|
|
195
|
+
if (expiry != null) {
|
|
196
|
+
output.expiry = expiry;
|
|
197
|
+
}
|
|
198
|
+
return output;
|
|
196
199
|
}
|
|
197
200
|
//# sourceMappingURL=to-peer-pb.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"to-peer-pb.js","sourceRoot":"","sources":["../../../src/utils/to-peer-pb.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAC/D,OAAO,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"to-peer-pb.js","sourceRoot":"","sources":["../../../src/utils/to-peer-pb.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/peer-store",
|
|
3
|
-
"version": "11.2.
|
|
3
|
+
"version": "11.2.2-2a7425cdb",
|
|
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/tree/main/packages/peer-store#readme",
|
|
@@ -48,29 +48,30 @@
|
|
|
48
48
|
"test:electron-main": "aegir test -t electron-main"
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@libp2p/crypto": "
|
|
52
|
-
"@libp2p/interface": "
|
|
53
|
-
"@libp2p/peer-
|
|
54
|
-
"@libp2p/peer-
|
|
51
|
+
"@libp2p/crypto": "5.1.4-2a7425cdb",
|
|
52
|
+
"@libp2p/interface": "2.10.2-2a7425cdb",
|
|
53
|
+
"@libp2p/peer-collections": "6.0.30-2a7425cdb",
|
|
54
|
+
"@libp2p/peer-id": "5.1.5-2a7425cdb",
|
|
55
|
+
"@libp2p/peer-record": "8.0.30-2a7425cdb",
|
|
55
56
|
"@multiformats/multiaddr": "^12.4.0",
|
|
56
57
|
"interface-datastore": "^8.3.1",
|
|
57
58
|
"it-all": "^3.0.8",
|
|
58
59
|
"mortice": "^3.0.6",
|
|
59
|
-
"multiformats": "^13.3.
|
|
60
|
+
"multiformats": "^13.3.6",
|
|
60
61
|
"protons-runtime": "^5.5.0",
|
|
61
62
|
"uint8arraylist": "^2.4.8",
|
|
62
63
|
"uint8arrays": "^5.1.0"
|
|
63
64
|
},
|
|
64
65
|
"devDependencies": {
|
|
65
|
-
"@libp2p/logger": "
|
|
66
|
+
"@libp2p/logger": "5.1.18-2a7425cdb",
|
|
66
67
|
"@types/sinon": "^17.0.4",
|
|
67
|
-
"aegir": "^47.0.
|
|
68
|
+
"aegir": "^47.0.14",
|
|
68
69
|
"benchmark": "^2.1.4",
|
|
69
70
|
"datastore-core": "^10.0.2",
|
|
70
71
|
"delay": "^6.0.0",
|
|
71
72
|
"p-defer": "^4.0.1",
|
|
72
73
|
"p-event": "^6.0.1",
|
|
73
|
-
"protons": "^7.6.
|
|
74
|
+
"protons": "^7.6.1",
|
|
74
75
|
"sinon": "^20.0.0"
|
|
75
76
|
},
|
|
76
77
|
"sideEffects": false
|
package/src/index.ts
CHANGED
|
@@ -4,12 +4,13 @@
|
|
|
4
4
|
* The peer store is where libp2p stores data about the peers it has encountered on the network.
|
|
5
5
|
*/
|
|
6
6
|
|
|
7
|
+
import { isPeerId } from '@libp2p/interface'
|
|
7
8
|
import { peerIdFromCID } from '@libp2p/peer-id'
|
|
8
9
|
import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record'
|
|
9
10
|
import all from 'it-all'
|
|
10
11
|
import { PersistentStore } from './store.js'
|
|
11
12
|
import type { PeerUpdate } from './store.js'
|
|
12
|
-
import type { ComponentLogger, Libp2pEvents, Logger, TypedEventTarget, PeerId, PeerStore, Peer, PeerData, PeerQuery, PeerInfo } from '@libp2p/interface'
|
|
13
|
+
import type { ComponentLogger, Libp2pEvents, Logger, TypedEventTarget, PeerId, PeerStore, Peer, PeerData, PeerQuery, PeerInfo, AbortOptions, ConsumePeerRecordOptions, Metrics } from '@libp2p/interface'
|
|
13
14
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
14
15
|
import type { Datastore } from 'interface-datastore'
|
|
15
16
|
|
|
@@ -18,13 +19,14 @@ export interface PersistentPeerStoreComponents {
|
|
|
18
19
|
datastore: Datastore
|
|
19
20
|
events: TypedEventTarget<Libp2pEvents>
|
|
20
21
|
logger: ComponentLogger
|
|
22
|
+
metrics?: Metrics
|
|
21
23
|
}
|
|
22
24
|
|
|
23
25
|
/**
|
|
24
26
|
* Return true to allow storing the passed multiaddr for the passed peer
|
|
25
27
|
*/
|
|
26
28
|
export interface AddressFilter {
|
|
27
|
-
(peerId: PeerId, multiaddr: Multiaddr): Promise<boolean> | boolean
|
|
29
|
+
(peerId: PeerId, multiaddr: Multiaddr, options?: AbortOptions): Promise<boolean> | boolean
|
|
28
30
|
}
|
|
29
31
|
|
|
30
32
|
export interface PersistentPeerStoreInit {
|
|
@@ -74,74 +76,48 @@ class PersistentPeerStore implements PeerStore {
|
|
|
74
76
|
readonly [Symbol.toStringTag] = '@libp2p/peer-store'
|
|
75
77
|
|
|
76
78
|
async forEach (fn: (peer: Peer,) => void, query?: PeerQuery): Promise<void> {
|
|
77
|
-
this.
|
|
78
|
-
|
|
79
|
-
this.log.trace('forEach got read lock')
|
|
80
|
-
|
|
81
|
-
try {
|
|
82
|
-
for await (const peer of this.store.all(query)) {
|
|
83
|
-
fn(peer)
|
|
84
|
-
}
|
|
85
|
-
} finally {
|
|
86
|
-
this.log.trace('forEach release read lock')
|
|
87
|
-
release()
|
|
79
|
+
for await (const peer of this.store.all(query)) {
|
|
80
|
+
fn(peer)
|
|
88
81
|
}
|
|
89
82
|
}
|
|
90
83
|
|
|
91
84
|
async all (query?: PeerQuery): Promise<Peer[]> {
|
|
92
|
-
this.
|
|
93
|
-
const release = await this.store.lock.readLock()
|
|
94
|
-
this.log.trace('all got read lock')
|
|
95
|
-
|
|
96
|
-
try {
|
|
97
|
-
return await all(this.store.all(query))
|
|
98
|
-
} finally {
|
|
99
|
-
this.log.trace('all release read lock')
|
|
100
|
-
release()
|
|
101
|
-
}
|
|
85
|
+
return all(this.store.all(query))
|
|
102
86
|
}
|
|
103
87
|
|
|
104
|
-
async delete (peerId: PeerId): Promise<void> {
|
|
105
|
-
this.
|
|
106
|
-
const release = await this.store.lock.writeLock()
|
|
107
|
-
this.log.trace('delete got write lock')
|
|
88
|
+
async delete (peerId: PeerId, options?: AbortOptions): Promise<void> {
|
|
89
|
+
const release = await this.store.getReadLock(peerId, options)
|
|
108
90
|
|
|
109
91
|
try {
|
|
110
|
-
await this.store.delete(peerId)
|
|
92
|
+
await this.store.delete(peerId, options)
|
|
111
93
|
} finally {
|
|
112
|
-
this.log.trace('delete release write lock')
|
|
113
94
|
release()
|
|
114
95
|
}
|
|
115
96
|
}
|
|
116
97
|
|
|
117
|
-
async has (peerId: PeerId): Promise<boolean> {
|
|
118
|
-
this.
|
|
119
|
-
const release = await this.store.lock.readLock()
|
|
120
|
-
this.log.trace('has got read lock')
|
|
98
|
+
async has (peerId: PeerId, options?: AbortOptions): Promise<boolean> {
|
|
99
|
+
const release = await this.store.getReadLock(peerId, options)
|
|
121
100
|
|
|
122
101
|
try {
|
|
123
|
-
return await this.store.has(peerId)
|
|
102
|
+
return await this.store.has(peerId, options)
|
|
124
103
|
} finally {
|
|
125
104
|
this.log.trace('has release read lock')
|
|
126
|
-
release()
|
|
105
|
+
release?.()
|
|
127
106
|
}
|
|
128
107
|
}
|
|
129
108
|
|
|
130
|
-
async get (peerId: PeerId): Promise<Peer> {
|
|
131
|
-
this.
|
|
132
|
-
const release = await this.store.lock.readLock()
|
|
133
|
-
this.log.trace('get got read lock')
|
|
109
|
+
async get (peerId: PeerId, options?: AbortOptions): Promise<Peer> {
|
|
110
|
+
const release = await this.store.getReadLock(peerId, options)
|
|
134
111
|
|
|
135
112
|
try {
|
|
136
|
-
return await this.store.load(peerId)
|
|
113
|
+
return await this.store.load(peerId, options)
|
|
137
114
|
} finally {
|
|
138
|
-
|
|
139
|
-
release()
|
|
115
|
+
release?.()
|
|
140
116
|
}
|
|
141
117
|
}
|
|
142
118
|
|
|
143
|
-
async getInfo (peerId: PeerId): Promise<PeerInfo> {
|
|
144
|
-
const peer = await this.get(peerId)
|
|
119
|
+
async getInfo (peerId: PeerId, options?: AbortOptions): Promise<PeerInfo> {
|
|
120
|
+
const peer = await this.get(peerId, options)
|
|
145
121
|
|
|
146
122
|
return {
|
|
147
123
|
id: peer.id,
|
|
@@ -149,59 +125,55 @@ class PersistentPeerStore implements PeerStore {
|
|
|
149
125
|
}
|
|
150
126
|
}
|
|
151
127
|
|
|
152
|
-
async save (id: PeerId, data: PeerData): Promise<Peer> {
|
|
153
|
-
this.
|
|
154
|
-
const release = await this.store.lock.writeLock()
|
|
155
|
-
this.log.trace('save got write lock')
|
|
128
|
+
async save (id: PeerId, data: PeerData, options?: AbortOptions): Promise<Peer> {
|
|
129
|
+
const release = await this.store.getWriteLock(id, options)
|
|
156
130
|
|
|
157
131
|
try {
|
|
158
|
-
const result = await this.store.save(id, data)
|
|
132
|
+
const result = await this.store.save(id, data, options)
|
|
159
133
|
|
|
160
134
|
this.#emitIfUpdated(id, result)
|
|
161
135
|
|
|
162
136
|
return result.peer
|
|
163
137
|
} finally {
|
|
164
|
-
|
|
165
|
-
release()
|
|
138
|
+
release?.()
|
|
166
139
|
}
|
|
167
140
|
}
|
|
168
141
|
|
|
169
|
-
async patch (id: PeerId, data: PeerData): Promise<Peer> {
|
|
170
|
-
this.
|
|
171
|
-
const release = await this.store.lock.writeLock()
|
|
172
|
-
this.log.trace('patch got write lock')
|
|
142
|
+
async patch (id: PeerId, data: PeerData, options?: AbortOptions): Promise<Peer> {
|
|
143
|
+
const release = await this.store.getWriteLock(id, options)
|
|
173
144
|
|
|
174
145
|
try {
|
|
175
|
-
const result = await this.store.patch(id, data)
|
|
146
|
+
const result = await this.store.patch(id, data, options)
|
|
176
147
|
|
|
177
148
|
this.#emitIfUpdated(id, result)
|
|
178
149
|
|
|
179
150
|
return result.peer
|
|
180
151
|
} finally {
|
|
181
|
-
|
|
182
|
-
release()
|
|
152
|
+
release?.()
|
|
183
153
|
}
|
|
184
154
|
}
|
|
185
155
|
|
|
186
|
-
async merge (id: PeerId, data: PeerData): Promise<Peer> {
|
|
187
|
-
this.
|
|
188
|
-
const release = await this.store.lock.writeLock()
|
|
189
|
-
this.log.trace('merge got write lock')
|
|
156
|
+
async merge (id: PeerId, data: PeerData, options?: AbortOptions): Promise<Peer> {
|
|
157
|
+
const release = await this.store.getWriteLock(id, options)
|
|
190
158
|
|
|
191
159
|
try {
|
|
192
|
-
const result = await this.store.merge(id, data)
|
|
160
|
+
const result = await this.store.merge(id, data, options)
|
|
193
161
|
|
|
194
162
|
this.#emitIfUpdated(id, result)
|
|
195
163
|
|
|
196
164
|
return result.peer
|
|
197
165
|
} finally {
|
|
198
|
-
|
|
199
|
-
release()
|
|
166
|
+
release?.()
|
|
200
167
|
}
|
|
201
168
|
}
|
|
202
169
|
|
|
203
|
-
async consumePeerRecord (buf: Uint8Array,
|
|
204
|
-
|
|
170
|
+
async consumePeerRecord (buf: Uint8Array, options?: ConsumePeerRecordOptions): Promise<boolean>
|
|
171
|
+
async consumePeerRecord (buf: Uint8Array, expectedPeer?: PeerId, options?: AbortOptions): Promise<boolean>
|
|
172
|
+
async consumePeerRecord (buf: Uint8Array, arg1?: any, arg2?: any): Promise<boolean> {
|
|
173
|
+
const expectedPeer: PeerId | undefined = isPeerId(arg1) ? arg1 : isPeerId(arg1?.expectedPeer) ? arg1.expectedPeer : undefined
|
|
174
|
+
const options: AbortOptions | undefined = isPeerId(arg1) ? arg2 : arg1 === undefined ? arg2 : arg1
|
|
175
|
+
|
|
176
|
+
const envelope = await RecordEnvelope.openAndCertify(buf, PeerRecord.DOMAIN, options)
|
|
205
177
|
const peerId = peerIdFromCID(envelope.publicKey.toCID())
|
|
206
178
|
|
|
207
179
|
if (expectedPeer?.equals(peerId) === false) {
|
|
@@ -213,7 +185,7 @@ class PersistentPeerStore implements PeerStore {
|
|
|
213
185
|
let peer: Peer | undefined
|
|
214
186
|
|
|
215
187
|
try {
|
|
216
|
-
peer = await this.get(peerId)
|
|
188
|
+
peer = await this.get(peerId, options)
|
|
217
189
|
} catch (err: any) {
|
|
218
190
|
if (err.name !== 'NotFoundError') {
|
|
219
191
|
throw err
|
|
@@ -222,7 +194,7 @@ class PersistentPeerStore implements PeerStore {
|
|
|
222
194
|
|
|
223
195
|
// ensure seq is greater than, or equal to, the last received
|
|
224
196
|
if (peer?.peerRecordEnvelope != null) {
|
|
225
|
-
const storedEnvelope =
|
|
197
|
+
const storedEnvelope = RecordEnvelope.createFromProtobuf(peer.peerRecordEnvelope)
|
|
226
198
|
const storedRecord = PeerRecord.createFromProtobuf(storedEnvelope.payload)
|
|
227
199
|
|
|
228
200
|
if (storedRecord.seqNumber >= peerRecord.seqNumber) {
|
|
@@ -237,7 +209,7 @@ class PersistentPeerStore implements PeerStore {
|
|
|
237
209
|
isCertified: true,
|
|
238
210
|
multiaddr
|
|
239
211
|
}))
|
|
240
|
-
})
|
|
212
|
+
}, options)
|
|
241
213
|
|
|
242
214
|
return true
|
|
243
215
|
}
|
package/src/store.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { NotFoundError } from '@libp2p/interface'
|
|
2
|
+
import { PeerMap, trackedPeerMap } from '@libp2p/peer-collections'
|
|
2
3
|
import { peerIdFromCID } from '@libp2p/peer-id'
|
|
3
4
|
import mortice from 'mortice'
|
|
4
5
|
import { base32 } from 'multiformats/bases/base32'
|
|
@@ -11,8 +12,9 @@ import { NAMESPACE_COMMON, peerIdToDatastoreKey } from './utils/peer-id-to-datas
|
|
|
11
12
|
import { toPeerPB } from './utils/to-peer-pb.js'
|
|
12
13
|
import type { AddressFilter, PersistentPeerStoreComponents, PersistentPeerStoreInit } from './index.js'
|
|
13
14
|
import type { PeerUpdate as PeerUpdateExternal, PeerId, Peer, PeerData, PeerQuery, Logger } from '@libp2p/interface'
|
|
15
|
+
import type { AbortOptions } from '@multiformats/multiaddr'
|
|
14
16
|
import type { Datastore, Key, Query } from 'interface-datastore'
|
|
15
|
-
import type { Mortice } from 'mortice'
|
|
17
|
+
import type { Mortice, Release } from 'mortice'
|
|
16
18
|
|
|
17
19
|
/**
|
|
18
20
|
* Event detail emitted when peer data changes
|
|
@@ -52,10 +54,15 @@ function mapQuery (query: PeerQuery, maxAddressAge: number): Query {
|
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
56
|
|
|
57
|
+
export interface Lock {
|
|
58
|
+
refs: number
|
|
59
|
+
lock: Mortice
|
|
60
|
+
}
|
|
61
|
+
|
|
55
62
|
export class PersistentStore {
|
|
56
63
|
private readonly peerId: PeerId
|
|
57
64
|
private readonly datastore: Datastore
|
|
58
|
-
|
|
65
|
+
private locks: PeerMap<Lock>
|
|
59
66
|
private readonly addressFilter?: AddressFilter
|
|
60
67
|
private readonly log: Logger
|
|
61
68
|
private readonly maxAddressAge: number
|
|
@@ -66,17 +73,79 @@ export class PersistentStore {
|
|
|
66
73
|
this.peerId = components.peerId
|
|
67
74
|
this.datastore = components.datastore
|
|
68
75
|
this.addressFilter = init.addressFilter
|
|
69
|
-
this.
|
|
70
|
-
name: '
|
|
71
|
-
|
|
76
|
+
this.locks = trackedPeerMap({
|
|
77
|
+
name: 'libp2p_peer_store_locks',
|
|
78
|
+
metrics: components.metrics
|
|
72
79
|
})
|
|
73
80
|
this.maxAddressAge = init.maxAddressAge ?? MAX_ADDRESS_AGE
|
|
74
81
|
this.maxPeerAge = init.maxPeerAge ?? MAX_PEER_AGE
|
|
75
82
|
}
|
|
76
83
|
|
|
77
|
-
|
|
84
|
+
getLock (peerId: PeerId): Lock {
|
|
85
|
+
let lock = this.locks.get(peerId)
|
|
86
|
+
|
|
87
|
+
if (lock == null) {
|
|
88
|
+
lock = {
|
|
89
|
+
refs: 0,
|
|
90
|
+
lock: mortice({
|
|
91
|
+
name: peerId.toString(),
|
|
92
|
+
singleProcess: true
|
|
93
|
+
})
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
this.locks.set(peerId, lock)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
lock.refs++
|
|
100
|
+
|
|
101
|
+
return lock
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
private maybeRemoveLock (peerId: PeerId, lock: Lock): void {
|
|
105
|
+
lock.refs--
|
|
106
|
+
|
|
107
|
+
if (lock.refs === 0) {
|
|
108
|
+
this.locks.delete(peerId)
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
async getReadLock (peerId: PeerId, options?: AbortOptions): Promise<Release> {
|
|
113
|
+
const lock = this.getLock(peerId)
|
|
114
|
+
|
|
115
|
+
try {
|
|
116
|
+
const release = await lock.lock.readLock(options)
|
|
117
|
+
|
|
118
|
+
return () => {
|
|
119
|
+
release()
|
|
120
|
+
this.maybeRemoveLock(peerId, lock)
|
|
121
|
+
}
|
|
122
|
+
} catch (err) {
|
|
123
|
+
this.maybeRemoveLock(peerId, lock)
|
|
124
|
+
|
|
125
|
+
throw err
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
async getWriteLock (peerId: PeerId, options?: AbortOptions): Promise<Release> {
|
|
130
|
+
const lock = this.getLock(peerId)
|
|
131
|
+
|
|
132
|
+
try {
|
|
133
|
+
const release = await lock.lock.writeLock(options)
|
|
134
|
+
|
|
135
|
+
return () => {
|
|
136
|
+
release()
|
|
137
|
+
this.maybeRemoveLock(peerId, lock)
|
|
138
|
+
}
|
|
139
|
+
} catch (err) {
|
|
140
|
+
this.maybeRemoveLock(peerId, lock)
|
|
141
|
+
|
|
142
|
+
throw err
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
async has (peerId: PeerId, options?: AbortOptions): Promise<boolean> {
|
|
78
147
|
try {
|
|
79
|
-
await this.load(peerId)
|
|
148
|
+
await this.load(peerId, options)
|
|
80
149
|
|
|
81
150
|
return true
|
|
82
151
|
} catch (err: any) {
|
|
@@ -88,41 +157,43 @@ export class PersistentStore {
|
|
|
88
157
|
return false
|
|
89
158
|
}
|
|
90
159
|
|
|
91
|
-
async delete (peerId: PeerId): Promise<void> {
|
|
160
|
+
async delete (peerId: PeerId, options?: AbortOptions): Promise<void> {
|
|
92
161
|
if (this.peerId.equals(peerId)) {
|
|
93
162
|
return
|
|
94
163
|
}
|
|
95
164
|
|
|
96
|
-
await this.datastore.delete(peerIdToDatastoreKey(peerId))
|
|
165
|
+
await this.datastore.delete(peerIdToDatastoreKey(peerId), options)
|
|
97
166
|
}
|
|
98
167
|
|
|
99
|
-
async load (peerId: PeerId): Promise<Peer> {
|
|
168
|
+
async load (peerId: PeerId, options?: AbortOptions): Promise<Peer> {
|
|
100
169
|
const key = peerIdToDatastoreKey(peerId)
|
|
101
|
-
const buf = await this.datastore.get(key)
|
|
170
|
+
const buf = await this.datastore.get(key, options)
|
|
102
171
|
const peer = PeerPB.decode(buf)
|
|
103
172
|
|
|
104
173
|
if (this.#peerIsExpired(peerId, peer)) {
|
|
105
|
-
await this.datastore.delete(key)
|
|
174
|
+
await this.datastore.delete(key, options)
|
|
106
175
|
throw new NotFoundError()
|
|
107
176
|
}
|
|
108
177
|
|
|
109
178
|
return pbToPeer(peerId, peer, this.peerId.equals(peerId) ? Infinity : this.maxAddressAge)
|
|
110
179
|
}
|
|
111
180
|
|
|
112
|
-
async save (peerId: PeerId, data: PeerData): Promise<PeerUpdate> {
|
|
113
|
-
const existingPeer = await this.#findExistingPeer(peerId)
|
|
181
|
+
async save (peerId: PeerId, data: PeerData, options?: AbortOptions): Promise<PeerUpdate> {
|
|
182
|
+
const existingPeer = await this.#findExistingPeer(peerId, options)
|
|
114
183
|
|
|
115
184
|
const peerPb: PeerPB = await toPeerPB(peerId, data, 'patch', {
|
|
185
|
+
...options,
|
|
116
186
|
addressFilter: this.addressFilter
|
|
117
187
|
})
|
|
118
188
|
|
|
119
189
|
return this.#saveIfDifferent(peerId, peerPb, existingPeer)
|
|
120
190
|
}
|
|
121
191
|
|
|
122
|
-
async patch (peerId: PeerId, data: Partial<PeerData
|
|
123
|
-
const existingPeer = await this.#findExistingPeer(peerId)
|
|
192
|
+
async patch (peerId: PeerId, data: Partial<PeerData>, options?: AbortOptions): Promise<PeerUpdate> {
|
|
193
|
+
const existingPeer = await this.#findExistingPeer(peerId, options)
|
|
124
194
|
|
|
125
195
|
const peerPb: PeerPB = await toPeerPB(peerId, data, 'patch', {
|
|
196
|
+
...options,
|
|
126
197
|
addressFilter: this.addressFilter,
|
|
127
198
|
existingPeer
|
|
128
199
|
})
|
|
@@ -130,8 +201,8 @@ export class PersistentStore {
|
|
|
130
201
|
return this.#saveIfDifferent(peerId, peerPb, existingPeer)
|
|
131
202
|
}
|
|
132
203
|
|
|
133
|
-
async merge (peerId: PeerId, data: PeerData): Promise<PeerUpdate> {
|
|
134
|
-
const existingPeer = await this.#findExistingPeer(peerId)
|
|
204
|
+
async merge (peerId: PeerId, data: PeerData, options?: AbortOptions): Promise<PeerUpdate> {
|
|
205
|
+
const existingPeer = await this.#findExistingPeer(peerId, options)
|
|
135
206
|
|
|
136
207
|
const peerPb: PeerPB = await toPeerPB(peerId, data, 'merge', {
|
|
137
208
|
addressFilter: this.addressFilter,
|
|
@@ -141,8 +212,8 @@ export class PersistentStore {
|
|
|
141
212
|
return this.#saveIfDifferent(peerId, peerPb, existingPeer)
|
|
142
213
|
}
|
|
143
214
|
|
|
144
|
-
async * all (
|
|
145
|
-
for await (const { key, value } of this.datastore.query(mapQuery(
|
|
215
|
+
async * all (options?: PeerQuery): AsyncGenerator<Peer, void, unknown> {
|
|
216
|
+
for await (const { key, value } of this.datastore.query(mapQuery(options ?? {}, this.maxAddressAge), options)) {
|
|
146
217
|
const peerId = keyToPeerId(key)
|
|
147
218
|
|
|
148
219
|
// skip self peer if present
|
|
@@ -154,7 +225,7 @@ export class PersistentStore {
|
|
|
154
225
|
|
|
155
226
|
// remove expired peer
|
|
156
227
|
if (this.#peerIsExpired(peerId, peer)) {
|
|
157
|
-
await this.datastore.delete(key)
|
|
228
|
+
await this.datastore.delete(key, options)
|
|
158
229
|
continue
|
|
159
230
|
}
|
|
160
231
|
|
|
@@ -162,21 +233,21 @@ export class PersistentStore {
|
|
|
162
233
|
}
|
|
163
234
|
}
|
|
164
235
|
|
|
165
|
-
async #findExistingPeer (peerId: PeerId): Promise<ExistingPeer | undefined> {
|
|
236
|
+
async #findExistingPeer (peerId: PeerId, options?: AbortOptions): Promise<ExistingPeer | undefined> {
|
|
166
237
|
try {
|
|
167
238
|
const key = peerIdToDatastoreKey(peerId)
|
|
168
|
-
const buf = await this.datastore.get(key)
|
|
239
|
+
const buf = await this.datastore.get(key, options)
|
|
169
240
|
const peerPB = PeerPB.decode(buf)
|
|
170
241
|
|
|
171
242
|
// remove expired peer
|
|
172
243
|
if (this.#peerIsExpired(peerId, peerPB)) {
|
|
173
|
-
await this.datastore.delete(key)
|
|
244
|
+
await this.datastore.delete(key, options)
|
|
174
245
|
throw new NotFoundError()
|
|
175
246
|
}
|
|
176
247
|
|
|
177
248
|
return {
|
|
178
249
|
peerPB,
|
|
179
|
-
peer:
|
|
250
|
+
peer: pbToPeer(peerId, peerPB, this.maxAddressAge)
|
|
180
251
|
}
|
|
181
252
|
} catch (err: any) {
|
|
182
253
|
if (err.name !== 'NotFoundError') {
|
|
@@ -185,15 +256,15 @@ export class PersistentStore {
|
|
|
185
256
|
}
|
|
186
257
|
}
|
|
187
258
|
|
|
188
|
-
async #saveIfDifferent (peerId: PeerId, peer: PeerPB, existingPeer?: ExistingPeer): Promise<PeerUpdate> {
|
|
259
|
+
async #saveIfDifferent (peerId: PeerId, peer: PeerPB, existingPeer?: ExistingPeer, options?: AbortOptions): Promise<PeerUpdate> {
|
|
189
260
|
// record last update
|
|
190
261
|
peer.updated = Date.now()
|
|
191
262
|
const buf = PeerPB.encode(peer)
|
|
192
263
|
|
|
193
|
-
await this.datastore.put(peerIdToDatastoreKey(peerId), buf)
|
|
264
|
+
await this.datastore.put(peerIdToDatastoreKey(peerId), buf, options)
|
|
194
265
|
|
|
195
266
|
return {
|
|
196
|
-
peer:
|
|
267
|
+
peer: pbToPeer(peerId, peer, this.maxAddressAge),
|
|
197
268
|
previous: existingPeer?.peer,
|
|
198
269
|
updated: existingPeer == null || !peerEquals(peer, existingPeer.peerPB)
|
|
199
270
|
}
|
|
@@ -1,22 +1,20 @@
|
|
|
1
1
|
import { publicKeyFromProtobuf } from '@libp2p/crypto/keys'
|
|
2
2
|
import { peerIdFromPublicKey } from '@libp2p/peer-id'
|
|
3
3
|
import { multiaddr } from '@multiformats/multiaddr'
|
|
4
|
-
import { base58btc } from 'multiformats/bases/base58'
|
|
5
|
-
import * as Digest from 'multiformats/hashes/digest'
|
|
6
4
|
import { Peer as PeerPB } from '../pb/peer.js'
|
|
7
5
|
import type { PeerId, Peer, Tag } from '@libp2p/interface'
|
|
6
|
+
import type { Digest } from 'multiformats/hashes/digest'
|
|
8
7
|
|
|
9
8
|
function populatePublicKey (peerId: PeerId, protobuf: PeerPB): PeerId {
|
|
10
9
|
if (peerId.publicKey != null || protobuf.publicKey == null) {
|
|
11
10
|
return peerId
|
|
12
11
|
}
|
|
13
12
|
|
|
14
|
-
let digest:
|
|
13
|
+
let digest: Digest<18, number> | undefined
|
|
15
14
|
|
|
16
15
|
if (peerId.type === 'RSA') {
|
|
17
16
|
// avoid hashing public key
|
|
18
|
-
|
|
19
|
-
digest = Digest.decode(multihash)
|
|
17
|
+
digest = peerId.toMultihash()
|
|
20
18
|
}
|
|
21
19
|
|
|
22
20
|
const publicKey = publicKeyFromProtobuf(protobuf.publicKey, digest)
|
|
@@ -3,8 +3,9 @@ import { isMultiaddr, multiaddr } from '@multiformats/multiaddr'
|
|
|
3
3
|
import type { AddressFilter } from '../index.js'
|
|
4
4
|
import type { Address as AddressPB } from '../pb/peer.js'
|
|
5
5
|
import type { PeerId, Address } from '@libp2p/interface'
|
|
6
|
+
import type { AbortOptions } from '@multiformats/multiaddr'
|
|
6
7
|
|
|
7
|
-
export async function dedupeFilterAndSortAddresses (peerId: PeerId, filter: AddressFilter, addresses: Array<Address | AddressPB | undefined>, existingAddresses?: AddressPB[]): Promise<AddressPB[]> {
|
|
8
|
+
export async function dedupeFilterAndSortAddresses (peerId: PeerId, filter: AddressFilter, addresses: Array<Address | AddressPB | undefined>, existingAddresses?: AddressPB[], options?: AbortOptions): Promise<AddressPB[]> {
|
|
8
9
|
const addressMap = new Map<string, Address>()
|
|
9
10
|
|
|
10
11
|
for (const addr of addresses) {
|
|
@@ -20,7 +21,7 @@ export async function dedupeFilterAndSortAddresses (peerId: PeerId, filter: Addr
|
|
|
20
21
|
throw new InvalidParametersError('Multiaddr was invalid')
|
|
21
22
|
}
|
|
22
23
|
|
|
23
|
-
if (!(await filter(peerId, addr.multiaddr))) {
|
|
24
|
+
if (!(await filter(peerId, addr.multiaddr, options))) {
|
|
24
25
|
continue
|
|
25
26
|
}
|
|
26
27
|
|