@libp2p/peer-store 9.0.12 → 10.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/README.md +5 -1
- package/dist/index.min.js +9 -9
- package/dist/src/index.d.ts +8 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +33 -28
- package/dist/src/index.js.map +1 -1
- package/dist/src/store.d.ts +1 -3
- package/dist/src/store.d.ts.map +1 -1
- package/dist/src/store.js +1 -1
- package/dist/src/store.js.map +1 -1
- package/dist/src/utils/bytes-to-peer.d.ts +1 -2
- package/dist/src/utils/bytes-to-peer.d.ts.map +1 -1
- package/dist/src/utils/bytes-to-peer.js.map +1 -1
- package/dist/src/utils/dedupe-addresses.d.ts +1 -2
- package/dist/src/utils/dedupe-addresses.d.ts.map +1 -1
- package/dist/src/utils/dedupe-addresses.js +1 -1
- package/dist/src/utils/dedupe-addresses.js.map +1 -1
- package/dist/src/utils/peer-data-to-datastore-peer.d.ts +1 -2
- package/dist/src/utils/peer-data-to-datastore-peer.d.ts.map +1 -1
- package/dist/src/utils/peer-data-to-datastore-peer.js +1 -1
- package/dist/src/utils/peer-data-to-datastore-peer.js.map +1 -1
- package/dist/src/utils/peer-id-to-datastore-key.d.ts +1 -1
- package/dist/src/utils/peer-id-to-datastore-key.d.ts.map +1 -1
- package/dist/src/utils/peer-id-to-datastore-key.js +2 -2
- package/dist/src/utils/peer-id-to-datastore-key.js.map +1 -1
- package/dist/src/utils/to-peer-pb.d.ts +1 -2
- package/dist/src/utils/to-peer-pb.d.ts.map +1 -1
- package/dist/src/utils/to-peer-pb.js +1 -1
- package/dist/src/utils/to-peer-pb.js.map +1 -1
- package/dist/typedoc-urls.json +10 -0
- package/package.json +15 -11
- package/src/index.ts +36 -33
- package/src/store.ts +2 -4
- package/src/utils/bytes-to-peer.ts +1 -2
- package/src/utils/dedupe-addresses.ts +2 -3
- package/src/utils/peer-data-to-datastore-peer.ts +2 -3
- package/src/utils/peer-id-to-datastore-key.ts +2 -2
- package/src/utils/to-peer-pb.ts +2 -3
package/src/index.ts
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* @packageDocumentation
|
|
3
|
+
*
|
|
4
|
+
* The peer store is where libp2p stores data about the peers it has encountered on the network.
|
|
5
|
+
*/
|
|
6
|
+
|
|
2
7
|
import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record'
|
|
3
8
|
import all from 'it-all'
|
|
4
9
|
import { PersistentStore, type PeerUpdate } from './store.js'
|
|
5
|
-
import type { Libp2pEvents } from '@libp2p/interface'
|
|
6
|
-
import type { TypedEventTarget } from '@libp2p/interface/events'
|
|
7
|
-
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
8
|
-
import type { PeerStore, Peer, PeerData, PeerQuery } from '@libp2p/interface/peer-store'
|
|
10
|
+
import type { ComponentLogger, Libp2pEvents, Logger, TypedEventTarget, PeerId, PeerStore, Peer, PeerData, PeerQuery } from '@libp2p/interface'
|
|
9
11
|
import type { Multiaddr } from '@multiformats/multiaddr'
|
|
10
12
|
import type { Datastore } from 'interface-datastore'
|
|
11
13
|
|
|
12
|
-
const log = logger('libp2p:peer-store')
|
|
13
|
-
|
|
14
14
|
export interface PersistentPeerStoreComponents {
|
|
15
15
|
peerId: PeerId
|
|
16
16
|
datastore: Datastore
|
|
17
17
|
events: TypedEventTarget<Libp2pEvents>
|
|
18
|
+
logger: ComponentLogger
|
|
18
19
|
}
|
|
19
20
|
|
|
20
21
|
/**
|
|
@@ -35,84 +36,86 @@ export class PersistentPeerStore implements PeerStore {
|
|
|
35
36
|
private readonly store: PersistentStore
|
|
36
37
|
private readonly events: TypedEventTarget<Libp2pEvents>
|
|
37
38
|
private readonly peerId: PeerId
|
|
39
|
+
private readonly log: Logger
|
|
38
40
|
|
|
39
41
|
constructor (components: PersistentPeerStoreComponents, init: PersistentPeerStoreInit = {}) {
|
|
42
|
+
this.log = components.logger.forComponent('libp2p:peer-store')
|
|
40
43
|
this.events = components.events
|
|
41
44
|
this.peerId = components.peerId
|
|
42
45
|
this.store = new PersistentStore(components, init)
|
|
43
46
|
}
|
|
44
47
|
|
|
45
48
|
async forEach (fn: (peer: Peer,) => void, query?: PeerQuery): Promise<void> {
|
|
46
|
-
log.trace('forEach await read lock')
|
|
49
|
+
this.log.trace('forEach await read lock')
|
|
47
50
|
const release = await this.store.lock.readLock()
|
|
48
|
-
log.trace('forEach got read lock')
|
|
51
|
+
this.log.trace('forEach got read lock')
|
|
49
52
|
|
|
50
53
|
try {
|
|
51
54
|
for await (const peer of this.store.all(query)) {
|
|
52
55
|
fn(peer)
|
|
53
56
|
}
|
|
54
57
|
} finally {
|
|
55
|
-
log.trace('forEach release read lock')
|
|
58
|
+
this.log.trace('forEach release read lock')
|
|
56
59
|
release()
|
|
57
60
|
}
|
|
58
61
|
}
|
|
59
62
|
|
|
60
63
|
async all (query?: PeerQuery): Promise<Peer[]> {
|
|
61
|
-
log.trace('all await read lock')
|
|
64
|
+
this.log.trace('all await read lock')
|
|
62
65
|
const release = await this.store.lock.readLock()
|
|
63
|
-
log.trace('all got read lock')
|
|
66
|
+
this.log.trace('all got read lock')
|
|
64
67
|
|
|
65
68
|
try {
|
|
66
69
|
return await all(this.store.all(query))
|
|
67
70
|
} finally {
|
|
68
|
-
log.trace('all release read lock')
|
|
71
|
+
this.log.trace('all release read lock')
|
|
69
72
|
release()
|
|
70
73
|
}
|
|
71
74
|
}
|
|
72
75
|
|
|
73
76
|
async delete (peerId: PeerId): Promise<void> {
|
|
74
|
-
log.trace('delete await write lock')
|
|
77
|
+
this.log.trace('delete await write lock')
|
|
75
78
|
const release = await this.store.lock.writeLock()
|
|
76
|
-
log.trace('delete got write lock')
|
|
79
|
+
this.log.trace('delete got write lock')
|
|
77
80
|
|
|
78
81
|
try {
|
|
79
82
|
await this.store.delete(peerId)
|
|
80
83
|
} finally {
|
|
81
|
-
log.trace('delete release write lock')
|
|
84
|
+
this.log.trace('delete release write lock')
|
|
82
85
|
release()
|
|
83
86
|
}
|
|
84
87
|
}
|
|
85
88
|
|
|
86
89
|
async has (peerId: PeerId): Promise<boolean> {
|
|
87
|
-
log.trace('has await read lock')
|
|
90
|
+
this.log.trace('has await read lock')
|
|
88
91
|
const release = await this.store.lock.readLock()
|
|
89
|
-
log.trace('has got read lock')
|
|
92
|
+
this.log.trace('has got read lock')
|
|
90
93
|
|
|
91
94
|
try {
|
|
92
95
|
return await this.store.has(peerId)
|
|
93
96
|
} finally {
|
|
94
|
-
log.trace('has release read lock')
|
|
97
|
+
this.log.trace('has release read lock')
|
|
95
98
|
release()
|
|
96
99
|
}
|
|
97
100
|
}
|
|
98
101
|
|
|
99
102
|
async get (peerId: PeerId): Promise<Peer> {
|
|
100
|
-
log.trace('get await read lock')
|
|
103
|
+
this.log.trace('get await read lock')
|
|
101
104
|
const release = await this.store.lock.readLock()
|
|
102
|
-
log.trace('get got read lock')
|
|
105
|
+
this.log.trace('get got read lock')
|
|
103
106
|
|
|
104
107
|
try {
|
|
105
108
|
return await this.store.load(peerId)
|
|
106
109
|
} finally {
|
|
107
|
-
log.trace('get release read lock')
|
|
110
|
+
this.log.trace('get release read lock')
|
|
108
111
|
release()
|
|
109
112
|
}
|
|
110
113
|
}
|
|
111
114
|
|
|
112
115
|
async save (id: PeerId, data: PeerData): Promise<Peer> {
|
|
113
|
-
log.trace('save await write lock')
|
|
116
|
+
this.log.trace('save await write lock')
|
|
114
117
|
const release = await this.store.lock.writeLock()
|
|
115
|
-
log.trace('save got write lock')
|
|
118
|
+
this.log.trace('save got write lock')
|
|
116
119
|
|
|
117
120
|
try {
|
|
118
121
|
const result = await this.store.save(id, data)
|
|
@@ -121,15 +124,15 @@ export class PersistentPeerStore implements PeerStore {
|
|
|
121
124
|
|
|
122
125
|
return result.peer
|
|
123
126
|
} finally {
|
|
124
|
-
log.trace('save release write lock')
|
|
127
|
+
this.log.trace('save release write lock')
|
|
125
128
|
release()
|
|
126
129
|
}
|
|
127
130
|
}
|
|
128
131
|
|
|
129
132
|
async patch (id: PeerId, data: PeerData): Promise<Peer> {
|
|
130
|
-
log.trace('patch await write lock')
|
|
133
|
+
this.log.trace('patch await write lock')
|
|
131
134
|
const release = await this.store.lock.writeLock()
|
|
132
|
-
log.trace('patch got write lock')
|
|
135
|
+
this.log.trace('patch got write lock')
|
|
133
136
|
|
|
134
137
|
try {
|
|
135
138
|
const result = await this.store.patch(id, data)
|
|
@@ -138,15 +141,15 @@ export class PersistentPeerStore implements PeerStore {
|
|
|
138
141
|
|
|
139
142
|
return result.peer
|
|
140
143
|
} finally {
|
|
141
|
-
log.trace('patch release write lock')
|
|
144
|
+
this.log.trace('patch release write lock')
|
|
142
145
|
release()
|
|
143
146
|
}
|
|
144
147
|
}
|
|
145
148
|
|
|
146
149
|
async merge (id: PeerId, data: PeerData): Promise<Peer> {
|
|
147
|
-
log.trace('merge await write lock')
|
|
150
|
+
this.log.trace('merge await write lock')
|
|
148
151
|
const release = await this.store.lock.writeLock()
|
|
149
|
-
log.trace('merge got write lock')
|
|
152
|
+
this.log.trace('merge got write lock')
|
|
150
153
|
|
|
151
154
|
try {
|
|
152
155
|
const result = await this.store.merge(id, data)
|
|
@@ -155,7 +158,7 @@ export class PersistentPeerStore implements PeerStore {
|
|
|
155
158
|
|
|
156
159
|
return result.peer
|
|
157
160
|
} finally {
|
|
158
|
-
log.trace('merge release write lock')
|
|
161
|
+
this.log.trace('merge release write lock')
|
|
159
162
|
release()
|
|
160
163
|
}
|
|
161
164
|
}
|
|
@@ -164,7 +167,7 @@ export class PersistentPeerStore implements PeerStore {
|
|
|
164
167
|
const envelope = await RecordEnvelope.openAndCertify(buf, PeerRecord.DOMAIN)
|
|
165
168
|
|
|
166
169
|
if (expectedPeer?.equals(envelope.peerId) === false) {
|
|
167
|
-
log('envelope peer id was not the expected peer id - expected: %p received: %p', expectedPeer, envelope.peerId)
|
|
170
|
+
this.log('envelope peer id was not the expected peer id - expected: %p received: %p', expectedPeer, envelope.peerId)
|
|
168
171
|
return false
|
|
169
172
|
}
|
|
170
173
|
|
|
@@ -185,7 +188,7 @@ export class PersistentPeerStore implements PeerStore {
|
|
|
185
188
|
const storedRecord = PeerRecord.createFromProtobuf(storedEnvelope.payload)
|
|
186
189
|
|
|
187
190
|
if (storedRecord.seqNumber >= peerRecord.seqNumber) {
|
|
188
|
-
log('sequence number was lower or equal to existing sequence number - stored: %d received: %d', storedRecord.seqNumber, peerRecord.seqNumber)
|
|
191
|
+
this.log('sequence number was lower or equal to existing sequence number - stored: %d received: %d', storedRecord.seqNumber, peerRecord.seqNumber)
|
|
189
192
|
return false
|
|
190
193
|
}
|
|
191
194
|
}
|
package/src/store.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CodeError } from '@libp2p/interface
|
|
1
|
+
import { CodeError } from '@libp2p/interface'
|
|
2
2
|
import { PeerMap } from '@libp2p/peer-collections'
|
|
3
3
|
import { peerIdFromBytes } from '@libp2p/peer-id'
|
|
4
4
|
import mortice, { type Mortice } from 'mortice'
|
|
@@ -10,9 +10,7 @@ import { bytesToPeer } from './utils/bytes-to-peer.js'
|
|
|
10
10
|
import { NAMESPACE_COMMON, peerIdToDatastoreKey } from './utils/peer-id-to-datastore-key.js'
|
|
11
11
|
import { toPeerPB } from './utils/to-peer-pb.js'
|
|
12
12
|
import type { AddressFilter, PersistentPeerStoreComponents, PersistentPeerStoreInit } from './index.js'
|
|
13
|
-
import type { PeerUpdate as PeerUpdateExternal } from '@libp2p/interface'
|
|
14
|
-
import type { PeerId } from '@libp2p/interface/peer-id'
|
|
15
|
-
import type { Peer, PeerData, PeerQuery } from '@libp2p/interface/peer-store'
|
|
13
|
+
import type { PeerUpdate as PeerUpdateExternal, PeerId, Peer, PeerData, PeerQuery } from '@libp2p/interface'
|
|
16
14
|
import type { Datastore, Key, Query } from 'interface-datastore'
|
|
17
15
|
|
|
18
16
|
/**
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { peerIdFromPeerId } from '@libp2p/peer-id'
|
|
2
2
|
import { multiaddr } from '@multiformats/multiaddr'
|
|
3
3
|
import { Peer as PeerPB } from '../pb/peer.js'
|
|
4
|
-
import type { PeerId } from '@libp2p/interface
|
|
5
|
-
import type { Peer, Tag } from '@libp2p/interface/peer-store'
|
|
4
|
+
import type { PeerId, Peer, Tag } from '@libp2p/interface'
|
|
6
5
|
|
|
7
6
|
export function bytesToPeer (peerId: PeerId, buf: Uint8Array): Peer {
|
|
8
7
|
const peer = PeerPB.decode(buf)
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { CodeError } from '@libp2p/interface
|
|
1
|
+
import { CodeError } from '@libp2p/interface'
|
|
2
2
|
import { isMultiaddr, multiaddr } from '@multiformats/multiaddr'
|
|
3
3
|
import { codes } from '../errors.js'
|
|
4
4
|
import type { AddressFilter } from '../index.js'
|
|
5
5
|
import type { Address as AddressPB } from '../pb/peer.js'
|
|
6
|
-
import type { PeerId } from '@libp2p/interface
|
|
7
|
-
import type { Address } from '@libp2p/interface/peer-store'
|
|
6
|
+
import type { PeerId, Address } from '@libp2p/interface'
|
|
8
7
|
|
|
9
8
|
export async function dedupeFilterAndSortAddresses (peerId: PeerId, filter: AddressFilter, addresses: Array<Address | AddressPB | undefined>): Promise<AddressPB[]> {
|
|
10
9
|
const addressMap = new Map<string, Address>()
|
|
@@ -1,10 +1,9 @@
|
|
|
1
|
-
import { CodeError } from '@libp2p/interface
|
|
1
|
+
import { CodeError } from '@libp2p/interface'
|
|
2
2
|
import { isMultiaddr } from '@multiformats/multiaddr'
|
|
3
3
|
import { equals as uint8arrayEquals } from 'uint8arrays/equals'
|
|
4
4
|
import { codes } from '../errors.js'
|
|
5
5
|
import type { Peer as PeerPB } from '../pb/peer.js'
|
|
6
|
-
import type { PeerId } from '@libp2p/interface
|
|
7
|
-
import type { PeerData } from '@libp2p/interface/peer-store'
|
|
6
|
+
import type { PeerId, PeerData } from '@libp2p/interface'
|
|
8
7
|
|
|
9
8
|
export function toDatastorePeer (peerId: PeerId, data: PeerData): PeerPB {
|
|
10
9
|
if (data == null) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { CodeError } from '@libp2p/interface
|
|
2
|
-
import { isPeerId, type PeerId } from '@libp2p/interface
|
|
1
|
+
import { CodeError } from '@libp2p/interface'
|
|
2
|
+
import { isPeerId, type PeerId } from '@libp2p/interface'
|
|
3
3
|
import { Key } from 'interface-datastore/key'
|
|
4
4
|
import { codes } from '../errors.js'
|
|
5
5
|
|
package/src/utils/to-peer-pb.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { CodeError } from '@libp2p/interface
|
|
1
|
+
import { CodeError } from '@libp2p/interface'
|
|
2
2
|
import { equals as uint8arrayEquals } from 'uint8arrays/equals'
|
|
3
3
|
import { codes } from '../errors.js'
|
|
4
4
|
import { dedupeFilterAndSortAddresses } from './dedupe-addresses.js'
|
|
5
5
|
import type { AddressFilter } from '../index.js'
|
|
6
6
|
import type { Tag, Peer as PeerPB } from '../pb/peer.js'
|
|
7
|
-
import type { PeerId } from '@libp2p/interface
|
|
8
|
-
import type { Address, Peer, PeerData, TagOptions } from '@libp2p/interface/peer-store'
|
|
7
|
+
import type { PeerId, Address, Peer, PeerData, TagOptions } from '@libp2p/interface'
|
|
9
8
|
|
|
10
9
|
export interface ToPBPeerOptions {
|
|
11
10
|
addressFilter?: AddressFilter
|