@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.
- package/README.md +18 -11
- package/dist/index.min.js +4 -4
- package/dist/src/index.d.ts +1 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +24 -55
- package/dist/src/index.js.map +1 -1
- package/dist/src/query.d.ts +4 -5
- package/dist/src/query.d.ts.map +1 -1
- package/dist/src/query.js +38 -82
- package/dist/src/query.js.map +1 -1
- package/dist/src/utils.d.ts +2 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +9 -0
- package/dist/src/utils.js.map +1 -0
- package/package.json +13 -15
- package/src/index.ts +38 -67
- package/src/query.ts +42 -101
- package/src/utils.ts +9 -0
- package/dist/src/compat/constants.d.ts +0 -5
- package/dist/src/compat/constants.d.ts.map +0 -1
- package/dist/src/compat/constants.js +0 -5
- package/dist/src/compat/constants.js.map +0 -1
- package/dist/src/compat/index.d.ts +0 -20
- package/dist/src/compat/index.d.ts.map +0 -1
- package/dist/src/compat/index.js +0 -50
- package/dist/src/compat/index.js.map +0 -1
- package/dist/src/compat/querier.d.ts +0 -31
- package/dist/src/compat/querier.d.ts.map +0 -1
- package/dist/src/compat/querier.js +0 -123
- package/dist/src/compat/querier.js.map +0 -1
- package/dist/src/compat/responder.d.ts +0 -13
- package/dist/src/compat/responder.d.ts.map +0 -1
- package/dist/src/compat/responder.js +0 -94
- package/dist/src/compat/responder.js.map +0 -1
- package/dist/src/compat/utils.d.ts +0 -5
- package/dist/src/compat/utils.d.ts.map +0 -1
- package/dist/src/compat/utils.js +0 -70
- package/dist/src/compat/utils.js.map +0 -1
- package/src/compat/constants.ts +0 -4
- package/src/compat/index.ts +0 -73
- package/src/compat/querier.ts +0 -171
- package/src/compat/responder.ts +0 -116
- package/src/compat/utils.ts +0 -82
package/src/compat/responder.ts
DELETED
|
@@ -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
|
-
}
|
package/src/compat/utils.ts
DELETED
|
@@ -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
|
-
}
|