@libp2p/identify 3.0.12 → 3.0.13
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 -1
- package/dist/index.min.js +6 -3
- package/dist/src/identify.d.ts +1 -0
- package/dist/src/identify.d.ts.map +1 -1
- package/dist/src/identify.js +32 -14
- package/dist/src/identify.js.map +1 -1
- package/package.json +16 -16
- package/src/identify.ts +39 -13
- package/LICENSE +0 -4
package/dist/src/identify.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export declare class Identify extends AbstractIdentify implements Startable, Ide
|
|
|
9
9
|
[serviceCapabilities]: string[];
|
|
10
10
|
_identify(connection: Connection, options?: AbortOptions): Promise<IdentifyMessage>;
|
|
11
11
|
identify(connection: Connection, options?: AbortOptions): Promise<IdentifyResult>;
|
|
12
|
+
private maybeAddObservedAddress;
|
|
12
13
|
/**
|
|
13
14
|
* Sends the `Identify` response with the Signed Peer Record
|
|
14
15
|
* to the requesting peer over the given `connection`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identify.d.ts","sourceRoot":"","sources":["../../src/identify.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiD,mBAAmB,EAAmB,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"identify.d.ts","sourceRoot":"","sources":["../../src/identify.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiD,mBAAmB,EAAmB,MAAM,mBAAmB,CAAA;AAYvH,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,EAAU,SAAS,EAAE,MAAM,mBAAmB,CAAA;AACpG,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAIpE,qBAAa,QAAS,SAAQ,gBAAiB,YAAW,SAAS,EAAE,iBAAiB;gBACvE,UAAU,EAAE,kBAAkB,EAAE,IAAI,GAAE,YAAiB;IAwBpE,CAAC,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAE9B;IAEK,SAAS,CAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,eAAe,CAAC;IAkCxF,QAAQ,CAAE,UAAU,EAAE,UAAU,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,cAAc,CAAC;IAgC5F,OAAO,CAAC,uBAAuB;IAiC/B;;;OAGG;IACG,cAAc,CAAE,IAAI,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;CAkD/D"}
|
package/dist/src/identify.js
CHANGED
|
@@ -3,13 +3,15 @@ import { publicKeyFromProtobuf, publicKeyToProtobuf } from '@libp2p/crypto/keys'
|
|
|
3
3
|
import { InvalidMessageError, UnsupportedProtocolError, serviceCapabilities, setMaxListeners } from '@libp2p/interface';
|
|
4
4
|
import { peerIdFromCID } from '@libp2p/peer-id';
|
|
5
5
|
import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record';
|
|
6
|
-
import {
|
|
6
|
+
import { isGlobalUnicast } from '@libp2p/utils/multiaddr/is-global-unicast';
|
|
7
|
+
import { isPrivate } from '@libp2p/utils/multiaddr/is-private';
|
|
7
8
|
import { protocols } from '@multiformats/multiaddr';
|
|
8
|
-
import { IP_OR_DOMAIN } from '@multiformats/multiaddr-matcher';
|
|
9
|
+
import { IP_OR_DOMAIN, TCP } from '@multiformats/multiaddr-matcher';
|
|
9
10
|
import { pbStream } from 'it-protobuf-stream';
|
|
10
11
|
import { MULTICODEC_IDENTIFY_PROTOCOL_NAME, MULTICODEC_IDENTIFY_PROTOCOL_VERSION } from './consts.js';
|
|
11
12
|
import { Identify as IdentifyMessage } from './pb/message.js';
|
|
12
13
|
import { AbstractIdentify, consumeIdentifyMessage, defaultValues, getCleanMultiaddr } from './utils.js';
|
|
14
|
+
const CODEC_IP6 = 0x29;
|
|
13
15
|
export class Identify extends AbstractIdentify {
|
|
14
16
|
constructor(components, init = {}) {
|
|
15
17
|
super(components, {
|
|
@@ -76,21 +78,37 @@ export class Identify extends AbstractIdentify {
|
|
|
76
78
|
if (this.peerId.equals(id)) {
|
|
77
79
|
throw new InvalidMessageError('identified peer is our own peer id?');
|
|
78
80
|
}
|
|
79
|
-
//
|
|
80
|
-
|
|
81
|
+
// if the observed address is publicly routable, add it to the address
|
|
82
|
+
// manager for verification via AutoNAT
|
|
83
|
+
this.maybeAddObservedAddress(observedAddr);
|
|
81
84
|
this.log('identify completed for peer %p and protocols %o', id, protocols);
|
|
82
|
-
if (cleanObservedAddr != null) {
|
|
83
|
-
this.log('our observed address was %a', cleanObservedAddr);
|
|
84
|
-
if (isPrivateIp(cleanObservedAddr?.nodeAddress().address) === true) {
|
|
85
|
-
this.log('our observed address was private');
|
|
86
|
-
}
|
|
87
|
-
else if (this.addressManager.getObservedAddrs().length < (this.maxObservedAddresses ?? Infinity)) {
|
|
88
|
-
this.log('storing our observed address');
|
|
89
|
-
this.addressManager.addObservedAddr(cleanObservedAddr);
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
85
|
return consumeIdentifyMessage(this.peerStore, this.events, this.log, connection, message);
|
|
93
86
|
}
|
|
87
|
+
maybeAddObservedAddress(observedAddr) {
|
|
88
|
+
const cleanObservedAddr = getCleanMultiaddr(observedAddr);
|
|
89
|
+
if (cleanObservedAddr == null) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
this.log.trace('our observed address was %a', cleanObservedAddr);
|
|
93
|
+
if (isPrivate(cleanObservedAddr)) {
|
|
94
|
+
this.log.trace('our observed address was private');
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const tuples = cleanObservedAddr.stringTuples();
|
|
98
|
+
if (tuples[0][0] === CODEC_IP6 && !isGlobalUnicast(cleanObservedAddr)) {
|
|
99
|
+
this.log.trace('our observed address was IPv6 but not a global unicast address');
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
if (TCP.exactMatch(cleanObservedAddr)) {
|
|
103
|
+
// TODO: because socket dials can't use the same local port as the TCP
|
|
104
|
+
// listener, many unique observed addresses are reported so ignore all
|
|
105
|
+
// TCP addresses until https://github.com/libp2p/js-libp2p/issues/2620
|
|
106
|
+
// is resolved
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
this.log.trace('storing the observed address');
|
|
110
|
+
this.addressManager.addObservedAddr(cleanObservedAddr);
|
|
111
|
+
}
|
|
94
112
|
/**
|
|
95
113
|
* Sends the `Identify` response with the Signed Peer Record
|
|
96
114
|
* to the requesting peer over the given `connection`
|
package/dist/src/identify.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"identify.js","sourceRoot":"","sources":["../../src/identify.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAE/B,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAA;AAChF,OAAO,EAAE,mBAAmB,EAAE,wBAAwB,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAA;AACvH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAA;AAC/C,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"identify.js","sourceRoot":"","sources":["../../src/identify.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/identify",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.13",
|
|
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",
|
|
@@ -52,30 +52,30 @@
|
|
|
52
52
|
"doc-check": "aegir doc-check"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
55
|
-
"@libp2p/crypto": "^5.0.
|
|
56
|
-
"@libp2p/interface": "^2.
|
|
57
|
-
"@libp2p/interface-internal": "^2.
|
|
58
|
-
"@libp2p/peer-id": "^5.0.
|
|
59
|
-
"@libp2p/peer-record": "^8.0.
|
|
60
|
-
"@libp2p/utils": "^6.
|
|
61
|
-
"@multiformats/multiaddr": "^12.
|
|
62
|
-
"@multiformats/multiaddr-matcher": "^1.
|
|
55
|
+
"@libp2p/crypto": "^5.0.8",
|
|
56
|
+
"@libp2p/interface": "^2.3.0",
|
|
57
|
+
"@libp2p/interface-internal": "^2.2.0",
|
|
58
|
+
"@libp2p/peer-id": "^5.0.9",
|
|
59
|
+
"@libp2p/peer-record": "^8.0.13",
|
|
60
|
+
"@libp2p/utils": "^6.3.0",
|
|
61
|
+
"@multiformats/multiaddr": "^12.3.3",
|
|
62
|
+
"@multiformats/multiaddr-matcher": "^1.6.0",
|
|
63
63
|
"it-drain": "^3.0.7",
|
|
64
|
-
"it-parallel": "^3.0.
|
|
65
|
-
"it-protobuf-stream": "^1.1.
|
|
66
|
-
"protons-runtime": "^5.
|
|
64
|
+
"it-parallel": "^3.0.8",
|
|
65
|
+
"it-protobuf-stream": "^1.1.5",
|
|
66
|
+
"protons-runtime": "^5.5.0",
|
|
67
67
|
"uint8arraylist": "^2.4.8",
|
|
68
68
|
"uint8arrays": "^5.1.0",
|
|
69
69
|
"wherearewe": "^2.0.1"
|
|
70
70
|
},
|
|
71
71
|
"devDependencies": {
|
|
72
|
-
"@libp2p/logger": "^5.1.
|
|
73
|
-
"aegir": "^
|
|
72
|
+
"@libp2p/logger": "^5.1.5",
|
|
73
|
+
"aegir": "^45.0.5",
|
|
74
74
|
"delay": "^6.0.0",
|
|
75
|
-
"it-length-prefixed": "^9.0
|
|
75
|
+
"it-length-prefixed": "^9.1.0",
|
|
76
76
|
"it-pair": "^2.0.6",
|
|
77
77
|
"it-pushable": "^3.2.3",
|
|
78
|
-
"protons": "^7.
|
|
78
|
+
"protons": "^7.6.0",
|
|
79
79
|
"sinon-ts": "^2.0.0"
|
|
80
80
|
},
|
|
81
81
|
"sideEffects": false
|
package/src/identify.ts
CHANGED
|
@@ -4,9 +4,10 @@ import { publicKeyFromProtobuf, publicKeyToProtobuf } from '@libp2p/crypto/keys'
|
|
|
4
4
|
import { InvalidMessageError, UnsupportedProtocolError, serviceCapabilities, setMaxListeners } from '@libp2p/interface'
|
|
5
5
|
import { peerIdFromCID } from '@libp2p/peer-id'
|
|
6
6
|
import { RecordEnvelope, PeerRecord } from '@libp2p/peer-record'
|
|
7
|
-
import {
|
|
7
|
+
import { isGlobalUnicast } from '@libp2p/utils/multiaddr/is-global-unicast'
|
|
8
|
+
import { isPrivate } from '@libp2p/utils/multiaddr/is-private'
|
|
8
9
|
import { protocols } from '@multiformats/multiaddr'
|
|
9
|
-
import { IP_OR_DOMAIN } from '@multiformats/multiaddr-matcher'
|
|
10
|
+
import { IP_OR_DOMAIN, TCP } from '@multiformats/multiaddr-matcher'
|
|
10
11
|
import { pbStream } from 'it-protobuf-stream'
|
|
11
12
|
import {
|
|
12
13
|
MULTICODEC_IDENTIFY_PROTOCOL_NAME,
|
|
@@ -18,6 +19,8 @@ import type { Identify as IdentifyInterface, IdentifyComponents, IdentifyInit }
|
|
|
18
19
|
import type { IdentifyResult, AbortOptions, Connection, Stream, Startable } from '@libp2p/interface'
|
|
19
20
|
import type { IncomingStreamData } from '@libp2p/interface-internal'
|
|
20
21
|
|
|
22
|
+
const CODEC_IP6 = 0x29
|
|
23
|
+
|
|
21
24
|
export class Identify extends AbstractIdentify implements Startable, IdentifyInterface {
|
|
22
25
|
constructor (components: IdentifyComponents, init: IdentifyInit = {}) {
|
|
23
26
|
super(components, {
|
|
@@ -104,23 +107,46 @@ export class Identify extends AbstractIdentify implements Startable, IdentifyInt
|
|
|
104
107
|
throw new InvalidMessageError('identified peer is our own peer id?')
|
|
105
108
|
}
|
|
106
109
|
|
|
107
|
-
//
|
|
108
|
-
|
|
110
|
+
// if the observed address is publicly routable, add it to the address
|
|
111
|
+
// manager for verification via AutoNAT
|
|
112
|
+
this.maybeAddObservedAddress(observedAddr)
|
|
109
113
|
|
|
110
114
|
this.log('identify completed for peer %p and protocols %o', id, protocols)
|
|
111
115
|
|
|
112
|
-
|
|
113
|
-
|
|
116
|
+
return consumeIdentifyMessage(this.peerStore, this.events, this.log, connection, message)
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
private maybeAddObservedAddress (observedAddr: Uint8Array | undefined): void {
|
|
120
|
+
const cleanObservedAddr = getCleanMultiaddr(observedAddr)
|
|
114
121
|
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
} else if (this.addressManager.getObservedAddrs().length < (this.maxObservedAddresses ?? Infinity)) {
|
|
118
|
-
this.log('storing our observed address')
|
|
119
|
-
this.addressManager.addObservedAddr(cleanObservedAddr)
|
|
120
|
-
}
|
|
122
|
+
if (cleanObservedAddr == null) {
|
|
123
|
+
return
|
|
121
124
|
}
|
|
122
125
|
|
|
123
|
-
|
|
126
|
+
this.log.trace('our observed address was %a', cleanObservedAddr)
|
|
127
|
+
|
|
128
|
+
if (isPrivate(cleanObservedAddr)) {
|
|
129
|
+
this.log.trace('our observed address was private')
|
|
130
|
+
return
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const tuples = cleanObservedAddr.stringTuples()
|
|
134
|
+
|
|
135
|
+
if (tuples[0][0] === CODEC_IP6 && !isGlobalUnicast(cleanObservedAddr)) {
|
|
136
|
+
this.log.trace('our observed address was IPv6 but not a global unicast address')
|
|
137
|
+
return
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (TCP.exactMatch(cleanObservedAddr)) {
|
|
141
|
+
// TODO: because socket dials can't use the same local port as the TCP
|
|
142
|
+
// listener, many unique observed addresses are reported so ignore all
|
|
143
|
+
// TCP addresses until https://github.com/libp2p/js-libp2p/issues/2620
|
|
144
|
+
// is resolved
|
|
145
|
+
return
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
this.log.trace('storing the observed address')
|
|
149
|
+
this.addressManager.addObservedAddr(cleanObservedAddr)
|
|
124
150
|
}
|
|
125
151
|
|
|
126
152
|
/**
|
package/LICENSE
DELETED