@libp2p/identify 3.0.35 → 3.0.36-2d6079bc1
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/consts.d.ts +1 -0
- package/dist/src/consts.d.ts.map +1 -1
- package/dist/src/consts.js +1 -0
- package/dist/src/consts.js.map +1 -1
- package/dist/src/identify-push.d.ts +2 -0
- package/dist/src/identify-push.d.ts.map +1 -1
- package/dist/src/identify-push.js +65 -52
- package/dist/src/identify-push.js.map +1 -1
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/package.json +8 -8
- package/src/consts.ts +2 -0
- package/src/identify-push.ts +73 -58
- package/src/index.ts +9 -0
- package/dist/typedoc-urls.json +0 -18
package/dist/src/consts.d.ts
CHANGED
|
@@ -8,4 +8,5 @@ export declare const MULTICODEC_IDENTIFY_PROTOCOL_VERSION = "1.0.0";
|
|
|
8
8
|
export declare const MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION = "1.0.0";
|
|
9
9
|
export declare const MAX_IDENTIFY_MESSAGE_SIZE: number;
|
|
10
10
|
export declare const MAX_PUSH_CONCURRENCY = 32;
|
|
11
|
+
export declare const PUSH_DEBOUNCE_MS = 1000;
|
|
11
12
|
//# sourceMappingURL=consts.d.ts.map
|
package/dist/src/consts.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/consts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,eAAe,CAAA;AAC5C,eAAO,MAAM,mBAAmB,mBAAmB,CAAA;AACnD,eAAO,MAAM,wBAAwB,wBAAwB,CAAA;AAE7D,eAAO,MAAM,yBAAyB,UAAU,CAAA;AAChD,eAAO,MAAM,iCAAiC,OAAO,CAAA;AACrD,eAAO,MAAM,sCAAsC,YAAY,CAAA;AAC/D,eAAO,MAAM,oCAAoC,UAAU,CAAA;AAC3D,eAAO,MAAM,yCAAyC,UAAU,CAAA;AAGhE,eAAO,MAAM,yBAAyB,QAAW,CAAA;AAGjD,eAAO,MAAM,oBAAoB,KAAK,CAAA"}
|
|
1
|
+
{"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/consts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,eAAe,CAAA;AAC5C,eAAO,MAAM,mBAAmB,mBAAmB,CAAA;AACnD,eAAO,MAAM,wBAAwB,wBAAwB,CAAA;AAE7D,eAAO,MAAM,yBAAyB,UAAU,CAAA;AAChD,eAAO,MAAM,iCAAiC,OAAO,CAAA;AACrD,eAAO,MAAM,sCAAsC,YAAY,CAAA;AAC/D,eAAO,MAAM,oCAAoC,UAAU,CAAA;AAC3D,eAAO,MAAM,yCAAyC,UAAU,CAAA;AAGhE,eAAO,MAAM,yBAAyB,QAAW,CAAA;AAGjD,eAAO,MAAM,oBAAoB,KAAK,CAAA;AAEtC,eAAO,MAAM,gBAAgB,OAAQ,CAAA"}
|
package/dist/src/consts.js
CHANGED
|
@@ -10,4 +10,5 @@ export const MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION = '1.0.0';
|
|
|
10
10
|
export const MAX_IDENTIFY_MESSAGE_SIZE = 1024 * 8;
|
|
11
11
|
// https://github.com/libp2p/go-libp2p/blob/0385ec924bad172f74a74db09939e97c079b1420/p2p/protocol/identify/id.go#L47C7-L47C25
|
|
12
12
|
export const MAX_PUSH_CONCURRENCY = 32;
|
|
13
|
+
export const PUSH_DEBOUNCE_MS = 1_000;
|
|
13
14
|
//# sourceMappingURL=consts.js.map
|
package/dist/src/consts.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/consts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAA,CAAC,aAAa;AAC1D,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAA,CAAC,aAAa;AACjE,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAA,CAAC,aAAa;AAE3E,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAO,CAAA;AAChD,MAAM,CAAC,MAAM,iCAAiC,GAAG,IAAI,CAAA;AACrD,MAAM,CAAC,MAAM,sCAAsC,GAAG,SAAS,CAAA;AAC/D,MAAM,CAAC,MAAM,oCAAoC,GAAG,OAAO,CAAA;AAC3D,MAAM,CAAC,MAAM,yCAAyC,GAAG,OAAO,CAAA;AAEhE,oHAAoH;AACpH,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,CAAA;AAEjD,6HAA6H;AAC7H,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAA"}
|
|
1
|
+
{"version":3,"file":"consts.js","sourceRoot":"","sources":["../../src/consts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAA,CAAC,aAAa;AAC1D,MAAM,CAAC,MAAM,mBAAmB,GAAG,gBAAgB,CAAA,CAAC,aAAa;AACjE,MAAM,CAAC,MAAM,wBAAwB,GAAG,qBAAqB,CAAA,CAAC,aAAa;AAE3E,MAAM,CAAC,MAAM,yBAAyB,GAAG,OAAO,CAAA;AAChD,MAAM,CAAC,MAAM,iCAAiC,GAAG,IAAI,CAAA;AACrD,MAAM,CAAC,MAAM,sCAAsC,GAAG,SAAS,CAAA;AAC/D,MAAM,CAAC,MAAM,oCAAoC,GAAG,OAAO,CAAA;AAC3D,MAAM,CAAC,MAAM,yCAAyC,GAAG,OAAO,CAAA;AAEhE,oHAAoH;AACpH,MAAM,CAAC,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC,CAAA;AAEjD,6HAA6H;AAC7H,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAA;AAEtC,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAA"}
|
|
@@ -5,12 +5,14 @@ import type { Startable, IncomingStreamData } from '@libp2p/interface';
|
|
|
5
5
|
export declare class IdentifyPush extends AbstractIdentify implements Startable, IdentifyPushInterface {
|
|
6
6
|
private readonly connectionManager;
|
|
7
7
|
private readonly concurrency;
|
|
8
|
+
private _push;
|
|
8
9
|
constructor(components: IdentifyPushComponents, init?: IdentifyPushInit);
|
|
9
10
|
[serviceCapabilities]: string[];
|
|
10
11
|
/**
|
|
11
12
|
* Calls `push` on all peer connections
|
|
12
13
|
*/
|
|
13
14
|
push(): Promise<void>;
|
|
15
|
+
private sendPushMessage;
|
|
14
16
|
/**
|
|
15
17
|
* Reads the Identify Push message from the given `connection`
|
|
16
18
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identify-push.d.ts","sourceRoot":"","sources":["../../src/identify-push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"identify-push.d.ts","sourceRoot":"","sources":["../../src/identify-push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAgBvD,OAAO,EAAE,gBAAgB,EAAyC,MAAM,YAAY,CAAA;AACpF,OAAO,KAAK,EAAE,YAAY,IAAI,qBAAqB,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AACjH,OAAO,KAAK,EAAU,SAAS,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAA;AAG9E,qBAAa,YAAa,SAAQ,gBAAiB,YAAW,SAAS,EAAE,qBAAqB;IAC5F,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,OAAO,CAAC,KAAK,CAAY;gBAEZ,UAAU,EAAE,sBAAsB,EAAE,IAAI,GAAE,gBAAqB;IAsB5E,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAE9B;IAED;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;YAId,eAAe;IAyE7B;;OAEG;IACG,cAAc,CAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CA4B/D"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { serviceCapabilities } from '@libp2p/interface';
|
|
2
2
|
import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record';
|
|
3
|
+
import { debounce } from '@libp2p/utils/debounce';
|
|
3
4
|
import { protocols } from '@multiformats/multiaddr';
|
|
4
5
|
import drain from 'it-drain';
|
|
5
6
|
import parallel from 'it-parallel';
|
|
@@ -7,12 +8,13 @@ import { pbStream } from 'it-protobuf-stream';
|
|
|
7
8
|
import { setMaxListeners } from 'main-event';
|
|
8
9
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
9
10
|
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
10
|
-
import { MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME, MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION } from './consts.js';
|
|
11
|
+
import { MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME, MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION, PUSH_DEBOUNCE_MS } from './consts.js';
|
|
11
12
|
import { Identify as IdentifyMessage } from './pb/message.js';
|
|
12
13
|
import { AbstractIdentify, consumeIdentifyMessage, defaultValues } from './utils.js';
|
|
13
14
|
export class IdentifyPush extends AbstractIdentify {
|
|
14
15
|
connectionManager;
|
|
15
16
|
concurrency;
|
|
17
|
+
_push;
|
|
16
18
|
constructor(components, init = {}) {
|
|
17
19
|
super(components, {
|
|
18
20
|
...init,
|
|
@@ -21,10 +23,13 @@ export class IdentifyPush extends AbstractIdentify {
|
|
|
21
23
|
});
|
|
22
24
|
this.connectionManager = components.connectionManager;
|
|
23
25
|
this.concurrency = init.concurrency ?? defaultValues.concurrency;
|
|
26
|
+
this._push = debounce(this.sendPushMessage.bind(this), init.debounce ?? PUSH_DEBOUNCE_MS);
|
|
24
27
|
if ((init.runOnSelfUpdate ?? defaultValues.runOnSelfUpdate)) {
|
|
25
28
|
// When self peer record changes, trigger identify-push
|
|
26
29
|
components.events.addEventListener('self:peer:update', (evt) => {
|
|
27
|
-
|
|
30
|
+
this.push().catch(err => {
|
|
31
|
+
this.log.error('error pushing updates to peers - %e', err);
|
|
32
|
+
});
|
|
28
33
|
});
|
|
29
34
|
}
|
|
30
35
|
}
|
|
@@ -35,63 +40,71 @@ export class IdentifyPush extends AbstractIdentify {
|
|
|
35
40
|
* Calls `push` on all peer connections
|
|
36
41
|
*/
|
|
37
42
|
async push() {
|
|
43
|
+
this._push();
|
|
44
|
+
}
|
|
45
|
+
async sendPushMessage() {
|
|
38
46
|
// Do not try to push if we are not running
|
|
39
47
|
if (!this.isStarted()) {
|
|
40
48
|
return;
|
|
41
49
|
}
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
yield async () => {
|
|
60
|
-
let stream;
|
|
61
|
-
const signal = AbortSignal.timeout(self.timeout);
|
|
62
|
-
setMaxListeners(Infinity, signal);
|
|
63
|
-
try {
|
|
64
|
-
stream = await connection.newStream(self.protocol, {
|
|
65
|
-
signal,
|
|
66
|
-
runOnLimitedConnection: self.runOnLimitedConnection
|
|
67
|
-
});
|
|
68
|
-
const pb = pbStream(stream, {
|
|
69
|
-
maxDataLength: self.maxMessageSize
|
|
70
|
-
}).pb(IdentifyMessage);
|
|
71
|
-
await pb.write({
|
|
72
|
-
listenAddrs: listenAddresses.map(ma => ma.bytes),
|
|
73
|
-
signedPeerRecord: signedPeerRecord.marshal(),
|
|
74
|
-
protocols: supportedProtocols,
|
|
75
|
-
agentVersion,
|
|
76
|
-
protocolVersion
|
|
77
|
-
}, {
|
|
78
|
-
signal
|
|
79
|
-
});
|
|
80
|
-
await stream.close({
|
|
81
|
-
signal
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
catch (err) {
|
|
85
|
-
// Just log errors
|
|
86
|
-
self.log.error('could not push identify update to peer', err);
|
|
87
|
-
stream?.abort(err);
|
|
50
|
+
try {
|
|
51
|
+
const listenAddresses = this.addressManager.getAddresses().map(ma => ma.decapsulateCode(protocols('p2p').code));
|
|
52
|
+
const peerRecord = new PeerRecord({
|
|
53
|
+
peerId: this.peerId,
|
|
54
|
+
multiaddrs: listenAddresses
|
|
55
|
+
});
|
|
56
|
+
const signedPeerRecord = await RecordEnvelope.seal(peerRecord, this.privateKey);
|
|
57
|
+
const supportedProtocols = this.registrar.getProtocols();
|
|
58
|
+
const peer = await this.peerStore.get(this.peerId);
|
|
59
|
+
const agentVersion = uint8ArrayToString(peer.metadata.get('AgentVersion') ?? uint8ArrayFromString(this.host.agentVersion));
|
|
60
|
+
const protocolVersion = uint8ArrayToString(peer.metadata.get('ProtocolVersion') ?? uint8ArrayFromString(this.host.protocolVersion));
|
|
61
|
+
const self = this;
|
|
62
|
+
async function* pushToConnections() {
|
|
63
|
+
for (const connection of self.connectionManager.getConnections()) {
|
|
64
|
+
const peer = await self.peerStore.get(connection.remotePeer);
|
|
65
|
+
if (!peer.protocols.includes(self.protocol)) {
|
|
66
|
+
continue;
|
|
88
67
|
}
|
|
89
|
-
|
|
68
|
+
yield async () => {
|
|
69
|
+
let stream;
|
|
70
|
+
const signal = AbortSignal.timeout(self.timeout);
|
|
71
|
+
setMaxListeners(Infinity, signal);
|
|
72
|
+
try {
|
|
73
|
+
stream = await connection.newStream(self.protocol, {
|
|
74
|
+
signal,
|
|
75
|
+
runOnLimitedConnection: self.runOnLimitedConnection
|
|
76
|
+
});
|
|
77
|
+
const pb = pbStream(stream, {
|
|
78
|
+
maxDataLength: self.maxMessageSize
|
|
79
|
+
}).pb(IdentifyMessage);
|
|
80
|
+
await pb.write({
|
|
81
|
+
listenAddrs: listenAddresses.map(ma => ma.bytes),
|
|
82
|
+
signedPeerRecord: signedPeerRecord.marshal(),
|
|
83
|
+
protocols: supportedProtocols,
|
|
84
|
+
agentVersion,
|
|
85
|
+
protocolVersion
|
|
86
|
+
}, {
|
|
87
|
+
signal
|
|
88
|
+
});
|
|
89
|
+
await stream.close({
|
|
90
|
+
signal
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
catch (err) {
|
|
94
|
+
// Just log errors
|
|
95
|
+
self.log.error('could not push identify update to peer', err);
|
|
96
|
+
stream?.abort(err);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
90
100
|
}
|
|
101
|
+
await drain(parallel(pushToConnections(), {
|
|
102
|
+
concurrency: this.concurrency
|
|
103
|
+
}));
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
this.log.error('error pushing updates to peers - %e', err);
|
|
91
107
|
}
|
|
92
|
-
await drain(parallel(pushToConnections(), {
|
|
93
|
-
concurrency: this.concurrency
|
|
94
|
-
}));
|
|
95
108
|
}
|
|
96
109
|
/**
|
|
97
110
|
* Reads the Identify Push message from the given `connection`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identify-push.js","sourceRoot":"","sources":["../../src/identify-push.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,KAAK,MAAM,UAAU,CAAA;AAC5B,OAAO,QAAQ,MAAM,aAAa,CAAA;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAA;AAC7C,OAAO,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC5C,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,EACL,sCAAsC,EACtC,yCAAyC,
|
|
1
|
+
{"version":3,"file":"identify-push.js","sourceRoot":"","sources":["../../src/identify-push.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -112,6 +112,14 @@ export interface IdentifyPushInit extends Omit<IdentifyInit, 'runOnConnectionOpe
|
|
|
112
112
|
* @default 32
|
|
113
113
|
*/
|
|
114
114
|
concurrency?: number;
|
|
115
|
+
/**
|
|
116
|
+
* To prevent rapid flurries of network activity when addresses/protocols
|
|
117
|
+
* change rapidly in succession, debounce the sending of push message by this
|
|
118
|
+
* amount in ms
|
|
119
|
+
*
|
|
120
|
+
* @default 1_000
|
|
121
|
+
*/
|
|
122
|
+
debounce?: number;
|
|
115
123
|
}
|
|
116
124
|
export interface IdentifyComponents {
|
|
117
125
|
peerId: PeerId;
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACzJ,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAC9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAEhC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,YAAY,EAAE,qBAAqB,CAAC;IACjF;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAIH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AACzJ,OAAO,KAAK,EAAE,cAAc,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAA;AAC9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IAErB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;IAEhB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IAEvB;;;;;OAKG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAE1B;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B;;OAEG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAE7B;;;;OAIG;IACH,sBAAsB,CAAC,EAAE,OAAO,CAAA;IAEhC;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,WAAW,gBAAiB,SAAQ,IAAI,CAAC,YAAY,EAAE,qBAAqB,CAAC;IACjF;;;;OAIG;IACH,eAAe,CAAC,EAAE,OAAO,CAAA;IAEzB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IAEpB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,UAAU,CAAA;IACtB,SAAS,EAAE,SAAS,CAAA;IACpB,SAAS,EAAE,SAAS,CAAA;IACpB,cAAc,EAAE,cAAc,CAAA;IAC9B,MAAM,EAAE,gBAAgB,CAAC,YAAY,CAAC,CAAA;IACtC,MAAM,EAAE,eAAe,CAAA;IACvB,QAAQ,EAAE,QAAQ,CAAA;CACnB;AAED,MAAM,WAAW,sBAAuB,SAAQ,kBAAkB;IAChE,iBAAiB,EAAE,iBAAiB,CAAA;CACrC;AAED,MAAM,WAAW,QAAQ;IACvB;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAAA;CAClF;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACtB;AAED,wBAAgB,QAAQ,CAAE,IAAI,GAAE,YAAiB,GAAG,CAAC,UAAU,EAAE,kBAAkB,KAAK,QAAQ,CAE/F;AAED,wBAAgB,YAAY,CAAE,IAAI,GAAE,gBAAqB,GAAG,CAAC,UAAU,EAAE,sBAAsB,KAAK,YAAY,CAE/G"}
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtE,OAAO,EAAE,QAAQ,IAAI,aAAa,EAAE,MAAM,eAAe,CAAA;AAqIzD,MAAM,UAAU,QAAQ,CAAE,OAAqB,EAAE;IAC/C,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AAC5D,CAAC;AAED,MAAM,UAAU,YAAY,CAAE,OAAyB,EAAE;IACvD,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,iBAAiB,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AAChE,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/identify",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.36-2d6079bc1",
|
|
4
4
|
"description": "Implementation of the Identify Protocol",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/protocol-identify#readme",
|
|
@@ -45,12 +45,12 @@
|
|
|
45
45
|
"doc-check": "aegir doc-check"
|
|
46
46
|
},
|
|
47
47
|
"dependencies": {
|
|
48
|
-
"@libp2p/crypto": "
|
|
49
|
-
"@libp2p/interface": "
|
|
50
|
-
"@libp2p/interface-internal": "
|
|
51
|
-
"@libp2p/peer-id": "
|
|
52
|
-
"@libp2p/peer-record": "
|
|
53
|
-
"@libp2p/utils": "
|
|
48
|
+
"@libp2p/crypto": "5.1.6-2d6079bc1",
|
|
49
|
+
"@libp2p/interface": "2.10.4-2d6079bc1",
|
|
50
|
+
"@libp2p/interface-internal": "2.3.17-2d6079bc1",
|
|
51
|
+
"@libp2p/peer-id": "5.1.7-2d6079bc1",
|
|
52
|
+
"@libp2p/peer-record": "8.0.33-2d6079bc1",
|
|
53
|
+
"@libp2p/utils": "6.7.0-2d6079bc1",
|
|
54
54
|
"@multiformats/multiaddr": "^12.4.4",
|
|
55
55
|
"@multiformats/multiaddr-matcher": "^1.7.2",
|
|
56
56
|
"it-drain": "^3.0.9",
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
"uint8arrays": "^5.1.0"
|
|
63
63
|
},
|
|
64
64
|
"devDependencies": {
|
|
65
|
-
"@libp2p/logger": "
|
|
65
|
+
"@libp2p/logger": "5.1.20-2d6079bc1",
|
|
66
66
|
"aegir": "^47.0.14",
|
|
67
67
|
"delay": "^6.0.0",
|
|
68
68
|
"it-length-prefixed": "^10.0.1",
|
package/src/consts.ts
CHANGED
package/src/identify-push.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { serviceCapabilities } from '@libp2p/interface'
|
|
2
2
|
import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record'
|
|
3
|
+
import { debounce } from '@libp2p/utils/debounce'
|
|
3
4
|
import { protocols } from '@multiformats/multiaddr'
|
|
4
5
|
import drain from 'it-drain'
|
|
5
6
|
import parallel from 'it-parallel'
|
|
@@ -9,7 +10,8 @@ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
|
|
|
9
10
|
import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
|
|
10
11
|
import {
|
|
11
12
|
MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME,
|
|
12
|
-
MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION
|
|
13
|
+
MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION,
|
|
14
|
+
PUSH_DEBOUNCE_MS
|
|
13
15
|
} from './consts.js'
|
|
14
16
|
import { Identify as IdentifyMessage } from './pb/message.js'
|
|
15
17
|
import { AbstractIdentify, consumeIdentifyMessage, defaultValues } from './utils.js'
|
|
@@ -20,6 +22,7 @@ import type { ConnectionManager } from '@libp2p/interface-internal'
|
|
|
20
22
|
export class IdentifyPush extends AbstractIdentify implements Startable, IdentifyPushInterface {
|
|
21
23
|
private readonly connectionManager: ConnectionManager
|
|
22
24
|
private readonly concurrency: number
|
|
25
|
+
private _push: () => void
|
|
23
26
|
|
|
24
27
|
constructor (components: IdentifyPushComponents, init: IdentifyPushInit = {}) {
|
|
25
28
|
super(components, {
|
|
@@ -31,10 +34,14 @@ export class IdentifyPush extends AbstractIdentify implements Startable, Identif
|
|
|
31
34
|
this.connectionManager = components.connectionManager
|
|
32
35
|
this.concurrency = init.concurrency ?? defaultValues.concurrency
|
|
33
36
|
|
|
37
|
+
this._push = debounce(this.sendPushMessage.bind(this), init.debounce ?? PUSH_DEBOUNCE_MS)
|
|
38
|
+
|
|
34
39
|
if ((init.runOnSelfUpdate ?? defaultValues.runOnSelfUpdate)) {
|
|
35
40
|
// When self peer record changes, trigger identify-push
|
|
36
41
|
components.events.addEventListener('self:peer:update', (evt) => {
|
|
37
|
-
|
|
42
|
+
this.push().catch(err => {
|
|
43
|
+
this.log.error('error pushing updates to peers - %e', err)
|
|
44
|
+
})
|
|
38
45
|
})
|
|
39
46
|
}
|
|
40
47
|
}
|
|
@@ -47,72 +54,80 @@ export class IdentifyPush extends AbstractIdentify implements Startable, Identif
|
|
|
47
54
|
* Calls `push` on all peer connections
|
|
48
55
|
*/
|
|
49
56
|
async push (): Promise<void> {
|
|
57
|
+
this._push()
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
private async sendPushMessage (): Promise<void> {
|
|
50
61
|
// Do not try to push if we are not running
|
|
51
62
|
if (!this.isStarted()) {
|
|
52
63
|
return
|
|
53
64
|
}
|
|
54
65
|
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
66
|
+
try {
|
|
67
|
+
const listenAddresses = this.addressManager.getAddresses().map(ma => ma.decapsulateCode(protocols('p2p').code))
|
|
68
|
+
const peerRecord = new PeerRecord({
|
|
69
|
+
peerId: this.peerId,
|
|
70
|
+
multiaddrs: listenAddresses
|
|
71
|
+
})
|
|
72
|
+
const signedPeerRecord = await RecordEnvelope.seal(peerRecord, this.privateKey)
|
|
73
|
+
const supportedProtocols = this.registrar.getProtocols()
|
|
74
|
+
const peer = await this.peerStore.get(this.peerId)
|
|
75
|
+
const agentVersion = uint8ArrayToString(peer.metadata.get('AgentVersion') ?? uint8ArrayFromString(this.host.agentVersion))
|
|
76
|
+
const protocolVersion = uint8ArrayToString(peer.metadata.get('ProtocolVersion') ?? uint8ArrayFromString(this.host.protocolVersion))
|
|
77
|
+
const self = this
|
|
78
|
+
|
|
79
|
+
async function * pushToConnections (): AsyncGenerator<() => Promise<void>> {
|
|
80
|
+
for (const connection of self.connectionManager.getConnections()) {
|
|
81
|
+
const peer = await self.peerStore.get(connection.remotePeer)
|
|
82
|
+
|
|
83
|
+
if (!peer.protocols.includes(self.protocol)) {
|
|
84
|
+
continue
|
|
85
|
+
}
|
|
74
86
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
87
|
+
yield async () => {
|
|
88
|
+
let stream: Stream | undefined
|
|
89
|
+
const signal = AbortSignal.timeout(self.timeout)
|
|
90
|
+
|
|
91
|
+
setMaxListeners(Infinity, signal)
|
|
92
|
+
|
|
93
|
+
try {
|
|
94
|
+
stream = await connection.newStream(self.protocol, {
|
|
95
|
+
signal,
|
|
96
|
+
runOnLimitedConnection: self.runOnLimitedConnection
|
|
97
|
+
})
|
|
98
|
+
|
|
99
|
+
const pb = pbStream(stream, {
|
|
100
|
+
maxDataLength: self.maxMessageSize
|
|
101
|
+
}).pb(IdentifyMessage)
|
|
102
|
+
|
|
103
|
+
await pb.write({
|
|
104
|
+
listenAddrs: listenAddresses.map(ma => ma.bytes),
|
|
105
|
+
signedPeerRecord: signedPeerRecord.marshal(),
|
|
106
|
+
protocols: supportedProtocols,
|
|
107
|
+
agentVersion,
|
|
108
|
+
protocolVersion
|
|
109
|
+
}, {
|
|
110
|
+
signal
|
|
111
|
+
})
|
|
112
|
+
|
|
113
|
+
await stream.close({
|
|
114
|
+
signal
|
|
115
|
+
})
|
|
116
|
+
} catch (err: any) {
|
|
117
|
+
// Just log errors
|
|
118
|
+
self.log.error('could not push identify update to peer', err)
|
|
119
|
+
stream?.abort(err)
|
|
120
|
+
}
|
|
108
121
|
}
|
|
109
122
|
}
|
|
110
123
|
}
|
|
111
|
-
}
|
|
112
124
|
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
125
|
+
await drain(parallel(pushToConnections(), {
|
|
126
|
+
concurrency: this.concurrency
|
|
127
|
+
}))
|
|
128
|
+
} catch (err: any) {
|
|
129
|
+
this.log.error('error pushing updates to peers - %e', err)
|
|
130
|
+
}
|
|
116
131
|
}
|
|
117
132
|
|
|
118
133
|
/**
|
package/src/index.ts
CHANGED
|
@@ -126,6 +126,15 @@ export interface IdentifyPushInit extends Omit<IdentifyInit, 'runOnConnectionOpe
|
|
|
126
126
|
* @default 32
|
|
127
127
|
*/
|
|
128
128
|
concurrency?: number
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* To prevent rapid flurries of network activity when addresses/protocols
|
|
132
|
+
* change rapidly in succession, debounce the sending of push message by this
|
|
133
|
+
* amount in ms
|
|
134
|
+
*
|
|
135
|
+
* @default 1_000
|
|
136
|
+
*/
|
|
137
|
+
debounce?: number
|
|
129
138
|
}
|
|
130
139
|
|
|
131
140
|
export interface IdentifyComponents {
|
package/dist/typedoc-urls.json
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"Identify": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_identify.Identify.html",
|
|
3
|
-
".:Identify": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_identify.Identify.html",
|
|
4
|
-
"IdentifyComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_identify.IdentifyComponents.html",
|
|
5
|
-
".:IdentifyComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_identify.IdentifyComponents.html",
|
|
6
|
-
"IdentifyInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_identify.IdentifyInit.html",
|
|
7
|
-
".:IdentifyInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_identify.IdentifyInit.html",
|
|
8
|
-
"IdentifyPush": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_identify.IdentifyPush.html",
|
|
9
|
-
".:IdentifyPush": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_identify.IdentifyPush.html",
|
|
10
|
-
"IdentifyPushComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_identify.IdentifyPushComponents.html",
|
|
11
|
-
".:IdentifyPushComponents": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_identify.IdentifyPushComponents.html",
|
|
12
|
-
"IdentifyPushInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_identify.IdentifyPushInit.html",
|
|
13
|
-
".:IdentifyPushInit": "https://libp2p.github.io/js-libp2p/interfaces/_libp2p_identify.IdentifyPushInit.html",
|
|
14
|
-
"identify": "https://libp2p.github.io/js-libp2p/functions/_libp2p_identify.identify.html",
|
|
15
|
-
".:identify": "https://libp2p.github.io/js-libp2p/functions/_libp2p_identify.identify.html",
|
|
16
|
-
"identifyPush": "https://libp2p.github.io/js-libp2p/functions/_libp2p_identify.identifyPush.html",
|
|
17
|
-
".:identifyPush": "https://libp2p.github.io/js-libp2p/functions/_libp2p_identify.identifyPush.html"
|
|
18
|
-
}
|