@libp2p/peer-store 10.1.5 → 11.0.0-18dd3cb26
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 +4 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -4
- package/dist/src/index.js.map +1 -1
- package/dist/src/pb/peer.d.ts +6 -6
- package/dist/src/pb/peer.d.ts.map +1 -1
- package/dist/src/pb/peer.js +76 -38
- package/dist/src/pb/peer.js.map +1 -1
- package/dist/src/store.js +7 -7
- 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 +4 -5
- package/dist/src/utils/bytes-to-peer.js.map +1 -1
- package/dist/src/utils/dedupe-addresses.d.ts.map +1 -1
- package/dist/src/utils/dedupe-addresses.js +2 -3
- package/dist/src/utils/dedupe-addresses.js.map +1 -1
- package/dist/src/utils/peer-data-to-datastore-peer.d.ts.map +1 -1
- package/dist/src/utils/peer-data-to-datastore-peer.js +14 -15
- package/dist/src/utils/peer-data-to-datastore-peer.js.map +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 -3
- package/dist/src/utils/peer-id-to-datastore-key.js.map +1 -1
- package/dist/src/utils/to-peer-pb.d.ts.map +1 -1
- package/dist/src/utils/to-peer-pb.js +24 -15
- package/dist/src/utils/to-peer-pb.js.map +1 -1
- package/package.json +9 -9
- package/src/index.ts +6 -4
- package/src/pb/peer.ts +80 -39
- package/src/store.ts +7 -7
- package/src/utils/bytes-to-peer.ts +4 -5
- package/src/utils/dedupe-addresses.ts +2 -3
- package/src/utils/peer-data-to-datastore-peer.ts +14 -15
- package/src/utils/peer-id-to-datastore-key.ts +2 -3
- package/src/utils/to-peer-pb.ts +24 -16
- package/dist/src/errors.d.ts +0 -4
- package/dist/src/errors.d.ts.map +0 -1
- package/dist/src/errors.js +0 -4
- package/dist/src/errors.js.map +0 -1
- package/dist/typedoc-urls.json +0 -10
- package/src/errors.ts +0 -3
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { publicKeyToProtobuf } from '@libp2p/crypto/keys';
|
|
2
|
+
import { InvalidParametersError } from '@libp2p/interface';
|
|
2
3
|
import { isMultiaddr } from '@multiformats/multiaddr';
|
|
3
|
-
import { equals as uint8arrayEquals } from 'uint8arrays/equals';
|
|
4
|
-
import { codes } from '../errors.js';
|
|
5
4
|
export function toDatastorePeer(peerId, data) {
|
|
6
5
|
if (data == null) {
|
|
7
|
-
throw new
|
|
6
|
+
throw new InvalidParametersError('Invalid PeerData');
|
|
8
7
|
}
|
|
9
|
-
if (data.publicKey != null && peerId.publicKey != null && !
|
|
10
|
-
throw new
|
|
8
|
+
if (data.publicKey != null && peerId.publicKey != null && !data.publicKey.equals(peerId.publicKey)) {
|
|
9
|
+
throw new InvalidParametersError('publicKey bytes do not match peer id publicKey bytes');
|
|
11
10
|
}
|
|
12
11
|
// merge addresses and multiaddrs, and dedupe
|
|
13
12
|
const addressSet = new Set();
|
|
@@ -16,7 +15,7 @@ export function toDatastorePeer(peerId, data) {
|
|
|
16
15
|
.concat((data.multiaddrs ?? []).map(multiaddr => ({ multiaddr, isCertified: false })))
|
|
17
16
|
.filter(address => {
|
|
18
17
|
if (!isMultiaddr(address.multiaddr)) {
|
|
19
|
-
throw new
|
|
18
|
+
throw new InvalidParametersError('Invalid mulitaddr');
|
|
20
19
|
}
|
|
21
20
|
if (addressSet.has(address.multiaddr.toString())) {
|
|
22
21
|
return false;
|
|
@@ -34,7 +33,7 @@ export function toDatastorePeer(peerId, data) {
|
|
|
34
33
|
protocols: (data.protocols ?? []).sort(),
|
|
35
34
|
metadata: new Map(),
|
|
36
35
|
tags: new Map(),
|
|
37
|
-
publicKey: data.publicKey,
|
|
36
|
+
publicKey: data.publicKey != null ? publicKeyToProtobuf(data.publicKey) : undefined,
|
|
38
37
|
peerRecordEnvelope: data.peerRecordEnvelope
|
|
39
38
|
};
|
|
40
39
|
// remove invalid metadata
|
|
@@ -42,13 +41,13 @@ export function toDatastorePeer(peerId, data) {
|
|
|
42
41
|
const metadataEntries = data.metadata instanceof Map ? data.metadata.entries() : Object.entries(data.metadata);
|
|
43
42
|
for (const [key, value] of metadataEntries) {
|
|
44
43
|
if (typeof key !== 'string') {
|
|
45
|
-
throw new
|
|
44
|
+
throw new InvalidParametersError('Peer metadata keys must be strings');
|
|
46
45
|
}
|
|
47
46
|
if (value == null) {
|
|
48
47
|
continue;
|
|
49
48
|
}
|
|
50
49
|
if (!(value instanceof Uint8Array)) {
|
|
51
|
-
throw new
|
|
50
|
+
throw new InvalidParametersError('Peer metadata values must be Uint8Arrays');
|
|
52
51
|
}
|
|
53
52
|
output.metadata.set(key, value);
|
|
54
53
|
}
|
|
@@ -57,7 +56,7 @@ export function toDatastorePeer(peerId, data) {
|
|
|
57
56
|
const tagsEntries = data.tags instanceof Map ? data.tags.entries() : Object.entries(data.tags);
|
|
58
57
|
for (const [key, value] of tagsEntries) {
|
|
59
58
|
if (typeof key !== 'string') {
|
|
60
|
-
throw new
|
|
59
|
+
throw new InvalidParametersError('Peer tag keys must be strings');
|
|
61
60
|
}
|
|
62
61
|
if (value == null) {
|
|
63
62
|
continue;
|
|
@@ -68,17 +67,17 @@ export function toDatastorePeer(peerId, data) {
|
|
|
68
67
|
value: value.value ?? 0
|
|
69
68
|
};
|
|
70
69
|
if (tag.value < 0 || tag.value > 100) {
|
|
71
|
-
throw new
|
|
70
|
+
throw new InvalidParametersError('Tag value must be between 0-100');
|
|
72
71
|
}
|
|
73
72
|
if (parseInt(`${tag.value}`, 10) !== tag.value) {
|
|
74
|
-
throw new
|
|
73
|
+
throw new InvalidParametersError('Tag value must be an integer');
|
|
75
74
|
}
|
|
76
75
|
if (tag.ttl != null) {
|
|
77
76
|
if (tag.ttl < 0) {
|
|
78
|
-
throw new
|
|
77
|
+
throw new InvalidParametersError('Tag ttl must be between greater than 0');
|
|
79
78
|
}
|
|
80
79
|
if (parseInt(`${tag.ttl}`, 10) !== tag.ttl) {
|
|
81
|
-
throw new
|
|
80
|
+
throw new InvalidParametersError('Tag ttl must be an integer');
|
|
82
81
|
}
|
|
83
82
|
}
|
|
84
83
|
output.tags.set(tag.name, {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer-data-to-datastore-peer.js","sourceRoot":"","sources":["../../../src/utils/peer-data-to-datastore-peer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"peer-data-to-datastore-peer.js","sourceRoot":"","sources":["../../../src/utils/peer-data-to-datastore-peer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer-id-to-datastore-key.d.ts","sourceRoot":"","sources":["../../../src/utils/peer-id-to-datastore-key.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAA;
|
|
1
|
+
{"version":3,"file":"peer-id-to-datastore-key.d.ts","sourceRoot":"","sources":["../../../src/utils/peer-id-to-datastore-key.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAA;AAE7C,eAAO,MAAM,gBAAgB,YAAY,CAAA;AAEzC,wBAAgB,oBAAoB,CAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAOzD"}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InvalidParametersError } from '@libp2p/interface';
|
|
2
2
|
import { isPeerId } from '@libp2p/interface';
|
|
3
3
|
import { Key } from 'interface-datastore/key';
|
|
4
|
-
import { codes } from '../errors.js';
|
|
5
4
|
export const NAMESPACE_COMMON = '/peers/';
|
|
6
5
|
export function peerIdToDatastoreKey(peerId) {
|
|
7
6
|
if (!isPeerId(peerId) || peerId.type == null) {
|
|
8
|
-
throw new
|
|
7
|
+
throw new InvalidParametersError('Invalid PeerId');
|
|
9
8
|
}
|
|
10
9
|
const b32key = peerId.toCID().toString();
|
|
11
10
|
return new Key(`${NAMESPACE_COMMON}${b32key}`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"peer-id-to-datastore-key.js","sourceRoot":"","sources":["../../../src/utils/peer-id-to-datastore-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"peer-id-to-datastore-key.js","sourceRoot":"","sources":["../../../src/utils/peer-id-to-datastore-key.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,QAAQ,EAAe,MAAM,mBAAmB,CAAA;AACzD,OAAO,EAAE,GAAG,EAAE,MAAM,yBAAyB,CAAA;AAE7C,MAAM,CAAC,MAAM,gBAAgB,GAAG,SAAS,CAAA;AAEzC,MAAM,UAAU,oBAAoB,CAAE,MAAc;IAClD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;QAC7C,MAAM,IAAI,sBAAsB,CAAC,gBAAgB,CAAC,CAAA;IACpD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAA;IACxC,OAAO,IAAI,GAAG,CAAC,GAAG,gBAAgB,GAAG,MAAM,EAAE,CAAC,CAAA;AAChD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"to-peer-pb.d.ts","sourceRoot":"","sources":["../../../src/utils/to-peer-pb.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"to-peer-pb.d.ts","sourceRoot":"","sources":["../../../src/utils/to-peer-pb.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAChD,OAAO,KAAK,EAAO,IAAI,IAAI,MAAM,EAAE,MAAM,eAAe,CAAA;AACxD,OAAO,KAAK,EAAE,MAAM,EAAW,IAAI,EAAE,QAAQ,EAAc,MAAM,mBAAmB,CAAA;AAEpF,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,YAAY,CAAC,EAAE,IAAI,CAAA;CACpB;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,CAmJ/I"}
|
|
@@ -1,17 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { codes } from '../errors.js';
|
|
1
|
+
import { publicKeyToProtobuf } from '@libp2p/crypto/keys';
|
|
2
|
+
import { InvalidParametersError } from '@libp2p/interface';
|
|
4
3
|
import { dedupeFilterAndSortAddresses } from './dedupe-addresses.js';
|
|
5
4
|
export async function toPeerPB(peerId, data, strategy, options) {
|
|
6
5
|
if (data == null) {
|
|
7
|
-
throw new
|
|
6
|
+
throw new InvalidParametersError('Invalid PeerData');
|
|
8
7
|
}
|
|
9
|
-
if (data.publicKey != null && peerId.publicKey != null && !
|
|
10
|
-
throw new
|
|
8
|
+
if (data.publicKey != null && peerId.publicKey != null && !data.publicKey.equals(peerId.publicKey)) {
|
|
9
|
+
throw new InvalidParametersError('publicKey bytes do not match peer id publicKey bytes');
|
|
11
10
|
}
|
|
12
11
|
const existingPeer = options.existingPeer;
|
|
13
12
|
if (existingPeer != null && !peerId.equals(existingPeer.id)) {
|
|
14
|
-
throw new
|
|
13
|
+
throw new InvalidParametersError('peer id did not match existing peer id');
|
|
15
14
|
}
|
|
16
15
|
let addresses = existingPeer?.addresses ?? [];
|
|
17
16
|
let protocols = new Set(existingPeer?.protocols ?? []);
|
|
@@ -100,6 +99,16 @@ export async function toPeerPB(peerId, data, strategy, options) {
|
|
|
100
99
|
peerRecordEnvelope = data.peerRecordEnvelope;
|
|
101
100
|
}
|
|
102
101
|
}
|
|
102
|
+
let publicKey;
|
|
103
|
+
if (existingPeer?.id.publicKey != null) {
|
|
104
|
+
publicKey = publicKeyToProtobuf(existingPeer.id.publicKey);
|
|
105
|
+
}
|
|
106
|
+
else if (data.publicKey != null) {
|
|
107
|
+
publicKey = publicKeyToProtobuf(data.publicKey);
|
|
108
|
+
}
|
|
109
|
+
else if (peerId.publicKey != null) {
|
|
110
|
+
publicKey = publicKeyToProtobuf(peerId.publicKey);
|
|
111
|
+
}
|
|
103
112
|
const output = {
|
|
104
113
|
addresses: await dedupeFilterAndSortAddresses(peerId, options.addressFilter ?? (async () => true), addresses),
|
|
105
114
|
protocols: [...protocols.values()].sort((a, b) => {
|
|
@@ -107,7 +116,7 @@ export async function toPeerPB(peerId, data, strategy, options) {
|
|
|
107
116
|
}),
|
|
108
117
|
metadata,
|
|
109
118
|
tags,
|
|
110
|
-
publicKey
|
|
119
|
+
publicKey,
|
|
111
120
|
peerRecordEnvelope
|
|
112
121
|
};
|
|
113
122
|
// Ed25519 and secp256k1 have their public key embedded in them so no need to duplicate it
|
|
@@ -139,30 +148,30 @@ function createSortedMap(entries, options) {
|
|
|
139
148
|
}
|
|
140
149
|
function validateMetadata(key, value) {
|
|
141
150
|
if (typeof key !== 'string') {
|
|
142
|
-
throw new
|
|
151
|
+
throw new InvalidParametersError('Metadata key must be a string');
|
|
143
152
|
}
|
|
144
153
|
if (!(value instanceof Uint8Array)) {
|
|
145
|
-
throw new
|
|
154
|
+
throw new InvalidParametersError('Metadata value must be a Uint8Array');
|
|
146
155
|
}
|
|
147
156
|
}
|
|
148
157
|
function validateTag(key, tag) {
|
|
149
158
|
if (typeof key !== 'string') {
|
|
150
|
-
throw new
|
|
159
|
+
throw new InvalidParametersError('Tag name must be a string');
|
|
151
160
|
}
|
|
152
161
|
if (tag.value != null) {
|
|
153
162
|
if (parseInt(`${tag.value}`, 10) !== tag.value) {
|
|
154
|
-
throw new
|
|
163
|
+
throw new InvalidParametersError('Tag value must be an integer');
|
|
155
164
|
}
|
|
156
165
|
if (tag.value < 0 || tag.value > 100) {
|
|
157
|
-
throw new
|
|
166
|
+
throw new InvalidParametersError('Tag value must be between 0-100');
|
|
158
167
|
}
|
|
159
168
|
}
|
|
160
169
|
if (tag.ttl != null) {
|
|
161
170
|
if (parseInt(`${tag.ttl}`, 10) !== tag.ttl) {
|
|
162
|
-
throw new
|
|
171
|
+
throw new InvalidParametersError('Tag ttl must be an integer');
|
|
163
172
|
}
|
|
164
173
|
if (tag.ttl < 0) {
|
|
165
|
-
throw new
|
|
174
|
+
throw new InvalidParametersError('Tag ttl must be between greater than 0');
|
|
166
175
|
}
|
|
167
176
|
}
|
|
168
177
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"to-peer-pb.js","sourceRoot":"","sources":["../../../src/utils/to-peer-pb.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
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": "
|
|
3
|
+
"version": "11.0.0-18dd3cb26",
|
|
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",
|
|
@@ -59,12 +59,13 @@
|
|
|
59
59
|
"test:electron-main": "aegir test -t electron-main"
|
|
60
60
|
},
|
|
61
61
|
"dependencies": {
|
|
62
|
-
"@libp2p/
|
|
63
|
-
"@libp2p/
|
|
64
|
-
"@libp2p/peer-
|
|
65
|
-
"@libp2p/peer-
|
|
62
|
+
"@libp2p/crypto": "5.0.0-18dd3cb26",
|
|
63
|
+
"@libp2p/interface": "2.0.0-18dd3cb26",
|
|
64
|
+
"@libp2p/peer-collections": "6.0.0-18dd3cb26",
|
|
65
|
+
"@libp2p/peer-id": "5.0.0-18dd3cb26",
|
|
66
|
+
"@libp2p/peer-record": "8.0.0-18dd3cb26",
|
|
66
67
|
"@multiformats/multiaddr": "^12.2.3",
|
|
67
|
-
"interface-datastore": "^8.
|
|
68
|
+
"interface-datastore": "^8.3.0",
|
|
68
69
|
"it-all": "^3.0.6",
|
|
69
70
|
"mortice": "^3.0.4",
|
|
70
71
|
"multiformats": "^13.1.0",
|
|
@@ -73,11 +74,10 @@
|
|
|
73
74
|
"uint8arrays": "^5.1.0"
|
|
74
75
|
},
|
|
75
76
|
"devDependencies": {
|
|
76
|
-
"@libp2p/logger": "
|
|
77
|
-
"@libp2p/peer-id-factory": "^4.2.4",
|
|
77
|
+
"@libp2p/logger": "5.0.0-18dd3cb26",
|
|
78
78
|
"@types/sinon": "^17.0.3",
|
|
79
79
|
"aegir": "^44.0.1",
|
|
80
|
-
"datastore-core": "^
|
|
80
|
+
"datastore-core": "^10.0.0",
|
|
81
81
|
"delay": "^6.0.0",
|
|
82
82
|
"p-defer": "^4.0.1",
|
|
83
83
|
"p-event": "^6.0.1",
|
package/src/index.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
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 { peerIdFromCID } from '@libp2p/peer-id'
|
|
7
8
|
import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record'
|
|
8
9
|
import all from 'it-all'
|
|
9
10
|
import { PersistentStore, type PeerUpdate } from './store.js'
|
|
@@ -167,9 +168,10 @@ export class PersistentPeerStore implements PeerStore {
|
|
|
167
168
|
|
|
168
169
|
async consumePeerRecord (buf: Uint8Array, expectedPeer?: PeerId): Promise<boolean> {
|
|
169
170
|
const envelope = await RecordEnvelope.openAndCertify(buf, PeerRecord.DOMAIN)
|
|
171
|
+
const peerId = peerIdFromCID(envelope.publicKey.toCID())
|
|
170
172
|
|
|
171
|
-
if (expectedPeer?.equals(
|
|
172
|
-
this.log('envelope peer id was not the expected peer id - expected: %p received: %p', expectedPeer,
|
|
173
|
+
if (expectedPeer?.equals(peerId) === false) {
|
|
174
|
+
this.log('envelope peer id was not the expected peer id - expected: %p received: %p', expectedPeer, peerId)
|
|
173
175
|
return false
|
|
174
176
|
}
|
|
175
177
|
|
|
@@ -177,9 +179,9 @@ export class PersistentPeerStore implements PeerStore {
|
|
|
177
179
|
let peer: Peer | undefined
|
|
178
180
|
|
|
179
181
|
try {
|
|
180
|
-
peer = await this.get(
|
|
182
|
+
peer = await this.get(peerId)
|
|
181
183
|
} catch (err: any) {
|
|
182
|
-
if (err.
|
|
184
|
+
if (err.name !== 'NotFoundError') {
|
|
183
185
|
throw err
|
|
184
186
|
}
|
|
185
187
|
}
|
package/src/pb/peer.ts
CHANGED
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
/* eslint-disable @typescript-eslint/no-unnecessary-boolean-literal-compare */
|
|
5
5
|
/* eslint-disable @typescript-eslint/no-empty-interface */
|
|
6
6
|
|
|
7
|
-
import {
|
|
8
|
-
import
|
|
7
|
+
import { type Codec, decodeMessage, type DecodeOptions, encodeMessage, MaxLengthError, MaxSizeError, message } from 'protons-runtime'
|
|
8
|
+
import { alloc as uint8ArrayAlloc } from 'uint8arrays/alloc'
|
|
9
9
|
import type { Uint8ArrayList } from 'uint8arraylist'
|
|
10
10
|
|
|
11
11
|
export interface Peer {
|
|
@@ -46,10 +46,10 @@ export namespace Peer {
|
|
|
46
46
|
if (opts.lengthDelimited !== false) {
|
|
47
47
|
w.ldelim()
|
|
48
48
|
}
|
|
49
|
-
}, (reader, length) => {
|
|
49
|
+
}, (reader, length, opts = {}) => {
|
|
50
50
|
const obj: any = {
|
|
51
51
|
key: '',
|
|
52
|
-
value:
|
|
52
|
+
value: uint8ArrayAlloc(0)
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
const end = length == null ? reader.len : reader.pos + length
|
|
@@ -58,15 +58,18 @@ export namespace Peer {
|
|
|
58
58
|
const tag = reader.uint32()
|
|
59
59
|
|
|
60
60
|
switch (tag >>> 3) {
|
|
61
|
-
case 1:
|
|
61
|
+
case 1: {
|
|
62
62
|
obj.key = reader.string()
|
|
63
63
|
break
|
|
64
|
-
|
|
64
|
+
}
|
|
65
|
+
case 2: {
|
|
65
66
|
obj.value = reader.bytes()
|
|
66
67
|
break
|
|
67
|
-
|
|
68
|
+
}
|
|
69
|
+
default: {
|
|
68
70
|
reader.skipType(tag & 7)
|
|
69
71
|
break
|
|
72
|
+
}
|
|
70
73
|
}
|
|
71
74
|
}
|
|
72
75
|
|
|
@@ -81,8 +84,8 @@ export namespace Peer {
|
|
|
81
84
|
return encodeMessage(obj, Peer$metadataEntry.codec())
|
|
82
85
|
}
|
|
83
86
|
|
|
84
|
-
export const decode = (buf: Uint8Array | Uint8ArrayList): Peer$metadataEntry => {
|
|
85
|
-
return decodeMessage(buf, Peer$metadataEntry.codec())
|
|
87
|
+
export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Peer$metadataEntry>): Peer$metadataEntry => {
|
|
88
|
+
return decodeMessage(buf, Peer$metadataEntry.codec(), opts)
|
|
86
89
|
}
|
|
87
90
|
}
|
|
88
91
|
|
|
@@ -114,7 +117,7 @@ export namespace Peer {
|
|
|
114
117
|
if (opts.lengthDelimited !== false) {
|
|
115
118
|
w.ldelim()
|
|
116
119
|
}
|
|
117
|
-
}, (reader, length) => {
|
|
120
|
+
}, (reader, length, opts = {}) => {
|
|
118
121
|
const obj: any = {
|
|
119
122
|
key: ''
|
|
120
123
|
}
|
|
@@ -125,15 +128,20 @@ export namespace Peer {
|
|
|
125
128
|
const tag = reader.uint32()
|
|
126
129
|
|
|
127
130
|
switch (tag >>> 3) {
|
|
128
|
-
case 1:
|
|
131
|
+
case 1: {
|
|
129
132
|
obj.key = reader.string()
|
|
130
133
|
break
|
|
131
|
-
|
|
132
|
-
|
|
134
|
+
}
|
|
135
|
+
case 2: {
|
|
136
|
+
obj.value = Tag.codec().decode(reader, reader.uint32(), {
|
|
137
|
+
limits: opts.limits?.value
|
|
138
|
+
})
|
|
133
139
|
break
|
|
134
|
-
|
|
140
|
+
}
|
|
141
|
+
default: {
|
|
135
142
|
reader.skipType(tag & 7)
|
|
136
143
|
break
|
|
144
|
+
}
|
|
137
145
|
}
|
|
138
146
|
}
|
|
139
147
|
|
|
@@ -148,8 +156,8 @@ export namespace Peer {
|
|
|
148
156
|
return encodeMessage(obj, Peer$tagsEntry.codec())
|
|
149
157
|
}
|
|
150
158
|
|
|
151
|
-
export const decode = (buf: Uint8Array | Uint8ArrayList): Peer$tagsEntry => {
|
|
152
|
-
return decodeMessage(buf, Peer$tagsEntry.codec())
|
|
159
|
+
export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Peer$tagsEntry>): Peer$tagsEntry => {
|
|
160
|
+
return decodeMessage(buf, Peer$tagsEntry.codec(), opts)
|
|
153
161
|
}
|
|
154
162
|
}
|
|
155
163
|
|
|
@@ -203,7 +211,7 @@ export namespace Peer {
|
|
|
203
211
|
if (opts.lengthDelimited !== false) {
|
|
204
212
|
w.ldelim()
|
|
205
213
|
}
|
|
206
|
-
}, (reader, length) => {
|
|
214
|
+
}, (reader, length, opts = {}) => {
|
|
207
215
|
const obj: any = {
|
|
208
216
|
addresses: [],
|
|
209
217
|
protocols: [],
|
|
@@ -217,31 +225,58 @@ export namespace Peer {
|
|
|
217
225
|
const tag = reader.uint32()
|
|
218
226
|
|
|
219
227
|
switch (tag >>> 3) {
|
|
220
|
-
case 1:
|
|
221
|
-
obj.addresses.
|
|
228
|
+
case 1: {
|
|
229
|
+
if (opts.limits?.addresses != null && obj.addresses.length === opts.limits.addresses) {
|
|
230
|
+
throw new MaxLengthError('Decode error - map field "addresses" had too many elements')
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
obj.addresses.push(Address.codec().decode(reader, reader.uint32(), {
|
|
234
|
+
limits: opts.limits?.addresses$
|
|
235
|
+
}))
|
|
222
236
|
break
|
|
223
|
-
|
|
237
|
+
}
|
|
238
|
+
case 2: {
|
|
239
|
+
if (opts.limits?.protocols != null && obj.protocols.length === opts.limits.protocols) {
|
|
240
|
+
throw new MaxLengthError('Decode error - map field "protocols" had too many elements')
|
|
241
|
+
}
|
|
242
|
+
|
|
224
243
|
obj.protocols.push(reader.string())
|
|
225
244
|
break
|
|
226
|
-
|
|
245
|
+
}
|
|
246
|
+
case 4: {
|
|
227
247
|
obj.publicKey = reader.bytes()
|
|
228
248
|
break
|
|
229
|
-
|
|
249
|
+
}
|
|
250
|
+
case 5: {
|
|
230
251
|
obj.peerRecordEnvelope = reader.bytes()
|
|
231
252
|
break
|
|
253
|
+
}
|
|
232
254
|
case 6: {
|
|
255
|
+
if (opts.limits?.metadata != null && obj.metadata.size === opts.limits.metadata) {
|
|
256
|
+
throw new MaxSizeError('Decode error - map field "metadata" had too many elements')
|
|
257
|
+
}
|
|
258
|
+
|
|
233
259
|
const entry = Peer.Peer$metadataEntry.codec().decode(reader, reader.uint32())
|
|
234
260
|
obj.metadata.set(entry.key, entry.value)
|
|
235
261
|
break
|
|
236
262
|
}
|
|
237
263
|
case 7: {
|
|
238
|
-
|
|
264
|
+
if (opts.limits?.tags != null && obj.tags.size === opts.limits.tags) {
|
|
265
|
+
throw new MaxSizeError('Decode error - map field "tags" had too many elements')
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
const entry = Peer.Peer$tagsEntry.codec().decode(reader, reader.uint32(), {
|
|
269
|
+
limits: {
|
|
270
|
+
value: opts.limits?.tags$value
|
|
271
|
+
}
|
|
272
|
+
})
|
|
239
273
|
obj.tags.set(entry.key, entry.value)
|
|
240
274
|
break
|
|
241
275
|
}
|
|
242
|
-
default:
|
|
276
|
+
default: {
|
|
243
277
|
reader.skipType(tag & 7)
|
|
244
278
|
break
|
|
279
|
+
}
|
|
245
280
|
}
|
|
246
281
|
}
|
|
247
282
|
|
|
@@ -256,8 +291,8 @@ export namespace Peer {
|
|
|
256
291
|
return encodeMessage(obj, Peer.codec())
|
|
257
292
|
}
|
|
258
293
|
|
|
259
|
-
export const decode = (buf: Uint8Array | Uint8ArrayList): Peer => {
|
|
260
|
-
return decodeMessage(buf, Peer.codec())
|
|
294
|
+
export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Peer>): Peer => {
|
|
295
|
+
return decodeMessage(buf, Peer.codec(), opts)
|
|
261
296
|
}
|
|
262
297
|
}
|
|
263
298
|
|
|
@@ -289,9 +324,9 @@ export namespace Address {
|
|
|
289
324
|
if (opts.lengthDelimited !== false) {
|
|
290
325
|
w.ldelim()
|
|
291
326
|
}
|
|
292
|
-
}, (reader, length) => {
|
|
327
|
+
}, (reader, length, opts = {}) => {
|
|
293
328
|
const obj: any = {
|
|
294
|
-
multiaddr:
|
|
329
|
+
multiaddr: uint8ArrayAlloc(0)
|
|
295
330
|
}
|
|
296
331
|
|
|
297
332
|
const end = length == null ? reader.len : reader.pos + length
|
|
@@ -300,15 +335,18 @@ export namespace Address {
|
|
|
300
335
|
const tag = reader.uint32()
|
|
301
336
|
|
|
302
337
|
switch (tag >>> 3) {
|
|
303
|
-
case 1:
|
|
338
|
+
case 1: {
|
|
304
339
|
obj.multiaddr = reader.bytes()
|
|
305
340
|
break
|
|
306
|
-
|
|
341
|
+
}
|
|
342
|
+
case 2: {
|
|
307
343
|
obj.isCertified = reader.bool()
|
|
308
344
|
break
|
|
309
|
-
|
|
345
|
+
}
|
|
346
|
+
default: {
|
|
310
347
|
reader.skipType(tag & 7)
|
|
311
348
|
break
|
|
349
|
+
}
|
|
312
350
|
}
|
|
313
351
|
}
|
|
314
352
|
|
|
@@ -323,8 +361,8 @@ export namespace Address {
|
|
|
323
361
|
return encodeMessage(obj, Address.codec())
|
|
324
362
|
}
|
|
325
363
|
|
|
326
|
-
export const decode = (buf: Uint8Array | Uint8ArrayList): Address => {
|
|
327
|
-
return decodeMessage(buf, Address.codec())
|
|
364
|
+
export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Address>): Address => {
|
|
365
|
+
return decodeMessage(buf, Address.codec(), opts)
|
|
328
366
|
}
|
|
329
367
|
}
|
|
330
368
|
|
|
@@ -356,7 +394,7 @@ export namespace Tag {
|
|
|
356
394
|
if (opts.lengthDelimited !== false) {
|
|
357
395
|
w.ldelim()
|
|
358
396
|
}
|
|
359
|
-
}, (reader, length) => {
|
|
397
|
+
}, (reader, length, opts = {}) => {
|
|
360
398
|
const obj: any = {
|
|
361
399
|
value: 0
|
|
362
400
|
}
|
|
@@ -367,15 +405,18 @@ export namespace Tag {
|
|
|
367
405
|
const tag = reader.uint32()
|
|
368
406
|
|
|
369
407
|
switch (tag >>> 3) {
|
|
370
|
-
case 1:
|
|
408
|
+
case 1: {
|
|
371
409
|
obj.value = reader.uint32()
|
|
372
410
|
break
|
|
373
|
-
|
|
411
|
+
}
|
|
412
|
+
case 2: {
|
|
374
413
|
obj.expiry = reader.uint64()
|
|
375
414
|
break
|
|
376
|
-
|
|
415
|
+
}
|
|
416
|
+
default: {
|
|
377
417
|
reader.skipType(tag & 7)
|
|
378
418
|
break
|
|
419
|
+
}
|
|
379
420
|
}
|
|
380
421
|
}
|
|
381
422
|
|
|
@@ -390,7 +431,7 @@ export namespace Tag {
|
|
|
390
431
|
return encodeMessage(obj, Tag.codec())
|
|
391
432
|
}
|
|
392
433
|
|
|
393
|
-
export const decode = (buf: Uint8Array | Uint8ArrayList): Tag => {
|
|
394
|
-
return decodeMessage(buf, Tag.codec())
|
|
434
|
+
export const decode = (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions<Tag>): Tag => {
|
|
435
|
+
return decodeMessage(buf, Tag.codec(), opts)
|
|
395
436
|
}
|
|
396
437
|
}
|
package/src/store.ts
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { InvalidParametersError } from '@libp2p/interface'
|
|
2
2
|
import { PeerMap } from '@libp2p/peer-collections'
|
|
3
|
-
import {
|
|
3
|
+
import { peerIdFromCID } from '@libp2p/peer-id'
|
|
4
4
|
import mortice, { type Mortice } from 'mortice'
|
|
5
5
|
import { base32 } from 'multiformats/bases/base32'
|
|
6
|
+
import { CID } from 'multiformats/cid'
|
|
6
7
|
import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
|
|
7
|
-
import { codes } from './errors.js'
|
|
8
8
|
import { Peer as PeerPB } from './pb/peer.js'
|
|
9
9
|
import { bytesToPeer } from './utils/bytes-to-peer.js'
|
|
10
10
|
import { NAMESPACE_COMMON, peerIdToDatastoreKey } from './utils/peer-id-to-datastore-key.js'
|
|
@@ -23,8 +23,8 @@ export interface PeerUpdate extends PeerUpdateExternal {
|
|
|
23
23
|
function decodePeer (key: Key, value: Uint8Array, cache: PeerMap<Peer>): Peer {
|
|
24
24
|
// /peers/${peer-id-as-libp2p-key-cid-string-in-base-32}
|
|
25
25
|
const base32Str = key.toString().split('/')[2]
|
|
26
|
-
const buf =
|
|
27
|
-
const peerId =
|
|
26
|
+
const buf = CID.parse(base32Str, base32)
|
|
27
|
+
const peerId = peerIdFromCID(buf)
|
|
28
28
|
|
|
29
29
|
const cached = cache.get(peerId)
|
|
30
30
|
|
|
@@ -77,7 +77,7 @@ export class PersistentStore {
|
|
|
77
77
|
|
|
78
78
|
async delete (peerId: PeerId): Promise<void> {
|
|
79
79
|
if (this.peerId.equals(peerId)) {
|
|
80
|
-
throw new
|
|
80
|
+
throw new InvalidParametersError('Cannot delete self peer')
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
await this.datastore.delete(peerIdToDatastoreKey(peerId))
|
|
@@ -155,7 +155,7 @@ export class PersistentStore {
|
|
|
155
155
|
existingPeer
|
|
156
156
|
}
|
|
157
157
|
} catch (err: any) {
|
|
158
|
-
if (err.
|
|
158
|
+
if (err.name !== 'NotFoundError') {
|
|
159
159
|
throw err
|
|
160
160
|
}
|
|
161
161
|
}
|