@libp2p/mdns 1.0.0 → 1.0.3
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 +2 -2
- package/dist/src/compat/index.d.ts +8 -9
- package/dist/src/compat/index.d.ts.map +1 -1
- package/dist/src/compat/index.js +7 -7
- package/dist/src/compat/index.js.map +1 -1
- package/dist/src/compat/querier.d.ts +7 -7
- package/dist/src/compat/querier.d.ts.map +1 -1
- package/dist/src/compat/querier.js +21 -65
- package/dist/src/compat/querier.js.map +1 -1
- package/dist/src/compat/responder.d.ts +5 -10
- package/dist/src/compat/responder.d.ts.map +1 -1
- package/dist/src/compat/responder.js +37 -36
- package/dist/src/compat/responder.js.map +1 -1
- package/dist/src/compat/utils.d.ts +5 -0
- package/dist/src/compat/utils.d.ts.map +1 -0
- package/dist/src/compat/utils.js +70 -0
- package/dist/src/compat/utils.js.map +1 -0
- package/dist/src/index.d.ts +7 -10
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +13 -11
- package/dist/src/index.js.map +1 -1
- package/dist/src/query.d.ts +3 -3
- package/dist/src/query.d.ts.map +1 -1
- package/dist/src/query.js +14 -12
- package/dist/src/query.js.map +1 -1
- package/package.json +11 -10
- package/src/compat/index.ts +15 -10
- package/src/compat/querier.ts +26 -76
- package/src/compat/responder.ts +44 -50
- package/src/compat/utils.ts +81 -0
- package/src/index.ts +23 -24
- package/src/query.ts +19 -14
package/README.md
CHANGED
|
@@ -14,12 +14,12 @@
|
|
|
14
14
|
## Usage
|
|
15
15
|
|
|
16
16
|
```JavaScript
|
|
17
|
-
|
|
17
|
+
import { MDNS } from '@libp2p/mdns'
|
|
18
18
|
|
|
19
19
|
const mdns = new MDNS(options)
|
|
20
20
|
|
|
21
21
|
mdns.on('peer', (peerData) => {
|
|
22
|
-
console.log('Found a peer in the local network', peerData.id.toString(
|
|
22
|
+
console.log('Found a peer in the local network', peerData.id.toString(), peerData.multiaddrs)
|
|
23
23
|
})
|
|
24
24
|
|
|
25
25
|
// Broadcast for 20 seconds
|
|
@@ -1,17 +1,16 @@
|
|
|
1
1
|
import { EventEmitter } from '@libp2p/interfaces';
|
|
2
|
-
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
3
|
-
import type { PeerId } from '@libp2p/interfaces/peer-id';
|
|
4
2
|
import type { PeerDiscovery, PeerDiscoveryEvents } from '@libp2p/interfaces/peer-discovery';
|
|
5
|
-
|
|
3
|
+
import type { Components, Initializable } from '@libp2p/interfaces/components';
|
|
4
|
+
export interface GoMulticastDNSInit {
|
|
5
|
+
queryPeriod?: number;
|
|
6
|
+
queryInterval?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare class GoMulticastDNS extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery, Initializable {
|
|
6
9
|
private _started;
|
|
7
10
|
private readonly _responder;
|
|
8
11
|
private readonly _querier;
|
|
9
|
-
constructor(options
|
|
10
|
-
|
|
11
|
-
multiaddrs: Multiaddr[];
|
|
12
|
-
queryPeriod?: number;
|
|
13
|
-
queryInterval?: number;
|
|
14
|
-
});
|
|
12
|
+
constructor(options?: GoMulticastDNSInit);
|
|
13
|
+
init(components: Components): void;
|
|
15
14
|
isStarted(): boolean;
|
|
16
15
|
start(): Promise<void>;
|
|
17
16
|
stop(): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/compat/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAA;AAG9D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/compat/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAe,MAAM,oBAAoB,CAAA;AAG9D,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAC3F,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAE9E,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,qBAAa,cAAe,SAAQ,YAAY,CAAC,mBAAmB,CAAE,YAAW,aAAa,EAAE,aAAa;IAC3G,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAErB,OAAO,GAAE,kBAAuB;IAiB7C,IAAI,CAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IAKnC,SAAS;IAIH,KAAK;IAaL,IAAI;CAYX"}
|
package/dist/src/compat/index.js
CHANGED
|
@@ -3,16 +3,12 @@ import { EventEmitter, CustomEvent } from '@libp2p/interfaces';
|
|
|
3
3
|
import { Responder } from './responder.js';
|
|
4
4
|
import { Querier } from './querier.js';
|
|
5
5
|
export class GoMulticastDNS extends EventEmitter {
|
|
6
|
-
constructor(options) {
|
|
6
|
+
constructor(options = {}) {
|
|
7
7
|
super();
|
|
8
|
-
const {
|
|
8
|
+
const { queryPeriod, queryInterval } = options;
|
|
9
9
|
this._started = false;
|
|
10
|
-
this._responder = new Responder(
|
|
11
|
-
peerId,
|
|
12
|
-
multiaddrs
|
|
13
|
-
});
|
|
10
|
+
this._responder = new Responder();
|
|
14
11
|
this._querier = new Querier({
|
|
15
|
-
peerId,
|
|
16
12
|
queryInterval,
|
|
17
13
|
queryPeriod
|
|
18
14
|
});
|
|
@@ -20,6 +16,10 @@ export class GoMulticastDNS extends EventEmitter {
|
|
|
20
16
|
this.dispatchEvent(new CustomEvent('peer', { detail: evt.detail }));
|
|
21
17
|
});
|
|
22
18
|
}
|
|
19
|
+
init(components) {
|
|
20
|
+
this._responder.init(components);
|
|
21
|
+
this._querier.init(components);
|
|
22
|
+
}
|
|
23
23
|
isStarted() {
|
|
24
24
|
return this._started;
|
|
25
25
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/compat/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/compat/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAStC,MAAM,OAAO,cAAe,SAAQ,YAAiC;IAKnE,YAAa,UAA8B,EAAE;QAC3C,KAAK,EAAE,CAAA;QACP,MAAM,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,OAAO,CAAA;QAE9C,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;QAErB,IAAI,CAAC,UAAU,GAAG,IAAI,SAAS,EAAE,CAAA;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC;YAC1B,aAAa;YACb,WAAW;SACZ,CAAC,CAAA;QAEF,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE;YAC7C,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;QACrE,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,CAAE,UAAsB;QAC1B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAChC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IAChC,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,QAAQ,CAAA;IACtB,CAAC;IAED,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;YACpB,OAAM;SACP;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;QAEpB,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE;YACvB,IAAI,CAAC,QAAQ,CAAC,KAAK,EAAE;SACtB,CAAC,CAAA;IACJ,CAAC;IAED,KAAK,CAAC,IAAI;QACR,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;YACrB,OAAM;SACP;QAED,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAA;QAErB,MAAM,OAAO,CAAC,GAAG,CAAC;YAChB,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACtB,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE;SACrB,CAAC,CAAA;IACJ,CAAC;CACF"}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { EventEmitter } from '@libp2p/interfaces';
|
|
3
|
-
import { PeerId } from '@libp2p/peer-id';
|
|
4
3
|
import type { PeerDiscovery, PeerDiscoveryEvents } from '@libp2p/interfaces/peer-discovery';
|
|
5
4
|
import type { ResponsePacket } from 'multicast-dns';
|
|
6
5
|
import type { RemoteInfo } from 'dgram';
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
import { Components, Initializable } from '@libp2p/interfaces/components';
|
|
7
|
+
export interface QuerierInit {
|
|
9
8
|
queryInterval?: number;
|
|
10
9
|
queryPeriod?: number;
|
|
11
10
|
}
|
|
12
11
|
export interface Handle {
|
|
13
12
|
stop: () => Promise<void>;
|
|
14
13
|
}
|
|
15
|
-
export declare class Querier extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery {
|
|
16
|
-
private readonly
|
|
17
|
-
private readonly _options;
|
|
14
|
+
export declare class Querier extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery, Initializable {
|
|
15
|
+
private readonly _init;
|
|
18
16
|
private _handle?;
|
|
19
|
-
|
|
17
|
+
private components;
|
|
18
|
+
constructor(init?: QuerierInit);
|
|
19
|
+
init(components: Components): void;
|
|
20
20
|
isStarted(): boolean;
|
|
21
21
|
start(): void;
|
|
22
22
|
_onResponse(event: ResponsePacket, info: RemoteInfo): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"querier.d.ts","sourceRoot":"","sources":["../../../src/compat/querier.ts"],"names":[],"mappings":";AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"querier.d.ts","sourceRoot":"","sources":["../../../src/compat/querier.ts"],"names":[],"mappings":";AAAA,OAAO,EAAe,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAI9D,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAC3F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAKzE,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;CAC1B;AAED,qBAAa,OAAQ,SAAQ,YAAY,CAAC,mBAAmB,CAAE,YAAW,aAAa,EAAE,aAAa;IACpG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,OAAO,CAAC,CAAQ;IACxB,OAAO,CAAC,UAAU,CAA+B;gBAEpC,IAAI,GAAE,WAAgB;IAkBnC,IAAI,CAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IAInC,SAAS;IAIT,KAAK;IAgCL,WAAW,CAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU;IAuB9C,IAAI;CAKX"}
|
|
@@ -1,21 +1,16 @@
|
|
|
1
|
-
import { EventEmitter } from '@libp2p/interfaces';
|
|
1
|
+
import { CustomEvent, EventEmitter } from '@libp2p/interfaces';
|
|
2
2
|
import MDNS from 'multicast-dns';
|
|
3
|
-
import { Multiaddr } from '@multiformats/multiaddr';
|
|
4
|
-
import { PeerId } from '@libp2p/peer-id';
|
|
5
3
|
import { logger } from '@libp2p/logger';
|
|
6
4
|
import { SERVICE_TAG_LOCAL, MULTICAST_IP, MULTICAST_PORT } from './constants.js';
|
|
7
|
-
import {
|
|
5
|
+
import { Components } from '@libp2p/interfaces/components';
|
|
6
|
+
import { findPeerInfoInAnswers } from './utils.js';
|
|
8
7
|
const log = logger('libp2p:mdns:compat:querier');
|
|
9
8
|
export class Querier extends EventEmitter {
|
|
10
|
-
constructor(
|
|
9
|
+
constructor(init = {}) {
|
|
11
10
|
super();
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
this._peerIdStr = peerId.toString(base58btc);
|
|
17
|
-
this._options = {
|
|
18
|
-
peerId,
|
|
11
|
+
this.components = new Components();
|
|
12
|
+
const { queryInterval, queryPeriod } = init;
|
|
13
|
+
this._init = {
|
|
19
14
|
// Re-query in leu of network change detection (every 60s by default)
|
|
20
15
|
queryInterval: queryInterval ?? 60000,
|
|
21
16
|
// Time for which the MDNS server will stay alive waiting for responses
|
|
@@ -24,6 +19,9 @@ export class Querier extends EventEmitter {
|
|
|
24
19
|
};
|
|
25
20
|
this._onResponse = this._onResponse.bind(this);
|
|
26
21
|
}
|
|
22
|
+
init(components) {
|
|
23
|
+
this.components = components;
|
|
24
|
+
}
|
|
27
25
|
isStarted() {
|
|
28
26
|
return Boolean(this._handle);
|
|
29
27
|
}
|
|
@@ -51,67 +49,25 @@ export class Querier extends EventEmitter {
|
|
|
51
49
|
}
|
|
52
50
|
};
|
|
53
51
|
}, {
|
|
54
|
-
period: this.
|
|
55
|
-
interval: this.
|
|
52
|
+
period: this._init.queryPeriod,
|
|
53
|
+
interval: this._init.queryInterval
|
|
56
54
|
});
|
|
57
55
|
}
|
|
58
56
|
_onResponse(event, info) {
|
|
57
|
+
log.trace('received mDNS query response');
|
|
59
58
|
const answers = event.answers ?? [];
|
|
60
|
-
const
|
|
61
|
-
|
|
62
|
-
|
|
59
|
+
const peerInfo = findPeerInfoInAnswers(answers, this.components.getPeerId());
|
|
60
|
+
if (peerInfo == null) {
|
|
61
|
+
log('could not read peer data from query response');
|
|
63
62
|
return;
|
|
64
|
-
log('got response', event, info);
|
|
65
|
-
const txtRecord = answers.find(a => a.type === 'TXT');
|
|
66
|
-
if (txtRecord == null || txtRecord.type !== 'TXT') {
|
|
67
|
-
return log('missing TXT record in response');
|
|
68
|
-
}
|
|
69
|
-
let peerIdStr;
|
|
70
|
-
try {
|
|
71
|
-
peerIdStr = txtRecord.data[0].toString();
|
|
72
|
-
}
|
|
73
|
-
catch (err) {
|
|
74
|
-
return log('failed to extract peer ID from TXT record data', txtRecord, err);
|
|
75
|
-
}
|
|
76
|
-
if (this._peerIdStr === peerIdStr) {
|
|
77
|
-
return log('ignoring reply to myself');
|
|
78
|
-
}
|
|
79
|
-
let peerId;
|
|
80
|
-
try {
|
|
81
|
-
peerId = PeerId.fromString(peerIdStr);
|
|
82
63
|
}
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
const srvRecord = answers.find(a => a.type === 'SRV');
|
|
87
|
-
if (srvRecord == null || srvRecord.type !== 'SRV') {
|
|
88
|
-
return log('missing SRV record in response');
|
|
64
|
+
if (peerInfo.multiaddrs.length === 0) {
|
|
65
|
+
log('could not parse multiaddrs from mDNS response');
|
|
66
|
+
return;
|
|
89
67
|
}
|
|
90
|
-
log('peer
|
|
91
|
-
const { port } = srvRecord.data ?? {};
|
|
92
|
-
const protos = { A: 'ip4', AAAA: 'ip6' };
|
|
93
|
-
const multiaddrs = answers
|
|
94
|
-
.filter(a => ['A', 'AAAA'].includes(a.type))
|
|
95
|
-
.reduce((addrs, a) => {
|
|
96
|
-
if (a.type !== 'A' && a.type !== 'AAAA') {
|
|
97
|
-
return addrs;
|
|
98
|
-
}
|
|
99
|
-
const maStr = `/${protos[a.type]}/${a.data}/tcp/${port}`;
|
|
100
|
-
try {
|
|
101
|
-
addrs.push(new Multiaddr(maStr));
|
|
102
|
-
log(maStr);
|
|
103
|
-
}
|
|
104
|
-
catch (err) {
|
|
105
|
-
log(`failed to create multiaddr from ${a.type} record data`, maStr, port, err);
|
|
106
|
-
}
|
|
107
|
-
return addrs;
|
|
108
|
-
}, []);
|
|
68
|
+
log('discovered peer in mDNS qeury response %p', peerInfo.id);
|
|
109
69
|
this.dispatchEvent(new CustomEvent('peer', {
|
|
110
|
-
detail:
|
|
111
|
-
id: peerId,
|
|
112
|
-
multiaddrs,
|
|
113
|
-
protcols: []
|
|
114
|
-
}
|
|
70
|
+
detail: peerInfo
|
|
115
71
|
}));
|
|
116
72
|
}
|
|
117
73
|
async stop() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"querier.js","sourceRoot":"","sources":["../../../src/compat/querier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"querier.js","sourceRoot":"","sources":["../../../src/compat/querier.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,17 +1,12 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { QueryPacket } from 'multicast-dns';
|
|
3
|
-
import type { PeerId } from '@libp2p/interfaces/peer-id';
|
|
4
|
-
import type { Multiaddr } from '@multiformats/multiaddr';
|
|
5
3
|
import type { RemoteInfo } from 'dgram';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
10
|
-
export declare class Responder {
|
|
11
|
-
private readonly _peerIdStr;
|
|
12
|
-
private readonly _multiaddrs;
|
|
4
|
+
import { Components, Initializable } from '@libp2p/interfaces/components';
|
|
5
|
+
export declare class Responder implements Initializable {
|
|
6
|
+
private components;
|
|
13
7
|
private _mdns?;
|
|
14
|
-
constructor(
|
|
8
|
+
constructor();
|
|
9
|
+
init(components: Components): void;
|
|
15
10
|
start(): void;
|
|
16
11
|
_onQuery(event: QueryPacket, info: RemoteInfo): void;
|
|
17
12
|
stop(): Promise<void> | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responder.d.ts","sourceRoot":"","sources":["../../../src/compat/responder.ts"],"names":[],"mappings":";AACA,OAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;
|
|
1
|
+
{"version":3,"file":"responder.d.ts","sourceRoot":"","sources":["../../../src/compat/responder.ts"],"names":[],"mappings":";AACA,OAAa,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAIjD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAIzE,qBAAa,SAAU,YAAW,aAAa;IAC7C,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,KAAK,CAAC,CAAmB;;IAMjC,IAAI,CAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IAInC,KAAK;IAKL,QAAQ,CAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU;IA8E9C,IAAI;CAYL"}
|
|
@@ -2,24 +2,24 @@ import OS from 'os';
|
|
|
2
2
|
import MDNS from 'multicast-dns';
|
|
3
3
|
import { logger } from '@libp2p/logger';
|
|
4
4
|
import { SERVICE_TAG_LOCAL } from './constants.js';
|
|
5
|
-
import {
|
|
5
|
+
import { protocols } from '@multiformats/multiaddr';
|
|
6
|
+
import { Components } from '@libp2p/interfaces/components';
|
|
6
7
|
const log = logger('libp2p:mdns:compat:responder');
|
|
7
8
|
export class Responder {
|
|
8
|
-
constructor(
|
|
9
|
-
|
|
10
|
-
if (peerId == null) {
|
|
11
|
-
throw new Error('missing peerId parameter');
|
|
12
|
-
}
|
|
13
|
-
this._peerIdStr = peerId.toString(base58btc);
|
|
14
|
-
this._multiaddrs = multiaddrs;
|
|
9
|
+
constructor() {
|
|
10
|
+
this.components = new Components();
|
|
15
11
|
this._onQuery = this._onQuery.bind(this);
|
|
16
12
|
}
|
|
13
|
+
init(components) {
|
|
14
|
+
this.components = components;
|
|
15
|
+
}
|
|
17
16
|
start() {
|
|
18
17
|
this._mdns = MDNS();
|
|
19
18
|
this._mdns.on('query', this._onQuery);
|
|
20
19
|
}
|
|
21
20
|
_onQuery(event, info) {
|
|
22
|
-
const addresses = this.
|
|
21
|
+
const addresses = this.components.getAddressManager().getAddresses().reduce((acc, addr) => {
|
|
22
|
+
addr = addr.decapsulateCode(protocols('p2p').code);
|
|
23
23
|
if (addr.isThinWaistAddress()) {
|
|
24
24
|
acc.push(addr.toOptions());
|
|
25
25
|
}
|
|
@@ -27,15 +27,16 @@ export class Responder {
|
|
|
27
27
|
}, []);
|
|
28
28
|
// Only announce TCP for now
|
|
29
29
|
if (addresses.length === 0) {
|
|
30
|
+
log('no tcp addresses configured so cannot respond to mDNS query');
|
|
30
31
|
return;
|
|
31
32
|
}
|
|
32
33
|
const questions = event.questions ?? [];
|
|
33
34
|
// Only respond to queries for our service tag
|
|
34
35
|
if (!questions.some(q => q.name === SERVICE_TAG_LOCAL))
|
|
35
36
|
return;
|
|
36
|
-
log('got query', event, info);
|
|
37
|
+
log.trace('got query', event, info);
|
|
37
38
|
const answers = [];
|
|
38
|
-
const peerServiceTagLocal = `${this.
|
|
39
|
+
const peerServiceTagLocal = `${this.components.getPeerId().toString()}.${SERVICE_TAG_LOCAL}`;
|
|
39
40
|
answers.push({
|
|
40
41
|
name: SERVICE_TAG_LOCAL,
|
|
41
42
|
type: 'PTR',
|
|
@@ -43,40 +44,40 @@ export class Responder {
|
|
|
43
44
|
ttl: 120,
|
|
44
45
|
data: peerServiceTagLocal
|
|
45
46
|
});
|
|
46
|
-
// Only announce TCP multiaddrs for now
|
|
47
|
-
const port = addresses[0].port;
|
|
48
|
-
answers.push({
|
|
49
|
-
name: peerServiceTagLocal,
|
|
50
|
-
type: 'SRV',
|
|
51
|
-
class: 'IN',
|
|
52
|
-
ttl: 120,
|
|
53
|
-
data: {
|
|
54
|
-
priority: 10,
|
|
55
|
-
weight: 1,
|
|
56
|
-
port,
|
|
57
|
-
target: OS.hostname()
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
47
|
answers.push({
|
|
61
48
|
name: peerServiceTagLocal,
|
|
62
49
|
type: 'TXT',
|
|
63
50
|
class: 'IN',
|
|
64
51
|
ttl: 120,
|
|
65
|
-
data: [Buffer.from(this.
|
|
52
|
+
data: [Buffer.from(this.components.getPeerId().toString())]
|
|
66
53
|
});
|
|
67
|
-
addresses.forEach(
|
|
68
|
-
if ([4, 6].includes(ma.family)) {
|
|
69
|
-
|
|
70
|
-
name: OS.hostname(),
|
|
71
|
-
type: ma.family === 4 ? 'A' : 'AAAA',
|
|
72
|
-
class: 'IN',
|
|
73
|
-
ttl: 120,
|
|
74
|
-
data: ma.host
|
|
75
|
-
});
|
|
54
|
+
addresses.forEach(ma => {
|
|
55
|
+
if (![4, 6].includes(ma.family)) {
|
|
56
|
+
return;
|
|
76
57
|
}
|
|
58
|
+
answers.push({
|
|
59
|
+
name: peerServiceTagLocal,
|
|
60
|
+
type: 'SRV',
|
|
61
|
+
class: 'IN',
|
|
62
|
+
ttl: 120,
|
|
63
|
+
data: {
|
|
64
|
+
priority: 10,
|
|
65
|
+
weight: 1,
|
|
66
|
+
port: ma.port,
|
|
67
|
+
target: OS.hostname()
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
answers.push({
|
|
71
|
+
name: OS.hostname(),
|
|
72
|
+
type: ma.family === 4 ? 'A' : 'AAAA',
|
|
73
|
+
class: 'IN',
|
|
74
|
+
ttl: 120,
|
|
75
|
+
data: ma.host
|
|
76
|
+
});
|
|
77
77
|
});
|
|
78
78
|
if (this._mdns != null) {
|
|
79
|
-
log('responding to query'
|
|
79
|
+
log.trace('responding to query');
|
|
80
|
+
log.trace('query answers', answers);
|
|
80
81
|
this._mdns.respond(answers, info);
|
|
81
82
|
}
|
|
82
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"responder.js","sourceRoot":"","sources":["../../../src/compat/responder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,IAAqB,MAAM,eAAe,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;
|
|
1
|
+
{"version":3,"file":"responder.js","sourceRoot":"","sources":["../../../src/compat/responder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { PeerInfo } from '@libp2p/interfaces/peer-info';
|
|
2
|
+
import type { PeerId } from '@libp2p/interfaces/peer-id';
|
|
3
|
+
import type { Answer } from 'dns-packet';
|
|
4
|
+
export declare function findPeerInfoInAnswers(answers: Answer[], ourPeerId: PeerId): PeerInfo | undefined;
|
|
5
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/compat/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAIxD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAKxC,wBAAgB,qBAAqB,CAAE,OAAO,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAsEjG"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { logger } from '@libp2p/logger';
|
|
2
|
+
import { peerIdFromString } from '@libp2p/peer-id';
|
|
3
|
+
import { Multiaddr } from '@multiformats/multiaddr';
|
|
4
|
+
import { SERVICE_TAG_LOCAL } from './constants.js';
|
|
5
|
+
const log = logger('libp2p:mdns:compat:utils');
|
|
6
|
+
export function findPeerInfoInAnswers(answers, ourPeerId) {
|
|
7
|
+
const ptrRecord = answers.find(a => a.type === 'PTR' && a.name === SERVICE_TAG_LOCAL);
|
|
8
|
+
// Only deal with responses for our service tag
|
|
9
|
+
if (ptrRecord == null) {
|
|
10
|
+
return;
|
|
11
|
+
}
|
|
12
|
+
log.trace('got response', SERVICE_TAG_LOCAL);
|
|
13
|
+
const txtRecord = answers.find(a => a.type === 'TXT');
|
|
14
|
+
if (txtRecord == null || txtRecord.type !== 'TXT') {
|
|
15
|
+
log('missing TXT record in response');
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
let peerIdStr;
|
|
19
|
+
try {
|
|
20
|
+
peerIdStr = txtRecord.data[0].toString();
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
log('failed to extract peer ID from TXT record data', txtRecord, err);
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
let peerId;
|
|
27
|
+
try {
|
|
28
|
+
peerId = peerIdFromString(peerIdStr);
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
log('failed to create peer ID from TXT record data', peerIdStr, err);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
if (ourPeerId.equals(peerId)) {
|
|
35
|
+
log('ignoring reply to myself');
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const multiaddrs = [];
|
|
39
|
+
const hosts = {
|
|
40
|
+
A: {},
|
|
41
|
+
AAAA: {}
|
|
42
|
+
};
|
|
43
|
+
answers.forEach(answer => {
|
|
44
|
+
if (answer.type === 'A') {
|
|
45
|
+
hosts.A[answer.name] = answer.data;
|
|
46
|
+
}
|
|
47
|
+
if (answer.type === 'AAAA') {
|
|
48
|
+
hosts.AAAA[answer.name] = answer.data;
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
answers.forEach(answer => {
|
|
52
|
+
if (answer.type === 'SRV') {
|
|
53
|
+
if (hosts.A[answer.data.target] != null) {
|
|
54
|
+
multiaddrs.push(new Multiaddr(`/ip4/${hosts.A[answer.data.target]}/tcp/${answer.data.port}/p2p/${peerId.toString()}`));
|
|
55
|
+
}
|
|
56
|
+
else if (hosts.AAAA[answer.data.target] != null) {
|
|
57
|
+
multiaddrs.push(new Multiaddr(`/ip6/${hosts.AAAA[answer.data.target]}/tcp/${answer.data.port}/p2p/${peerId.toString()}`));
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
multiaddrs.push(new Multiaddr(`/dnsaddr/${answer.data.target}/tcp/${answer.data.port}/p2p/${peerId.toString()}`));
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
return {
|
|
65
|
+
id: peerId,
|
|
66
|
+
multiaddrs,
|
|
67
|
+
protocols: []
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/compat/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -1,32 +1,29 @@
|
|
|
1
1
|
import multicastDNS from 'multicast-dns';
|
|
2
2
|
import { EventEmitter } from '@libp2p/interfaces';
|
|
3
|
-
import type { PeerId } from '@libp2p/interfaces/peer-id';
|
|
4
3
|
import type { PeerDiscovery, PeerDiscoveryEvents } from '@libp2p/interfaces/peer-discovery';
|
|
5
|
-
import type {
|
|
6
|
-
import
|
|
4
|
+
import type { PeerInfo } from '@libp2p/interfaces/peer-info';
|
|
5
|
+
import { Components, Initializable } from '@libp2p/interfaces/components';
|
|
7
6
|
export interface MulticastDNSOptions {
|
|
8
|
-
peerId: PeerId;
|
|
9
7
|
broadcast?: boolean;
|
|
10
8
|
interval?: number;
|
|
11
9
|
serviceTag?: string;
|
|
12
10
|
port?: number;
|
|
13
|
-
multiaddrs?: Multiaddr[];
|
|
14
11
|
compat?: boolean;
|
|
15
12
|
compatQueryPeriod?: number;
|
|
16
13
|
compatQueryInterval?: number;
|
|
17
14
|
}
|
|
18
|
-
export declare class MulticastDNS extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery {
|
|
15
|
+
export declare class MulticastDNS extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery, Initializable {
|
|
19
16
|
static tag: string;
|
|
20
17
|
mdns?: multicastDNS.MulticastDNS;
|
|
21
18
|
private readonly broadcast;
|
|
22
19
|
private readonly interval;
|
|
23
20
|
private readonly serviceTag;
|
|
24
21
|
private readonly port;
|
|
25
|
-
private readonly peerId;
|
|
26
|
-
private readonly peerMultiaddrs;
|
|
27
22
|
private _queryInterval;
|
|
28
23
|
private readonly _goMdns?;
|
|
29
|
-
|
|
24
|
+
private components;
|
|
25
|
+
constructor(options?: MulticastDNSOptions);
|
|
26
|
+
init(components: Components): void;
|
|
30
27
|
isStarted(): boolean;
|
|
31
28
|
/**
|
|
32
29
|
* Start sending queries to the LAN.
|
|
@@ -36,7 +33,7 @@ export declare class MulticastDNS extends EventEmitter<PeerDiscoveryEvents> impl
|
|
|
36
33
|
start(): Promise<void>;
|
|
37
34
|
_onMdnsQuery(event: multicastDNS.QueryPacket): void;
|
|
38
35
|
_onMdnsResponse(event: multicastDNS.ResponsePacket): void;
|
|
39
|
-
_onPeer(evt: CustomEvent<
|
|
36
|
+
_onPeer(evt: CustomEvent<PeerInfo>): void;
|
|
40
37
|
/**
|
|
41
38
|
* Stop sending queries to the LAN.
|
|
42
39
|
*
|
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,OAAO,YAAY,MAAM,eAAe,CAAA;AACxC,OAAO,EAAe,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAI9D,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,YAAY,MAAM,eAAe,CAAA;AACxC,OAAO,EAAe,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAI9D,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAA;AAC3F,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAIzE,MAAM,WAAW,mBAAmB;IAClC,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAA;CAC7B;AAED,qBAAa,YAAa,SAAQ,YAAY,CAAC,mBAAmB,CAAE,YAAW,aAAa,EAAE,aAAa;IACzG,MAAM,CAAC,GAAG,SAAS;IAEZ,IAAI,CAAC,EAAE,YAAY,CAAC,YAAY,CAAA;IAEvC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAgB;IACzC,OAAO,CAAC,UAAU,CAA+B;gBAEpC,OAAO,GAAE,mBAAwB;IAqB9C,IAAI,CAAE,UAAU,EAAE,UAAU,GAAG,IAAI;IAMnC,SAAS;IAIT;;;;OAIG;IACG,KAAK;IAgBX,YAAY,CAAE,KAAK,EAAE,YAAY,CAAC,WAAW;IAS7C,eAAe,CAAE,KAAK,EAAE,YAAY,CAAC,cAAc;IAkBnD,OAAO,CAAE,GAAG,EAAE,WAAW,CAAC,QAAQ,CAAC;IAUnC;;;;OAIG;IACG,IAAI;CA2BX"}
|