@libp2p/mdns 9.0.13 → 9.0.14-0b4a2ee79

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/src/index.js CHANGED
@@ -75,119 +75,7 @@
75
75
  * }]
76
76
  * ```
77
77
  */
78
- import { CustomEvent, TypedEventEmitter } from '@libp2p/interface/events';
79
- import { peerDiscovery } from '@libp2p/interface/peer-discovery';
80
- import { logger } from '@libp2p/logger';
81
- import multicastDNS from 'multicast-dns';
82
- import * as query from './query.js';
83
- import { stringGen } from './utils.js';
84
- const log = logger('libp2p:mdns');
85
- class MulticastDNS extends TypedEventEmitter {
86
- mdns;
87
- broadcast;
88
- interval;
89
- serviceTag;
90
- peerName;
91
- port;
92
- ip;
93
- _queryInterval;
94
- components;
95
- constructor(components, init = {}) {
96
- super();
97
- this.broadcast = init.broadcast !== false;
98
- this.interval = init.interval ?? (1e3 * 10);
99
- this.serviceTag = init.serviceTag ?? '_p2p._udp.local';
100
- this.ip = init.ip ?? '224.0.0.251';
101
- this.peerName = init.peerName ?? stringGen(63);
102
- // 63 is dns label limit
103
- if (this.peerName.length >= 64) {
104
- throw new Error('Peer name should be less than 64 chars long');
105
- }
106
- this.port = init.port ?? 5353;
107
- this.components = components;
108
- this._queryInterval = null;
109
- this._onMdnsQuery = this._onMdnsQuery.bind(this);
110
- this._onMdnsResponse = this._onMdnsResponse.bind(this);
111
- this._onMdnsWarning = this._onMdnsWarning.bind(this);
112
- this._onMdnsError = this._onMdnsError.bind(this);
113
- }
114
- [peerDiscovery] = this;
115
- [Symbol.toStringTag] = '@libp2p/mdns';
116
- isStarted() {
117
- return Boolean(this.mdns);
118
- }
119
- /**
120
- * Start sending queries to the LAN.
121
- *
122
- * @returns {void}
123
- */
124
- async start() {
125
- if (this.mdns != null) {
126
- return;
127
- }
128
- this.mdns = multicastDNS({ port: this.port, ip: this.ip });
129
- this.mdns.on('query', this._onMdnsQuery);
130
- this.mdns.on('response', this._onMdnsResponse);
131
- this.mdns.on('warning', this._onMdnsWarning);
132
- this.mdns.on('error', this._onMdnsError);
133
- this._queryInterval = query.queryLAN(this.mdns, this.serviceTag, this.interval);
134
- }
135
- _onMdnsQuery(event) {
136
- if (this.mdns == null) {
137
- return;
138
- }
139
- log.trace('received incoming mDNS query');
140
- query.gotQuery(event, this.mdns, this.peerName, this.components.addressManager.getAddresses(), this.serviceTag, this.broadcast);
141
- }
142
- _onMdnsResponse(event) {
143
- log.trace('received mDNS query response');
144
- try {
145
- const foundPeer = query.gotResponse(event, this.peerName, this.serviceTag);
146
- if (foundPeer != null) {
147
- log('discovered peer in mDNS query response %p', foundPeer.id);
148
- this.dispatchEvent(new CustomEvent('peer', {
149
- detail: foundPeer
150
- }));
151
- }
152
- }
153
- catch (err) {
154
- log.error('Error processing peer response', err);
155
- }
156
- }
157
- _onMdnsWarning(err) {
158
- log.error('mdns warning', err);
159
- }
160
- _onMdnsError(err) {
161
- log.error('mdns error', err);
162
- }
163
- /**
164
- * Stop sending queries to the LAN.
165
- *
166
- * @returns {Promise}
167
- */
168
- async stop() {
169
- if (this.mdns == null) {
170
- return;
171
- }
172
- this.mdns.removeListener('query', this._onMdnsQuery);
173
- this.mdns.removeListener('response', this._onMdnsResponse);
174
- this.mdns.removeListener('warning', this._onMdnsWarning);
175
- this.mdns.removeListener('error', this._onMdnsError);
176
- if (this._queryInterval != null) {
177
- clearInterval(this._queryInterval);
178
- this._queryInterval = null;
179
- }
180
- await new Promise((resolve) => {
181
- if (this.mdns != null) {
182
- this.mdns.destroy(resolve);
183
- }
184
- else {
185
- resolve();
186
- }
187
- });
188
- this.mdns = undefined;
189
- }
190
- }
78
+ import { MulticastDNS } from './mdns.js';
191
79
  export function mdns(init = {}) {
192
80
  return (components) => new MulticastDNS(components, init);
193
81
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4EG;AAEH,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAA;AACzE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,YAAY,MAAM,eAAe,CAAA;AACxC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAMtC,MAAM,GAAG,GAAG,MAAM,CAAC,aAAa,CAAC,CAAA;AAqCjC,MAAM,YAAa,SAAQ,iBAAsC;IACxD,IAAI,CAA4B;IAEtB,SAAS,CAAS;IAClB,QAAQ,CAAQ;IAChB,UAAU,CAAQ;IAClB,QAAQ,CAAQ;IAChB,IAAI,CAAQ;IACZ,EAAE,CAAQ;IACnB,cAAc,CAAuC;IAC5C,UAAU,CAAwB;IAEnD,YAAa,UAAkC,EAAE,OAAyB,EAAE;QAC1E,KAAK,EAAE,CAAA;QAEP,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,KAAK,KAAK,CAAA;QACzC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,CAAA;QAC3C,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,iBAAiB,CAAA;QACtD,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,EAAE,IAAI,aAAa,CAAA;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,EAAE,CAAC,CAAA;QAC9C,wBAAwB;QACxB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,EAAE,EAAE;YAC9B,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAA;SAC/D;QACD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAA;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAChD,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClD,CAAC;IAEQ,CAAC,aAAa,CAAC,GAAG,IAAI,CAAA;IAEtB,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,cAAc,CAAA;IAE9C,SAAS;QACP,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;YACrB,OAAM;SACP;QAED,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAA;QAC1D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QACxC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;QAC9C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QAC5C,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QAExC,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IACjF,CAAC;IAED,YAAY,CAAE,KAA+B;QAC3C,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;YACrB,OAAM;SACP;QAED,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;QACzC,KAAK,CAAC,QAAQ,CACZ,KAAK,EACL,IAAI,CAAC,IAAI,EACT,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,YAAY,EAAE,EAC7C,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,SAAS,CAAC,CAAA;IACnB,CAAC;IAED,eAAe,CAAE,KAAkC;QACjD,GAAG,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAA;QAEzC,IAAI;YACF,MAAM,SAAS,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;YAE1E,IAAI,SAAS,IAAI,IAAI,EAAE;gBACrB,GAAG,CAAC,2CAA2C,EAAE,SAAS,CAAC,EAAE,CAAC,CAAA;gBAE9D,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAW,MAAM,EAAE;oBACnD,MAAM,EAAE,SAAS;iBAClB,CAAC,CAAC,CAAA;aACJ;SACF;QAAC,OAAO,GAAG,EAAE;YACZ,GAAG,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAA;SACjD;IACH,CAAC;IAED,cAAc,CAAE,GAAU;QACxB,GAAG,CAAC,KAAK,CAAC,cAAc,EAAE,GAAG,CAAC,CAAA;IAChC,CAAC;IAED,YAAY,CAAE,GAAU;QACtB,GAAG,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,CAAC,CAAA;IAC9B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;YACrB,OAAM;SACP;QAED,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QACpD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAA;QAC1D,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,IAAI,CAAC,cAAc,CAAC,CAAA;QACxD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAA;QAEpD,IAAI,IAAI,CAAC,cAAc,IAAI,IAAI,EAAE;YAC/B,aAAa,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;YAClC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;SAC3B;QAED,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,IAAI,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE;gBACrB,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;aAC3B;iBAAM;gBACL,OAAO,EAAE,CAAA;aACV;QACH,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,IAAI,GAAG,SAAS,CAAA;IACvB,CAAC;CACF;AAED,MAAM,UAAU,IAAI,CAAE,OAAyB,EAAE;IAC/C,OAAO,CAAC,UAAkC,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACnF,CAAC;AAED;;;;;;;;;;;;;;;EAeE"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4EG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAIxC,MAAM,UAAU,IAAI,CAAE,OAAyB,EAAE;IAC/C,OAAO,CAAC,UAAkC,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AACnF,CAAC;AAED;;;;;;;;;;;;;;;EAeE"}
@@ -0,0 +1,52 @@
1
+ import { EventEmitter } from '@libp2p/interface/events';
2
+ import { peerDiscovery } from '@libp2p/interface/peer-discovery';
3
+ import multicastDNS from 'multicast-dns';
4
+ import type { ComponentLogger } from '@libp2p/interface';
5
+ import type { PeerDiscovery, PeerDiscoveryEvents } from '@libp2p/interface/peer-discovery';
6
+ import type { Startable } from '@libp2p/interface/src/startable.js';
7
+ import type { AddressManager } from '@libp2p/interface-internal/address-manager';
8
+ export interface MulticastDNSInit {
9
+ broadcast?: boolean;
10
+ interval?: number;
11
+ serviceTag?: string;
12
+ peerName?: string;
13
+ port?: number;
14
+ ip?: string;
15
+ }
16
+ export interface MulticastDNSComponents {
17
+ addressManager: AddressManager;
18
+ logger: ComponentLogger;
19
+ }
20
+ export declare class MulticastDNS extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery, Startable {
21
+ mdns?: multicastDNS.MulticastDNS;
22
+ private readonly log;
23
+ private readonly broadcast;
24
+ private readonly interval;
25
+ private readonly serviceTag;
26
+ private readonly peerName;
27
+ private readonly port;
28
+ private readonly ip;
29
+ private _queryInterval;
30
+ private readonly components;
31
+ constructor(components: MulticastDNSComponents, init?: MulticastDNSInit);
32
+ readonly [peerDiscovery]: this;
33
+ readonly [Symbol.toStringTag] = "@libp2p/mdns";
34
+ isStarted(): boolean;
35
+ /**
36
+ * Start sending queries to the LAN.
37
+ *
38
+ * @returns {void}
39
+ */
40
+ start(): Promise<void>;
41
+ _onMdnsQuery(event: multicastDNS.QueryPacket): void;
42
+ _onMdnsResponse(event: multicastDNS.ResponsePacket): void;
43
+ _onMdnsWarning(err: Error): void;
44
+ _onMdnsError(err: Error): void;
45
+ /**
46
+ * Stop sending queries to the LAN.
47
+ *
48
+ * @returns {Promise}
49
+ */
50
+ stop(): Promise<void>;
51
+ }
52
+ //# sourceMappingURL=mdns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdns.d.ts","sourceRoot":"","sources":["../../src/mdns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,YAAY,EAAE,MAAM,0BAA0B,CAAA;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAA;AAChE,OAAO,YAAY,MAAM,eAAe,CAAA;AAGxC,OAAO,KAAK,EAAE,eAAe,EAAU,MAAM,mBAAmB,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAE1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAA;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4CAA4C,CAAA;AAEhF,MAAM,WAAW,gBAAgB;IAC/B,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,EAAE,CAAC,EAAE,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,sBAAsB;IACrC,cAAc,EAAE,cAAc,CAAA;IAC9B,MAAM,EAAE,eAAe,CAAA;CACxB;AAED,qBAAa,YAAa,SAAQ,YAAY,CAAC,mBAAmB,CAAE,YAAW,aAAa,EAAE,SAAS;IAC9F,IAAI,CAAC,EAAE,YAAY,CAAC,YAAY,CAAA;IAEvC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,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,QAAQ,CAAQ;IACjC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAQ;IAC7B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAQ;IAC3B,OAAO,CAAC,cAAc,CAAuC;IAC7D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAwB;gBAEtC,UAAU,EAAE,sBAAsB,EAAE,IAAI,GAAE,gBAAqB;IAsB5E,QAAQ,CAAC,CAAC,aAAa,CAAC,OAAO;IAE/B,QAAQ,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,kBAAiB;IAE9C,SAAS,IAAK,OAAO;IAIrB;;;;OAIG;IACG,KAAK,IAAK,OAAO,CAAC,IAAI,CAAC;IAgB7B,YAAY,CAAE,KAAK,EAAE,YAAY,CAAC,WAAW,GAAG,IAAI;IAkBpD,eAAe,CAAE,KAAK,EAAE,YAAY,CAAC,cAAc,GAAG,IAAI;IAoB1D,cAAc,CAAE,GAAG,EAAE,KAAK,GAAG,IAAI;IAIjC,YAAY,CAAE,GAAG,EAAE,KAAK,GAAG,IAAI;IAI/B;;;;OAIG;IACG,IAAI,IAAK,OAAO,CAAC,IAAI,CAAC;CAyB7B"}
@@ -0,0 +1,120 @@
1
+ import { CustomEvent, EventEmitter } from '@libp2p/interface/events';
2
+ import { peerDiscovery } from '@libp2p/interface/peer-discovery';
3
+ import multicastDNS from 'multicast-dns';
4
+ import * as query from './query.js';
5
+ import { stringGen } from './utils.js';
6
+ export class MulticastDNS extends EventEmitter {
7
+ mdns;
8
+ log;
9
+ broadcast;
10
+ interval;
11
+ serviceTag;
12
+ peerName;
13
+ port;
14
+ ip;
15
+ _queryInterval;
16
+ components;
17
+ constructor(components, init = {}) {
18
+ super();
19
+ this.log = components.logger.forComponent('libp2p:mdns');
20
+ this.broadcast = init.broadcast !== false;
21
+ this.interval = init.interval ?? (1e3 * 10);
22
+ this.serviceTag = init.serviceTag ?? '_p2p._udp.local';
23
+ this.ip = init.ip ?? '224.0.0.251';
24
+ this.peerName = init.peerName ?? stringGen(63);
25
+ // 63 is dns label limit
26
+ if (this.peerName.length >= 64) {
27
+ throw new Error('Peer name should be less than 64 chars long');
28
+ }
29
+ this.port = init.port ?? 5353;
30
+ this.components = components;
31
+ this._queryInterval = null;
32
+ this._onMdnsQuery = this._onMdnsQuery.bind(this);
33
+ this._onMdnsResponse = this._onMdnsResponse.bind(this);
34
+ this._onMdnsWarning = this._onMdnsWarning.bind(this);
35
+ this._onMdnsError = this._onMdnsError.bind(this);
36
+ }
37
+ [peerDiscovery] = this;
38
+ [Symbol.toStringTag] = '@libp2p/mdns';
39
+ isStarted() {
40
+ return Boolean(this.mdns);
41
+ }
42
+ /**
43
+ * Start sending queries to the LAN.
44
+ *
45
+ * @returns {void}
46
+ */
47
+ async start() {
48
+ if (this.mdns != null) {
49
+ return;
50
+ }
51
+ this.mdns = multicastDNS({ port: this.port, ip: this.ip });
52
+ this.mdns.on('query', this._onMdnsQuery);
53
+ this.mdns.on('response', this._onMdnsResponse);
54
+ this.mdns.on('warning', this._onMdnsWarning);
55
+ this.mdns.on('error', this._onMdnsError);
56
+ this._queryInterval = query.queryLAN(this.mdns, this.serviceTag, this.interval, {
57
+ log: this.log
58
+ });
59
+ }
60
+ _onMdnsQuery(event) {
61
+ if (this.mdns == null) {
62
+ return;
63
+ }
64
+ this.log.trace('received incoming mDNS query');
65
+ query.gotQuery(event, this.mdns, this.peerName, this.components.addressManager.getAddresses(), this.serviceTag, this.broadcast, {
66
+ log: this.log
67
+ });
68
+ }
69
+ _onMdnsResponse(event) {
70
+ this.log.trace('received mDNS query response');
71
+ try {
72
+ const foundPeer = query.gotResponse(event, this.peerName, this.serviceTag, {
73
+ log: this.log
74
+ });
75
+ if (foundPeer != null) {
76
+ this.log('discovered peer in mDNS query response %p', foundPeer.id);
77
+ this.dispatchEvent(new CustomEvent('peer', {
78
+ detail: foundPeer
79
+ }));
80
+ }
81
+ }
82
+ catch (err) {
83
+ this.log.error('Error processing peer response', err);
84
+ }
85
+ }
86
+ _onMdnsWarning(err) {
87
+ this.log.error('mdns warning', err);
88
+ }
89
+ _onMdnsError(err) {
90
+ this.log.error('mdns error', err);
91
+ }
92
+ /**
93
+ * Stop sending queries to the LAN.
94
+ *
95
+ * @returns {Promise}
96
+ */
97
+ async stop() {
98
+ if (this.mdns == null) {
99
+ return;
100
+ }
101
+ this.mdns.removeListener('query', this._onMdnsQuery);
102
+ this.mdns.removeListener('response', this._onMdnsResponse);
103
+ this.mdns.removeListener('warning', this._onMdnsWarning);
104
+ this.mdns.removeListener('error', this._onMdnsError);
105
+ if (this._queryInterval != null) {
106
+ clearInterval(this._queryInterval);
107
+ this._queryInterval = null;
108
+ }
109
+ await new Promise((resolve) => {
110
+ if (this.mdns != null) {
111
+ this.mdns.destroy(resolve);
112
+ }
113
+ else {
114
+ resolve();
115
+ }
116
+ });
117
+ this.mdns = undefined;
118
+ }
119
+ }
120
+ //# sourceMappingURL=mdns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdns.js","sourceRoot":"","sources":["../../src/mdns.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { type Multiaddr } from '@multiformats/multiaddr';
2
+ import type { LoggerOptions } from '@libp2p/interface';
2
3
  import type { PeerInfo } from '@libp2p/interface/peer-info';
3
4
  import type { MulticastDNS, QueryPacket, ResponsePacket } from 'multicast-dns';
4
- export declare function queryLAN(mdns: MulticastDNS, serviceTag: string, interval: number): ReturnType<typeof setInterval>;
5
- export declare function gotResponse(rsp: ResponsePacket, localPeerName: string, serviceTag: string): PeerInfo | undefined;
6
- export declare function gotQuery(qry: QueryPacket, mdns: MulticastDNS, peerName: string, multiaddrs: Multiaddr[], serviceTag: string, broadcast: boolean): void;
5
+ export declare function queryLAN(mdns: MulticastDNS, serviceTag: string, interval: number, options?: LoggerOptions): ReturnType<typeof setInterval>;
6
+ export declare function gotResponse(rsp: ResponsePacket, localPeerName: string, serviceTag: string, options?: LoggerOptions): PeerInfo | undefined;
7
+ export declare function gotQuery(qry: QueryPacket, mdns: MulticastDNS, peerName: string, multiaddrs: Multiaddr[], serviceTag: string, broadcast: boolean, options?: LoggerOptions): void;
7
8
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"AAGA,OAAO,EAAa,KAAK,SAAS,EAAa,MAAM,yBAAyB,CAAA;AAC9E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAE3D,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,UAAU,CAAC,OAAO,WAAW,CAAC,CAelH;AAED,wBAAgB,WAAW,CAAE,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAuDjH;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,CAqDvJ"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"AAEA,OAAO,EAAa,KAAK,SAAS,EAAa,MAAM,yBAAyB,CAAA;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAA;AAE3D,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9E,wBAAgB,QAAQ,CAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAe3I;AAED,wBAAgB,WAAW,CAAE,GAAG,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,QAAQ,GAAG,SAAS,CAsD1I;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,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,IAAI,CAqDhL"}
package/dist/src/query.js CHANGED
@@ -1,11 +1,9 @@
1
- import { logger } from '@libp2p/logger';
2
1
  import { peerIdFromString } from '@libp2p/peer-id';
3
2
  import { isPrivate } from '@libp2p/utils/multiaddr/is-private';
4
3
  import { multiaddr, protocols } from '@multiformats/multiaddr';
5
- const log = logger('libp2p:mdns:query');
6
- export function queryLAN(mdns, serviceTag, interval) {
4
+ export function queryLAN(mdns, serviceTag, interval, options) {
7
5
  const query = () => {
8
- log.trace('query', serviceTag);
6
+ options?.log.trace('query', serviceTag);
9
7
  mdns.query({
10
8
  questions: [{
11
9
  name: serviceTag,
@@ -17,7 +15,7 @@ export function queryLAN(mdns, serviceTag, interval) {
17
15
  query();
18
16
  return setInterval(query, interval);
19
17
  }
20
- export function gotResponse(rsp, localPeerName, serviceTag) {
18
+ export function gotResponse(rsp, localPeerName, serviceTag, options) {
21
19
  if (rsp.answers == null) {
22
20
  return;
23
21
  }
@@ -62,20 +60,19 @@ export function gotResponse(rsp, localPeerName, serviceTag) {
62
60
  if (peerId == null) {
63
61
  throw new Error("Multiaddr doesn't contain PeerId");
64
62
  }
65
- log('peer found %p', peerId);
63
+ options?.log('peer found %p', peerId);
66
64
  return {
67
65
  id: peerIdFromString(peerId),
68
- multiaddrs: multiaddrs.map(addr => addr.decapsulateCode(protocols('p2p').code)),
69
- protocols: []
66
+ multiaddrs: multiaddrs.map(addr => addr.decapsulateCode(protocols('p2p').code))
70
67
  };
71
68
  }
72
69
  catch (e) {
73
- log.error('failed to parse mdns response', e);
70
+ options?.log.error('failed to parse mdns response', e);
74
71
  }
75
72
  }
76
- export function gotQuery(qry, mdns, peerName, multiaddrs, serviceTag, broadcast) {
73
+ export function gotQuery(qry, mdns, peerName, multiaddrs, serviceTag, broadcast, options) {
77
74
  if (!broadcast) {
78
- log('not responding to mDNS query as broadcast mode is false');
75
+ options?.log('not responding to mDNS query as broadcast mode is false');
79
76
  return;
80
77
  }
81
78
  if (multiaddrs.length === 0) {
@@ -99,12 +96,12 @@ export function gotQuery(qry, mdns, peerName, multiaddrs, serviceTag, broadcast)
99
96
  // TXT record fields have a max data length of 255 bytes
100
97
  // see 6.1 - https://www.ietf.org/rfc/rfc6763.txt
101
98
  if (data.length > 255) {
102
- log('multiaddr %a is too long to use in mDNS query response', addr);
99
+ options?.log('multiaddr %a is too long to use in mDNS query response', addr);
103
100
  return;
104
101
  }
105
102
  // spec mandates multiaddr contains peer id
106
103
  if (addr.getPeerId() == null) {
107
- log('multiaddr %a did not have a peer ID so cannot be used in mDNS query response', addr);
104
+ options?.log('multiaddr %a did not have a peer ID so cannot be used in mDNS query response', addr);
108
105
  return;
109
106
  }
110
107
  answers.push({
@@ -115,7 +112,7 @@ export function gotQuery(qry, mdns, peerName, multiaddrs, serviceTag, broadcast)
115
112
  data
116
113
  });
117
114
  });
118
- log.trace('responding to query');
115
+ options?.log.trace('responding to query');
119
116
  mdns.respond(answers);
120
117
  }
121
118
  }
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "name": "@libp2p/mdns",
3
- "version": "9.0.13",
3
+ "version": "9.0.14-0b4a2ee79",
4
4
  "description": "Node.js libp2p mDNS discovery implementation for peer discovery",
5
5
  "license": "Apache-2.0 OR MIT",
6
- "homepage": "https://github.com/libp2p/js-libp2p/tree/master/packages/peer-discovery-mdns#readme",
6
+ "homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/peer-discovery-mdns#readme",
7
7
  "repository": {
8
8
  "type": "git",
9
9
  "url": "git+https://github.com/libp2p/js-libp2p.git"
@@ -45,19 +45,19 @@
45
45
  "test:electron-main": "aegir test -t electron-main"
46
46
  },
47
47
  "dependencies": {
48
- "@libp2p/interface": "^0.1.5",
49
- "@libp2p/logger": "^3.0.5",
50
- "@libp2p/peer-id": "^3.0.5",
51
- "@libp2p/utils": "^4.0.6",
52
- "@multiformats/multiaddr": "^12.1.5",
48
+ "@libp2p/interface": "0.1.6-0b4a2ee79",
49
+ "@libp2p/peer-id": "3.0.6-0b4a2ee79",
50
+ "@libp2p/utils": "4.0.7-0b4a2ee79",
51
+ "@multiformats/multiaddr": "^12.1.10",
53
52
  "@types/multicast-dns": "^7.2.1",
54
53
  "dns-packet": "^5.4.0",
55
54
  "multicast-dns": "^7.2.5"
56
55
  },
57
56
  "devDependencies": {
58
- "@libp2p/interface-compliance-tests": "^4.1.4",
59
- "@libp2p/interface-internal": "^0.1.8",
60
- "@libp2p/peer-id-factory": "^3.0.7",
57
+ "@libp2p/interface-compliance-tests": "4.1.5-0b4a2ee79",
58
+ "@libp2p/interface-internal": "0.1.9-0b4a2ee79",
59
+ "@libp2p/logger": "3.1.0-0b4a2ee79",
60
+ "@libp2p/peer-id-factory": "3.0.8-0b4a2ee79",
61
61
  "aegir": "^41.0.2",
62
62
  "p-wait-for": "^5.0.2",
63
63
  "ts-sinon": "^2.0.2"
package/src/index.ts CHANGED
@@ -76,186 +76,9 @@
76
76
  * ```
77
77
  */
78
78
 
79
- import { CustomEvent, TypedEventEmitter } from '@libp2p/interface/events'
80
- import { peerDiscovery } from '@libp2p/interface/peer-discovery'
81
- import { logger } from '@libp2p/logger'
82
- import multicastDNS from 'multicast-dns'
83
- import * as query from './query.js'
84
- import { stringGen } from './utils.js'
85
- import type { PeerDiscovery, PeerDiscoveryEvents } from '@libp2p/interface/peer-discovery'
86
- import type { PeerInfo } from '@libp2p/interface/peer-info'
87
- import type { Startable } from '@libp2p/interface/src/startable.js'
88
- import type { AddressManager } from '@libp2p/interface-internal/address-manager'
89
-
90
- const log = logger('libp2p:mdns')
91
-
92
- export interface MulticastDNSInit {
93
- /**
94
- * (true/false) announce our presence through mDNS, default `true`
95
- */
96
- broadcast?: boolean
97
-
98
- /**
99
- * query interval, default 10 \* 1000 (10 seconds)
100
- */
101
- interval?: number
102
-
103
- /**
104
- * name of the service announce , default '_p2p._udp.local\`
105
- */
106
- serviceTag?: string
107
- /**
108
- * Peer name to announce (should not be peeer id), default random string
109
- */
110
- peerName?: string
111
-
112
- /**
113
- * UDP port to broadcast to
114
- */
115
- port?: number
116
-
117
- /**
118
- * UDP IP to broadcast to
119
- */
120
- ip?: string
121
- }
122
-
123
- export interface MulticastDNSComponents {
124
- addressManager: AddressManager
125
- }
126
-
127
- class MulticastDNS extends TypedEventEmitter<PeerDiscoveryEvents> implements PeerDiscovery, Startable {
128
- public mdns?: multicastDNS.MulticastDNS
129
-
130
- private readonly broadcast: boolean
131
- private readonly interval: number
132
- private readonly serviceTag: string
133
- private readonly peerName: string
134
- private readonly port: number
135
- private readonly ip: string
136
- private _queryInterval: ReturnType<typeof setInterval> | null
137
- private readonly components: MulticastDNSComponents
138
-
139
- constructor (components: MulticastDNSComponents, init: MulticastDNSInit = {}) {
140
- super()
141
-
142
- this.broadcast = init.broadcast !== false
143
- this.interval = init.interval ?? (1e3 * 10)
144
- this.serviceTag = init.serviceTag ?? '_p2p._udp.local'
145
- this.ip = init.ip ?? '224.0.0.251'
146
- this.peerName = init.peerName ?? stringGen(63)
147
- // 63 is dns label limit
148
- if (this.peerName.length >= 64) {
149
- throw new Error('Peer name should be less than 64 chars long')
150
- }
151
- this.port = init.port ?? 5353
152
- this.components = components
153
- this._queryInterval = null
154
- this._onMdnsQuery = this._onMdnsQuery.bind(this)
155
- this._onMdnsResponse = this._onMdnsResponse.bind(this)
156
- this._onMdnsWarning = this._onMdnsWarning.bind(this)
157
- this._onMdnsError = this._onMdnsError.bind(this)
158
- }
159
-
160
- readonly [peerDiscovery] = this
161
-
162
- readonly [Symbol.toStringTag] = '@libp2p/mdns'
163
-
164
- isStarted (): boolean {
165
- return Boolean(this.mdns)
166
- }
167
-
168
- /**
169
- * Start sending queries to the LAN.
170
- *
171
- * @returns {void}
172
- */
173
- async start (): Promise<void> {
174
- if (this.mdns != null) {
175
- return
176
- }
177
-
178
- this.mdns = multicastDNS({ port: this.port, ip: this.ip })
179
- this.mdns.on('query', this._onMdnsQuery)
180
- this.mdns.on('response', this._onMdnsResponse)
181
- this.mdns.on('warning', this._onMdnsWarning)
182
- this.mdns.on('error', this._onMdnsError)
183
-
184
- this._queryInterval = query.queryLAN(this.mdns, this.serviceTag, this.interval)
185
- }
186
-
187
- _onMdnsQuery (event: multicastDNS.QueryPacket): void {
188
- if (this.mdns == null) {
189
- return
190
- }
191
-
192
- log.trace('received incoming mDNS query')
193
- query.gotQuery(
194
- event,
195
- this.mdns,
196
- this.peerName,
197
- this.components.addressManager.getAddresses(),
198
- this.serviceTag,
199
- this.broadcast)
200
- }
201
-
202
- _onMdnsResponse (event: multicastDNS.ResponsePacket): void {
203
- log.trace('received mDNS query response')
204
-
205
- try {
206
- const foundPeer = query.gotResponse(event, this.peerName, this.serviceTag)
207
-
208
- if (foundPeer != null) {
209
- log('discovered peer in mDNS query response %p', foundPeer.id)
210
-
211
- this.dispatchEvent(new CustomEvent<PeerInfo>('peer', {
212
- detail: foundPeer
213
- }))
214
- }
215
- } catch (err) {
216
- log.error('Error processing peer response', err)
217
- }
218
- }
219
-
220
- _onMdnsWarning (err: Error): void {
221
- log.error('mdns warning', err)
222
- }
223
-
224
- _onMdnsError (err: Error): void {
225
- log.error('mdns error', err)
226
- }
227
-
228
- /**
229
- * Stop sending queries to the LAN.
230
- *
231
- * @returns {Promise}
232
- */
233
- async stop (): Promise<void> {
234
- if (this.mdns == null) {
235
- return
236
- }
237
-
238
- this.mdns.removeListener('query', this._onMdnsQuery)
239
- this.mdns.removeListener('response', this._onMdnsResponse)
240
- this.mdns.removeListener('warning', this._onMdnsWarning)
241
- this.mdns.removeListener('error', this._onMdnsError)
242
-
243
- if (this._queryInterval != null) {
244
- clearInterval(this._queryInterval)
245
- this._queryInterval = null
246
- }
247
-
248
- await new Promise<void>((resolve) => {
249
- if (this.mdns != null) {
250
- this.mdns.destroy(resolve)
251
- } else {
252
- resolve()
253
- }
254
- })
255
-
256
- this.mdns = undefined
257
- }
258
- }
79
+ import { MulticastDNS } from './mdns.js'
80
+ import type { MulticastDNSInit, MulticastDNSComponents } from './mdns.js'
81
+ import type { PeerDiscovery } from '@libp2p/interface/peer-discovery'
259
82
 
260
83
  export function mdns (init: MulticastDNSInit = {}): (components: MulticastDNSComponents) => PeerDiscovery {
261
84
  return (components: MulticastDNSComponents) => new MulticastDNS(components, init)