@libp2p/mdns 6.0.0 → 7.0.1

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 +13 -15
  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
@@ -1,116 +0,0 @@
1
- import OS from 'os'
2
- import MDNS, { QueryPacket } from 'multicast-dns'
3
- import { logger } from '@libp2p/logger'
4
- import { SERVICE_TAG_LOCAL } from './constants.js'
5
- import { MultiaddrObject, protocols } from '@multiformats/multiaddr'
6
- import type { RemoteInfo } from 'dgram'
7
- import type { Answer } from 'dns-packet'
8
- import type { MulticastDNSComponents } from '../index.js'
9
-
10
- const log = logger('libp2p:mdns:compat:responder')
11
-
12
- export class Responder {
13
- private readonly components: MulticastDNSComponents
14
- private _mdns?: MDNS.MulticastDNS
15
-
16
- constructor (components: MulticastDNSComponents) {
17
- this.components = components
18
- this._onQuery = this._onQuery.bind(this)
19
- }
20
-
21
- start () {
22
- this._mdns = MDNS()
23
- this._mdns.on('query', this._onQuery)
24
- }
25
-
26
- _onQuery (event: QueryPacket, info: RemoteInfo) {
27
- const addresses = this.components.addressManager.getAddresses().reduce<MultiaddrObject[]>((acc, addr) => {
28
- addr = addr.decapsulateCode(protocols('p2p').code)
29
-
30
- if (addr.isThinWaistAddress()) {
31
- acc.push(addr.toOptions())
32
- }
33
-
34
- return acc
35
- }, [])
36
-
37
- // Only announce TCP for now
38
- if (addresses.length === 0) {
39
- log('no tcp addresses configured so cannot respond to mDNS query')
40
- return
41
- }
42
-
43
- const questions = event.questions ?? []
44
-
45
- // Only respond to queries for our service tag
46
- if (!questions.some(q => q.name === SERVICE_TAG_LOCAL)) return
47
-
48
- log.trace('got query', event, info)
49
-
50
- const answers: Answer[] = []
51
- const peerServiceTagLocal = `${this.components.peerId.toString()}.${SERVICE_TAG_LOCAL}`
52
-
53
- answers.push({
54
- name: SERVICE_TAG_LOCAL,
55
- type: 'PTR',
56
- class: 'IN',
57
- ttl: 120,
58
- data: peerServiceTagLocal
59
- })
60
-
61
- answers.push({
62
- name: peerServiceTagLocal,
63
- type: 'TXT',
64
- class: 'IN',
65
- ttl: 120,
66
- data: [Buffer.from(this.components.peerId.toString())]
67
- })
68
-
69
- addresses.forEach(ma => {
70
- if (![4, 6].includes(ma.family)) {
71
- return
72
- }
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: ma.port,
83
- target: OS.hostname()
84
- }
85
- })
86
-
87
- answers.push({
88
- name: OS.hostname(),
89
- type: ma.family === 4 ? 'A' : 'AAAA',
90
- class: 'IN',
91
- ttl: 120,
92
- data: ma.host
93
- })
94
- })
95
-
96
- if (this._mdns != null) {
97
- log.trace('responding to query')
98
- log.trace('query answers', answers)
99
-
100
- this._mdns.respond(answers, info)
101
- }
102
- }
103
-
104
- stop () {
105
- if (this._mdns != null) {
106
- this._mdns.removeListener('query', this._onQuery)
107
- return new Promise<void>(resolve => {
108
- if (this._mdns != null) {
109
- this._mdns.destroy(resolve)
110
- } else {
111
- resolve()
112
- }
113
- })
114
- }
115
- }
116
- }
@@ -1,82 +0,0 @@
1
- import type { PeerInfo } from '@libp2p/interface-peer-info'
2
- import type { PeerId } from '@libp2p/interface-peer-id'
3
- import { logger } from '@libp2p/logger'
4
- import { peerIdFromString } from '@libp2p/peer-id'
5
- import { multiaddr } from '@multiformats/multiaddr'
6
- import type { Multiaddr } from '@multiformats/multiaddr'
7
- import type { Answer } from 'dns-packet'
8
- import { SERVICE_TAG_LOCAL } from './constants.js'
9
-
10
- const log = logger('libp2p:mdns:compat:utils')
11
-
12
- export function findPeerInfoInAnswers (answers: Answer[], ourPeerId: PeerId): PeerInfo | undefined {
13
- const ptrRecord = answers.find(a => a.type === 'PTR' && a.name === SERVICE_TAG_LOCAL)
14
-
15
- // Only deal with responses for our service tag
16
- if (ptrRecord == null) {
17
- return
18
- }
19
-
20
- log.trace('got response', SERVICE_TAG_LOCAL)
21
-
22
- const txtRecord = answers.find(a => a.type === 'TXT')
23
- if (txtRecord == null || txtRecord.type !== 'TXT') {
24
- log('missing TXT record in response')
25
- return
26
- }
27
-
28
- let peerIdStr: string
29
- try {
30
- peerIdStr = txtRecord.data[0].toString()
31
- } catch (err) {
32
- log('failed to extract peer ID from TXT record data', txtRecord, err)
33
- return
34
- }
35
-
36
- let peerId: PeerId
37
- try {
38
- peerId = peerIdFromString(peerIdStr)
39
- } catch (err) {
40
- log('failed to create peer ID from TXT record data', peerIdStr, err)
41
- return
42
- }
43
-
44
- if (ourPeerId.equals(peerId)) {
45
- log('ignoring reply to myself')
46
- return
47
- }
48
-
49
- const multiaddrs: Multiaddr[] = []
50
- const hosts: { A: Record<string, string>, AAAA: Record<string, string> } = {
51
- A: {},
52
- AAAA: {}
53
- }
54
-
55
- answers.forEach(answer => {
56
- if (answer.type === 'A') {
57
- hosts.A[answer.name] = answer.data
58
- }
59
-
60
- if (answer.type === 'AAAA') {
61
- hosts.AAAA[answer.name] = answer.data
62
- }
63
- })
64
-
65
- answers.forEach(answer => {
66
- if (answer.type === 'SRV') {
67
- if (hosts.A[answer.data.target] != null) {
68
- multiaddrs.push(multiaddr(`/ip4/${hosts.A[answer.data.target]}/tcp/${answer.data.port}/p2p/${peerId.toString()}`))
69
- } else if (hosts.AAAA[answer.data.target] != null) {
70
- multiaddrs.push(multiaddr(`/ip6/${hosts.AAAA[answer.data.target]}/tcp/${answer.data.port}/p2p/${peerId.toString()}`))
71
- } else {
72
- multiaddrs.push(multiaddr(`/dnsaddr/${answer.data.target}/tcp/${answer.data.port}/p2p/${peerId.toString()}`))
73
- }
74
- }
75
- })
76
-
77
- return {
78
- id: peerId,
79
- multiaddrs,
80
- protocols: []
81
- }
82
- }