@libp2p/mdns 6.0.0 → 7.0.1
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 +18 -11
- package/dist/index.min.js +4 -4
- package/dist/src/index.d.ts +1 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +24 -55
- package/dist/src/index.js.map +1 -1
- package/dist/src/query.d.ts +4 -5
- package/dist/src/query.d.ts.map +1 -1
- package/dist/src/query.js +38 -82
- package/dist/src/query.js.map +1 -1
- package/dist/src/utils.d.ts +2 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +9 -0
- package/dist/src/utils.js.map +1 -0
- package/package.json +13 -15
- package/src/index.ts +38 -67
- package/src/query.ts +42 -101
- package/src/utils.ts +9 -0
- package/dist/src/compat/constants.d.ts +0 -5
- package/dist/src/compat/constants.d.ts.map +0 -1
- package/dist/src/compat/constants.js +0 -5
- package/dist/src/compat/constants.js.map +0 -1
- package/dist/src/compat/index.d.ts +0 -20
- package/dist/src/compat/index.d.ts.map +0 -1
- package/dist/src/compat/index.js +0 -50
- package/dist/src/compat/index.js.map +0 -1
- package/dist/src/compat/querier.d.ts +0 -31
- package/dist/src/compat/querier.d.ts.map +0 -1
- package/dist/src/compat/querier.js +0 -123
- package/dist/src/compat/querier.js.map +0 -1
- package/dist/src/compat/responder.d.ts +0 -13
- package/dist/src/compat/responder.d.ts.map +0 -1
- package/dist/src/compat/responder.js +0 -94
- package/dist/src/compat/responder.js.map +0 -1
- package/dist/src/compat/utils.d.ts +0 -5
- package/dist/src/compat/utils.d.ts.map +0 -1
- package/dist/src/compat/utils.js +0 -70
- package/dist/src/compat/utils.js.map +0 -1
- package/src/compat/constants.ts +0 -4
- package/src/compat/index.ts +0 -73
- package/src/compat/querier.ts +0 -171
- package/src/compat/responder.ts +0 -116
- package/src/compat/utils.ts +0 -82
package/dist/src/index.js
CHANGED
|
@@ -2,29 +2,27 @@ import multicastDNS from 'multicast-dns';
|
|
|
2
2
|
import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events';
|
|
3
3
|
import { logger } from '@libp2p/logger';
|
|
4
4
|
import * as query from './query.js';
|
|
5
|
-
import { GoMulticastDNS } from './compat/index.js';
|
|
6
5
|
import { symbol } from '@libp2p/interface-peer-discovery';
|
|
6
|
+
import { stringGen } from './utils.js';
|
|
7
7
|
const log = logger('libp2p:mdns');
|
|
8
8
|
class MulticastDNS extends EventEmitter {
|
|
9
9
|
constructor(components, init = {}) {
|
|
10
10
|
super();
|
|
11
|
-
this.components = components;
|
|
12
11
|
this.broadcast = init.broadcast !== false;
|
|
13
12
|
this.interval = init.interval ?? (1e3 * 10);
|
|
14
|
-
this.serviceTag = init.serviceTag ?? '
|
|
13
|
+
this.serviceTag = init.serviceTag ?? '_p2p._udp.local';
|
|
15
14
|
this.ip = init.ip ?? '224.0.0.251';
|
|
15
|
+
this.peerName = init.peerName ?? stringGen(63);
|
|
16
|
+
// 63 is dns label limit
|
|
17
|
+
if (this.peerName.length >= 64) {
|
|
18
|
+
throw new Error('Peer name should be less than 64 chars long');
|
|
19
|
+
}
|
|
16
20
|
this.port = init.port ?? 5353;
|
|
21
|
+
this.components = components;
|
|
17
22
|
this._queryInterval = null;
|
|
18
23
|
this._onPeer = this._onPeer.bind(this);
|
|
19
24
|
this._onMdnsQuery = this._onMdnsQuery.bind(this);
|
|
20
25
|
this._onMdnsResponse = this._onMdnsResponse.bind(this);
|
|
21
|
-
if (init.compat !== false) {
|
|
22
|
-
this._goMdns = new GoMulticastDNS(components, {
|
|
23
|
-
queryPeriod: init.compatQueryPeriod,
|
|
24
|
-
queryInterval: init.compatQueryInterval
|
|
25
|
-
});
|
|
26
|
-
this._goMdns.addEventListener('peer', this._onPeer);
|
|
27
|
-
}
|
|
28
26
|
}
|
|
29
27
|
get [symbol]() {
|
|
30
28
|
return true;
|
|
@@ -48,21 +46,19 @@ class MulticastDNS extends EventEmitter {
|
|
|
48
46
|
this.mdns.on('query', this._onMdnsQuery);
|
|
49
47
|
this.mdns.on('response', this._onMdnsResponse);
|
|
50
48
|
this._queryInterval = query.queryLAN(this.mdns, this.serviceTag, this.interval);
|
|
51
|
-
if (this._goMdns != null) {
|
|
52
|
-
await this._goMdns.start();
|
|
53
|
-
}
|
|
54
49
|
}
|
|
55
50
|
_onMdnsQuery(event) {
|
|
56
51
|
if (this.mdns == null) {
|
|
57
52
|
return;
|
|
58
53
|
}
|
|
59
54
|
log.trace('received incoming mDNS query');
|
|
60
|
-
|
|
55
|
+
const localPeerId = this.components.peerId;
|
|
56
|
+
query.gotQuery(event, this.mdns, this.peerName, this.components.addressManager.getAddresses().map((ma) => ma.encapsulate('/p2p/' + localPeerId.toString())), this.serviceTag, this.broadcast);
|
|
61
57
|
}
|
|
62
58
|
_onMdnsResponse(event) {
|
|
63
59
|
log.trace('received mDNS query response');
|
|
64
60
|
try {
|
|
65
|
-
const foundPeer = query.gotResponse(event, this.
|
|
61
|
+
const foundPeer = query.gotResponse(event, this.peerName, this.serviceTag);
|
|
66
62
|
if (foundPeer != null) {
|
|
67
63
|
log('discovered peer in mDNS qeury response %p', foundPeer.id);
|
|
68
64
|
this.dispatchEvent(new CustomEvent('peer', {
|
|
@@ -93,22 +89,18 @@ class MulticastDNS extends EventEmitter {
|
|
|
93
89
|
}
|
|
94
90
|
this.mdns.removeListener('query', this._onMdnsQuery);
|
|
95
91
|
this.mdns.removeListener('response', this._onMdnsResponse);
|
|
96
|
-
this._goMdns?.removeEventListener('peer', this._onPeer);
|
|
97
92
|
if (this._queryInterval != null) {
|
|
98
93
|
clearInterval(this._queryInterval);
|
|
99
94
|
this._queryInterval = null;
|
|
100
95
|
}
|
|
101
|
-
await Promise
|
|
102
|
-
this.
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
}
|
|
110
|
-
})
|
|
111
|
-
]);
|
|
96
|
+
await new Promise((resolve) => {
|
|
97
|
+
if (this.mdns != null) {
|
|
98
|
+
this.mdns.destroy(resolve);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
resolve();
|
|
102
|
+
}
|
|
103
|
+
});
|
|
112
104
|
this.mdns = undefined;
|
|
113
105
|
}
|
|
114
106
|
}
|
|
@@ -117,41 +109,18 @@ export function mdns(init = {}) {
|
|
|
117
109
|
}
|
|
118
110
|
/* for reference
|
|
119
111
|
|
|
120
|
-
[ { name: '
|
|
112
|
+
[ { name: '_p2p._udp.local',
|
|
121
113
|
type: 'PTR',
|
|
122
114
|
class: 1,
|
|
123
115
|
ttl: 120,
|
|
124
|
-
data: '
|
|
125
|
-
|
|
126
|
-
{ name: 'QmbBHw1Xx9pUpAbrVZUKTPL5Rsph5Q9GQhRvcWVBPFgGtC.discovery.ipfs.io.local',
|
|
127
|
-
type: 'SRV',
|
|
128
|
-
class: 1,
|
|
129
|
-
ttl: 120,
|
|
130
|
-
data: { priority: 10, weight: 1, port: 4001, target: 'lorien.local' } },
|
|
131
|
-
|
|
132
|
-
{ name: 'lorien.local',
|
|
133
|
-
type: 'A',
|
|
134
|
-
class: 1,
|
|
135
|
-
ttl: 120,
|
|
136
|
-
data: '127.0.0.1' },
|
|
137
|
-
|
|
138
|
-
{ name: 'lorien.local',
|
|
139
|
-
type: 'A',
|
|
140
|
-
class: 1,
|
|
141
|
-
ttl: 120,
|
|
142
|
-
data: '127.94.0.1' },
|
|
143
|
-
|
|
144
|
-
{ name: 'lorien.local',
|
|
145
|
-
type: 'A',
|
|
146
|
-
class: 1,
|
|
147
|
-
ttl: 120,
|
|
148
|
-
data: '172.16.38.224' },
|
|
116
|
+
data: 'XQxZeAH6MX2n4255fzYmyUCUdhQ0DAWv.p2p._udp.local' },
|
|
149
117
|
|
|
150
|
-
{ name: '
|
|
118
|
+
{ name: 'XQxZeAH6MX2n4255fzYmyUCUdhQ0DAWv.p2p._udp.local',
|
|
151
119
|
type: 'TXT',
|
|
152
120
|
class: 1,
|
|
153
121
|
ttl: 120,
|
|
154
|
-
data: 'QmbBHw1Xx9pUpAbrVZUKTPL5Rsph5Q9GQhRvcWVBPFgGtC' }
|
|
122
|
+
data: 'dnsaddr=/ip4/127.0.0.1/tcp/80/p2p/QmbBHw1Xx9pUpAbrVZUKTPL5Rsph5Q9GQhRvcWVBPFgGtC' },
|
|
123
|
+
]
|
|
155
124
|
|
|
156
125
|
*/
|
|
157
126
|
//# sourceMappingURL=index.js.map
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAA;AACxC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/src/query.d.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
3
|
-
import type { PeerId } from '@libp2p/interface-peer-id';
|
|
4
2
|
import type { PeerInfo } from '@libp2p/interface-peer-info';
|
|
5
|
-
import
|
|
3
|
+
import { Multiaddr } from '@multiformats/multiaddr';
|
|
4
|
+
import type { MulticastDNS, QueryPacket, ResponsePacket } from 'multicast-dns';
|
|
6
5
|
export declare function queryLAN(mdns: MulticastDNS, serviceTag: string, interval: number): NodeJS.Timer;
|
|
7
|
-
export declare function gotResponse(rsp: ResponsePacket,
|
|
8
|
-
export declare function gotQuery(qry: QueryPacket, mdns: MulticastDNS,
|
|
6
|
+
export declare function gotResponse(rsp: ResponsePacket, localPeerName: string, serviceTag: string): PeerInfo | undefined;
|
|
7
|
+
export declare function gotQuery(qry: QueryPacket, mdns: MulticastDNS, peerName: string, multiaddrs: Multiaddr[], serviceTag: string, broadcast: boolean): void;
|
|
9
8
|
//# sourceMappingURL=query.d.ts.map
|
package/dist/src/query.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAG3D,OAAO,EAAa,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAI9E,wBAAgB,QAAQ,CAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAehG;AAED,wBAAgB,WAAW,CAAE,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CA6CjH;AAED,wBAAgB,QAAQ,CAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,IAAI,CAqCvJ"}
|
package/dist/src/query.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import os from 'os';
|
|
2
1
|
import { logger } from '@libp2p/logger';
|
|
3
|
-
import { protocols, multiaddr } from '@multiformats/multiaddr';
|
|
4
2
|
import { peerIdFromString } from '@libp2p/peer-id';
|
|
3
|
+
import { multiaddr } from '@multiformats/multiaddr';
|
|
5
4
|
const log = logger('libp2p:mdns:query');
|
|
6
5
|
export function queryLAN(mdns, serviceTag, interval) {
|
|
7
6
|
const query = () => {
|
|
@@ -17,80 +16,57 @@ export function queryLAN(mdns, serviceTag, interval) {
|
|
|
17
16
|
query();
|
|
18
17
|
return setInterval(query, interval);
|
|
19
18
|
}
|
|
20
|
-
export function gotResponse(rsp,
|
|
19
|
+
export function gotResponse(rsp, localPeerName, serviceTag) {
|
|
21
20
|
if (rsp.answers == null) {
|
|
22
21
|
return;
|
|
23
22
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
aaaa: []
|
|
27
|
-
};
|
|
23
|
+
let answerPTR;
|
|
24
|
+
const txtAnswers = [];
|
|
28
25
|
rsp.answers.forEach((answer) => {
|
|
29
26
|
switch (answer.type) {
|
|
30
27
|
case 'PTR':
|
|
31
|
-
|
|
32
|
-
break;
|
|
33
|
-
case 'SRV':
|
|
34
|
-
answers.srv = answer;
|
|
28
|
+
answerPTR = answer;
|
|
35
29
|
break;
|
|
36
30
|
case 'TXT':
|
|
37
|
-
|
|
38
|
-
break;
|
|
39
|
-
case 'A':
|
|
40
|
-
answers.a.push(answer);
|
|
41
|
-
break;
|
|
42
|
-
case 'AAAA':
|
|
43
|
-
answers.aaaa.push(answer);
|
|
31
|
+
txtAnswers.push(answer);
|
|
44
32
|
break;
|
|
45
33
|
default: break;
|
|
46
34
|
}
|
|
47
35
|
});
|
|
48
|
-
if (
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
36
|
+
if (answerPTR == null ||
|
|
37
|
+
answerPTR?.name !== serviceTag ||
|
|
38
|
+
txtAnswers.length === 0 ||
|
|
39
|
+
answerPTR.data.startsWith(localPeerName)) {
|
|
52
40
|
return;
|
|
53
41
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const ma = multiaddr(`/ip6/${a.data}/tcp/${port}`);
|
|
65
|
-
if (!multiaddrs.some((m) => m.equals(ma))) {
|
|
66
|
-
multiaddrs.push(ma);
|
|
42
|
+
try {
|
|
43
|
+
const multiaddrs = txtAnswers
|
|
44
|
+
.flatMap((a) => a.data)
|
|
45
|
+
.filter(answerData => answerData.toString().startsWith('dnsaddr='))
|
|
46
|
+
.map((answerData) => {
|
|
47
|
+
return multiaddr(answerData.toString().substring('dnsaddr='.length));
|
|
48
|
+
});
|
|
49
|
+
const peerId = multiaddrs[0].getPeerId();
|
|
50
|
+
if (peerId == null) {
|
|
51
|
+
throw new Error("Multiaddr doesn't contain PeerId");
|
|
67
52
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
53
|
+
log('peer found %p', peerId);
|
|
54
|
+
return {
|
|
55
|
+
id: peerIdFromString(peerId),
|
|
56
|
+
multiaddrs,
|
|
57
|
+
protocols: []
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
catch (e) {
|
|
61
|
+
log.error('failed to parse mdns response', e);
|
|
71
62
|
}
|
|
72
|
-
const id = peerIdFromString(b58Id);
|
|
73
|
-
log('peer found %p', id);
|
|
74
|
-
return {
|
|
75
|
-
id,
|
|
76
|
-
multiaddrs,
|
|
77
|
-
protocols: []
|
|
78
|
-
};
|
|
79
63
|
}
|
|
80
|
-
export function gotQuery(qry, mdns,
|
|
64
|
+
export function gotQuery(qry, mdns, peerName, multiaddrs, serviceTag, broadcast) {
|
|
81
65
|
if (!broadcast) {
|
|
82
66
|
log('not responding to mDNS query as broadcast mode is false');
|
|
83
67
|
return;
|
|
84
68
|
}
|
|
85
|
-
|
|
86
|
-
if (addr.decapsulateCode(protocols('p2p').code).isThinWaistAddress()) {
|
|
87
|
-
acc.push(addr.toOptions());
|
|
88
|
-
}
|
|
89
|
-
return acc;
|
|
90
|
-
}, []);
|
|
91
|
-
// Only announce TCP for now
|
|
92
|
-
if (addresses.length === 0) {
|
|
93
|
-
log('no thin waist addresses present, cannot respond to query');
|
|
69
|
+
if (multiaddrs.length === 0) {
|
|
94
70
|
return;
|
|
95
71
|
}
|
|
96
72
|
if (qry.questions[0] != null && qry.questions[0].name === serviceTag) {
|
|
@@ -100,37 +76,17 @@ export function gotQuery(qry, mdns, peerId, multiaddrs, serviceTag, broadcast) {
|
|
|
100
76
|
type: 'PTR',
|
|
101
77
|
class: 'IN',
|
|
102
78
|
ttl: 120,
|
|
103
|
-
data:
|
|
104
|
-
});
|
|
105
|
-
// Only announce TCP multiaddrs for now
|
|
106
|
-
const port = addresses[0].port;
|
|
107
|
-
answers.push({
|
|
108
|
-
name: peerId.toString() + '.' + serviceTag,
|
|
109
|
-
type: 'SRV',
|
|
110
|
-
class: 'IN',
|
|
111
|
-
ttl: 120,
|
|
112
|
-
data: {
|
|
113
|
-
priority: 10,
|
|
114
|
-
weight: 1,
|
|
115
|
-
port: port,
|
|
116
|
-
target: os.hostname()
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
answers.push({
|
|
120
|
-
name: peerId.toString() + '.' + serviceTag,
|
|
121
|
-
type: 'TXT',
|
|
122
|
-
class: 'IN',
|
|
123
|
-
ttl: 120,
|
|
124
|
-
data: peerId.toString()
|
|
79
|
+
data: peerName + '.' + serviceTag
|
|
125
80
|
});
|
|
126
|
-
|
|
127
|
-
|
|
81
|
+
multiaddrs.forEach((addr) => {
|
|
82
|
+
// spec mandates multiaddr contains peer id
|
|
83
|
+
if (addr.getPeerId() != null) {
|
|
128
84
|
answers.push({
|
|
129
|
-
name:
|
|
130
|
-
type:
|
|
85
|
+
name: peerName + '.' + serviceTag,
|
|
86
|
+
type: 'TXT',
|
|
131
87
|
class: 'IN',
|
|
132
88
|
ttl: 120,
|
|
133
|
-
data: addr.
|
|
89
|
+
data: 'dnsaddr=' + addr.toString()
|
|
134
90
|
});
|
|
135
91
|
}
|
|
136
92
|
});
|
package/dist/src/query.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,wBAAgB,SAAS,CAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAQ9C"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export function stringGen(len) {
|
|
2
|
+
let text = '';
|
|
3
|
+
const charset = 'abcdefghijklmnopqrstuvwxyz0123456789';
|
|
4
|
+
for (let i = 0; i < len; i++) {
|
|
5
|
+
text += charset.charAt(Math.floor(Math.random() * charset.length));
|
|
6
|
+
}
|
|
7
|
+
return text;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,SAAS,CAAE,GAAW;IACpC,IAAI,IAAI,GAAG,EAAE,CAAA;IAEb,MAAM,OAAO,GAAG,sCAAsC,CAAA;IAEtD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;QAAE,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;KAAE;IAEpG,OAAO,IAAI,CAAA;AACb,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@libp2p/mdns",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "7.0.1",
|
|
4
4
|
"description": "Node.js libp2p mDNS discovery implementation for peer discovery",
|
|
5
5
|
"license": "Apache-2.0 OR MIT",
|
|
6
6
|
"homepage": "https://github.com/libp2p/js-libp2p-mdns#readme",
|
|
@@ -135,24 +135,22 @@
|
|
|
135
135
|
"docs": "aegir docs"
|
|
136
136
|
},
|
|
137
137
|
"dependencies": {
|
|
138
|
-
"@libp2p/interface-peer-discovery": "^1.0.
|
|
139
|
-
"@libp2p/interface-peer-id": "^2.0.
|
|
140
|
-
"@libp2p/interface-peer-info": "^1.0.
|
|
141
|
-
"@libp2p/interfaces": "^3.
|
|
142
|
-
"@libp2p/logger": "^2.0.
|
|
143
|
-
"@libp2p/peer-id": "^2.0.
|
|
144
|
-
"@multiformats/multiaddr": "^
|
|
138
|
+
"@libp2p/interface-peer-discovery": "^1.0.5",
|
|
139
|
+
"@libp2p/interface-peer-id": "^2.0.1",
|
|
140
|
+
"@libp2p/interface-peer-info": "^1.0.8",
|
|
141
|
+
"@libp2p/interfaces": "^3.3.1",
|
|
142
|
+
"@libp2p/logger": "^2.0.5",
|
|
143
|
+
"@libp2p/peer-id": "^2.0.1",
|
|
144
|
+
"@multiformats/multiaddr": "^12.0.0",
|
|
145
145
|
"@types/multicast-dns": "^7.2.1",
|
|
146
|
-
"multicast-dns": "^7.2.
|
|
147
|
-
"
|
|
146
|
+
"multicast-dns": "^7.2.5",
|
|
147
|
+
"dns-packet": "^5.4.0"
|
|
148
148
|
},
|
|
149
149
|
"devDependencies": {
|
|
150
|
-
"@libp2p/interface-address-manager": "^2.0.
|
|
151
|
-
"@libp2p/interface-peer-discovery-compliance-tests": "^2.0.
|
|
150
|
+
"@libp2p/interface-address-manager": "^2.0.1",
|
|
151
|
+
"@libp2p/interface-peer-discovery-compliance-tests": "^2.0.1",
|
|
152
152
|
"@libp2p/peer-id-factory": "^2.0.0",
|
|
153
|
-
"aegir": "^
|
|
154
|
-
"delay": "^5.0.0",
|
|
155
|
-
"p-defer": "^4.0.0",
|
|
153
|
+
"aegir": "^38.1.2",
|
|
156
154
|
"p-wait-for": "^5.0.0",
|
|
157
155
|
"ts-sinon": "^2.0.2"
|
|
158
156
|
}
|