@libp2p/mdns 5.1.1 → 7.0.0

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.
Files changed (43) hide show
  1. package/README.md +18 -11
  2. package/dist/index.min.js +4 -4
  3. package/dist/src/index.d.ts +1 -3
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +24 -55
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/query.d.ts +4 -5
  8. package/dist/src/query.d.ts.map +1 -1
  9. package/dist/src/query.js +38 -82
  10. package/dist/src/query.js.map +1 -1
  11. package/dist/src/utils.d.ts +2 -0
  12. package/dist/src/utils.d.ts.map +1 -0
  13. package/dist/src/utils.js +9 -0
  14. package/dist/src/utils.js.map +1 -0
  15. package/package.json +14 -16
  16. package/src/index.ts +38 -67
  17. package/src/query.ts +42 -101
  18. package/src/utils.ts +9 -0
  19. package/dist/src/compat/constants.d.ts +0 -5
  20. package/dist/src/compat/constants.d.ts.map +0 -1
  21. package/dist/src/compat/constants.js +0 -5
  22. package/dist/src/compat/constants.js.map +0 -1
  23. package/dist/src/compat/index.d.ts +0 -20
  24. package/dist/src/compat/index.d.ts.map +0 -1
  25. package/dist/src/compat/index.js +0 -50
  26. package/dist/src/compat/index.js.map +0 -1
  27. package/dist/src/compat/querier.d.ts +0 -31
  28. package/dist/src/compat/querier.d.ts.map +0 -1
  29. package/dist/src/compat/querier.js +0 -123
  30. package/dist/src/compat/querier.js.map +0 -1
  31. package/dist/src/compat/responder.d.ts +0 -13
  32. package/dist/src/compat/responder.d.ts.map +0 -1
  33. package/dist/src/compat/responder.js +0 -94
  34. package/dist/src/compat/responder.js.map +0 -1
  35. package/dist/src/compat/utils.d.ts +0 -5
  36. package/dist/src/compat/utils.d.ts.map +0 -1
  37. package/dist/src/compat/utils.js +0 -70
  38. package/dist/src/compat/utils.js.map +0 -1
  39. package/src/compat/constants.ts +0 -4
  40. package/src/compat/index.ts +0 -73
  41. package/src/compat/querier.ts +0 -171
  42. package/src/compat/responder.ts +0 -116
  43. package/src/compat/utils.ts +0 -82
package/src/index.ts CHANGED
@@ -2,10 +2,10 @@ import multicastDNS from 'multicast-dns'
2
2
  import { CustomEvent, EventEmitter } from '@libp2p/interfaces/events'
3
3
  import { logger } from '@libp2p/logger'
4
4
  import * as query from './query.js'
5
- import { GoMulticastDNS } from './compat/index.js'
6
5
  import type { PeerDiscovery, PeerDiscoveryEvents } from '@libp2p/interface-peer-discovery'
7
6
  import type { PeerInfo } from '@libp2p/interface-peer-info'
8
7
  import { symbol } from '@libp2p/interface-peer-discovery'
8
+ import { stringGen } from './utils.js'
9
9
  import type { PeerId } from '@libp2p/interface-peer-id'
10
10
  import type { AddressManager } from '@libp2p/interface-address-manager'
11
11
 
@@ -15,11 +15,9 @@ export interface MulticastDNSInit {
15
15
  broadcast?: boolean
16
16
  interval?: number
17
17
  serviceTag?: string
18
+ peerName?: string
18
19
  port?: number
19
20
  ip?: string
20
- compat?: boolean
21
- compatQueryPeriod?: number
22
- compatQueryInterval?: number
23
21
  }
24
22
 
25
23
  export interface MulticastDNSComponents {
@@ -33,44 +31,41 @@ class MulticastDNS extends EventEmitter<PeerDiscoveryEvents> implements PeerDisc
33
31
  private readonly broadcast: boolean
34
32
  private readonly interval: number
35
33
  private readonly serviceTag: string
34
+ private readonly peerName: string
36
35
  private readonly port: number
37
36
  private readonly ip: string
38
37
  private _queryInterval: ReturnType<typeof setInterval> | null
39
- private readonly _goMdns?: GoMulticastDNS
40
38
  private readonly components: MulticastDNSComponents
41
39
 
42
40
  constructor (components: MulticastDNSComponents, init: MulticastDNSInit = {}) {
43
41
  super()
44
42
 
45
- this.components = components
46
43
  this.broadcast = init.broadcast !== false
47
44
  this.interval = init.interval ?? (1e3 * 10)
48
- this.serviceTag = init.serviceTag ?? 'ipfs.local'
45
+ this.serviceTag = init.serviceTag ?? '_p2p._udp.local'
49
46
  this.ip = init.ip ?? '224.0.0.251'
47
+ this.peerName = init.peerName ?? stringGen(63)
48
+ // 63 is dns label limit
49
+ if (this.peerName.length >= 64) {
50
+ throw new Error('Peer name should be less than 64 chars long')
51
+ }
50
52
  this.port = init.port ?? 5353
53
+ this.components = components
51
54
  this._queryInterval = null
52
55
  this._onPeer = this._onPeer.bind(this)
53
56
  this._onMdnsQuery = this._onMdnsQuery.bind(this)
54
57
  this._onMdnsResponse = this._onMdnsResponse.bind(this)
55
-
56
- if (init.compat !== false) {
57
- this._goMdns = new GoMulticastDNS(components, {
58
- queryPeriod: init.compatQueryPeriod,
59
- queryInterval: init.compatQueryInterval
60
- })
61
- this._goMdns.addEventListener('peer', this._onPeer)
62
- }
63
58
  }
64
59
 
65
60
  get [symbol] (): true {
66
61
  return true
67
62
  }
68
63
 
69
- get [Symbol.toStringTag] () {
64
+ get [Symbol.toStringTag] (): '@libp2p/mdns' {
70
65
  return '@libp2p/mdns'
71
66
  }
72
67
 
73
- isStarted () {
68
+ isStarted (): boolean {
74
69
  return Boolean(this.mdns)
75
70
  }
76
71
 
@@ -79,7 +74,7 @@ class MulticastDNS extends EventEmitter<PeerDiscoveryEvents> implements PeerDisc
79
74
  *
80
75
  * @returns {void}
81
76
  */
82
- async start () {
77
+ async start (): Promise<void> {
83
78
  if (this.mdns != null) {
84
79
  return
85
80
  }
@@ -89,26 +84,29 @@ class MulticastDNS extends EventEmitter<PeerDiscoveryEvents> implements PeerDisc
89
84
  this.mdns.on('response', this._onMdnsResponse)
90
85
 
91
86
  this._queryInterval = query.queryLAN(this.mdns, this.serviceTag, this.interval)
92
-
93
- if (this._goMdns != null) {
94
- await this._goMdns.start()
95
- }
96
87
  }
97
88
 
98
- _onMdnsQuery (event: multicastDNS.QueryPacket) {
89
+ _onMdnsQuery (event: multicastDNS.QueryPacket): void {
99
90
  if (this.mdns == null) {
100
91
  return
101
92
  }
102
93
 
103
94
  log.trace('received incoming mDNS query')
104
- query.gotQuery(event, this.mdns, this.components.peerId, this.components.addressManager.getAddresses(), this.serviceTag, this.broadcast)
95
+ const localPeerId = this.components.peerId
96
+ query.gotQuery(
97
+ event,
98
+ this.mdns,
99
+ this.peerName,
100
+ this.components.addressManager.getAddresses().map((ma) => ma.encapsulate('/p2p/' + localPeerId.toString())),
101
+ this.serviceTag,
102
+ this.broadcast)
105
103
  }
106
104
 
107
- _onMdnsResponse (event: multicastDNS.ResponsePacket) {
105
+ _onMdnsResponse (event: multicastDNS.ResponsePacket): void {
108
106
  log.trace('received mDNS query response')
109
107
 
110
108
  try {
111
- const foundPeer = query.gotResponse(event, this.components.peerId, this.serviceTag)
109
+ const foundPeer = query.gotResponse(event, this.peerName, this.serviceTag)
112
110
 
113
111
  if (foundPeer != null) {
114
112
  log('discovered peer in mDNS qeury response %p', foundPeer.id)
@@ -122,7 +120,7 @@ class MulticastDNS extends EventEmitter<PeerDiscoveryEvents> implements PeerDisc
122
120
  }
123
121
  }
124
122
 
125
- _onPeer (evt: CustomEvent<PeerInfo>) {
123
+ _onPeer (evt: CustomEvent<PeerInfo>): void {
126
124
  if (this.mdns == null) {
127
125
  return
128
126
  }
@@ -137,30 +135,26 @@ class MulticastDNS extends EventEmitter<PeerDiscoveryEvents> implements PeerDisc
137
135
  *
138
136
  * @returns {Promise}
139
137
  */
140
- async stop () {
138
+ async stop (): Promise<void> {
141
139
  if (this.mdns == null) {
142
140
  return
143
141
  }
144
142
 
145
143
  this.mdns.removeListener('query', this._onMdnsQuery)
146
144
  this.mdns.removeListener('response', this._onMdnsResponse)
147
- this._goMdns?.removeEventListener('peer', this._onPeer)
148
145
 
149
146
  if (this._queryInterval != null) {
150
147
  clearInterval(this._queryInterval)
151
148
  this._queryInterval = null
152
149
  }
153
150
 
154
- await Promise.all([
155
- this._goMdns?.stop(),
156
- new Promise<void>((resolve) => {
157
- if (this.mdns != null) {
158
- this.mdns.destroy(resolve)
159
- } else {
160
- resolve()
161
- }
162
- })
163
- ])
151
+ await new Promise<void>((resolve) => {
152
+ if (this.mdns != null) {
153
+ this.mdns.destroy(resolve)
154
+ } else {
155
+ resolve()
156
+ }
157
+ })
164
158
 
165
159
  this.mdns = undefined
166
160
  }
@@ -172,40 +166,17 @@ export function mdns (init: MulticastDNSInit = {}): (components: MulticastDNSCom
172
166
 
173
167
  /* for reference
174
168
 
175
- [ { name: 'discovery.ipfs.io.local',
169
+ [ { name: '_p2p._udp.local',
176
170
  type: 'PTR',
177
171
  class: 1,
178
172
  ttl: 120,
179
- data: 'QmbBHw1Xx9pUpAbrVZUKTPL5Rsph5Q9GQhRvcWVBPFgGtC.discovery.ipfs.io.local' },
180
-
181
- { name: 'QmbBHw1Xx9pUpAbrVZUKTPL5Rsph5Q9GQhRvcWVBPFgGtC.discovery.ipfs.io.local',
182
- type: 'SRV',
183
- class: 1,
184
- ttl: 120,
185
- data: { priority: 10, weight: 1, port: 4001, target: 'lorien.local' } },
186
-
187
- { name: 'lorien.local',
188
- type: 'A',
189
- class: 1,
190
- ttl: 120,
191
- data: '127.0.0.1' },
192
-
193
- { name: 'lorien.local',
194
- type: 'A',
195
- class: 1,
196
- ttl: 120,
197
- data: '127.94.0.1' },
198
-
199
- { name: 'lorien.local',
200
- type: 'A',
201
- class: 1,
202
- ttl: 120,
203
- data: '172.16.38.224' },
173
+ data: 'XQxZeAH6MX2n4255fzYmyUCUdhQ0DAWv.p2p._udp.local' },
204
174
 
205
- { name: 'QmbBHw1Xx9pUpAbrVZUKTPL5Rsph5Q9GQhRvcWVBPFgGtC.discovery.ipfs.io.local',
175
+ { name: 'XQxZeAH6MX2n4255fzYmyUCUdhQ0DAWv.p2p._udp.local',
206
176
  type: 'TXT',
207
177
  class: 1,
208
178
  ttl: 120,
209
- data: 'QmbBHw1Xx9pUpAbrVZUKTPL5Rsph5Q9GQhRvcWVBPFgGtC' } ],
179
+ data: 'dnsaddr=/ip4/127.0.0.1/tcp/80/p2p/QmbBHw1Xx9pUpAbrVZUKTPL5Rsph5Q9GQhRvcWVBPFgGtC' },
180
+ ]
210
181
 
211
182
  */
package/src/query.ts CHANGED
@@ -1,17 +1,14 @@
1
- import os from 'os'
1
+ import type { PeerInfo } from '@libp2p/interface-peer-info'
2
2
  import { logger } from '@libp2p/logger'
3
- import { protocols, multiaddr } from '@multiformats/multiaddr'
4
- import type { Multiaddr, MultiaddrObject } from '@multiformats/multiaddr'
5
3
  import { peerIdFromString } from '@libp2p/peer-id'
6
- import type { PeerId } from '@libp2p/interface-peer-id'
7
- import type { PeerInfo } from '@libp2p/interface-peer-info'
8
- import type { MulticastDNS, ResponsePacket, QueryPacket } from 'multicast-dns'
9
- import type { SrvAnswer, StringAnswer, TxtAnswer, Answer } from 'dns-packet'
4
+ import { multiaddr, Multiaddr } from '@multiformats/multiaddr'
5
+ import type { Answer, StringAnswer, TxtAnswer } from 'dns-packet'
6
+ import type { MulticastDNS, QueryPacket, ResponsePacket } from 'multicast-dns'
10
7
 
11
8
  const log = logger('libp2p:mdns:query')
12
9
 
13
- export function queryLAN (mdns: MulticastDNS, serviceTag: string, interval: number) {
14
- const query = () => {
10
+ export function queryLAN (mdns: MulticastDNS, serviceTag: string, interval: number): NodeJS.Timer {
11
+ const query = (): void => {
15
12
  log('query', serviceTag)
16
13
 
17
14
  mdns.query({
@@ -27,93 +24,60 @@ export function queryLAN (mdns: MulticastDNS, serviceTag: string, interval: numb
27
24
  return setInterval(query, interval)
28
25
  }
29
26
 
30
- interface Answers {
31
- ptr?: StringAnswer
32
- srv?: SrvAnswer
33
- txt?: TxtAnswer
34
- a: StringAnswer[]
35
- aaaa: StringAnswer[]
36
- }
37
-
38
- export function gotResponse (rsp: ResponsePacket, localPeerId: PeerId, serviceTag: string): PeerInfo | undefined {
27
+ export function gotResponse (rsp: ResponsePacket, localPeerName: string, serviceTag: string): PeerInfo | undefined {
39
28
  if (rsp.answers == null) {
40
29
  return
41
30
  }
42
31
 
43
- const answers: Answers = {
44
- a: [],
45
- aaaa: []
46
- }
32
+ let answerPTR: StringAnswer | undefined
33
+ const txtAnswers: TxtAnswer[] = []
47
34
 
48
35
  rsp.answers.forEach((answer) => {
49
36
  switch (answer.type) {
50
- case 'PTR': answers.ptr = answer; break
51
- case 'SRV': answers.srv = answer; break
52
- case 'TXT': answers.txt = answer; break
53
- case 'A': answers.a.push(answer); break
54
- case 'AAAA': answers.aaaa.push(answer); break
37
+ case 'PTR': answerPTR = answer; break
38
+ case 'TXT': txtAnswers.push(answer); break
55
39
  default: break
56
40
  }
57
41
  })
58
42
 
59
- if (answers.ptr == null ||
60
- answers.ptr.name !== serviceTag ||
61
- answers.txt == null ||
62
- answers.srv == null) {
43
+ if (answerPTR == null ||
44
+ answerPTR?.name !== serviceTag ||
45
+ txtAnswers.length === 0 ||
46
+ answerPTR.data.startsWith(localPeerName)) {
63
47
  return
64
48
  }
65
49
 
66
- const b58Id = answers.txt.data[0].toString()
67
- const port = answers.srv.data.port
68
- const multiaddrs: Multiaddr[] = []
69
-
70
- answers.a.forEach((a) => {
71
- const ma = multiaddr(`/ip4/${a.data}/tcp/${port}`)
72
-
73
- if (!multiaddrs.some((m) => m.equals(ma))) {
74
- multiaddrs.push(ma)
50
+ try {
51
+ const multiaddrs: Multiaddr[] = txtAnswers
52
+ .flatMap((a) => a.data)
53
+ .filter(answerData => answerData.toString().startsWith('dnsaddr='))
54
+ .map((answerData) => {
55
+ return multiaddr(answerData.toString().substring('dnsaddr='.length))
56
+ })
57
+
58
+ const peerId = multiaddrs[0].getPeerId()
59
+ if (peerId == null) {
60
+ throw new Error("Multiaddr doesn't contain PeerId")
75
61
  }
76
- })
62
+ log('peer found %p', peerId)
77
63
 
78
- answers.aaaa.forEach((a) => {
79
- const ma = multiaddr(`/ip6/${a.data}/tcp/${port}`)
80
-
81
- if (!multiaddrs.some((m) => m.equals(ma))) {
82
- multiaddrs.push(ma)
64
+ return {
65
+ id: peerIdFromString(peerId),
66
+ multiaddrs,
67
+ protocols: []
83
68
  }
84
- })
85
-
86
- if (localPeerId.toString() === b58Id) {
87
- return // replied to myself, ignore
88
- }
89
-
90
- const id = peerIdFromString(b58Id)
91
-
92
- log('peer found %p', id)
93
-
94
- return {
95
- id,
96
- multiaddrs,
97
- protocols: []
69
+ } catch (e) {
70
+ log.error('failed to parse mdns response', e)
98
71
  }
99
72
  }
100
73
 
101
- export function gotQuery (qry: QueryPacket, mdns: MulticastDNS, peerId: PeerId, multiaddrs: Multiaddr[], serviceTag: string, broadcast: boolean) {
74
+ export function gotQuery (qry: QueryPacket, mdns: MulticastDNS, peerName: string, multiaddrs: Multiaddr[], serviceTag: string, broadcast: boolean): void {
102
75
  if (!broadcast) {
103
76
  log('not responding to mDNS query as broadcast mode is false')
104
77
  return
105
78
  }
106
79
 
107
- const addresses: MultiaddrObject[] = multiaddrs.reduce<MultiaddrObject[]>((acc, addr) => {
108
- if (addr.decapsulateCode(protocols('p2p').code).isThinWaistAddress()) {
109
- acc.push(addr.toOptions())
110
- }
111
- return acc
112
- }, [])
113
-
114
- // Only announce TCP for now
115
- if (addresses.length === 0) {
116
- log('no thin waist addresses present, cannot respond to query')
80
+ if (multiaddrs.length === 0) {
117
81
  return
118
82
  }
119
83
 
@@ -125,41 +89,18 @@ export function gotQuery (qry: QueryPacket, mdns: MulticastDNS, peerId: PeerId,
125
89
  type: 'PTR',
126
90
  class: 'IN',
127
91
  ttl: 120,
128
- data: peerId.toString() + '.' + serviceTag
129
- })
130
-
131
- // Only announce TCP multiaddrs for now
132
- const port = addresses[0].port
133
-
134
- answers.push({
135
- name: peerId.toString() + '.' + serviceTag,
136
- type: 'SRV',
137
- class: 'IN',
138
- ttl: 120,
139
- data: {
140
- priority: 10,
141
- weight: 1,
142
- port: port,
143
- target: os.hostname()
144
- }
145
- })
146
-
147
- answers.push({
148
- name: peerId.toString() + '.' + serviceTag,
149
- type: 'TXT',
150
- class: 'IN',
151
- ttl: 120,
152
- data: peerId.toString()
92
+ data: peerName + '.' + serviceTag
153
93
  })
154
94
 
155
- addresses.forEach((addr) => {
156
- if ([4, 6].includes(addr.family)) {
95
+ multiaddrs.forEach((addr) => {
96
+ // spec mandates multiaddr contains peer id
97
+ if (addr.getPeerId() != null) {
157
98
  answers.push({
158
- name: os.hostname(),
159
- type: addr.family === 4 ? 'A' : 'AAAA',
99
+ name: peerName + '.' + serviceTag,
100
+ type: 'TXT',
160
101
  class: 'IN',
161
102
  ttl: 120,
162
- data: addr.host
103
+ data: 'dnsaddr=' + addr.toString()
163
104
  })
164
105
  }
165
106
  })
package/src/utils.ts ADDED
@@ -0,0 +1,9 @@
1
+ export function stringGen (len: number): string {
2
+ let text = ''
3
+
4
+ const charset = 'abcdefghijklmnopqrstuvwxyz0123456789'
5
+
6
+ for (let i = 0; i < len; i++) { text += charset.charAt(Math.floor(Math.random() * charset.length)) }
7
+
8
+ return text
9
+ }
@@ -1,5 +0,0 @@
1
- export declare const SERVICE_TAG = "_ipfs-discovery._udp";
2
- export declare const SERVICE_TAG_LOCAL: string;
3
- export declare const MULTICAST_IP = "224.0.0.251";
4
- export declare const MULTICAST_PORT = 5353;
5
- //# sourceMappingURL=constants.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/compat/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,yBAAyB,CAAA;AACjD,eAAO,MAAM,iBAAiB,QAAyB,CAAA;AACvD,eAAO,MAAM,YAAY,gBAAgB,CAAA;AACzC,eAAO,MAAM,cAAc,OAAO,CAAA"}
@@ -1,5 +0,0 @@
1
- export const SERVICE_TAG = '_ipfs-discovery._udp';
2
- export const SERVICE_TAG_LOCAL = `${SERVICE_TAG}.local`;
3
- export const MULTICAST_IP = '224.0.0.251';
4
- export const MULTICAST_PORT = 5353;
5
- //# sourceMappingURL=constants.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/compat/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,sBAAsB,CAAA;AACjD,MAAM,CAAC,MAAM,iBAAiB,GAAG,GAAG,WAAW,QAAQ,CAAA;AACvD,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAA;AACzC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,CAAA"}
@@ -1,20 +0,0 @@
1
- import { EventEmitter } from '@libp2p/interfaces/events';
2
- import type { PeerDiscovery, PeerDiscoveryEvents } from '@libp2p/interface-peer-discovery';
3
- import { symbol } from '@libp2p/interface-peer-discovery';
4
- import type { MulticastDNSComponents } from '../index.js';
5
- export interface GoMulticastDNSInit {
6
- queryPeriod?: number;
7
- queryInterval?: number;
8
- }
9
- export declare class GoMulticastDNS extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery {
10
- private _started;
11
- private readonly _responder;
12
- private readonly _querier;
13
- constructor(components: MulticastDNSComponents, options?: GoMulticastDNSInit);
14
- get [symbol](): true;
15
- get [Symbol.toStringTag](): string;
16
- isStarted(): boolean;
17
- start(): Promise<void>;
18
- stop(): Promise<void>;
19
- }
20
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/compat/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAe,MAAM,2BAA2B,CAAA;AAGrE,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAC1F,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAEzD,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;IAC5F,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAW;IACtC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;gBAErB,UAAU,EAAE,sBAAsB,EAAE,OAAO,GAAE,kBAAuB;IAiBjF,IAAI,CAAC,MAAM,CAAC,IAAK,IAAI,CAEpB;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAEvB;IAED,SAAS;IAIH,KAAK;IAaL,IAAI;CAYX"}
@@ -1,50 +0,0 @@
1
- // Compatibility with Go libp2p MDNS
2
- import { EventEmitter, CustomEvent } from '@libp2p/interfaces/events';
3
- import { Responder } from './responder.js';
4
- import { Querier } from './querier.js';
5
- import { symbol } from '@libp2p/interface-peer-discovery';
6
- export class GoMulticastDNS extends EventEmitter {
7
- constructor(components, options = {}) {
8
- super();
9
- const { queryPeriod, queryInterval } = options;
10
- this._started = false;
11
- this._responder = new Responder(components);
12
- this._querier = new Querier(components, {
13
- queryInterval,
14
- queryPeriod
15
- });
16
- this._querier.addEventListener('peer', (evt) => {
17
- this.dispatchEvent(new CustomEvent('peer', { detail: evt.detail }));
18
- });
19
- }
20
- get [symbol]() {
21
- return true;
22
- }
23
- get [Symbol.toStringTag]() {
24
- return '@libp2p/go-mdns';
25
- }
26
- isStarted() {
27
- return this._started;
28
- }
29
- async start() {
30
- if (this.isStarted()) {
31
- return;
32
- }
33
- this._started = true;
34
- await Promise.all([
35
- this._responder.start(),
36
- this._querier.start()
37
- ]);
38
- }
39
- async stop() {
40
- if (!this.isStarted()) {
41
- return;
42
- }
43
- this._started = false;
44
- await Promise.all([
45
- this._responder.stop(),
46
- this._querier.stop()
47
- ]);
48
- }
49
- }
50
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/compat/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AACpC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAA;AACrE,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AAQzD,MAAM,OAAO,cAAe,SAAQ,YAAiC;IAKnE,YAAa,UAAkC,EAAE,UAA8B,EAAE;QAC/E,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,CAAC,UAAU,CAAC,CAAA;QAC3C,IAAI,CAAC,QAAQ,GAAG,IAAI,OAAO,CAAC,UAAU,EAAE;YACtC,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,CAAC,MAAM,CAAC;QACV,OAAO,IAAI,CAAA;IACb,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;QACtB,OAAO,iBAAiB,CAAA;IAC1B,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,31 +0,0 @@
1
- /// <reference types="node" />
2
- import { EventEmitter } from '@libp2p/interfaces/events';
3
- import type { PeerDiscovery, PeerDiscoveryEvents } from '@libp2p/interface-peer-discovery';
4
- import type { ResponsePacket } from 'multicast-dns';
5
- import type { RemoteInfo } from 'dgram';
6
- import { symbol } from '@libp2p/interface-peer-discovery';
7
- import type { Startable } from '@libp2p/interfaces/dist/src/startable.js';
8
- import type { PeerId } from '@libp2p/interface-peer-id';
9
- export interface QuerierInit {
10
- queryInterval?: number;
11
- queryPeriod?: number;
12
- }
13
- export interface QuerierComponents {
14
- peerId: PeerId;
15
- }
16
- export interface Handle {
17
- stop: () => Promise<void>;
18
- }
19
- export declare class Querier extends EventEmitter<PeerDiscoveryEvents> implements PeerDiscovery, Startable {
20
- private readonly _init;
21
- private _handle?;
22
- private readonly components;
23
- constructor(components: QuerierComponents, init?: QuerierInit);
24
- get [symbol](): true;
25
- get [Symbol.toStringTag](): string;
26
- isStarted(): boolean;
27
- start(): void;
28
- _onResponse(event: ResponsePacket, info: RemoteInfo): void;
29
- stop(): Promise<void>;
30
- }
31
- //# sourceMappingURL=querier.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"querier.d.ts","sourceRoot":"","sources":["../../../src/compat/querier.ts"],"names":[],"mappings":";AAAA,OAAO,EAAe,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAIrE,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AAC1F,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAEvC,OAAO,EAAE,MAAM,EAAE,MAAM,kCAAkC,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0CAA0C,CAAA;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAIvD,MAAM,WAAW,WAAW;IAC1B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAA;CACf;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,SAAS;IAChG,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuB;IAC7C,OAAO,CAAC,OAAO,CAAC,CAAQ;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;gBAEjC,UAAU,EAAE,iBAAiB,EAAE,IAAI,GAAE,WAAgB;IAmBlE,IAAI,CAAC,MAAM,CAAC,IAAK,IAAI,CAEpB;IAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAEvB;IAED,SAAS;IAIT,KAAK;IAgCL,WAAW,CAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,UAAU;IAuB9C,IAAI;CAKX"}