@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/dist/src/index.js CHANGED
@@ -3,33 +3,32 @@ import { CustomEvent, EventEmitter } from '@libp2p/interfaces';
3
3
  import { logger } from '@libp2p/logger';
4
4
  import * as query from './query.js';
5
5
  import { GoMulticastDNS } from './compat/index.js';
6
+ import { Components } from '@libp2p/interfaces/components';
6
7
  const log = logger('libp2p:mdns');
7
8
  export class MulticastDNS extends EventEmitter {
8
- constructor(options) {
9
+ constructor(options = {}) {
9
10
  super();
10
- if (options.peerId == null) {
11
- throw new Error('needs own PeerId to work');
12
- }
11
+ this.components = new Components();
13
12
  this.broadcast = options.broadcast !== false;
14
13
  this.interval = options.interval ?? (1e3 * 10);
15
14
  this.serviceTag = options.serviceTag ?? 'ipfs.local';
16
15
  this.port = options.port ?? 5353;
17
- this.peerId = options.peerId;
18
- this.peerMultiaddrs = options.multiaddrs ?? [];
19
16
  this._queryInterval = null;
20
17
  this._onPeer = this._onPeer.bind(this);
21
18
  this._onMdnsQuery = this._onMdnsQuery.bind(this);
22
19
  this._onMdnsResponse = this._onMdnsResponse.bind(this);
23
20
  if (options.compat !== false) {
24
21
  this._goMdns = new GoMulticastDNS({
25
- multiaddrs: this.peerMultiaddrs,
26
- peerId: options.peerId,
27
22
  queryPeriod: options.compatQueryPeriod,
28
23
  queryInterval: options.compatQueryInterval
29
24
  });
30
25
  this._goMdns.addEventListener('peer', this._onPeer);
31
26
  }
32
27
  }
28
+ init(components) {
29
+ this.components = components;
30
+ this._goMdns?.init(components);
31
+ }
33
32
  isStarted() {
34
33
  return Boolean(this.mdns);
35
34
  }
@@ -54,19 +53,22 @@ export class MulticastDNS extends EventEmitter {
54
53
  if (this.mdns == null) {
55
54
  return;
56
55
  }
57
- 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);
58
58
  }
59
59
  _onMdnsResponse(event) {
60
+ log.trace('received mDNS query response');
60
61
  try {
61
- const foundPeer = query.gotResponse(event, this.peerId, this.serviceTag);
62
+ const foundPeer = query.gotResponse(event, this.components.getPeerId(), this.serviceTag);
62
63
  if (foundPeer != null) {
64
+ log('discovered peer in mDNS qeury response %p', foundPeer.id);
63
65
  this.dispatchEvent(new CustomEvent('peer', {
64
66
  detail: foundPeer
65
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
74
  _onPeer(evt) {
@@ -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,9 +1,9 @@
1
1
  /// <reference types="node" />
2
2
  import { Multiaddr } from '@multiformats/multiaddr';
3
- import { PeerId } from '@libp2p/peer-id';
4
- import type { PeerData } from '@libp2p/interfaces/peer-data';
3
+ import type { PeerId } from '@libp2p/interfaces/peer-id';
4
+ import type { PeerInfo } from '@libp2p/interfaces/peer-info';
5
5
  import type { MulticastDNS, ResponsePacket, QueryPacket } from 'multicast-dns';
6
6
  export declare function queryLAN(mdns: MulticastDNS, serviceTag: string, interval: number): NodeJS.Timer;
7
- export declare function gotResponse(rsp: ResponsePacket, localPeerId: PeerId, serviceTag: string): PeerData | undefined;
7
+ export declare function gotResponse(rsp: ResponsePacket, localPeerId: PeerId, serviceTag: string): PeerInfo | undefined;
8
8
  export declare function gotQuery(qry: QueryPacket, mdns: MulticastDNS, peerId: PeerId, multiaddrs: Multiaddr[], serviceTag: string, broadcast: boolean): void;
9
9
  //# sourceMappingURL=query.d.ts.map
@@ -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;AAK9E,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,9 +1,8 @@
1
1
  import os from 'os';
2
2
  import { logger } from '@libp2p/logger';
3
- import { Multiaddr } from '@multiformats/multiaddr';
4
- import { base58btc } from 'multiformats/bases/base58';
5
- import { PeerId } from '@libp2p/peer-id';
6
- const log = logger('libp2p:mdns');
3
+ import { Multiaddr, protocols } from '@multiformats/multiaddr';
4
+ import { peerIdFromString } from '@libp2p/peer-id';
5
+ const log = logger('libp2p:mdns:query');
7
6
  export function queryLAN(mdns, serviceTag, interval) {
8
7
  const query = () => {
9
8
  log('query', serviceTag);
@@ -67,28 +66,31 @@ export function gotResponse(rsp, localPeerId, serviceTag) {
67
66
  multiaddrs.push(ma);
68
67
  }
69
68
  });
70
- if (localPeerId.toString(base58btc) === b58Id) {
69
+ if (localPeerId.toString() === b58Id) {
71
70
  return; // replied to myself, ignore
72
71
  }
73
- log('peer found -', b58Id);
72
+ const id = peerIdFromString(b58Id);
73
+ log('peer found %p', id);
74
74
  return {
75
- id: PeerId.fromString(b58Id),
75
+ id,
76
76
  multiaddrs,
77
77
  protocols: []
78
78
  };
79
79
  }
80
80
  export function gotQuery(qry, mdns, peerId, multiaddrs, serviceTag, broadcast) {
81
81
  if (!broadcast) {
82
+ log('not responding to mDNS query as broadcast mode is false');
82
83
  return;
83
84
  }
84
85
  const addresses = multiaddrs.reduce((acc, addr) => {
85
- if (addr.isThinWaistAddress()) {
86
+ if (addr.decapsulateCode(protocols('p2p').code).isThinWaistAddress()) {
86
87
  acc.push(addr.toOptions());
87
88
  }
88
89
  return acc;
89
90
  }, []);
90
91
  // Only announce TCP for now
91
92
  if (addresses.length === 0) {
93
+ log('no thin waist addresses present, cannot respond to query');
92
94
  return;
93
95
  }
94
96
  if (qry.questions[0] != null && qry.questions[0].name === serviceTag) {
@@ -98,12 +100,12 @@ export function gotQuery(qry, mdns, peerId, multiaddrs, serviceTag, broadcast) {
98
100
  type: 'PTR',
99
101
  class: 'IN',
100
102
  ttl: 120,
101
- data: peerId.toString(base58btc) + '.' + serviceTag
103
+ data: peerId.toString() + '.' + serviceTag
102
104
  });
103
105
  // Only announce TCP multiaddrs for now
104
106
  const port = addresses[0].port;
105
107
  answers.push({
106
- name: peerId.toString(base58btc) + '.' + serviceTag,
108
+ name: peerId.toString() + '.' + serviceTag,
107
109
  type: 'SRV',
108
110
  class: 'IN',
109
111
  ttl: 120,
@@ -115,11 +117,11 @@ export function gotQuery(qry, mdns, peerId, multiaddrs, serviceTag, broadcast) {
115
117
  }
116
118
  });
117
119
  answers.push({
118
- name: peerId.toString(base58btc) + '.' + serviceTag,
120
+ name: peerId.toString() + '.' + serviceTag,
119
121
  type: 'TXT',
120
122
  class: 'IN',
121
123
  ttl: 120,
122
- data: peerId.toString(base58btc)
124
+ data: peerId.toString()
123
125
  });
124
126
  addresses.forEach((addr) => {
125
127
  if ([4, 6].includes(addr.family)) {
@@ -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":"AAAA,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAAE,SAAS,EAAmB,SAAS,EAAE,MAAM,yBAAyB,CAAA;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AAMlD,MAAM,GAAG,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAA;AAEvC,MAAM,UAAU,QAAQ,CAAE,IAAkB,EAAE,UAAkB,EAAE,QAAgB;IAChF,MAAM,KAAK,GAAG,GAAG,EAAE;QACjB,GAAG,CAAC,OAAO,EAAE,UAAU,CAAC,CAAA;QAExB,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,EAAE,KAAK,KAAK,EAAE;QACpC,OAAM,CAAC,4BAA4B;KACpC;IAED,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;IAElC,GAAG,CAAC,eAAe,EAAE,EAAE,CAAC,CAAA;IAExB,OAAO;QACL,EAAE;QACF,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,GAAG,CAAC,yDAAyD,CAAC,CAAA;QAC9D,OAAM;KACP;IAED,MAAM,SAAS,GAAsB,UAAU,CAAC,MAAM,CAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;QACtF,IAAI,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,kBAAkB,EAAE,EAAE;YACpE,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,GAAG,CAAC,0DAA0D,CAAC,CAAA;QAC/D,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,EAAE,GAAG,GAAG,GAAG,UAAU;SAC3C,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,EAAE,GAAG,GAAG,GAAG,UAAU;YAC1C,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,EAAE,GAAG,GAAG,GAAG,UAAU;YAC1C,IAAI,EAAE,KAAK;YACX,KAAK,EAAE,IAAI;YACX,GAAG,EAAE,GAAG;YACR,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE;SACxB,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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/mdns",
3
- "version": "1.0.0",
3
+ "version": "1.0.3",
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,26 +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/logger": "^1.0.2",
133
- "@libp2p/peer-id": "^1.1.1",
134
- "@multiformats/multiaddr": "^10.0.0",
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.1.3",
140
- "@libp2p/interfaces": "^1.3.3",
141
- "@libp2p/peer-id-factory": "^1.0.4",
139
+ "@libp2p/interface-compliance-tests": "^1.1.20",
140
+ "@libp2p/interfaces": "^1.3.18",
141
+ "@libp2p/peer-id-factory": "^1.0.8",
142
142
  "@types/multicast-dns": "^7.2.1",
143
- "aegir": "^36.1.0",
143
+ "aegir": "^36.1.3",
144
144
  "delay": "^5.0.0",
145
145
  "p-defer": "^4.0.0",
146
- "p-wait-for": "^4.1.0"
146
+ "p-wait-for": "^4.1.0",
147
+ "ts-sinon": "^2.0.2"
147
148
  }
148
149
  }
@@ -2,27 +2,27 @@
2
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
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<PeerDiscoveryEvents> 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
  })
@@ -32,6 +32,11 @@ export class GoMulticastDNS extends EventEmitter<PeerDiscoveryEvents> implements
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,18 +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 { base58btc } from 'multiformats/bases/base58'
8
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 { findPeerInfoInAnswers } from './utils.js'
11
10
 
12
11
  const log = logger('libp2p:mdns:compat:querier')
13
12
 
14
- export interface QuerierOptions {
15
- peerId: PeerId
13
+ export interface QuerierInit {
16
14
  queryInterval?: number
17
15
  queryPeriod?: number
18
16
  }
@@ -21,24 +19,17 @@ export interface Handle {
21
19
  stop: () => Promise<void>
22
20
  }
23
21
 
24
- export class Querier extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery {
25
- private readonly _peerIdStr: string
26
- private readonly _options: Required<QuerierOptions>
22
+ export class Querier extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery, Initializable {
23
+ private readonly _init: Required<QuerierInit>
27
24
  private _handle?: Handle
25
+ private components: Components = new Components()
28
26
 
29
- constructor (options: QuerierOptions) {
27
+ constructor (init: QuerierInit = {}) {
30
28
  super()
31
29
 
32
- const { peerId, queryInterval, queryPeriod } = options
33
-
34
- if (peerId == null) {
35
- throw new Error('missing peerId parameter')
36
- }
37
-
38
- this._peerIdStr = peerId.toString(base58btc)
39
- this._options = {
40
- peerId,
30
+ const { queryInterval, queryPeriod } = init
41
31
 
32
+ this._init = {
42
33
  // Re-query in leu of network change detection (every 60s by default)
43
34
  queryInterval: queryInterval ?? 60000,
44
35
  // Time for which the MDNS server will stay alive waiting for responses
@@ -51,6 +42,10 @@ export class Querier extends EventEmitter<PeerDiscoveryEvents> implements PeerDi
51
42
  this._onResponse = this._onResponse.bind(this)
52
43
  }
53
44
 
45
+ init (components: Components): void {
46
+ this.components = components
47
+ }
48
+
54
49
  isStarted () {
55
50
  return Boolean(this._handle)
56
51
  }
@@ -82,76 +77,31 @@ export class Querier extends EventEmitter<PeerDiscoveryEvents> implements PeerDi
82
77
  }
83
78
  }
84
79
  }, {
85
- period: this._options.queryPeriod,
86
- interval: this._options.queryInterval
80
+ period: this._init.queryPeriod,
81
+ interval: this._init.queryInterval
87
82
  })
88
83
  }
89
84
 
90
85
  _onResponse (event: ResponsePacket, info: RemoteInfo) {
86
+ log.trace('received mDNS query response')
91
87
  const answers = event.answers ?? []
92
- const ptrRecord = answers.find(a => a.type === 'PTR' && a.name === SERVICE_TAG_LOCAL)
93
-
94
- // Only deal with responses for our service tag
95
- if (ptrRecord == null) return
96
-
97
- log('got response', event, info)
98
-
99
- const txtRecord = answers.find(a => a.type === 'TXT')
100
- if (txtRecord == null || txtRecord.type !== 'TXT') {
101
- return log('missing TXT record in response')
102
- }
103
88
 
104
- let peerIdStr
105
- try {
106
- peerIdStr = txtRecord.data[0].toString()
107
- } catch (err) {
108
- return log('failed to extract peer ID from TXT record data', txtRecord, err)
109
- }
110
-
111
- if (this._peerIdStr === peerIdStr) {
112
- return log('ignoring reply to myself')
113
- }
89
+ const peerInfo = findPeerInfoInAnswers(answers, this.components.getPeerId())
114
90
 
115
- let peerId
116
- try {
117
- peerId = PeerId.fromString(peerIdStr)
118
- } catch (err) {
119
- return log('failed to create peer ID from TXT record data', peerIdStr, err)
91
+ if (peerInfo == null) {
92
+ log('could not read peer data from query response')
93
+ return
120
94
  }
121
95
 
122
- const srvRecord = answers.find(a => a.type === 'SRV')
123
- if (srvRecord == null || srvRecord.type !== 'SRV') {
124
- return log('missing SRV record in response')
96
+ if (peerInfo.multiaddrs.length === 0) {
97
+ log('could not parse multiaddrs from mDNS response')
98
+ return
125
99
  }
126
100
 
127
- log('peer found', peerIdStr)
128
-
129
- const { port } = srvRecord.data ?? {}
130
- const protos = { A: 'ip4', AAAA: 'ip6' }
131
-
132
- const multiaddrs = answers
133
- .filter(a => ['A', 'AAAA'].includes(a.type))
134
- .reduce<Multiaddr[]>((addrs, a) => {
135
- if (a.type !== 'A' && a.type !== 'AAAA') {
136
- return addrs
137
- }
138
-
139
- const maStr = `/${protos[a.type]}/${a.data}/tcp/${port}`
140
- try {
141
- addrs.push(new Multiaddr(maStr))
142
- log(maStr)
143
- } catch (err) {
144
- log(`failed to create multiaddr from ${a.type} record data`, maStr, port, err)
145
- }
146
- return addrs
147
- }, [])
101
+ log('discovered peer in mDNS qeury response %p', peerInfo.id)
148
102
 
149
103
  this.dispatchEvent(new CustomEvent('peer', {
150
- detail: {
151
- id: peerId,
152
- multiaddrs,
153
- protcols: []
154
- }
104
+ detail: peerInfo
155
105
  }))
156
106
  }
157
107
 
@@ -2,51 +2,44 @@ import OS from 'os'
2
2
  import MDNS, { QueryPacket } from 'multicast-dns'
3
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
10
  const log = logger('libp2p:mdns:compat:responder')
12
11
 
13
- export interface ResponderOptions {
14
- peerId: PeerId
15
- multiaddrs: Multiaddr[]
16
- }
17
-
18
- export class Responder {
19
- private readonly _peerIdStr: string
20
- private readonly _multiaddrs: Multiaddr[]
12
+ export class Responder implements Initializable {
13
+ private components: Components = new Components()
21
14
  private _mdns?: MDNS.MulticastDNS
22
15
 
23
- constructor (options: ResponderOptions) {
24
- const { peerId, multiaddrs } = options
25
-
26
- if (peerId == null) {
27
- throw new Error('missing peerId parameter')
28
- }
29
-
30
- this._peerIdStr = peerId.toString(base58btc)
31
- this._multiaddrs = multiaddrs
16
+ constructor () {
32
17
  this._onQuery = this._onQuery.bind(this)
33
18
  }
34
19
 
20
+ init (components: Components): void {
21
+ this.components = components
22
+ }
23
+
35
24
  start () {
36
25
  this._mdns = MDNS()
37
26
  this._mdns.on('query', this._onQuery)
38
27
  }
39
28
 
40
29
  _onQuery (event: QueryPacket, info: RemoteInfo) {
41
- 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
+
42
33
  if (addr.isThinWaistAddress()) {
43
34
  acc.push(addr.toOptions())
44
35
  }
36
+
45
37
  return acc
46
38
  }, [])
47
39
 
48
40
  // Only announce TCP for now
49
41
  if (addresses.length === 0) {
42
+ log('no tcp addresses configured so cannot respond to mDNS query')
50
43
  return
51
44
  }
52
45
 
@@ -55,10 +48,10 @@ export class Responder {
55
48
  // Only respond to queries for our service tag
56
49
  if (!questions.some(q => q.name === SERVICE_TAG_LOCAL)) return
57
50
 
58
- log('got query', event, info)
51
+ log.trace('got query', event, info)
59
52
 
60
53
  const answers: Answer[] = []
61
- const peerServiceTagLocal = `${this._peerIdStr}.${SERVICE_TAG_LOCAL}`
54
+ const peerServiceTagLocal = `${this.components.getPeerId().toString()}.${SERVICE_TAG_LOCAL}`
62
55
 
63
56
  answers.push({
64
57
  name: SERVICE_TAG_LOCAL,
@@ -68,44 +61,45 @@ export class Responder {
68
61
  data: peerServiceTagLocal
69
62
  })
70
63
 
71
- // Only announce TCP multiaddrs for now
72
- const port = addresses[0].port
73
-
74
- answers.push({
75
- name: peerServiceTagLocal,
76
- type: 'SRV',
77
- class: 'IN',
78
- ttl: 120,
79
- data: {
80
- priority: 10,
81
- weight: 1,
82
- port,
83
- target: OS.hostname()
84
- }
85
- })
86
-
87
64
  answers.push({
88
65
  name: peerServiceTagLocal,
89
66
  type: 'TXT',
90
67
  class: 'IN',
91
68
  ttl: 120,
92
- data: [Buffer.from(this._peerIdStr)]
69
+ data: [Buffer.from(this.components.getPeerId().toString())]
93
70
  })
94
71
 
95
- addresses.forEach((ma) => {
96
- if ([4, 6].includes(ma.family)) {
97
- answers.push({
98
- name: OS.hostname(),
99
- type: ma.family === 4 ? 'A' : 'AAAA',
100
- class: 'IN',
101
- ttl: 120,
102
- data: ma.host
103
- })
72
+ addresses.forEach(ma => {
73
+ if (![4, 6].includes(ma.family)) {
74
+ return
104
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
+ })
105
97
  })
106
98
 
107
99
  if (this._mdns != null) {
108
- log('responding to query', answers)
100
+ log.trace('responding to query')
101
+ log.trace('query answers', answers)
102
+
109
103
  this._mdns.respond(answers, info)
110
104
  }
111
105
  }