@libp2p/identify 1.0.21-9d13a2f6a → 1.0.21
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 +1 -24
- package/dist/index.min.js +3 -3
- package/dist/src/consts.d.ts +0 -2
- package/dist/src/consts.d.ts.map +1 -1
- package/dist/src/consts.js +0 -4
- package/dist/src/consts.js.map +1 -1
- package/dist/src/identify.d.ts +40 -3
- package/dist/src/identify.d.ts.map +1 -1
- package/dist/src/identify.js +334 -14
- package/dist/src/identify.js.map +1 -1
- package/dist/src/index.d.ts +17 -75
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +9 -28
- package/dist/src/index.js.map +1 -1
- package/dist/typedoc-urls.json +12 -0
- package/package.json +9 -10
- package/src/consts.ts +0 -6
- package/src/identify.ts +404 -16
- package/src/index.ts +20 -81
- package/dist/src/identify-push.d.ts +0 -18
- package/dist/src/identify-push.d.ts.map +0 -1
- package/dist/src/identify-push.js +0 -120
- package/dist/src/identify-push.js.map +0 -1
- package/dist/src/utils.d.ts +0 -53
- package/dist/src/utils.d.ts.map +0 -1
- package/dist/src/utils.js +0 -217
- package/dist/src/utils.js.map +0 -1
- package/src/identify-push.ts +0 -146
- package/src/utils.ts +0 -273
package/dist/src/consts.d.ts
CHANGED
|
@@ -6,6 +6,4 @@ export declare const MULTICODEC_IDENTIFY_PROTOCOL_NAME = "id";
|
|
|
6
6
|
export declare const MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME = "id/push";
|
|
7
7
|
export declare const MULTICODEC_IDENTIFY_PROTOCOL_VERSION = "1.0.0";
|
|
8
8
|
export declare const MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION = "1.0.0";
|
|
9
|
-
export declare const MAX_IDENTIFY_MESSAGE_SIZE: number;
|
|
10
|
-
export declare const MAX_PUSH_CONCURRENCY = 32;
|
|
11
9
|
//# 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
|
|
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"}
|
package/dist/src/consts.js
CHANGED
|
@@ -6,8 +6,4 @@ export const MULTICODEC_IDENTIFY_PROTOCOL_NAME = 'id';
|
|
|
6
6
|
export const MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME = 'id/push';
|
|
7
7
|
export const MULTICODEC_IDENTIFY_PROTOCOL_VERSION = '1.0.0';
|
|
8
8
|
export const MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION = '1.0.0';
|
|
9
|
-
// https://github.com/libp2p/go-libp2p/blob/8d2e54e1637041d5cf4fac1e531287560bd1f4ac/p2p/protocol/identify/id.go#L52
|
|
10
|
-
export const MAX_IDENTIFY_MESSAGE_SIZE = 1024 * 8;
|
|
11
|
-
// https://github.com/libp2p/go-libp2p/blob/0385ec924bad172f74a74db09939e97c079b1420/p2p/protocol/identify/id.go#L47C7-L47C25
|
|
12
|
-
export const MAX_PUSH_CONCURRENCY = 32;
|
|
13
9
|
//# 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
|
|
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"}
|
package/dist/src/identify.d.ts
CHANGED
|
@@ -1,16 +1,53 @@
|
|
|
1
1
|
import { Identify as IdentifyMessage } from './pb/message.js';
|
|
2
|
-
import { AbstractIdentify } from './utils.js';
|
|
3
2
|
import type { Identify as IdentifyInterface, IdentifyComponents, IdentifyInit } from './index.js';
|
|
4
3
|
import type { IdentifyResult, AbortOptions, Connection, Startable } from '@libp2p/interface';
|
|
5
4
|
import type { IncomingStreamData } from '@libp2p/interface-internal';
|
|
6
|
-
export declare class Identify
|
|
5
|
+
export declare class Identify implements Startable, IdentifyInterface {
|
|
6
|
+
#private;
|
|
7
|
+
private readonly identifyProtocolStr;
|
|
8
|
+
private readonly identifyPushProtocolStr;
|
|
9
|
+
readonly host: {
|
|
10
|
+
protocolVersion: string;
|
|
11
|
+
agentVersion: string;
|
|
12
|
+
};
|
|
13
|
+
private started;
|
|
14
|
+
private readonly timeout;
|
|
15
|
+
private readonly peerId;
|
|
16
|
+
private readonly peerStore;
|
|
17
|
+
private readonly registrar;
|
|
18
|
+
private readonly connectionManager;
|
|
19
|
+
private readonly addressManager;
|
|
20
|
+
private readonly maxInboundStreams;
|
|
21
|
+
private readonly maxOutboundStreams;
|
|
22
|
+
private readonly maxPushIncomingStreams;
|
|
23
|
+
private readonly maxPushOutgoingStreams;
|
|
24
|
+
private readonly maxIdentifyMessageSize;
|
|
25
|
+
private readonly maxObservedAddresses;
|
|
26
|
+
private readonly events;
|
|
27
|
+
private readonly runOnTransientConnection;
|
|
28
|
+
private readonly log;
|
|
7
29
|
constructor(components: IdentifyComponents, init?: IdentifyInit);
|
|
30
|
+
isStarted(): boolean;
|
|
31
|
+
start(): Promise<void>;
|
|
32
|
+
stop(): Promise<void>;
|
|
33
|
+
/**
|
|
34
|
+
* Send an Identify Push update to the list of connections
|
|
35
|
+
*/
|
|
36
|
+
pushToConnections(connections: Connection[]): Promise<void>;
|
|
37
|
+
/**
|
|
38
|
+
* Calls `push` on all peer connections
|
|
39
|
+
*/
|
|
40
|
+
push(): Promise<void>;
|
|
8
41
|
_identify(connection: Connection, options?: AbortOptions): Promise<IdentifyMessage>;
|
|
9
42
|
identify(connection: Connection, options?: AbortOptions): Promise<IdentifyResult>;
|
|
10
43
|
/**
|
|
11
44
|
* Sends the `Identify` response with the Signed Peer Record
|
|
12
45
|
* to the requesting peer over the given `connection`
|
|
13
46
|
*/
|
|
14
|
-
|
|
47
|
+
_handleIdentify(data: IncomingStreamData): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* Reads the Identify Push message from the given `connection`
|
|
50
|
+
*/
|
|
51
|
+
_handlePush(data: IncomingStreamData): Promise<void>;
|
|
15
52
|
}
|
|
16
53
|
//# sourceMappingURL=identify.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identify.d.ts","sourceRoot":"","sources":["../../src/identify.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"identify.d.ts","sourceRoot":"","sources":["../../src/identify.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,KAAK,EAAE,QAAQ,IAAI,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACjG,OAAO,KAAK,EAAgB,cAAc,EAAoB,YAAY,EAAU,UAAU,EAA+D,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACjM,OAAO,KAAK,EAAqC,kBAAkB,EAAa,MAAM,4BAA4B,CAAA;AAmBlH,qBAAa,QAAS,YAAW,SAAS,EAAE,iBAAiB;;IAC3D,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAQ;IAC5C,OAAO,CAAC,QAAQ,CAAC,uBAAuB,CAAQ;IAChD,SAAgB,IAAI,EAAE;QACpB,eAAe,EAAE,MAAM,CAAA;QACvB,YAAY,EAAE,MAAM,CAAA;KACrB,CAAA;IAED,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAmB;IACrD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgB;IAC/C,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAQ;IAC/C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAQ;IAC/C,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAQ;IAC/C,OAAO,CAAC,QAAQ,CAAC,oBAAoB,CAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;IACvD,OAAO,CAAC,QAAQ,CAAC,wBAAwB,CAAS;IAClD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;gBAEf,UAAU,EAAE,kBAAkB,EAAE,IAAI,GAAE,YAAiB;IAkDpE,SAAS,IAAK,OAAO;IAIf,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAkCvB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAO5B;;OAEG;IACG,iBAAiB,CAAE,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAmDlE;;OAEG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IA6BtB,SAAS,CAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IAmCxF,QAAQ,CAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IAqC5F;;;OAGG;IACG,eAAe,CAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;IAoD/D;;OAEG;IACG,WAAW,CAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAgK5D"}
|
package/dist/src/identify.js
CHANGED
|
@@ -1,20 +1,74 @@
|
|
|
1
1
|
/* eslint-disable complexity */
|
|
2
|
-
import { CodeError, setMaxListeners } from '@libp2p/interface';
|
|
2
|
+
import { CodeError, ERR_NOT_FOUND, setMaxListeners } from '@libp2p/interface';
|
|
3
3
|
import { peerIdFromKeys } from '@libp2p/peer-id';
|
|
4
4
|
import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record';
|
|
5
|
-
import { protocols } from '@multiformats/multiaddr';
|
|
5
|
+
import { multiaddr, protocols } from '@multiformats/multiaddr';
|
|
6
6
|
import { IP_OR_DOMAIN } from '@multiformats/multiaddr-matcher';
|
|
7
7
|
import { pbStream } from 'it-protobuf-stream';
|
|
8
|
-
import {
|
|
8
|
+
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
9
|
+
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
10
|
+
import { isNode, isBrowser, isWebWorker, isElectronMain, isElectronRenderer, isReactNative } from 'wherearewe';
|
|
11
|
+
import { IDENTIFY_PROTOCOL_VERSION, MULTICODEC_IDENTIFY_PROTOCOL_NAME, MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME, MULTICODEC_IDENTIFY_PROTOCOL_VERSION, MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION } from './consts.js';
|
|
9
12
|
import { Identify as IdentifyMessage } from './pb/message.js';
|
|
10
|
-
|
|
11
|
-
|
|
13
|
+
// https://github.com/libp2p/go-libp2p/blob/8d2e54e1637041d5cf4fac1e531287560bd1f4ac/p2p/protocol/identify/id.go#L52
|
|
14
|
+
const MAX_IDENTIFY_MESSAGE_SIZE = 1024 * 8;
|
|
15
|
+
const defaultValues = {
|
|
16
|
+
protocolPrefix: 'ipfs',
|
|
17
|
+
// https://github.com/libp2p/go-libp2p/blob/8d2e54e1637041d5cf4fac1e531287560bd1f4ac/p2p/protocol/identify/id.go#L48
|
|
18
|
+
timeout: 60000,
|
|
19
|
+
maxInboundStreams: 1,
|
|
20
|
+
maxOutboundStreams: 1,
|
|
21
|
+
maxPushIncomingStreams: 1,
|
|
22
|
+
maxPushOutgoingStreams: 1,
|
|
23
|
+
maxObservedAddresses: 10,
|
|
24
|
+
maxIdentifyMessageSize: 8192,
|
|
25
|
+
runOnConnectionOpen: true,
|
|
26
|
+
runOnTransientConnection: true
|
|
27
|
+
};
|
|
28
|
+
export class Identify {
|
|
29
|
+
identifyProtocolStr;
|
|
30
|
+
identifyPushProtocolStr;
|
|
31
|
+
host;
|
|
32
|
+
started;
|
|
33
|
+
timeout;
|
|
34
|
+
peerId;
|
|
35
|
+
peerStore;
|
|
36
|
+
registrar;
|
|
37
|
+
connectionManager;
|
|
38
|
+
addressManager;
|
|
39
|
+
maxInboundStreams;
|
|
40
|
+
maxOutboundStreams;
|
|
41
|
+
maxPushIncomingStreams;
|
|
42
|
+
maxPushOutgoingStreams;
|
|
43
|
+
maxIdentifyMessageSize;
|
|
44
|
+
maxObservedAddresses;
|
|
45
|
+
events;
|
|
46
|
+
runOnTransientConnection;
|
|
47
|
+
log;
|
|
12
48
|
constructor(components, init = {}) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
49
|
+
this.started = false;
|
|
50
|
+
this.peerId = components.peerId;
|
|
51
|
+
this.peerStore = components.peerStore;
|
|
52
|
+
this.registrar = components.registrar;
|
|
53
|
+
this.addressManager = components.addressManager;
|
|
54
|
+
this.connectionManager = components.connectionManager;
|
|
55
|
+
this.events = components.events;
|
|
56
|
+
this.log = components.logger.forComponent('libp2p:identify');
|
|
57
|
+
this.identifyProtocolStr = `/${init.protocolPrefix ?? defaultValues.protocolPrefix}/${MULTICODEC_IDENTIFY_PROTOCOL_NAME}/${MULTICODEC_IDENTIFY_PROTOCOL_VERSION}`;
|
|
58
|
+
this.identifyPushProtocolStr = `/${init.protocolPrefix ?? defaultValues.protocolPrefix}/${MULTICODEC_IDENTIFY_PUSH_PROTOCOL_NAME}/${MULTICODEC_IDENTIFY_PUSH_PROTOCOL_VERSION}`;
|
|
59
|
+
this.timeout = init.timeout ?? defaultValues.timeout;
|
|
60
|
+
this.maxInboundStreams = init.maxInboundStreams ?? defaultValues.maxInboundStreams;
|
|
61
|
+
this.maxOutboundStreams = init.maxOutboundStreams ?? defaultValues.maxOutboundStreams;
|
|
62
|
+
this.maxPushIncomingStreams = init.maxPushIncomingStreams ?? defaultValues.maxPushIncomingStreams;
|
|
63
|
+
this.maxPushOutgoingStreams = init.maxPushOutgoingStreams ?? defaultValues.maxPushOutgoingStreams;
|
|
64
|
+
this.maxIdentifyMessageSize = init.maxIdentifyMessageSize ?? defaultValues.maxIdentifyMessageSize;
|
|
65
|
+
this.maxObservedAddresses = init.maxObservedAddresses ?? defaultValues.maxObservedAddresses;
|
|
66
|
+
this.runOnTransientConnection = init.runOnTransientConnection ?? defaultValues.runOnTransientConnection;
|
|
67
|
+
// Store self host metadata
|
|
68
|
+
this.host = {
|
|
69
|
+
protocolVersion: `${init.protocolPrefix ?? defaultValues.protocolPrefix}/${IDENTIFY_PROTOCOL_VERSION}`,
|
|
70
|
+
agentVersion: init.agentVersion ?? `${components.nodeInfo.name}/${components.nodeInfo.version}`
|
|
71
|
+
};
|
|
18
72
|
if (init.runOnConnectionOpen ?? defaultValues.runOnConnectionOpen) {
|
|
19
73
|
// When a new connection happens, trigger identify
|
|
20
74
|
components.events.addEventListener('connection:open', (evt) => {
|
|
@@ -22,6 +76,129 @@ export class Identify extends AbstractIdentify {
|
|
|
22
76
|
this.identify(connection).catch(err => { this.log.error('error during identify trigged by connection:open', err); });
|
|
23
77
|
});
|
|
24
78
|
}
|
|
79
|
+
// When self peer record changes, trigger identify-push
|
|
80
|
+
components.events.addEventListener('self:peer:update', (evt) => {
|
|
81
|
+
void this.push().catch(err => { this.log.error(err); });
|
|
82
|
+
});
|
|
83
|
+
// Append user agent version to default AGENT_VERSION depending on the environment
|
|
84
|
+
if (this.host.agentVersion === `${components.nodeInfo.name}/${components.nodeInfo.version}`) {
|
|
85
|
+
if (isNode || isElectronMain) {
|
|
86
|
+
this.host.agentVersion += ` UserAgent=${globalThis.process.version}`;
|
|
87
|
+
}
|
|
88
|
+
else if (isBrowser || isWebWorker || isElectronRenderer || isReactNative) {
|
|
89
|
+
this.host.agentVersion += ` UserAgent=${globalThis.navigator.userAgent}`;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
isStarted() {
|
|
94
|
+
return this.started;
|
|
95
|
+
}
|
|
96
|
+
async start() {
|
|
97
|
+
if (this.started) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
await this.peerStore.merge(this.peerId, {
|
|
101
|
+
metadata: {
|
|
102
|
+
AgentVersion: uint8ArrayFromString(this.host.agentVersion),
|
|
103
|
+
ProtocolVersion: uint8ArrayFromString(this.host.protocolVersion)
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
await this.registrar.handle(this.identifyProtocolStr, (data) => {
|
|
107
|
+
void this._handleIdentify(data).catch(err => {
|
|
108
|
+
this.log.error(err);
|
|
109
|
+
});
|
|
110
|
+
}, {
|
|
111
|
+
maxInboundStreams: this.maxInboundStreams,
|
|
112
|
+
maxOutboundStreams: this.maxOutboundStreams,
|
|
113
|
+
runOnTransientConnection: this.runOnTransientConnection
|
|
114
|
+
});
|
|
115
|
+
await this.registrar.handle(this.identifyPushProtocolStr, (data) => {
|
|
116
|
+
void this._handlePush(data).catch(err => {
|
|
117
|
+
this.log.error(err);
|
|
118
|
+
});
|
|
119
|
+
}, {
|
|
120
|
+
maxInboundStreams: this.maxPushIncomingStreams,
|
|
121
|
+
maxOutboundStreams: this.maxPushOutgoingStreams,
|
|
122
|
+
runOnTransientConnection: this.runOnTransientConnection
|
|
123
|
+
});
|
|
124
|
+
this.started = true;
|
|
125
|
+
}
|
|
126
|
+
async stop() {
|
|
127
|
+
await this.registrar.unhandle(this.identifyProtocolStr);
|
|
128
|
+
await this.registrar.unhandle(this.identifyPushProtocolStr);
|
|
129
|
+
this.started = false;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Send an Identify Push update to the list of connections
|
|
133
|
+
*/
|
|
134
|
+
async pushToConnections(connections) {
|
|
135
|
+
const listenAddresses = this.addressManager.getAddresses().map(ma => ma.decapsulateCode(protocols('p2p').code));
|
|
136
|
+
const peerRecord = new PeerRecord({
|
|
137
|
+
peerId: this.peerId,
|
|
138
|
+
multiaddrs: listenAddresses
|
|
139
|
+
});
|
|
140
|
+
const signedPeerRecord = await RecordEnvelope.seal(peerRecord, this.peerId);
|
|
141
|
+
const supportedProtocols = this.registrar.getProtocols();
|
|
142
|
+
const peer = await this.peerStore.get(this.peerId);
|
|
143
|
+
const agentVersion = uint8ArrayToString(peer.metadata.get('AgentVersion') ?? uint8ArrayFromString(this.host.agentVersion));
|
|
144
|
+
const protocolVersion = uint8ArrayToString(peer.metadata.get('ProtocolVersion') ?? uint8ArrayFromString(this.host.protocolVersion));
|
|
145
|
+
const pushes = connections.map(async (connection) => {
|
|
146
|
+
let stream;
|
|
147
|
+
const signal = AbortSignal.timeout(this.timeout);
|
|
148
|
+
setMaxListeners(Infinity, signal);
|
|
149
|
+
try {
|
|
150
|
+
stream = await connection.newStream(this.identifyPushProtocolStr, {
|
|
151
|
+
signal,
|
|
152
|
+
runOnTransientConnection: this.runOnTransientConnection
|
|
153
|
+
});
|
|
154
|
+
const pb = pbStream(stream, {
|
|
155
|
+
maxDataLength: this.maxIdentifyMessageSize ?? MAX_IDENTIFY_MESSAGE_SIZE
|
|
156
|
+
}).pb(IdentifyMessage);
|
|
157
|
+
await pb.write({
|
|
158
|
+
listenAddrs: listenAddresses.map(ma => ma.bytes),
|
|
159
|
+
signedPeerRecord: signedPeerRecord.marshal(),
|
|
160
|
+
protocols: supportedProtocols,
|
|
161
|
+
agentVersion,
|
|
162
|
+
protocolVersion
|
|
163
|
+
}, {
|
|
164
|
+
signal
|
|
165
|
+
});
|
|
166
|
+
await stream.close({
|
|
167
|
+
signal
|
|
168
|
+
});
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
// Just log errors
|
|
172
|
+
this.log.error('could not push identify update to peer', err);
|
|
173
|
+
stream?.abort(err);
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
await Promise.all(pushes);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Calls `push` on all peer connections
|
|
180
|
+
*/
|
|
181
|
+
async push() {
|
|
182
|
+
// Do not try to push if we are not running
|
|
183
|
+
if (!this.isStarted()) {
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
const connections = [];
|
|
187
|
+
await Promise.all(this.connectionManager.getConnections().map(async (conn) => {
|
|
188
|
+
try {
|
|
189
|
+
const peer = await this.peerStore.get(conn.remotePeer);
|
|
190
|
+
if (!peer.protocols.includes(this.identifyPushProtocolStr)) {
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
connections.push(conn);
|
|
194
|
+
}
|
|
195
|
+
catch (err) {
|
|
196
|
+
if (err.code !== ERR_NOT_FOUND) {
|
|
197
|
+
throw err;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}));
|
|
201
|
+
await this.pushToConnections(connections);
|
|
25
202
|
}
|
|
26
203
|
async _identify(connection, options = {}) {
|
|
27
204
|
let stream;
|
|
@@ -34,12 +211,12 @@ export class Identify extends AbstractIdentify {
|
|
|
34
211
|
};
|
|
35
212
|
}
|
|
36
213
|
try {
|
|
37
|
-
stream = await connection.newStream(this.
|
|
214
|
+
stream = await connection.newStream(this.identifyProtocolStr, {
|
|
38
215
|
...options,
|
|
39
216
|
runOnTransientConnection: this.runOnTransientConnection
|
|
40
217
|
});
|
|
41
218
|
const pb = pbStream(stream, {
|
|
42
|
-
maxDataLength: this.
|
|
219
|
+
maxDataLength: this.maxIdentifyMessageSize ?? MAX_IDENTIFY_MESSAGE_SIZE
|
|
43
220
|
}).pb(IdentifyMessage);
|
|
44
221
|
const message = await pb.read(options);
|
|
45
222
|
await stream.close(options);
|
|
@@ -73,13 +250,13 @@ export class Identify extends AbstractIdentify {
|
|
|
73
250
|
this.log('storing our observed address %a', cleanObservedAddr);
|
|
74
251
|
this.addressManager.addObservedAddr(cleanObservedAddr);
|
|
75
252
|
}
|
|
76
|
-
return consumeIdentifyMessage(
|
|
253
|
+
return this.#consumeIdentifyMessage(connection, message);
|
|
77
254
|
}
|
|
78
255
|
/**
|
|
79
256
|
* Sends the `Identify` response with the Signed Peer Record
|
|
80
257
|
* to the requesting peer over the given `connection`
|
|
81
258
|
*/
|
|
82
|
-
async
|
|
259
|
+
async _handleIdentify(data) {
|
|
83
260
|
const { connection, stream } = data;
|
|
84
261
|
const signal = AbortSignal.timeout(this.timeout);
|
|
85
262
|
setMaxListeners(Infinity, signal);
|
|
@@ -121,5 +298,148 @@ export class Identify extends AbstractIdentify {
|
|
|
121
298
|
stream.abort(err);
|
|
122
299
|
}
|
|
123
300
|
}
|
|
301
|
+
/**
|
|
302
|
+
* Reads the Identify Push message from the given `connection`
|
|
303
|
+
*/
|
|
304
|
+
async _handlePush(data) {
|
|
305
|
+
const { connection, stream } = data;
|
|
306
|
+
try {
|
|
307
|
+
if (this.peerId.equals(connection.remotePeer)) {
|
|
308
|
+
throw new Error('received push from ourselves?');
|
|
309
|
+
}
|
|
310
|
+
const options = {
|
|
311
|
+
signal: AbortSignal.timeout(this.timeout)
|
|
312
|
+
};
|
|
313
|
+
const pb = pbStream(stream, {
|
|
314
|
+
maxDataLength: this.maxIdentifyMessageSize ?? MAX_IDENTIFY_MESSAGE_SIZE
|
|
315
|
+
}).pb(IdentifyMessage);
|
|
316
|
+
const message = await pb.read(options);
|
|
317
|
+
await stream.close(options);
|
|
318
|
+
await this.#consumeIdentifyMessage(connection, message);
|
|
319
|
+
}
|
|
320
|
+
catch (err) {
|
|
321
|
+
this.log.error('received invalid message', err);
|
|
322
|
+
stream.abort(err);
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
this.log('handled push from %p', connection.remotePeer);
|
|
326
|
+
}
|
|
327
|
+
async #consumeIdentifyMessage(connection, message) {
|
|
328
|
+
this.log('received identify from %p', connection.remotePeer);
|
|
329
|
+
if (message == null) {
|
|
330
|
+
throw new CodeError('message was null or undefined', 'ERR_INVALID_MESSAGE');
|
|
331
|
+
}
|
|
332
|
+
const peer = {};
|
|
333
|
+
if (message.listenAddrs.length > 0) {
|
|
334
|
+
peer.addresses = message.listenAddrs.map(buf => ({
|
|
335
|
+
isCertified: false,
|
|
336
|
+
multiaddr: multiaddr(buf)
|
|
337
|
+
}));
|
|
338
|
+
}
|
|
339
|
+
if (message.protocols.length > 0) {
|
|
340
|
+
peer.protocols = message.protocols;
|
|
341
|
+
}
|
|
342
|
+
if (message.publicKey != null) {
|
|
343
|
+
peer.publicKey = message.publicKey;
|
|
344
|
+
const peerId = await peerIdFromKeys(message.publicKey);
|
|
345
|
+
if (!peerId.equals(connection.remotePeer)) {
|
|
346
|
+
throw new CodeError('public key did not match remote PeerId', 'ERR_INVALID_PUBLIC_KEY');
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
let output;
|
|
350
|
+
// if the peer record has been sent, prefer the addresses in the record as they are signed by the remote peer
|
|
351
|
+
if (message.signedPeerRecord != null) {
|
|
352
|
+
this.log('received signedPeerRecord from %p', connection.remotePeer);
|
|
353
|
+
let peerRecordEnvelope = message.signedPeerRecord;
|
|
354
|
+
const envelope = await RecordEnvelope.openAndCertify(peerRecordEnvelope, PeerRecord.DOMAIN);
|
|
355
|
+
let peerRecord = PeerRecord.createFromProtobuf(envelope.payload);
|
|
356
|
+
// Verify peerId
|
|
357
|
+
if (!peerRecord.peerId.equals(envelope.peerId)) {
|
|
358
|
+
throw new CodeError('signing key does not match PeerId in the PeerRecord', 'ERR_INVALID_SIGNING_KEY');
|
|
359
|
+
}
|
|
360
|
+
// Make sure remote peer is the one sending the record
|
|
361
|
+
if (!connection.remotePeer.equals(peerRecord.peerId)) {
|
|
362
|
+
throw new CodeError('signing key does not match remote PeerId', 'ERR_INVALID_PEER_RECORD_KEY');
|
|
363
|
+
}
|
|
364
|
+
let existingPeer;
|
|
365
|
+
try {
|
|
366
|
+
existingPeer = await this.peerStore.get(peerRecord.peerId);
|
|
367
|
+
}
|
|
368
|
+
catch (err) {
|
|
369
|
+
if (err.code !== 'ERR_NOT_FOUND') {
|
|
370
|
+
throw err;
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
if (existingPeer != null) {
|
|
374
|
+
// don't lose any existing metadata
|
|
375
|
+
peer.metadata = existingPeer.metadata;
|
|
376
|
+
// if we have previously received a signed record for this peer, compare it to the incoming one
|
|
377
|
+
if (existingPeer.peerRecordEnvelope != null) {
|
|
378
|
+
const storedEnvelope = await RecordEnvelope.createFromProtobuf(existingPeer.peerRecordEnvelope);
|
|
379
|
+
const storedRecord = PeerRecord.createFromProtobuf(storedEnvelope.payload);
|
|
380
|
+
// ensure seq is greater than, or equal to, the last received
|
|
381
|
+
if (storedRecord.seqNumber >= peerRecord.seqNumber) {
|
|
382
|
+
this.log('sequence number was lower or equal to existing sequence number - stored: %d received: %d', storedRecord.seqNumber, peerRecord.seqNumber);
|
|
383
|
+
peerRecord = storedRecord;
|
|
384
|
+
peerRecordEnvelope = existingPeer.peerRecordEnvelope;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
// store the signed record for next time
|
|
389
|
+
peer.peerRecordEnvelope = peerRecordEnvelope;
|
|
390
|
+
// override the stored addresses with the signed multiaddrs
|
|
391
|
+
peer.addresses = peerRecord.multiaddrs.map(multiaddr => ({
|
|
392
|
+
isCertified: true,
|
|
393
|
+
multiaddr
|
|
394
|
+
}));
|
|
395
|
+
output = {
|
|
396
|
+
seq: peerRecord.seqNumber,
|
|
397
|
+
addresses: peerRecord.multiaddrs
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
this.log('%p did not send a signed peer record', connection.remotePeer);
|
|
402
|
+
}
|
|
403
|
+
this.log('patching %p with', connection.remotePeer, peer);
|
|
404
|
+
await this.peerStore.patch(connection.remotePeer, peer);
|
|
405
|
+
if (message.agentVersion != null || message.protocolVersion != null) {
|
|
406
|
+
const metadata = {};
|
|
407
|
+
if (message.agentVersion != null) {
|
|
408
|
+
metadata.AgentVersion = uint8ArrayFromString(message.agentVersion);
|
|
409
|
+
}
|
|
410
|
+
if (message.protocolVersion != null) {
|
|
411
|
+
metadata.ProtocolVersion = uint8ArrayFromString(message.protocolVersion);
|
|
412
|
+
}
|
|
413
|
+
this.log('merging %p metadata', connection.remotePeer, metadata);
|
|
414
|
+
await this.peerStore.merge(connection.remotePeer, {
|
|
415
|
+
metadata
|
|
416
|
+
});
|
|
417
|
+
}
|
|
418
|
+
const result = {
|
|
419
|
+
peerId: connection.remotePeer,
|
|
420
|
+
protocolVersion: message.protocolVersion,
|
|
421
|
+
agentVersion: message.agentVersion,
|
|
422
|
+
publicKey: message.publicKey,
|
|
423
|
+
listenAddrs: message.listenAddrs.map(buf => multiaddr(buf)),
|
|
424
|
+
observedAddr: message.observedAddr == null ? undefined : multiaddr(message.observedAddr),
|
|
425
|
+
protocols: message.protocols,
|
|
426
|
+
signedPeerRecord: output,
|
|
427
|
+
connection
|
|
428
|
+
};
|
|
429
|
+
this.events.safeDispatchEvent('peer:identify', { detail: result });
|
|
430
|
+
return result;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Takes the `addr` and converts it to a Multiaddr if possible
|
|
435
|
+
*/
|
|
436
|
+
function getCleanMultiaddr(addr) {
|
|
437
|
+
if (addr != null && addr.length > 0) {
|
|
438
|
+
try {
|
|
439
|
+
return multiaddr(addr);
|
|
440
|
+
}
|
|
441
|
+
catch {
|
|
442
|
+
}
|
|
443
|
+
}
|
|
124
444
|
}
|
|
125
445
|
//# sourceMappingURL=identify.js.map
|
package/dist/src/identify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identify.js","sourceRoot":"","sources":["../../src/identify.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"identify.js","sourceRoot":"","sources":["../../src/identify.ts"],"names":[],"mappings":"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"}
|