@libp2p/mdns 0.18.0 → 1.0.2

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
@@ -1,37 +1,34 @@
1
1
  import multicastDNS from 'multicast-dns';
2
- import { EventEmitter } from 'events';
3
- import debug from 'debug';
2
+ import { CustomEvent, EventEmitter } from '@libp2p/interfaces';
3
+ import { logger } from '@libp2p/logger';
4
4
  import * as query from './query.js';
5
5
  import { GoMulticastDNS } from './compat/index.js';
6
- const log = Object.assign(debug('libp2p:mdns'), {
7
- error: debug('libp2p:mdns:error')
8
- });
6
+ import { Components } from '@libp2p/interfaces/components';
7
+ const log = logger('libp2p:mdns');
9
8
  export class MulticastDNS extends EventEmitter {
10
- constructor(options) {
9
+ constructor(options = {}) {
11
10
  super();
12
- if (options.peerId == null) {
13
- throw new Error('needs own PeerId to work');
14
- }
11
+ this.components = new Components();
15
12
  this.broadcast = options.broadcast !== false;
16
13
  this.interval = options.interval ?? (1e3 * 10);
17
14
  this.serviceTag = options.serviceTag ?? 'ipfs.local';
18
15
  this.port = options.port ?? 5353;
19
- this.peerId = options.peerId;
20
- this.peerMultiaddrs = options.multiaddrs ?? [];
21
16
  this._queryInterval = null;
22
17
  this._onPeer = this._onPeer.bind(this);
23
18
  this._onMdnsQuery = this._onMdnsQuery.bind(this);
24
19
  this._onMdnsResponse = this._onMdnsResponse.bind(this);
25
20
  if (options.compat !== false) {
26
21
  this._goMdns = new GoMulticastDNS({
27
- multiaddrs: this.peerMultiaddrs,
28
- peerId: options.peerId,
29
22
  queryPeriod: options.compatQueryPeriod,
30
23
  queryInterval: options.compatQueryInterval
31
24
  });
32
- this._goMdns.on('peer', this._onPeer);
25
+ this._goMdns.addEventListener('peer', this._onPeer);
33
26
  }
34
27
  }
28
+ init(components) {
29
+ this.components = components;
30
+ this._goMdns?.init(components);
31
+ }
35
32
  isStarted() {
36
33
  return Boolean(this.mdns);
37
34
  }
@@ -56,21 +53,31 @@ export class MulticastDNS extends EventEmitter {
56
53
  if (this.mdns == null) {
57
54
  return;
58
55
  }
59
- query.gotQuery(event, this.mdns, this.peerId, this.peerMultiaddrs, this.serviceTag, this.broadcast);
56
+ log.trace('received incoming mDNS query');
57
+ query.gotQuery(event, this.mdns, this.components.getPeerId(), this.components.getAddressManager().getAddresses(), this.serviceTag, this.broadcast);
60
58
  }
61
59
  _onMdnsResponse(event) {
60
+ log.trace('received mDNS query response');
62
61
  try {
63
- const foundPeer = query.gotResponse(event, this.peerId, this.serviceTag);
62
+ const foundPeer = query.gotResponse(event, this.components.getPeerId(), this.serviceTag);
64
63
  if (foundPeer != null) {
65
- this.emit('peer', foundPeer);
64
+ log('discovered peer in mDNS qeury response %p', foundPeer.id);
65
+ this.dispatchEvent(new CustomEvent('peer', {
66
+ detail: foundPeer
67
+ }));
66
68
  }
67
69
  }
68
70
  catch (err) {
69
- log('Error processing peer response', err);
71
+ log.error('Error processing peer response', err);
70
72
  }
71
73
  }
72
- _onPeer(peerData) {
73
- (this.mdns != null) && this.emit('peer', peerData);
74
+ _onPeer(evt) {
75
+ if (this.mdns == null) {
76
+ return;
77
+ }
78
+ this.dispatchEvent(new CustomEvent('peer', {
79
+ detail: evt.detail
80
+ }));
74
81
  }
75
82
  /**
76
83
  * Stop sending queries to the LAN.
@@ -83,7 +90,7 @@ export class MulticastDNS extends EventEmitter {
83
90
  }
84
91
  this.mdns.removeListener('query', this._onMdnsQuery);
85
92
  this.mdns.removeListener('response', this._onMdnsResponse);
86
- this._goMdns?.removeListener('peer', this._onPeer);
93
+ this._goMdns?.removeEventListener('peer', this._onPeer);
87
94
  if (this._queryInterval != null) {
88
95
  clearInterval(this._queryInterval);
89
96
  this._queryInterval = null;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import { Multiaddr } from '@multiformats/multiaddr';
3
- import { PeerId } from '@libp2p/peer-id';
3
+ import type { PeerId } from '@libp2p/interfaces/peer-id';
4
4
  import type { PeerData } from '@libp2p/interfaces/peer-data';
5
5
  import type { MulticastDNS, ResponsePacket, QueryPacket } from 'multicast-dns';
6
6
  export declare function queryLAN(mdns: MulticastDNS, serviceTag: string, interval: number): NodeJS.Timer;
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAmB,MAAM,yBAAyB,CAAA;AAEpE,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AACxC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAO9E,wBAAgB,QAAQ,CAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAcjF;AAUD,wBAAgB,WAAW,CAAE,GAAG,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CA2D/G;AAED,wBAAgB,QAAQ,CAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,QAmE9I"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAA8B,MAAM,yBAAyB,CAAA;AAE/E,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACxD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAK9E,wBAAgB,QAAQ,CAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gBAejF;AAUD,wBAAgB,WAAW,CAAE,GAAG,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CA6D/G;AAED,wBAAgB,QAAQ,CAAE,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,QAqE9I"}
package/dist/src/query.js CHANGED
@@ -1,11 +1,8 @@
1
1
  import os from 'os';
2
- import debug from 'debug';
3
- import { Multiaddr } from '@multiformats/multiaddr';
4
- import { base58btc } from 'multiformats/bases/base58';
5
- import { PeerId } from '@libp2p/peer-id';
6
- const log = Object.assign(debug('libp2p:mdns'), {
7
- error: debug('libp2p:mdns:error')
8
- });
2
+ import { logger } from '@libp2p/logger';
3
+ import { Multiaddr, protocols } from '@multiformats/multiaddr';
4
+ import { peerIdFromString } from '@libp2p/peer-id';
5
+ const log = logger('libp2p:mdns:query');
9
6
  export function queryLAN(mdns, serviceTag, interval) {
10
7
  const query = () => {
11
8
  log('query', serviceTag);
@@ -69,28 +66,31 @@ export function gotResponse(rsp, localPeerId, serviceTag) {
69
66
  multiaddrs.push(ma);
70
67
  }
71
68
  });
72
- if (localPeerId.toString(base58btc) === b58Id) {
69
+ if (localPeerId.toString() === b58Id) {
73
70
  return; // replied to myself, ignore
74
71
  }
75
- log('peer found -', b58Id);
72
+ const id = peerIdFromString(b58Id);
73
+ log('peer found %p', id);
76
74
  return {
77
- id: PeerId.fromString(b58Id),
75
+ id,
78
76
  multiaddrs,
79
77
  protocols: []
80
78
  };
81
79
  }
82
80
  export function gotQuery(qry, mdns, peerId, multiaddrs, serviceTag, broadcast) {
83
81
  if (!broadcast) {
82
+ log('not responding to mDNS query as broadcast mode is false');
84
83
  return;
85
84
  }
86
85
  const addresses = multiaddrs.reduce((acc, addr) => {
87
- if (addr.isThinWaistAddress()) {
86
+ if (addr.decapsulateCode(protocols('p2p').code).isThinWaistAddress()) {
88
87
  acc.push(addr.toOptions());
89
88
  }
90
89
  return acc;
91
90
  }, []);
92
91
  // Only announce TCP for now
93
92
  if (addresses.length === 0) {
93
+ log('no thin waist addresses present, cannot respond to query');
94
94
  return;
95
95
  }
96
96
  if (qry.questions[0] != null && qry.questions[0].name === serviceTag) {
@@ -100,12 +100,12 @@ export function gotQuery(qry, mdns, peerId, multiaddrs, serviceTag, broadcast) {
100
100
  type: 'PTR',
101
101
  class: 'IN',
102
102
  ttl: 120,
103
- data: peerId.toString(base58btc) + '.' + serviceTag
103
+ data: peerId.toString() + '.' + serviceTag
104
104
  });
105
105
  // Only announce TCP multiaddrs for now
106
106
  const port = addresses[0].port;
107
107
  answers.push({
108
- name: peerId.toString(base58btc) + '.' + serviceTag,
108
+ name: peerId.toString() + '.' + serviceTag,
109
109
  type: 'SRV',
110
110
  class: 'IN',
111
111
  ttl: 120,
@@ -117,11 +117,11 @@ export function gotQuery(qry, mdns, peerId, multiaddrs, serviceTag, broadcast) {
117
117
  }
118
118
  });
119
119
  answers.push({
120
- name: peerId.toString(base58btc) + '.' + serviceTag,
120
+ name: peerId.toString() + '.' + serviceTag,
121
121
  type: 'TXT',
122
122
  class: 'IN',
123
123
  ttl: 120,
124
- data: peerId.toString(base58btc)
124
+ data: peerId.toString()
125
125
  });
126
126
  addresses.forEach((addr) => {
127
127
  if ([4, 6].includes(addr.family)) {
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,EAAE,SAAS,EAAmB,MAAM,yBAAyB,CAAA;AACpE,OAAO,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAA;AAKxC,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE;IAC9C,KAAK,EAAE,KAAK,CAAC,mBAAmB,CAAC;CAClC,CAAC,CAAA;AAEF,MAAM,UAAU,QAAQ,CAAE,IAAkB,EAAE,UAAkB,EAAE,QAAgB;IAChF,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QACxB,IAAI,CAAC,KAAK,CAAC;YACT,SAAS,EAAE,CAAC;oBACV,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,KAAK;iBACZ,CAAC;SACH,CAAC,CAAA;IACJ,CAAC,CAAA;IAED,wDAAwD;IACxD,KAAK,EAAE,CAAA;IACP,OAAO,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;AACrC,CAAC;AAUD,MAAM,UAAU,WAAW,CAAE,GAAmB,EAAE,WAAmB,EAAE,UAAkB;IACvF,IAAI,GAAG,CAAC,OAAO,IAAI,IAAI,EAAE;QACvB,OAAM;KACP;IAED,MAAM,OAAO,GAAY;QACvB,CAAC,EAAE,EAAE;QACL,IAAI,EAAE,EAAE;KACT,CAAA;IAED,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QAC7B,QAAQ,MAAM,CAAC,IAAI,EAAE;YACnB,KAAK,KAAK;gBAAE,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC;gBAAC,MAAK;YACvC,KAAK,KAAK;gBAAE,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC;gBAAC,MAAK;YACvC,KAAK,KAAK;gBAAE,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC;gBAAC,MAAK;YACvC,KAAK,GAAG;gBAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAAC,MAAK;YACvC,KAAK,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAAC,MAAK;YAC7C,OAAO,CAAC,CAAC,MAAK;SACf;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,OAAO,CAAC,GAAG,IAAI,IAAI;QACnB,OAAO,CAAC,GAAG,CAAC,IAAI,KAAK,UAAU;QAC/B,OAAO,CAAC,GAAG,IAAI,IAAI;QACnB,OAAO,CAAC,GAAG,IAAI,IAAI,EAAE;QACvB,OAAM;KACP;IAED,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAA;IAClC,MAAM,UAAU,GAAgB,EAAE,CAAA;IAElC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACtB,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,QAAQ,IAAI,EAAE,CAAC,CAAA;QAEtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;YACzC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;SACpB;IACH,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;QACzB,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,IAAI,QAAQ,IAAI,EAAE,CAAC,CAAA;QAEtD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE;YACzC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;SACpB;IACH,CAAC,CAAC,CAAA;IAEF,IAAI,WAAW,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,KAAK,EAAE;QAC7C,OAAM,CAAC,4BAA4B;KACpC;IAED,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;IAE1B,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC;QAC5B,UAAU;QACV,SAAS,EAAE,EAAE;KACd,CAAA;AACH,CAAC;AAED,MAAM,UAAU,QAAQ,CAAE,GAAgB,EAAE,IAAkB,EAAE,MAAc,EAAE,UAAuB,EAAE,UAAkB,EAAE,SAAkB;IAC7I,IAAI,CAAC,SAAS,EAAE;QACd,OAAM;KACP;IAED,MAAM,SAAS,GAAsB,UAAU,CAAC,MAAM,CAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACtF,IAAI,IAAI,CAAC,kBAAkB,EAAE,EAAE;YAC7B,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAA;SAC3B;QACD,OAAO,GAAG,CAAA;IACZ,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,4BAA4B;IAC5B,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE;QAC1B,OAAM;KACP;IAED,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE;QACpE,MAAM,OAAO,GAAa,EAAE,CAAA;QAE5B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,UAAU;YAChB,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,UAAU;SACpD,CAAC,CAAA;QAEF,uCAAuC;QACvC,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;QAE9B,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,UAAU;YACnD,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,GAAG;YACR,IAAI,EAAE;gBACJ,QAAQ,EAAE,EAAE;gBACZ,MAAM,EAAE,CAAC;gBACT,IAAI,EAAE,IAAI;gBACV,MAAM,EAAE,EAAE,CAAC,QAAQ,EAAE;aACtB;SACF,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,CAAC;YACX,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,GAAG,GAAG,UAAU;YACnD,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC;SACjC,CAAC,CAAA;QAEF,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACzB,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;gBAChC,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,EAAE,CAAC,QAAQ,EAAE;oBACnB,IAAI,EAAE,IAAI,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;oBACtC,KAAK,EAAE,IAAI;oBACX,GAAG,EAAE,GAAG;oBACR,IAAI,EAAE,IAAI,CAAC,IAAI;iBAChB,CAAC,CAAA;aACH;QACH,CAAC,CAAC,CAAA;QAEF,GAAG,CAAC,qBAAqB,CAAC,CAAA;QAC1B,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAA;KACtB;AACH,CAAC"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/query.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/mdns",
3
- "version": "0.18.0",
3
+ "version": "1.0.2",
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",
@@ -123,27 +123,27 @@
123
123
  "dep-check": "aegir dep-check dist/src/**/*.js dist/test/**/*.js",
124
124
  "build": "tsc",
125
125
  "pretest": "npm run build",
126
- "test": "aegir test -f ./dist/test",
126
+ "test": "aegir test -f ./dist/test/*.js -f ./dist/test/*/*.js",
127
127
  "test:node": "npm run test -- -t node --cov",
128
128
  "test:electron-main": "npm run test -- -t electron-main",
129
129
  "release": "semantic-release"
130
130
  },
131
131
  "dependencies": {
132
- "@libp2p/peer-id": "^1.0.4",
133
- "@multiformats/multiaddr": "^10.0.0",
134
- "debug": "^4.3.1",
132
+ "@libp2p/logger": "^1.1.2",
133
+ "@libp2p/peer-id": "^1.1.8",
134
+ "@multiformats/multiaddr": "^10.1.5",
135
135
  "multicast-dns": "^7.2.0",
136
136
  "multiformats": "^9.6.3"
137
137
  },
138
138
  "devDependencies": {
139
- "@libp2p/interface-compliance-tests": "^1.0.8",
140
- "@libp2p/interfaces": "^1.1.1",
141
- "@libp2p/peer-id-factory": "^1.0.3",
142
- "@types/debug": "^4.1.7",
139
+ "@libp2p/interface-compliance-tests": "^1.1.16",
140
+ "@libp2p/interfaces": "^1.3.14",
141
+ "@libp2p/peer-id-factory": "^1.0.8",
143
142
  "@types/multicast-dns": "^7.2.1",
144
- "aegir": "^36.1.0",
143
+ "aegir": "^36.1.3",
145
144
  "delay": "^5.0.0",
146
145
  "p-defer": "^4.0.0",
147
- "p-wait-for": "^4.1.0"
146
+ "p-wait-for": "^4.1.0",
147
+ "ts-sinon": "^2.0.2"
148
148
  }
149
149
  }
@@ -1,37 +1,42 @@
1
1
  // Compatibility with Go libp2p MDNS
2
- import { EventEmitter } from 'events'
2
+ import { EventEmitter, CustomEvent } from '@libp2p/interfaces'
3
3
  import { Responder } from './responder.js'
4
4
  import { Querier } from './querier.js'
5
- import type { Multiaddr } from '@multiformats/multiaddr'
6
- import type { PeerId } from '@libp2p/interfaces/peer-id'
7
- import type { PeerDiscovery } from '@libp2p/interfaces/peer-discovery'
5
+ import type { PeerDiscovery, PeerDiscoveryEvents } from '@libp2p/interfaces/peer-discovery'
6
+ import type { Components, Initializable } from '@libp2p/interfaces/components'
8
7
 
9
- export class GoMulticastDNS extends EventEmitter implements PeerDiscovery {
8
+ export interface GoMulticastDNSInit {
9
+ queryPeriod?: number
10
+ queryInterval?: number
11
+ }
12
+
13
+ export class GoMulticastDNS extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery, Initializable {
10
14
  private _started: boolean
11
15
  private readonly _responder: Responder
12
16
  private readonly _querier: Querier
13
17
 
14
- constructor (options: { peerId: PeerId, multiaddrs: Multiaddr[], queryPeriod?: number, queryInterval?: number }) {
18
+ constructor (options: GoMulticastDNSInit = {}) {
15
19
  super()
16
- const { peerId, multiaddrs, queryPeriod, queryInterval } = options
20
+ const { queryPeriod, queryInterval } = options
17
21
 
18
22
  this._started = false
19
23
 
20
- this._responder = new Responder({
21
- peerId,
22
- multiaddrs
23
- })
24
+ this._responder = new Responder()
24
25
  this._querier = new Querier({
25
- peerId,
26
26
  queryInterval,
27
27
  queryPeriod
28
28
  })
29
29
 
30
- this._querier.on('peer', (peerData) => {
31
- this.emit('peer', peerData)
30
+ this._querier.addEventListener('peer', (evt) => {
31
+ this.dispatchEvent(new CustomEvent('peer', { detail: evt.detail }))
32
32
  })
33
33
  }
34
34
 
35
+ init (components: Components): void {
36
+ this._responder.init(components)
37
+ this._querier.init(components)
38
+ }
39
+
35
40
  isStarted () {
36
41
  return this._started
37
42
  }
@@ -1,20 +1,16 @@
1
- import { EventEmitter } from 'events'
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
- import debug from 'debug'
3
+ import { logger } from '@libp2p/logger'
6
4
  import { SERVICE_TAG_LOCAL, MULTICAST_IP, MULTICAST_PORT } from './constants.js'
7
- import { base58btc } from 'multiformats/bases/base58'
8
- import type { PeerDiscovery } from '@libp2p/interfaces/peer-discovery'
5
+ import type { PeerDiscovery, PeerDiscoveryEvents } from '@libp2p/interfaces/peer-discovery'
9
6
  import type { ResponsePacket } from 'multicast-dns'
10
7
  import type { RemoteInfo } from 'dgram'
8
+ import { Components, Initializable } from '@libp2p/interfaces/components'
9
+ import { findPeerDataInAnswers } from './utils.js'
11
10
 
12
- const log = Object.assign(debug('libp2p:mdns:compat:querier'), {
13
- error: debug('libp2p:mdns:compat:querier:error')
14
- })
11
+ const log = logger('libp2p:mdns:compat:querier')
15
12
 
16
- export interface QuerierOptions {
17
- peerId: PeerId
13
+ export interface QuerierInit {
18
14
  queryInterval?: number
19
15
  queryPeriod?: number
20
16
  }
@@ -23,24 +19,17 @@ export interface Handle {
23
19
  stop: () => Promise<void>
24
20
  }
25
21
 
26
- export class Querier extends EventEmitter implements PeerDiscovery {
27
- private readonly _peerIdStr: string
28
- private readonly _options: Required<QuerierOptions>
22
+ export class Querier extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery, Initializable {
23
+ private readonly _init: Required<QuerierInit>
29
24
  private _handle?: Handle
25
+ private components: Components = new Components()
30
26
 
31
- constructor (options: QuerierOptions) {
27
+ constructor (init: QuerierInit = {}) {
32
28
  super()
33
29
 
34
- const { peerId, queryInterval, queryPeriod } = options
35
-
36
- if (peerId == null) {
37
- throw new Error('missing peerId parameter')
38
- }
39
-
40
- this._peerIdStr = peerId.toString(base58btc)
41
- this._options = {
42
- peerId,
30
+ const { queryInterval, queryPeriod } = init
43
31
 
32
+ this._init = {
44
33
  // Re-query in leu of network change detection (every 60s by default)
45
34
  queryInterval: queryInterval ?? 60000,
46
35
  // Time for which the MDNS server will stay alive waiting for responses
@@ -53,6 +42,10 @@ export class Querier extends EventEmitter implements PeerDiscovery {
53
42
  this._onResponse = this._onResponse.bind(this)
54
43
  }
55
44
 
45
+ init (components: Components): void {
46
+ this.components = components
47
+ }
48
+
56
49
  isStarted () {
57
50
  return Boolean(this._handle)
58
51
  }
@@ -84,74 +77,32 @@ export class Querier extends EventEmitter implements PeerDiscovery {
84
77
  }
85
78
  }
86
79
  }, {
87
- period: this._options.queryPeriod,
88
- interval: this._options.queryInterval
80
+ period: this._init.queryPeriod,
81
+ interval: this._init.queryInterval
89
82
  })
90
83
  }
91
84
 
92
85
  _onResponse (event: ResponsePacket, info: RemoteInfo) {
86
+ log.trace('received mDNS query response')
93
87
  const answers = event.answers ?? []
94
- const ptrRecord = answers.find(a => a.type === 'PTR' && a.name === SERVICE_TAG_LOCAL)
95
-
96
- // Only deal with responses for our service tag
97
- if (ptrRecord == null) return
98
-
99
- log('got response', event, info)
100
-
101
- const txtRecord = answers.find(a => a.type === 'TXT')
102
- if (txtRecord == null || txtRecord.type !== 'TXT') {
103
- return log('missing TXT record in response')
104
- }
105
88
 
106
- let peerIdStr
107
- try {
108
- peerIdStr = txtRecord.data[0].toString()
109
- } catch (err) {
110
- return log('failed to extract peer ID from TXT record data', txtRecord, err)
111
- }
112
-
113
- if (this._peerIdStr === peerIdStr) {
114
- return log('ignoring reply to myself')
115
- }
89
+ const peerData = findPeerDataInAnswers(answers, this.components.getPeerId())
116
90
 
117
- let peerId
118
- try {
119
- peerId = PeerId.fromString(peerIdStr)
120
- } catch (err) {
121
- return log('failed to create peer ID from TXT record data', peerIdStr, err)
91
+ if (peerData == null) {
92
+ log('could not read peer data from query response')
93
+ return
122
94
  }
123
95
 
124
- const srvRecord = answers.find(a => a.type === 'SRV')
125
- if (srvRecord == null || srvRecord.type !== 'SRV') {
126
- return log('missing SRV record in response')
96
+ if (peerData.multiaddrs.length === 0) {
97
+ log('could not parse multiaddrs from mDNS response')
98
+ return
127
99
  }
128
100
 
129
- log('peer found', peerIdStr)
101
+ log('discovered peer in mDNS qeury response %p', peerData.id)
130
102
 
131
- const { port } = srvRecord.data ?? {}
132
- const protos = { A: 'ip4', AAAA: 'ip6' }
133
-
134
- const multiaddrs = answers
135
- .filter(a => ['A', 'AAAA'].includes(a.type))
136
- .reduce<Multiaddr[]>((addrs, a) => {
137
- if (a.type !== 'A' && a.type !== 'AAAA') {
138
- return addrs
139
- }
140
-
141
- const maStr = `/${protos[a.type]}/${a.data}/tcp/${port}`
142
- try {
143
- addrs.push(new Multiaddr(maStr))
144
- log(maStr)
145
- } catch (err) {
146
- log(`failed to create multiaddr from ${a.type} record data`, maStr, port, err)
147
- }
148
- return addrs
149
- }, [])
150
-
151
- this.emit('peer', {
152
- id: peerId,
153
- multiaddrs
154
- })
103
+ this.dispatchEvent(new CustomEvent('peer', {
104
+ detail: peerData
105
+ }))
155
106
  }
156
107
 
157
108
  async stop () {
@@ -1,54 +1,45 @@
1
1
  import OS from 'os'
2
2
  import MDNS, { QueryPacket } from 'multicast-dns'
3
- import debug from 'debug'
3
+ import { logger } from '@libp2p/logger'
4
4
  import { SERVICE_TAG_LOCAL } from './constants.js'
5
- import type { PeerId } from '@libp2p/interfaces/peer-id'
6
- import type { Multiaddr, MultiaddrObject } from '@multiformats/multiaddr'
7
- import { base58btc } from 'multiformats/bases/base58'
5
+ import { MultiaddrObject, protocols } from '@multiformats/multiaddr'
8
6
  import type { RemoteInfo } from 'dgram'
9
7
  import type { Answer } from 'dns-packet'
8
+ import { Components, Initializable } from '@libp2p/interfaces/components'
10
9
 
11
- const log = Object.assign(debug('libp2p:mdns:compat:responder'), {
12
- error: debug('libp2p:mdns:compat:responder:error')
13
- })
10
+ const log = logger('libp2p:mdns:compat:responder')
14
11
 
15
- export interface ResponderOptions {
16
- peerId: PeerId
17
- multiaddrs: Multiaddr[]
18
- }
19
-
20
- export class Responder {
21
- private readonly _peerIdStr: string
22
- private readonly _multiaddrs: Multiaddr[]
12
+ export class Responder implements Initializable {
13
+ private components: Components = new Components()
23
14
  private _mdns?: MDNS.MulticastDNS
24
15
 
25
- constructor (options: ResponderOptions) {
26
- const { peerId, multiaddrs } = options
27
-
28
- if (peerId == null) {
29
- throw new Error('missing peerId parameter')
30
- }
31
-
32
- this._peerIdStr = peerId.toString(base58btc)
33
- this._multiaddrs = multiaddrs
16
+ constructor () {
34
17
  this._onQuery = this._onQuery.bind(this)
35
18
  }
36
19
 
20
+ init (components: Components): void {
21
+ this.components = components
22
+ }
23
+
37
24
  start () {
38
25
  this._mdns = MDNS()
39
26
  this._mdns.on('query', this._onQuery)
40
27
  }
41
28
 
42
29
  _onQuery (event: QueryPacket, info: RemoteInfo) {
43
- const addresses = this._multiaddrs.reduce<MultiaddrObject[]>((acc, addr) => {
30
+ const addresses = this.components.getAddressManager().getAddresses().reduce<MultiaddrObject[]>((acc, addr) => {
31
+ addr = addr.decapsulateCode(protocols('p2p').code)
32
+
44
33
  if (addr.isThinWaistAddress()) {
45
34
  acc.push(addr.toOptions())
46
35
  }
36
+
47
37
  return acc
48
38
  }, [])
49
39
 
50
40
  // Only announce TCP for now
51
41
  if (addresses.length === 0) {
42
+ log('no tcp addresses configured so cannot respond to mDNS query')
52
43
  return
53
44
  }
54
45
 
@@ -57,10 +48,10 @@ export class Responder {
57
48
  // Only respond to queries for our service tag
58
49
  if (!questions.some(q => q.name === SERVICE_TAG_LOCAL)) return
59
50
 
60
- log('got query', event, info)
51
+ log.trace('got query', event, info)
61
52
 
62
53
  const answers: Answer[] = []
63
- const peerServiceTagLocal = `${this._peerIdStr}.${SERVICE_TAG_LOCAL}`
54
+ const peerServiceTagLocal = `${this.components.getPeerId().toString()}.${SERVICE_TAG_LOCAL}`
64
55
 
65
56
  answers.push({
66
57
  name: SERVICE_TAG_LOCAL,
@@ -70,44 +61,45 @@ export class Responder {
70
61
  data: peerServiceTagLocal
71
62
  })
72
63
 
73
- // Only announce TCP multiaddrs for now
74
- const port = addresses[0].port
75
-
76
- answers.push({
77
- name: peerServiceTagLocal,
78
- type: 'SRV',
79
- class: 'IN',
80
- ttl: 120,
81
- data: {
82
- priority: 10,
83
- weight: 1,
84
- port,
85
- target: OS.hostname()
86
- }
87
- })
88
-
89
64
  answers.push({
90
65
  name: peerServiceTagLocal,
91
66
  type: 'TXT',
92
67
  class: 'IN',
93
68
  ttl: 120,
94
- data: [Buffer.from(this._peerIdStr)]
69
+ data: [Buffer.from(this.components.getPeerId().toString())]
95
70
  })
96
71
 
97
- addresses.forEach((ma) => {
98
- if ([4, 6].includes(ma.family)) {
99
- answers.push({
100
- name: OS.hostname(),
101
- type: ma.family === 4 ? 'A' : 'AAAA',
102
- class: 'IN',
103
- ttl: 120,
104
- data: ma.host
105
- })
72
+ addresses.forEach(ma => {
73
+ if (![4, 6].includes(ma.family)) {
74
+ return
106
75
  }
76
+
77
+ answers.push({
78
+ name: peerServiceTagLocal,
79
+ type: 'SRV',
80
+ class: 'IN',
81
+ ttl: 120,
82
+ data: {
83
+ priority: 10,
84
+ weight: 1,
85
+ port: ma.port,
86
+ target: OS.hostname()
87
+ }
88
+ })
89
+
90
+ answers.push({
91
+ name: OS.hostname(),
92
+ type: ma.family === 4 ? 'A' : 'AAAA',
93
+ class: 'IN',
94
+ ttl: 120,
95
+ data: ma.host
96
+ })
107
97
  })
108
98
 
109
99
  if (this._mdns != null) {
110
- log('responding to query', answers)
100
+ log.trace('responding to query')
101
+ log.trace('query answers', answers)
102
+
111
103
  this._mdns.respond(answers, info)
112
104
  }
113
105
  }