@libp2p/identify 3.0.39 → 4.0.0-049bfa0fa
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/identify-push.d.ts +2 -2
- package/dist/src/identify-push.d.ts.map +1 -1
- package/dist/src/identify-push.js +24 -33
- package/dist/src/identify-push.js.map +1 -1
- package/dist/src/identify.d.ts +2 -2
- package/dist/src/identify.d.ts.map +1 -1
- package/dist/src/identify.js +52 -58
- package/dist/src/identify.js.map +1 -1
- package/dist/src/index.d.ts +0 -6
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/utils.d.ts +3 -10
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +7 -26
- package/dist/src/utils.js.map +1 -1
- package/package.json +15 -18
- package/src/identify-push.ts +26 -34
- package/src/identify.ts +59 -66
- package/src/index.ts +0 -7
- package/src/utils.ts +10 -31
- package/dist/typedoc-urls.json +0 -18
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { serviceCapabilities } from '@libp2p/interface';
|
|
2
2
|
import { AbstractIdentify } from './utils.js';
|
|
3
3
|
import type { IdentifyPush as IdentifyPushInterface, IdentifyPushComponents, IdentifyPushInit } from './index.js';
|
|
4
|
-
import type { Startable,
|
|
4
|
+
import type { Stream, Startable, Connection } from '@libp2p/interface';
|
|
5
5
|
export declare class IdentifyPush extends AbstractIdentify implements Startable, IdentifyPushInterface {
|
|
6
6
|
private readonly connectionManager;
|
|
7
7
|
private readonly concurrency;
|
|
@@ -16,6 +16,6 @@ export declare class IdentifyPush extends AbstractIdentify implements Startable,
|
|
|
16
16
|
/**
|
|
17
17
|
* Reads the Identify Push message from the given `connection`
|
|
18
18
|
*/
|
|
19
|
-
handleProtocol(
|
|
19
|
+
handleProtocol(stream: Stream, connection: Connection): Promise<void>;
|
|
20
20
|
}
|
|
21
21
|
//# sourceMappingURL=identify-push.d.ts.map
|
|
@@ -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;AAevD,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,EAAE,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAGtE,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;IA0E7B;;OAEG;IACG,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAsB7E"}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { serviceCapabilities } from '@libp2p/interface';
|
|
2
2
|
import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record';
|
|
3
|
-
import { debounce } from '@libp2p/utils
|
|
4
|
-
import {
|
|
3
|
+
import { debounce, pbStream } from '@libp2p/utils';
|
|
4
|
+
import { CODE_P2P } from '@multiformats/multiaddr';
|
|
5
5
|
import drain from 'it-drain';
|
|
6
6
|
import parallel from 'it-parallel';
|
|
7
|
-
import { pbStream } from 'it-protobuf-stream';
|
|
8
7
|
import { setMaxListeners } from 'main-event';
|
|
9
8
|
import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
|
|
10
9
|
import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
|
|
@@ -48,21 +47,20 @@ export class IdentifyPush extends AbstractIdentify {
|
|
|
48
47
|
return;
|
|
49
48
|
}
|
|
50
49
|
try {
|
|
51
|
-
const listenAddresses = this.addressManager.getAddresses().map(ma => ma.decapsulateCode(
|
|
50
|
+
const listenAddresses = this.components.addressManager.getAddresses().map(ma => ma.decapsulateCode(CODE_P2P));
|
|
52
51
|
const peerRecord = new PeerRecord({
|
|
53
|
-
peerId: this.peerId,
|
|
52
|
+
peerId: this.components.peerId,
|
|
54
53
|
multiaddrs: listenAddresses
|
|
55
54
|
});
|
|
56
|
-
const signedPeerRecord = await RecordEnvelope.seal(peerRecord, this.privateKey);
|
|
57
|
-
const supportedProtocols = this.registrar.getProtocols();
|
|
58
|
-
const peer = await this.peerStore.get(this.peerId);
|
|
55
|
+
const signedPeerRecord = await RecordEnvelope.seal(peerRecord, this.components.privateKey);
|
|
56
|
+
const supportedProtocols = this.components.registrar.getProtocols();
|
|
57
|
+
const peer = await this.components.peerStore.get(this.components.peerId);
|
|
59
58
|
const agentVersion = uint8ArrayToString(peer.metadata.get('AgentVersion') ?? uint8ArrayFromString(this.host.agentVersion));
|
|
60
59
|
const protocolVersion = uint8ArrayToString(peer.metadata.get('ProtocolVersion') ?? uint8ArrayFromString(this.host.protocolVersion));
|
|
61
60
|
const self = this;
|
|
62
61
|
async function* pushToConnections() {
|
|
63
62
|
for (const connection of self.connectionManager.getConnections()) {
|
|
64
|
-
const peer = await self.peerStore.get(connection.remotePeer);
|
|
65
|
-
const log = connection.log.newScope('identify-push');
|
|
63
|
+
const peer = await self.components.peerStore.get(connection.remotePeer);
|
|
66
64
|
if (!peer.protocols.includes(self.protocol)) {
|
|
67
65
|
continue;
|
|
68
66
|
}
|
|
@@ -92,8 +90,9 @@ export class IdentifyPush extends AbstractIdentify {
|
|
|
92
90
|
});
|
|
93
91
|
}
|
|
94
92
|
catch (err) {
|
|
95
|
-
// Just log errors
|
|
96
|
-
log.
|
|
93
|
+
// Just log errors if the stream was opened
|
|
94
|
+
const log = stream?.log.newScope('identify-push');
|
|
95
|
+
log?.error('could not push identify update to peer', err);
|
|
97
96
|
stream?.abort(err);
|
|
98
97
|
}
|
|
99
98
|
};
|
|
@@ -110,28 +109,20 @@ export class IdentifyPush extends AbstractIdentify {
|
|
|
110
109
|
/**
|
|
111
110
|
* Reads the Identify Push message from the given `connection`
|
|
112
111
|
*/
|
|
113
|
-
async handleProtocol(
|
|
114
|
-
const
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (this.peerId.equals(connection.remotePeer)) {
|
|
118
|
-
throw new Error('received push from ourselves?');
|
|
119
|
-
}
|
|
120
|
-
const options = {
|
|
121
|
-
signal: AbortSignal.timeout(this.timeout)
|
|
122
|
-
};
|
|
123
|
-
const pb = pbStream(stream, {
|
|
124
|
-
maxDataLength: this.maxMessageSize
|
|
125
|
-
}).pb(IdentifyMessage);
|
|
126
|
-
const message = await pb.read(options);
|
|
127
|
-
await stream.close(options);
|
|
128
|
-
await consumeIdentifyMessage(this.peerStore, this.events, log, connection, message);
|
|
129
|
-
}
|
|
130
|
-
catch (err) {
|
|
131
|
-
log.error('received invalid message', err);
|
|
132
|
-
stream.abort(err);
|
|
133
|
-
return;
|
|
112
|
+
async handleProtocol(stream, connection) {
|
|
113
|
+
const log = stream.log.newScope('identify-push');
|
|
114
|
+
if (this.components.peerId.equals(connection.remotePeer)) {
|
|
115
|
+
throw new Error('received push from ourselves?');
|
|
134
116
|
}
|
|
117
|
+
const options = {
|
|
118
|
+
signal: AbortSignal.timeout(this.timeout)
|
|
119
|
+
};
|
|
120
|
+
const pb = pbStream(stream, {
|
|
121
|
+
maxDataLength: this.maxMessageSize
|
|
122
|
+
}).pb(IdentifyMessage);
|
|
123
|
+
const message = await pb.read(options);
|
|
124
|
+
await stream.close(options);
|
|
125
|
+
await consumeIdentifyMessage(this.components.peerStore, this.components.events, log, connection, message);
|
|
135
126
|
log.trace('handled push from %p', connection.remotePeer);
|
|
136
127
|
}
|
|
137
128
|
}
|
|
@@ -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,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"identify-push.js","sourceRoot":"","sources":["../../src/identify-push.ts"],"names":[],"mappings":"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"}
|
package/dist/src/identify.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { serviceCapabilities } from '@libp2p/interface';
|
|
|
2
2
|
import { Identify as IdentifyMessage } from './pb/message.js';
|
|
3
3
|
import { AbstractIdentify } from './utils.js';
|
|
4
4
|
import type { Identify as IdentifyInterface, IdentifyComponents, IdentifyInit } from './index.js';
|
|
5
|
-
import type { IdentifyResult, AbortOptions, Connection,
|
|
5
|
+
import type { IdentifyResult, AbortOptions, Connection, Stream, Startable } from '@libp2p/interface';
|
|
6
6
|
export declare class Identify extends AbstractIdentify implements Startable, IdentifyInterface {
|
|
7
7
|
constructor(components: IdentifyComponents, init?: IdentifyInit);
|
|
8
8
|
[serviceCapabilities]: string[];
|
|
@@ -13,6 +13,6 @@ export declare class Identify extends AbstractIdentify implements Startable, Ide
|
|
|
13
13
|
* Sends the `Identify` response with the Signed Peer Record
|
|
14
14
|
* to the requesting peer over the given `connection`
|
|
15
15
|
*/
|
|
16
|
-
handleProtocol(
|
|
16
|
+
handleProtocol(stream: Stream, connection: Connection): Promise<void>;
|
|
17
17
|
}
|
|
18
18
|
//# sourceMappingURL=identify.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identify.d.ts","sourceRoot":"","sources":["../../src/identify.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"identify.d.ts","sourceRoot":"","sources":["../../src/identify.ts"],"names":[],"mappings":"AACA,OAAO,EAAuB,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AAW5E,OAAO,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC7D,OAAO,EAAE,gBAAgB,EAA4D,MAAM,YAAY,CAAA;AACvG,OAAO,KAAK,EAAE,QAAQ,IAAI,iBAAiB,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACjG,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAU,MAAM,mBAAmB,CAAA;AAE5G,qBAAa,QAAS,SAAQ,gBAAiB,YAAW,SAAS,EAAE,iBAAiB;gBACvE,UAAU,EAAE,kBAAkB,EAAE,IAAI,GAAE,YAAiB;IAiBpE,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAE9B;IAEK,SAAS,CAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IAuCxF,QAAQ,CAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IAgC5F,OAAO,CAAC,uBAAuB;IAgC/B;;;OAGG;IACG,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAkD7E"}
|
package/dist/src/identify.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import { publicKeyFromProtobuf, publicKeyToProtobuf } from '@libp2p/crypto/keys';
|
|
2
|
-
import { InvalidMessageError,
|
|
2
|
+
import { InvalidMessageError, serviceCapabilities } from '@libp2p/interface';
|
|
3
3
|
import { peerIdFromCID } from '@libp2p/peer-id';
|
|
4
4
|
import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record';
|
|
5
|
-
import { isGlobalUnicast } from '@libp2p/utils
|
|
6
|
-
import {
|
|
7
|
-
import { CODE_IP6, CODE_IP6ZONE, protocols } from '@multiformats/multiaddr';
|
|
5
|
+
import { isGlobalUnicast, isPrivate, pbStream } from '@libp2p/utils';
|
|
6
|
+
import { CODE_IP6, CODE_IP6ZONE, CODE_P2P } from '@multiformats/multiaddr';
|
|
8
7
|
import { IP_OR_DOMAIN, TCP } from '@multiformats/multiaddr-matcher';
|
|
9
|
-
import { pbStream } from 'it-protobuf-stream';
|
|
10
8
|
import { setMaxListeners } from 'main-event';
|
|
11
9
|
import { MULTICODEC_IDENTIFY_PROTOCOL_NAME, MULTICODEC_IDENTIFY_PROTOCOL_VERSION } from './consts.js';
|
|
12
10
|
import { Identify as IdentifyMessage } from './pb/message.js';
|
|
@@ -23,13 +21,7 @@ export class Identify extends AbstractIdentify {
|
|
|
23
21
|
components.events.addEventListener('connection:open', (evt) => {
|
|
24
22
|
const connection = evt.detail;
|
|
25
23
|
this.identify(connection)
|
|
26
|
-
.catch(
|
|
27
|
-
if (err.name === UnsupportedProtocolError.name) {
|
|
28
|
-
// the remote did not support identify, ignore the error
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
this.log.error('error during identify trigged by connection:open', err);
|
|
32
|
-
});
|
|
24
|
+
.catch(() => { });
|
|
33
25
|
});
|
|
34
26
|
}
|
|
35
27
|
}
|
|
@@ -38,6 +30,7 @@ export class Identify extends AbstractIdentify {
|
|
|
38
30
|
];
|
|
39
31
|
async _identify(connection, options = {}) {
|
|
40
32
|
let stream;
|
|
33
|
+
let log;
|
|
41
34
|
if (options.signal == null) {
|
|
42
35
|
const signal = AbortSignal.timeout(this.timeout);
|
|
43
36
|
setMaxListeners(Infinity, signal);
|
|
@@ -51,14 +44,18 @@ export class Identify extends AbstractIdentify {
|
|
|
51
44
|
...options,
|
|
52
45
|
runOnLimitedConnection: this.runOnLimitedConnection
|
|
53
46
|
});
|
|
47
|
+
log = stream.log.newScope('identify');
|
|
54
48
|
const pb = pbStream(stream, {
|
|
55
49
|
maxDataLength: this.maxMessageSize
|
|
56
50
|
}).pb(IdentifyMessage);
|
|
51
|
+
log('read response');
|
|
57
52
|
const message = await pb.read(options);
|
|
58
|
-
|
|
53
|
+
log('close write');
|
|
54
|
+
await pb.unwrap().unwrap().close(options);
|
|
59
55
|
return message;
|
|
60
56
|
}
|
|
61
57
|
catch (err) {
|
|
58
|
+
log?.error('identify failed - %e', err);
|
|
62
59
|
stream?.abort(err);
|
|
63
60
|
throw err;
|
|
64
61
|
}
|
|
@@ -71,32 +68,30 @@ export class Identify extends AbstractIdentify {
|
|
|
71
68
|
}
|
|
72
69
|
const key = publicKeyFromProtobuf(publicKey);
|
|
73
70
|
const id = peerIdFromCID(key.toCID());
|
|
74
|
-
const log = connection.log.newScope('identify');
|
|
75
71
|
if (!connection.remotePeer.equals(id)) {
|
|
76
72
|
throw new InvalidMessageError('Identified peer does not match the expected peer');
|
|
77
73
|
}
|
|
78
|
-
if (this.peerId.equals(id)) {
|
|
74
|
+
if (this.components.peerId.equals(id)) {
|
|
79
75
|
throw new InvalidMessageError('Identified peer is our own peer id?');
|
|
80
76
|
}
|
|
81
77
|
// if the observed address is publicly routable, add it to the address
|
|
82
78
|
// manager for verification via AutoNAT
|
|
83
|
-
this.maybeAddObservedAddress(observedAddr
|
|
84
|
-
log('completed for peer %p and protocols %o', id, protocols);
|
|
85
|
-
return consumeIdentifyMessage(this.peerStore, this.events, log, connection, message);
|
|
79
|
+
this.maybeAddObservedAddress(observedAddr);
|
|
80
|
+
this.log('completed for peer %p and protocols %o', id, protocols);
|
|
81
|
+
return consumeIdentifyMessage(this.components.peerStore, this.components.events, this.log, connection, message);
|
|
86
82
|
}
|
|
87
|
-
maybeAddObservedAddress(observedAddr
|
|
83
|
+
maybeAddObservedAddress(observedAddr) {
|
|
88
84
|
const cleanObservedAddr = getCleanMultiaddr(observedAddr);
|
|
89
85
|
if (cleanObservedAddr == null) {
|
|
90
86
|
return;
|
|
91
87
|
}
|
|
92
|
-
log.trace('our observed address was %a', cleanObservedAddr);
|
|
88
|
+
this.log.trace('our observed address was %a', cleanObservedAddr);
|
|
93
89
|
if (isPrivate(cleanObservedAddr)) {
|
|
94
|
-
this.log.trace('our observed address was private');
|
|
95
90
|
return;
|
|
96
91
|
}
|
|
97
92
|
const tuples = cleanObservedAddr.getComponents();
|
|
98
93
|
if (((tuples[0].code === CODE_IP6) || (tuples[0].code === CODE_IP6ZONE && tuples[1].code === CODE_IP6)) && !isGlobalUnicast(cleanObservedAddr)) {
|
|
99
|
-
log.trace('our observed address was IPv6 but not a global unicast address');
|
|
94
|
+
this.log.trace('our observed address was IPv6 but not a global unicast address');
|
|
100
95
|
return;
|
|
101
96
|
}
|
|
102
97
|
if (TCP.exactMatch(cleanObservedAddr)) {
|
|
@@ -106,54 +101,53 @@ export class Identify extends AbstractIdentify {
|
|
|
106
101
|
// is resolved
|
|
107
102
|
return;
|
|
108
103
|
}
|
|
109
|
-
log.trace('storing the observed address');
|
|
110
|
-
this.addressManager.addObservedAddr(cleanObservedAddr);
|
|
104
|
+
this.log.trace('storing the observed address');
|
|
105
|
+
this.components.addressManager.addObservedAddr(cleanObservedAddr);
|
|
111
106
|
}
|
|
112
107
|
/**
|
|
113
108
|
* Sends the `Identify` response with the Signed Peer Record
|
|
114
109
|
* to the requesting peer over the given `connection`
|
|
115
110
|
*/
|
|
116
|
-
async handleProtocol(
|
|
117
|
-
const
|
|
118
|
-
const log = connection.log.newScope('identify');
|
|
111
|
+
async handleProtocol(stream, connection) {
|
|
112
|
+
const log = stream.log.newScope('identify');
|
|
119
113
|
const signal = AbortSignal.timeout(this.timeout);
|
|
120
114
|
setMaxListeners(Infinity, signal);
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
const envelope = await RecordEnvelope.seal(peerRecord, this.privateKey);
|
|
131
|
-
signedPeerRecord = envelope.marshal().subarray();
|
|
132
|
-
}
|
|
133
|
-
let observedAddr = connection.remoteAddr.bytes;
|
|
134
|
-
if (!IP_OR_DOMAIN.matches(connection.remoteAddr)) {
|
|
135
|
-
observedAddr = undefined;
|
|
136
|
-
}
|
|
137
|
-
const pb = pbStream(stream).pb(IdentifyMessage);
|
|
138
|
-
await pb.write({
|
|
139
|
-
protocolVersion: this.host.protocolVersion,
|
|
140
|
-
agentVersion: this.host.agentVersion,
|
|
141
|
-
publicKey: publicKeyToProtobuf(this.privateKey.publicKey),
|
|
142
|
-
listenAddrs: multiaddrs.map(addr => addr.bytes),
|
|
143
|
-
signedPeerRecord,
|
|
144
|
-
observedAddr,
|
|
145
|
-
protocols: peerData.protocols
|
|
146
|
-
}, {
|
|
147
|
-
signal
|
|
115
|
+
const peerData = await this.components.peerStore.get(this.components.peerId, {
|
|
116
|
+
signal
|
|
117
|
+
});
|
|
118
|
+
const multiaddrs = this.components.addressManager.getAddresses().map(ma => ma.decapsulateCode(CODE_P2P));
|
|
119
|
+
let signedPeerRecord = peerData.peerRecordEnvelope;
|
|
120
|
+
if (multiaddrs.length > 0 && signedPeerRecord == null) {
|
|
121
|
+
const peerRecord = new PeerRecord({
|
|
122
|
+
peerId: this.components.peerId,
|
|
123
|
+
multiaddrs
|
|
148
124
|
});
|
|
149
|
-
await
|
|
125
|
+
const envelope = await RecordEnvelope.seal(peerRecord, this.components.privateKey, {
|
|
150
126
|
signal
|
|
151
127
|
});
|
|
128
|
+
signedPeerRecord = envelope.marshal().subarray();
|
|
152
129
|
}
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
130
|
+
let observedAddr = connection.remoteAddr.bytes;
|
|
131
|
+
if (!IP_OR_DOMAIN.matches(connection.remoteAddr)) {
|
|
132
|
+
observedAddr = undefined;
|
|
156
133
|
}
|
|
134
|
+
const pb = pbStream(stream).pb(IdentifyMessage);
|
|
135
|
+
log('send response');
|
|
136
|
+
await pb.write({
|
|
137
|
+
protocolVersion: this.host.protocolVersion,
|
|
138
|
+
agentVersion: this.host.agentVersion,
|
|
139
|
+
publicKey: publicKeyToProtobuf(this.components.privateKey.publicKey),
|
|
140
|
+
listenAddrs: multiaddrs.map(addr => addr.bytes),
|
|
141
|
+
signedPeerRecord,
|
|
142
|
+
observedAddr,
|
|
143
|
+
protocols: peerData.protocols
|
|
144
|
+
}, {
|
|
145
|
+
signal
|
|
146
|
+
});
|
|
147
|
+
log('close write');
|
|
148
|
+
await pb.unwrap().unwrap().close({
|
|
149
|
+
signal
|
|
150
|
+
});
|
|
157
151
|
}
|
|
158
152
|
}
|
|
159
153
|
//# 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":"AAAA,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAChF,OAAO,EAAE,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"identify.js","sourceRoot":"","sources":["../../src/identify.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -50,12 +50,6 @@ export interface IdentifyInit {
|
|
|
50
50
|
* @default 'ipfs'
|
|
51
51
|
*/
|
|
52
52
|
protocolPrefix?: string;
|
|
53
|
-
/**
|
|
54
|
-
* What details we should send as part of an identify message
|
|
55
|
-
*
|
|
56
|
-
* @deprecated Use `nodeInfo.userAgent` in the main libp2p config instead
|
|
57
|
-
*/
|
|
58
|
-
agentVersion?: string;
|
|
59
53
|
/**
|
|
60
54
|
* How long we should wait for a remote peer to send their identify response
|
|
61
55
|
*
|
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,
|
|
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,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;AA8HzD,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/dist/src/utils.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import type { IdentifyComponents, IdentifyInit } from './index.js';
|
|
2
2
|
import type { Identify as IdentifyMessage } from './pb/message.js';
|
|
3
|
-
import type { Libp2pEvents, IdentifyResult, Logger, Connection, PeerStore,
|
|
4
|
-
import type { AddressManager, Registrar } from '@libp2p/interface-internal';
|
|
3
|
+
import type { Libp2pEvents, IdentifyResult, Logger, Connection, PeerStore, Startable, Stream } from '@libp2p/interface';
|
|
5
4
|
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
6
5
|
import type { TypedEventTarget } from 'main-event';
|
|
7
6
|
export declare const defaultValues: {
|
|
@@ -20,7 +19,6 @@ export declare const defaultValues: {
|
|
|
20
19
|
* Takes the `addr` and converts it to a Multiaddr if possible
|
|
21
20
|
*/
|
|
22
21
|
export declare function getCleanMultiaddr(addr: Uint8Array | string | null | undefined): Multiaddr | undefined;
|
|
23
|
-
export declare function getAgentVersion(nodeInfo: NodeInfo, agentVersion?: string): string;
|
|
24
22
|
export declare function consumeIdentifyMessage(peerStore: PeerStore, events: TypedEventTarget<Libp2pEvents>, log: Logger, connection: Connection, message: IdentifyMessage): Promise<IdentifyResult>;
|
|
25
23
|
export interface AbstractIdentifyInit extends IdentifyInit {
|
|
26
24
|
protocol: string;
|
|
@@ -31,25 +29,20 @@ export declare abstract class AbstractIdentify implements Startable {
|
|
|
31
29
|
protocolVersion: string;
|
|
32
30
|
agentVersion: string;
|
|
33
31
|
};
|
|
32
|
+
protected components: IdentifyComponents;
|
|
34
33
|
protected protocol: string;
|
|
35
34
|
protected started: boolean;
|
|
36
35
|
protected readonly timeout: number;
|
|
37
|
-
protected readonly peerId: PeerId;
|
|
38
|
-
protected readonly privateKey: PrivateKey;
|
|
39
|
-
protected readonly peerStore: PeerStore;
|
|
40
|
-
protected readonly registrar: Registrar;
|
|
41
|
-
protected readonly addressManager: AddressManager;
|
|
42
36
|
private readonly maxInboundStreams;
|
|
43
37
|
private readonly maxOutboundStreams;
|
|
44
38
|
protected readonly maxMessageSize: number;
|
|
45
39
|
protected readonly maxObservedAddresses: number;
|
|
46
|
-
protected readonly events: TypedEventTarget<Libp2pEvents>;
|
|
47
40
|
protected readonly runOnLimitedConnection: boolean;
|
|
48
41
|
protected readonly log: Logger;
|
|
49
42
|
constructor(components: IdentifyComponents, init: AbstractIdentifyInit);
|
|
50
43
|
isStarted(): boolean;
|
|
51
44
|
start(): Promise<void>;
|
|
52
45
|
stop(): Promise<void>;
|
|
53
|
-
protected abstract handleProtocol(
|
|
46
|
+
protected abstract handleProtocol(stream: Stream, connection: Connection): Promise<void>;
|
|
54
47
|
}
|
|
55
48
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/src/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAClE,OAAO,KAAK,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAoB,MAAM,EAAE,UAAU,EAAkB,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAClE,OAAO,KAAK,EAAE,QAAQ,IAAI,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAClE,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAoB,MAAM,EAAE,UAAU,EAAkB,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AACzJ,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAElD,eAAO,MAAM,aAAa;;;;;;;;;;;CAWzB,CAAA;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAE,IAAI,EAAE,UAAU,GAAG,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAQtG;AAED,wBAAsB,sBAAsB,CAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,gBAAgB,CAAC,YAAY,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAoIlM;AAED,MAAM,WAAW,oBAAqB,SAAQ,YAAY;IACxD,QAAQ,EAAE,MAAM,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ;AAED,8BAAsB,gBAAiB,YAAW,SAAS;IACzD,SAAgB,IAAI,EAAE;QACpB,eAAe,EAAE,MAAM,CAAA;QACvB,YAAY,EAAE,MAAM,CAAA;KACrB,CAAA;IAED,SAAS,CAAC,UAAU,EAAE,kBAAkB,CAAA;IACxC,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAA;IAC1B,SAAS,CAAC,OAAO,EAAE,OAAO,CAAA;IAC1B,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAClC,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAQ;IAC1C,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAQ;IAC3C,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IACzC,SAAS,CAAC,QAAQ,CAAC,oBAAoB,EAAE,MAAM,CAAA;IAC/C,SAAS,CAAC,QAAQ,CAAC,sBAAsB,EAAE,OAAO,CAAA;IAClD,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;gBAEjB,UAAU,EAAE,kBAAkB,EAAE,IAAI,EAAE,oBAAoB;IAsBvE,SAAS,IAAK,OAAO;IAIf,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAqBvB,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;IAM5B,SAAS,CAAC,QAAQ,CAAC,cAAc,CAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAC1F"}
|
package/dist/src/utils.js
CHANGED
|
@@ -29,12 +29,6 @@ export function getCleanMultiaddr(addr) {
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
export function getAgentVersion(nodeInfo, agentVersion) {
|
|
33
|
-
if (agentVersion != null) {
|
|
34
|
-
return agentVersion;
|
|
35
|
-
}
|
|
36
|
-
return nodeInfo.userAgent;
|
|
37
|
-
}
|
|
38
32
|
export async function consumeIdentifyMessage(peerStore, events, log, connection, message) {
|
|
39
33
|
log('received identify from %p', connection.remotePeer);
|
|
40
34
|
if (message == null) {
|
|
@@ -144,30 +138,20 @@ export async function consumeIdentifyMessage(peerStore, events, log, connection,
|
|
|
144
138
|
}
|
|
145
139
|
export class AbstractIdentify {
|
|
146
140
|
host;
|
|
141
|
+
components;
|
|
147
142
|
protocol;
|
|
148
143
|
started;
|
|
149
144
|
timeout;
|
|
150
|
-
peerId;
|
|
151
|
-
privateKey;
|
|
152
|
-
peerStore;
|
|
153
|
-
registrar;
|
|
154
|
-
addressManager;
|
|
155
145
|
maxInboundStreams;
|
|
156
146
|
maxOutboundStreams;
|
|
157
147
|
maxMessageSize;
|
|
158
148
|
maxObservedAddresses;
|
|
159
|
-
events;
|
|
160
149
|
runOnLimitedConnection;
|
|
161
150
|
log;
|
|
162
151
|
constructor(components, init) {
|
|
163
152
|
this.protocol = init.protocol;
|
|
164
153
|
this.started = false;
|
|
165
|
-
this.
|
|
166
|
-
this.privateKey = components.privateKey;
|
|
167
|
-
this.peerStore = components.peerStore;
|
|
168
|
-
this.registrar = components.registrar;
|
|
169
|
-
this.addressManager = components.addressManager;
|
|
170
|
-
this.events = components.events;
|
|
154
|
+
this.components = components;
|
|
171
155
|
this.log = init.log;
|
|
172
156
|
this.timeout = init.timeout ?? defaultValues.timeout;
|
|
173
157
|
this.maxInboundStreams = init.maxInboundStreams ?? defaultValues.maxInboundStreams;
|
|
@@ -178,8 +162,9 @@ export class AbstractIdentify {
|
|
|
178
162
|
// Store self host metadata
|
|
179
163
|
this.host = {
|
|
180
164
|
protocolVersion: `${init.protocolPrefix ?? defaultValues.protocolPrefix}/${IDENTIFY_PROTOCOL_VERSION}`,
|
|
181
|
-
agentVersion:
|
|
165
|
+
agentVersion: components.nodeInfo.userAgent
|
|
182
166
|
};
|
|
167
|
+
this.handleProtocol = this.handleProtocol.bind(this);
|
|
183
168
|
}
|
|
184
169
|
isStarted() {
|
|
185
170
|
return this.started;
|
|
@@ -188,17 +173,13 @@ export class AbstractIdentify {
|
|
|
188
173
|
if (this.started) {
|
|
189
174
|
return;
|
|
190
175
|
}
|
|
191
|
-
await this.peerStore.merge(this.peerId, {
|
|
176
|
+
await this.components.peerStore.merge(this.components.peerId, {
|
|
192
177
|
metadata: {
|
|
193
178
|
AgentVersion: uint8ArrayFromString(this.host.agentVersion),
|
|
194
179
|
ProtocolVersion: uint8ArrayFromString(this.host.protocolVersion)
|
|
195
180
|
}
|
|
196
181
|
});
|
|
197
|
-
await this.registrar.handle(this.protocol,
|
|
198
|
-
void this.handleProtocol(data).catch(err => {
|
|
199
|
-
this.log.error(err);
|
|
200
|
-
});
|
|
201
|
-
}, {
|
|
182
|
+
await this.components.registrar.handle(this.protocol, this.handleProtocol, {
|
|
202
183
|
maxInboundStreams: this.maxInboundStreams,
|
|
203
184
|
maxOutboundStreams: this.maxOutboundStreams,
|
|
204
185
|
runOnLimitedConnection: this.runOnLimitedConnection
|
|
@@ -206,7 +187,7 @@ export class AbstractIdentify {
|
|
|
206
187
|
this.started = true;
|
|
207
188
|
}
|
|
208
189
|
async stop() {
|
|
209
|
-
await this.registrar.unhandle(this.protocol);
|
|
190
|
+
await this.components.registrar.unhandle(this.protocol);
|
|
210
191
|
this.started = false;
|
|
211
192
|
}
|
|
212
193
|
}
|
package/dist/src/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,qBAAqB,CAAA;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAA;AACvD,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AACpE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
|