@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.
@@ -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
- export interface ToPBPeerOptions {
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;AAE9E,MAAM,WAAW,eAAe;IAC9B,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,CA6J/I"}
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
- return {
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":"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"}
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.1",
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": "^5.1.3",
52
- "@libp2p/interface": "^2.10.1",
53
- "@libp2p/peer-id": "^5.1.4",
54
- "@libp2p/peer-record": "^8.0.29",
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.4",
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": "^5.1.17",
66
+ "@libp2p/logger": "5.1.18-2a7425cdb",
66
67
  "@types/sinon": "^17.0.4",
67
- "aegir": "^47.0.6",
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.0",
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.log.trace('forEach await read lock')
78
- const release = await this.store.lock.readLock()
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.log.trace('all await read lock')
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.log.trace('delete await write lock')
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.log.trace('has await read lock')
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.log.trace('get await read lock')
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
- this.log.trace('get release read lock')
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.log.trace('save await write lock')
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
- this.log.trace('save release write lock')
165
- release()
138
+ release?.()
166
139
  }
167
140
  }
168
141
 
169
- async patch (id: PeerId, data: PeerData): Promise<Peer> {
170
- this.log.trace('patch await write lock')
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
- this.log.trace('patch release write lock')
182
- release()
152
+ release?.()
183
153
  }
184
154
  }
185
155
 
186
- async merge (id: PeerId, data: PeerData): Promise<Peer> {
187
- this.log.trace('merge await write lock')
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
- this.log.trace('merge release write lock')
199
- release()
166
+ release?.()
200
167
  }
201
168
  }
202
169
 
203
- async consumePeerRecord (buf: Uint8Array, expectedPeer?: PeerId): Promise<boolean> {
204
- const envelope = await RecordEnvelope.openAndCertify(buf, PeerRecord.DOMAIN)
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 = await RecordEnvelope.createFromProtobuf(peer.peerRecordEnvelope)
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
- public readonly lock: Mortice
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.lock = mortice({
70
- name: 'peer-store',
71
- singleProcess: true
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
- async has (peerId: PeerId): Promise<boolean> {
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>): Promise<PeerUpdate> {
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 (query?: PeerQuery): AsyncGenerator<Peer, void, unknown> {
145
- for await (const { key, value } of this.datastore.query(mapQuery(query ?? {}, this.maxAddressAge))) {
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: bytesToPeer(peerId, buf, this.maxAddressAge)
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: bytesToPeer(peerId, buf, this.maxAddressAge),
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: any
13
+ let digest: Digest<18, number> | undefined
15
14
 
16
15
  if (peerId.type === 'RSA') {
17
16
  // avoid hashing public key
18
- const multihash = base58btc.decode(`z${peerId}`)
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