matterbridge 3.4.6 → 3.4.7-dev-20260103-3152357

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 (345) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README-DOCKER.md +8 -0
  3. package/dist/broadcastServer.js +0 -117
  4. package/dist/broadcastServerTypes.js +0 -24
  5. package/dist/cli.js +1 -97
  6. package/dist/cliEmitter.js +0 -37
  7. package/dist/cliHistory.js +0 -38
  8. package/dist/clusters/export.js +0 -2
  9. package/dist/deviceManager.js +1 -113
  10. package/dist/devices/airConditioner.js +0 -57
  11. package/dist/devices/batteryStorage.js +1 -48
  12. package/dist/devices/cooktop.js +0 -56
  13. package/dist/devices/dishwasher.js +0 -57
  14. package/dist/devices/evse.js +10 -74
  15. package/dist/devices/export.js +0 -5
  16. package/dist/devices/extractorHood.js +0 -43
  17. package/dist/devices/heatPump.js +2 -50
  18. package/dist/devices/laundryDryer.js +3 -62
  19. package/dist/devices/laundryWasher.js +4 -70
  20. package/dist/devices/microwaveOven.js +5 -88
  21. package/dist/devices/oven.js +0 -85
  22. package/dist/devices/refrigerator.js +0 -102
  23. package/dist/devices/roboticVacuumCleaner.js +9 -100
  24. package/dist/devices/solarPower.js +0 -38
  25. package/dist/devices/speaker.js +0 -84
  26. package/dist/devices/temperatureControl.js +3 -24
  27. package/dist/devices/waterHeater.js +2 -82
  28. package/dist/dgram/coap.js +13 -126
  29. package/dist/dgram/dgram.js +2 -114
  30. package/dist/dgram/mb_coap.js +3 -41
  31. package/dist/dgram/mb_mdns.js +23 -77
  32. package/dist/dgram/mdns.js +139 -371
  33. package/dist/dgram/mdnsReflectorClient.js +5 -71
  34. package/dist/dgram/mdnsReflectorServer.js +8 -73
  35. package/dist/dgram/mdnsReflectorTypes.js +1 -24
  36. package/dist/dgram/multicast.js +1 -62
  37. package/dist/dgram/unicast.js +0 -60
  38. package/dist/frontend.js +38 -485
  39. package/dist/frontendTypes.js +0 -45
  40. package/dist/helpers.js +0 -53
  41. package/dist/index.js +0 -25
  42. package/dist/jestutils/export.js +0 -1
  43. package/dist/jestutils/jestHelpers.js +14 -371
  44. package/dist/logger/export.js +0 -1
  45. package/dist/matter/behaviors.js +0 -2
  46. package/dist/matter/clusters.js +0 -2
  47. package/dist/matter/devices.js +0 -2
  48. package/dist/matter/endpoints.js +0 -2
  49. package/dist/matter/export.js +0 -3
  50. package/dist/matter/types.js +0 -3
  51. package/dist/matterNode.js +8 -369
  52. package/dist/matterbridge.js +46 -824
  53. package/dist/matterbridgeAccessoryPlatform.js +0 -38
  54. package/dist/matterbridgeBehaviors.js +5 -68
  55. package/dist/matterbridgeDeviceTypes.js +14 -635
  56. package/dist/matterbridgeDynamicPlatform.js +0 -38
  57. package/dist/matterbridgeEndpoint.js +53 -1457
  58. package/dist/matterbridgeEndpointHelpers.js +20 -483
  59. package/dist/matterbridgeEndpointTypes.js +0 -25
  60. package/dist/matterbridgePlatform.js +1 -451
  61. package/dist/matterbridgeTypes.js +0 -26
  62. package/dist/pluginManager.js +5 -341
  63. package/dist/shelly.js +7 -178
  64. package/dist/storage/export.js +0 -1
  65. package/dist/update.js +1 -93
  66. package/dist/utils/colorUtils.js +2 -97
  67. package/dist/utils/commandLine.js +0 -60
  68. package/dist/utils/copyDirectory.js +0 -37
  69. package/dist/utils/createDirectory.js +0 -33
  70. package/dist/utils/createZip.js +2 -47
  71. package/dist/utils/deepCopy.js +0 -39
  72. package/dist/utils/deepEqual.js +1 -72
  73. package/dist/utils/error.js +0 -42
  74. package/dist/utils/export.js +0 -1
  75. package/dist/utils/format.js +0 -49
  76. package/dist/utils/hex.js +0 -124
  77. package/dist/utils/inspector.js +1 -69
  78. package/dist/utils/isValid.js +0 -93
  79. package/dist/utils/network.js +5 -125
  80. package/dist/utils/spawn.js +1 -71
  81. package/dist/utils/tracker.js +1 -64
  82. package/dist/utils/wait.js +8 -60
  83. package/dist/workerGlobalPrefix.js +5 -37
  84. package/dist/workerTypes.js +0 -24
  85. package/dist/workers.js +4 -68
  86. package/npm-shrinkwrap.json +25 -25
  87. package/package.json +1 -2
  88. package/packages/mb-lib-test/dist/jestutils/jestHelpers.js +77 -0
  89. package/packages/mb-lib-test/dist/module.js +2 -0
  90. package/packages/mb-lib-test/dist/vitestutils/vitestHelpers.js +77 -0
  91. package/packages/mb-lib-test/package.json +10 -9
  92. package/dist/broadcastServer.d.ts +0 -144
  93. package/dist/broadcastServer.d.ts.map +0 -1
  94. package/dist/broadcastServer.js.map +0 -1
  95. package/dist/broadcastServerTypes.d.ts +0 -841
  96. package/dist/broadcastServerTypes.d.ts.map +0 -1
  97. package/dist/broadcastServerTypes.js.map +0 -1
  98. package/dist/cli.d.ts +0 -30
  99. package/dist/cli.d.ts.map +0 -1
  100. package/dist/cli.js.map +0 -1
  101. package/dist/cliEmitter.d.ts +0 -50
  102. package/dist/cliEmitter.d.ts.map +0 -1
  103. package/dist/cliEmitter.js.map +0 -1
  104. package/dist/cliHistory.d.ts +0 -48
  105. package/dist/cliHistory.d.ts.map +0 -1
  106. package/dist/cliHistory.js.map +0 -1
  107. package/dist/clusters/export.d.ts +0 -2
  108. package/dist/clusters/export.d.ts.map +0 -1
  109. package/dist/clusters/export.js.map +0 -1
  110. package/dist/deviceManager.d.ts +0 -135
  111. package/dist/deviceManager.d.ts.map +0 -1
  112. package/dist/deviceManager.js.map +0 -1
  113. package/dist/devices/airConditioner.d.ts +0 -98
  114. package/dist/devices/airConditioner.d.ts.map +0 -1
  115. package/dist/devices/airConditioner.js.map +0 -1
  116. package/dist/devices/batteryStorage.d.ts +0 -48
  117. package/dist/devices/batteryStorage.d.ts.map +0 -1
  118. package/dist/devices/batteryStorage.js.map +0 -1
  119. package/dist/devices/cooktop.d.ts +0 -61
  120. package/dist/devices/cooktop.d.ts.map +0 -1
  121. package/dist/devices/cooktop.js.map +0 -1
  122. package/dist/devices/dishwasher.d.ts +0 -71
  123. package/dist/devices/dishwasher.d.ts.map +0 -1
  124. package/dist/devices/dishwasher.js.map +0 -1
  125. package/dist/devices/evse.d.ts +0 -76
  126. package/dist/devices/evse.d.ts.map +0 -1
  127. package/dist/devices/evse.js.map +0 -1
  128. package/dist/devices/export.d.ts +0 -17
  129. package/dist/devices/export.d.ts.map +0 -1
  130. package/dist/devices/export.js.map +0 -1
  131. package/dist/devices/extractorHood.d.ts +0 -46
  132. package/dist/devices/extractorHood.d.ts.map +0 -1
  133. package/dist/devices/extractorHood.js.map +0 -1
  134. package/dist/devices/heatPump.d.ts +0 -47
  135. package/dist/devices/heatPump.d.ts.map +0 -1
  136. package/dist/devices/heatPump.js.map +0 -1
  137. package/dist/devices/laundryDryer.d.ts +0 -67
  138. package/dist/devices/laundryDryer.d.ts.map +0 -1
  139. package/dist/devices/laundryDryer.js.map +0 -1
  140. package/dist/devices/laundryWasher.d.ts +0 -81
  141. package/dist/devices/laundryWasher.d.ts.map +0 -1
  142. package/dist/devices/laundryWasher.js.map +0 -1
  143. package/dist/devices/microwaveOven.d.ts +0 -168
  144. package/dist/devices/microwaveOven.d.ts.map +0 -1
  145. package/dist/devices/microwaveOven.js.map +0 -1
  146. package/dist/devices/oven.d.ts +0 -105
  147. package/dist/devices/oven.d.ts.map +0 -1
  148. package/dist/devices/oven.js.map +0 -1
  149. package/dist/devices/refrigerator.d.ts +0 -118
  150. package/dist/devices/refrigerator.d.ts.map +0 -1
  151. package/dist/devices/refrigerator.js.map +0 -1
  152. package/dist/devices/roboticVacuumCleaner.d.ts +0 -112
  153. package/dist/devices/roboticVacuumCleaner.d.ts.map +0 -1
  154. package/dist/devices/roboticVacuumCleaner.js.map +0 -1
  155. package/dist/devices/solarPower.d.ts +0 -40
  156. package/dist/devices/solarPower.d.ts.map +0 -1
  157. package/dist/devices/solarPower.js.map +0 -1
  158. package/dist/devices/speaker.d.ts +0 -87
  159. package/dist/devices/speaker.d.ts.map +0 -1
  160. package/dist/devices/speaker.js.map +0 -1
  161. package/dist/devices/temperatureControl.d.ts +0 -166
  162. package/dist/devices/temperatureControl.d.ts.map +0 -1
  163. package/dist/devices/temperatureControl.js.map +0 -1
  164. package/dist/devices/waterHeater.d.ts +0 -111
  165. package/dist/devices/waterHeater.d.ts.map +0 -1
  166. package/dist/devices/waterHeater.js.map +0 -1
  167. package/dist/dgram/coap.d.ts +0 -205
  168. package/dist/dgram/coap.d.ts.map +0 -1
  169. package/dist/dgram/coap.js.map +0 -1
  170. package/dist/dgram/dgram.d.ts +0 -143
  171. package/dist/dgram/dgram.d.ts.map +0 -1
  172. package/dist/dgram/dgram.js.map +0 -1
  173. package/dist/dgram/mb_coap.d.ts +0 -24
  174. package/dist/dgram/mb_coap.d.ts.map +0 -1
  175. package/dist/dgram/mb_coap.js.map +0 -1
  176. package/dist/dgram/mb_mdns.d.ts +0 -24
  177. package/dist/dgram/mb_mdns.d.ts.map +0 -1
  178. package/dist/dgram/mb_mdns.js.map +0 -1
  179. package/dist/dgram/mdns.d.ts +0 -371
  180. package/dist/dgram/mdns.d.ts.map +0 -1
  181. package/dist/dgram/mdns.js.map +0 -1
  182. package/dist/dgram/mdnsReflectorClient.d.ts +0 -88
  183. package/dist/dgram/mdnsReflectorClient.d.ts.map +0 -1
  184. package/dist/dgram/mdnsReflectorClient.js.map +0 -1
  185. package/dist/dgram/mdnsReflectorServer.d.ts +0 -78
  186. package/dist/dgram/mdnsReflectorServer.d.ts.map +0 -1
  187. package/dist/dgram/mdnsReflectorServer.js.map +0 -1
  188. package/dist/dgram/mdnsReflectorTypes.d.ts +0 -28
  189. package/dist/dgram/mdnsReflectorTypes.d.ts.map +0 -1
  190. package/dist/dgram/mdnsReflectorTypes.js.map +0 -1
  191. package/dist/dgram/multicast.d.ts +0 -67
  192. package/dist/dgram/multicast.d.ts.map +0 -1
  193. package/dist/dgram/multicast.js.map +0 -1
  194. package/dist/dgram/unicast.d.ts +0 -64
  195. package/dist/dgram/unicast.d.ts.map +0 -1
  196. package/dist/dgram/unicast.js.map +0 -1
  197. package/dist/frontend.d.ts +0 -245
  198. package/dist/frontend.d.ts.map +0 -1
  199. package/dist/frontend.js.map +0 -1
  200. package/dist/frontendTypes.d.ts +0 -529
  201. package/dist/frontendTypes.d.ts.map +0 -1
  202. package/dist/frontendTypes.js.map +0 -1
  203. package/dist/helpers.d.ts +0 -48
  204. package/dist/helpers.d.ts.map +0 -1
  205. package/dist/helpers.js.map +0 -1
  206. package/dist/index.d.ts +0 -34
  207. package/dist/index.d.ts.map +0 -1
  208. package/dist/index.js.map +0 -1
  209. package/dist/jestutils/export.d.ts +0 -2
  210. package/dist/jestutils/export.d.ts.map +0 -1
  211. package/dist/jestutils/export.js.map +0 -1
  212. package/dist/jestutils/jestHelpers.d.ts +0 -345
  213. package/dist/jestutils/jestHelpers.d.ts.map +0 -1
  214. package/dist/jestutils/jestHelpers.js.map +0 -1
  215. package/dist/logger/export.d.ts +0 -2
  216. package/dist/logger/export.d.ts.map +0 -1
  217. package/dist/logger/export.js.map +0 -1
  218. package/dist/matter/behaviors.d.ts +0 -2
  219. package/dist/matter/behaviors.d.ts.map +0 -1
  220. package/dist/matter/behaviors.js.map +0 -1
  221. package/dist/matter/clusters.d.ts +0 -2
  222. package/dist/matter/clusters.d.ts.map +0 -1
  223. package/dist/matter/clusters.js.map +0 -1
  224. package/dist/matter/devices.d.ts +0 -2
  225. package/dist/matter/devices.d.ts.map +0 -1
  226. package/dist/matter/devices.js.map +0 -1
  227. package/dist/matter/endpoints.d.ts +0 -2
  228. package/dist/matter/endpoints.d.ts.map +0 -1
  229. package/dist/matter/endpoints.js.map +0 -1
  230. package/dist/matter/export.d.ts +0 -5
  231. package/dist/matter/export.d.ts.map +0 -1
  232. package/dist/matter/export.js.map +0 -1
  233. package/dist/matter/types.d.ts +0 -3
  234. package/dist/matter/types.d.ts.map +0 -1
  235. package/dist/matter/types.js.map +0 -1
  236. package/dist/matterNode.d.ts +0 -342
  237. package/dist/matterNode.d.ts.map +0 -1
  238. package/dist/matterNode.js.map +0 -1
  239. package/dist/matterbridge.d.ts +0 -505
  240. package/dist/matterbridge.d.ts.map +0 -1
  241. package/dist/matterbridge.js.map +0 -1
  242. package/dist/matterbridgeAccessoryPlatform.d.ts +0 -41
  243. package/dist/matterbridgeAccessoryPlatform.d.ts.map +0 -1
  244. package/dist/matterbridgeAccessoryPlatform.js.map +0 -1
  245. package/dist/matterbridgeBehaviors.d.ts +0 -2404
  246. package/dist/matterbridgeBehaviors.d.ts.map +0 -1
  247. package/dist/matterbridgeBehaviors.js.map +0 -1
  248. package/dist/matterbridgeDeviceTypes.d.ts +0 -698
  249. package/dist/matterbridgeDeviceTypes.d.ts.map +0 -1
  250. package/dist/matterbridgeDeviceTypes.js.map +0 -1
  251. package/dist/matterbridgeDynamicPlatform.d.ts +0 -41
  252. package/dist/matterbridgeDynamicPlatform.d.ts.map +0 -1
  253. package/dist/matterbridgeDynamicPlatform.js.map +0 -1
  254. package/dist/matterbridgeEndpoint.d.ts +0 -1507
  255. package/dist/matterbridgeEndpoint.d.ts.map +0 -1
  256. package/dist/matterbridgeEndpoint.js.map +0 -1
  257. package/dist/matterbridgeEndpointHelpers.d.ts +0 -787
  258. package/dist/matterbridgeEndpointHelpers.d.ts.map +0 -1
  259. package/dist/matterbridgeEndpointHelpers.js.map +0 -1
  260. package/dist/matterbridgeEndpointTypes.d.ts +0 -166
  261. package/dist/matterbridgeEndpointTypes.d.ts.map +0 -1
  262. package/dist/matterbridgeEndpointTypes.js.map +0 -1
  263. package/dist/matterbridgePlatform.d.ts +0 -539
  264. package/dist/matterbridgePlatform.d.ts.map +0 -1
  265. package/dist/matterbridgePlatform.js.map +0 -1
  266. package/dist/matterbridgeTypes.d.ts +0 -252
  267. package/dist/matterbridgeTypes.d.ts.map +0 -1
  268. package/dist/matterbridgeTypes.js.map +0 -1
  269. package/dist/pluginManager.d.ts +0 -372
  270. package/dist/pluginManager.d.ts.map +0 -1
  271. package/dist/pluginManager.js.map +0 -1
  272. package/dist/shelly.d.ts +0 -181
  273. package/dist/shelly.d.ts.map +0 -1
  274. package/dist/shelly.js.map +0 -1
  275. package/dist/storage/export.d.ts +0 -2
  276. package/dist/storage/export.d.ts.map +0 -1
  277. package/dist/storage/export.js.map +0 -1
  278. package/dist/update.d.ts +0 -84
  279. package/dist/update.d.ts.map +0 -1
  280. package/dist/update.js.map +0 -1
  281. package/dist/utils/colorUtils.d.ts +0 -101
  282. package/dist/utils/colorUtils.d.ts.map +0 -1
  283. package/dist/utils/colorUtils.js.map +0 -1
  284. package/dist/utils/commandLine.d.ts +0 -66
  285. package/dist/utils/commandLine.d.ts.map +0 -1
  286. package/dist/utils/commandLine.js.map +0 -1
  287. package/dist/utils/copyDirectory.d.ts +0 -35
  288. package/dist/utils/copyDirectory.d.ts.map +0 -1
  289. package/dist/utils/copyDirectory.js.map +0 -1
  290. package/dist/utils/createDirectory.d.ts +0 -34
  291. package/dist/utils/createDirectory.d.ts.map +0 -1
  292. package/dist/utils/createDirectory.js.map +0 -1
  293. package/dist/utils/createZip.d.ts +0 -39
  294. package/dist/utils/createZip.d.ts.map +0 -1
  295. package/dist/utils/createZip.js.map +0 -1
  296. package/dist/utils/deepCopy.d.ts +0 -32
  297. package/dist/utils/deepCopy.d.ts.map +0 -1
  298. package/dist/utils/deepCopy.js.map +0 -1
  299. package/dist/utils/deepEqual.d.ts +0 -54
  300. package/dist/utils/deepEqual.d.ts.map +0 -1
  301. package/dist/utils/deepEqual.js.map +0 -1
  302. package/dist/utils/error.d.ts +0 -45
  303. package/dist/utils/error.d.ts.map +0 -1
  304. package/dist/utils/error.js.map +0 -1
  305. package/dist/utils/export.d.ts +0 -13
  306. package/dist/utils/export.d.ts.map +0 -1
  307. package/dist/utils/export.js.map +0 -1
  308. package/dist/utils/format.d.ts +0 -53
  309. package/dist/utils/format.d.ts.map +0 -1
  310. package/dist/utils/format.js.map +0 -1
  311. package/dist/utils/hex.d.ts +0 -89
  312. package/dist/utils/hex.d.ts.map +0 -1
  313. package/dist/utils/hex.js.map +0 -1
  314. package/dist/utils/inspector.d.ts +0 -87
  315. package/dist/utils/inspector.d.ts.map +0 -1
  316. package/dist/utils/inspector.js.map +0 -1
  317. package/dist/utils/isValid.d.ts +0 -103
  318. package/dist/utils/isValid.d.ts.map +0 -1
  319. package/dist/utils/isValid.js.map +0 -1
  320. package/dist/utils/network.d.ts +0 -140
  321. package/dist/utils/network.d.ts.map +0 -1
  322. package/dist/utils/network.js.map +0 -1
  323. package/dist/utils/spawn.d.ts +0 -33
  324. package/dist/utils/spawn.d.ts.map +0 -1
  325. package/dist/utils/spawn.js.map +0 -1
  326. package/dist/utils/tracker.d.ts +0 -108
  327. package/dist/utils/tracker.d.ts.map +0 -1
  328. package/dist/utils/tracker.js.map +0 -1
  329. package/dist/utils/wait.d.ts +0 -54
  330. package/dist/utils/wait.d.ts.map +0 -1
  331. package/dist/utils/wait.js.map +0 -1
  332. package/dist/workerGlobalPrefix.d.ts +0 -25
  333. package/dist/workerGlobalPrefix.d.ts.map +0 -1
  334. package/dist/workerGlobalPrefix.js.map +0 -1
  335. package/dist/workerTypes.d.ts +0 -52
  336. package/dist/workerTypes.d.ts.map +0 -1
  337. package/dist/workerTypes.js.map +0 -1
  338. package/dist/workers.d.ts +0 -69
  339. package/dist/workers.d.ts.map +0 -1
  340. package/dist/workers.js.map +0 -1
  341. package/scripts/data_model.mjs +0 -2058
  342. package/scripts/fetch-chip.mjs +0 -102
  343. package/scripts/marked.mjs +0 -133
  344. package/scripts/markedFooter.html +0 -42
  345. package/scripts/markedHeader.html +0 -78
@@ -1,35 +1,8 @@
1
- /**
2
- * @description This file contains the class Dgram.
3
- * @file dgram.ts
4
- * @author Luca Liguori
5
- * @created 2025-03-22
6
- * @version 1.0.1
7
- * @license Apache-2.0
8
- *
9
- * Copyright 2025, 2026, 2027 Luca Liguori.
10
- *
11
- * Licensed under the Apache License, Version 2.0 (the "License");
12
- * you may not use this file except in compliance with the License.
13
- * You may obtain a copy of the License at
14
- *
15
- * http://www.apache.org/licenses/LICENSE-2.0
16
- *
17
- * Unless required by applicable law or agreed to in writing, software
18
- * distributed under the License is distributed on an "AS IS" BASIS,
19
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20
- * See the License for the specific language governing permissions and
21
- * limitations under the License.
22
- */
23
- // Node.js imports
24
1
  import dgram from 'node:dgram';
25
2
  import EventEmitter from 'node:events';
26
3
  import os from 'node:os';
27
- // AnsiLogger imports
28
4
  import { AnsiLogger, BLUE, db, idn, nf, rs } from 'node-ansi-logger';
29
5
  import { hasParameter } from '../utils/commandLine.js';
30
- /**
31
- * This class implements a dgram socket.
32
- */
33
6
  export class Dgram extends EventEmitter {
34
7
  verbose = hasParameter('v') || hasParameter('verbose');
35
8
  debug = hasParameter('d') || hasParameter('debug') || hasParameter('v') || hasParameter('verbose');
@@ -41,18 +14,9 @@ export class Dgram extends EventEmitter {
41
14
  interfaceName;
42
15
  interfaceAddress;
43
16
  interfaceNetmask;
44
- /**
45
- * Creates an instance of Dgram.
46
- *
47
- * @param {string} name - The name of the socket.
48
- * @param {'udp4' | 'udp6'} socketType - The type of the socket (IPv4 or IPv6).
49
- * @param {boolean | undefined} reuseAddr - Whether to allow address reuse. Defaults to true.
50
- * @param {string} [interfaceName] - The name of the network interface to bind to.
51
- * @param {string} [interfaceAddress] - The address of the network interface to bind to.
52
- */
53
17
  constructor(name, socketType, reuseAddr = true, interfaceName, interfaceAddress) {
54
18
  super();
55
- this.log = new AnsiLogger({ logName: name, logTimestampFormat: 4 /* TimestampFormat.TIME_MILLIS */, logLevel: this.debug ? "debug" /* LogLevel.DEBUG */ : this.silent ? "notice" /* LogLevel.NOTICE */ : "info" /* LogLevel.INFO */ });
19
+ this.log = new AnsiLogger({ logName: name, logTimestampFormat: 4, logLevel: this.debug ? "debug" : this.silent ? "notice" : "info" });
56
20
  this.socket = dgram.createSocket({ type: socketType, reuseAddr });
57
21
  this.socketType = socketType;
58
22
  this.interfaceName = interfaceName;
@@ -87,13 +51,6 @@ export class Dgram extends EventEmitter {
87
51
  this.onListening(address);
88
52
  });
89
53
  }
90
- /**
91
- * Sends a message to the specified server.
92
- *
93
- * @param {Buffer} msg - The message buffer to send.
94
- * @param {string} serverAddress - The IPv4 address of the destination server.
95
- * @param {number} serverPort - The port of the destination server.
96
- */
97
54
  send(msg, serverAddress, serverPort) {
98
55
  this.socket.send(msg, 0, msg.length, serverPort, serverAddress, (error) => {
99
56
  if (error) {
@@ -131,30 +88,18 @@ export class Dgram extends EventEmitter {
131
88
  this.log.info(`Socket ready on ${BLUE}${address.family}${nf} ${BLUE}${address.address}${nf}:${BLUE}${address.port}${nf}`);
132
89
  this.emit('ready', address);
133
90
  }
134
- /**
135
- * Retrieves the IPv4 address of the specified network interface or the first external IPv4 interface if no interface is specified.
136
- * Throws an error if no suitable interface or address is found.
137
- *
138
- * @param {string} networkInterface - The name of the network interface to retrieve the IPv4 address from. If not specified, the first external IPv4 interface will be used.
139
- * @returns {string | undefined} The IPv4 address of the specified network interface or the first external IPv4 interface.
140
- * @throws {Error} if no suitable interface or address is found.
141
- */
142
91
  getIpv4InterfaceAddress(networkInterface) {
143
- // Normalize the interface name: treat an empty string as undefined.
144
92
  if (networkInterface === '')
145
93
  networkInterface = undefined;
146
94
  const interfaces = os.networkInterfaces();
147
- // If a specific interface is provided but not found, warn and fall back.
148
95
  if (networkInterface && !interfaces[networkInterface]) {
149
96
  this.log.warn(`Interface "${networkInterface}" not found. Using first external IPv4 interface.`);
150
97
  networkInterface = undefined;
151
98
  }
152
- // If no interface was specified or the provided one doesn't exist, find the first external IPv4 interface.
153
99
  if (!networkInterface) {
154
100
  for (const [interfaceName, interfaceDetails] of Object.entries(interfaces)) {
155
101
  if (!interfaceDetails)
156
102
  continue;
157
- // Check if at least one external IPv4 address exists on this interface.
158
103
  for (const detail of interfaceDetails) {
159
104
  if (detail.family === 'IPv4' && !detail.internal) {
160
105
  networkInterface = interfaceName;
@@ -168,7 +113,6 @@ export class Dgram extends EventEmitter {
168
113
  if (!networkInterface) {
169
114
  throw new Error(`Didn't find an external IPv4 network interface`);
170
115
  }
171
- // Select the first external IPv4 address from the interface.
172
116
  const addresses = interfaces[networkInterface];
173
117
  const ipv4Address = addresses?.find((addr) => addr.family === 'IPv4' && !addr.internal);
174
118
  if (!ipv4Address) {
@@ -176,25 +120,14 @@ export class Dgram extends EventEmitter {
176
120
  }
177
121
  return ipv4Address.address;
178
122
  }
179
- /**
180
- * Retrieves the IPv6 address of the specified network interface or the first external IPv6 interface if no interface is specified.
181
- * Throws an error if no suitable interface or address is found.
182
- *
183
- * @param {string} [networkInterface] - The name of the network interface to retrieve the IPv6 address from. If not specified, the first external IPv6 interface will be used.
184
- * @returns {string | undefined} The IPv6 address of the specified network interface or the first external IPv6 interface.
185
- * @throws {Error} If no suitable interface or address is found.
186
- */
187
123
  getIpv6InterfaceAddress(networkInterface) {
188
- // Normalize the interface name: treat an empty string as undefined.
189
124
  if (networkInterface === '')
190
125
  networkInterface = undefined;
191
126
  const interfaces = os.networkInterfaces();
192
- // If a specific interface is provided, verify it exists. Otherwise, warn and use the first external IPv6 interface.
193
127
  if (networkInterface && !interfaces[networkInterface]) {
194
128
  this.log.warn(`Interface "${networkInterface}" not found. Using first external IPv6 interface.`);
195
129
  networkInterface = undefined;
196
130
  }
197
- // If no network interface was specified, search for the first external IPv6 interface.
198
131
  if (!networkInterface) {
199
132
  for (const [interfaceName, interfaceDetails] of Object.entries(interfaces)) {
200
133
  if (!interfaceDetails)
@@ -213,21 +146,18 @@ export class Dgram extends EventEmitter {
213
146
  throw new Error(`Didn't find an external IPv6 network interface`);
214
147
  }
215
148
  const addresses = interfaces[networkInterface];
216
- // Try to find a link-local address and use scopeid
217
149
  const linkLocalAddress = addresses?.find((addr) => addr.family === 'IPv6' && !addr.internal && addr.address.startsWith('fe80'));
218
150
  if (linkLocalAddress) {
219
151
  this.log.debug('Found IPv6 link-local address');
220
152
  return linkLocalAddress.scopeid ? `${linkLocalAddress.address}%${process.platform !== 'win32' ? networkInterface : linkLocalAddress.scopeid}` : linkLocalAddress.address;
221
153
  }
222
154
  this.log.debug('No IPv6 link-local address found');
223
- // Try to find a unique local address
224
155
  const ulaAddress = addresses?.find((addr) => addr.family === 'IPv6' && !addr.internal && addr.address.startsWith('fd') && addr.netmask === 'ffff:ffff:ffff:ffff::');
225
156
  if (ulaAddress) {
226
157
  this.log.debug('Found IPv6 Unique Local Addresses (ULA) unicast address');
227
158
  return ulaAddress.address;
228
159
  }
229
160
  this.log.debug('No IPv6 Unique Local Addresses (ULA) unicast address found');
230
- // Try to find a unique local address
231
161
  const uniqueLocalAddress = addresses?.find((addr) => addr.family === 'IPv6' && !addr.internal && addr.address.startsWith('fd'));
232
162
  if (uniqueLocalAddress) {
233
163
  this.log.debug('Found IPv6 Unique Local Addresses (ULA) address');
@@ -236,11 +166,6 @@ export class Dgram extends EventEmitter {
236
166
  this.log.debug('No IPv6 Unique Local Addresses (ULA) address found');
237
167
  throw new Error(`Interface ${networkInterface} does not have a suitable external IPv6 address`);
238
168
  }
239
- /**
240
- * Retrieves the names of all available network interfaces.
241
- *
242
- * @returns {string[]} An array of network interface names.
243
- */
244
169
  getInterfacesNames() {
245
170
  const interfaces = os.networkInterfaces();
246
171
  const interfaceNames = [];
@@ -251,12 +176,6 @@ export class Dgram extends EventEmitter {
251
176
  }
252
177
  return interfaceNames;
253
178
  }
254
- /**
255
- * Retrieves the scope ID of the first found IPv6 address on the specified network interface or on any interface if none is specified.
256
- *
257
- * @param {string} [interfaceName] - The name of the network interface. If not provided, the first found IPv6 address will be used.
258
- * @returns {string} The scope ID of the first found IPv6 address or an empty string.
259
- */
260
179
  getIpv6ScopeId(interfaceName) {
261
180
  const interfaces = os.networkInterfaces();
262
181
  for (const name in interfaces) {
@@ -266,24 +185,17 @@ export class Dgram extends EventEmitter {
266
185
  if (iface) {
267
186
  const ipv6Address = iface.find((addr) => addr.family === 'IPv6' && !addr.internal && addr.scopeid);
268
187
  if (ipv6Address) {
269
- return process.platform === 'win32' ? '%' + String(ipv6Address.scopeid) : '%' + name; // Use the scope ID for Windows, or the interface name for non-Windows platforms
188
+ return process.platform === 'win32' ? '%' + String(ipv6Address.scopeid) : '%' + name;
270
189
  }
271
190
  }
272
191
  }
273
192
  return '';
274
193
  }
275
- /**
276
- * Retrieves the interface name from the scope id of an IPv6 address.
277
- *
278
- * @param {number} scopeId - The scope id of the IPv6 address.
279
- * @returns {string | undefined} The interface name or undefined if not found.
280
- */
281
194
  getInterfaceNameFromScopeId(scopeId) {
282
195
  const nets = os.networkInterfaces();
283
196
  for (const ifaceName in nets) {
284
197
  const addresses = nets[ifaceName] || [];
285
198
  for (const addr of addresses) {
286
- // Check for IPv6 addresses with a matching scope id.
287
199
  if (addr.family === 'IPv6' && addr.scopeid === scopeId) {
288
200
  return ifaceName;
289
201
  }
@@ -291,16 +203,8 @@ export class Dgram extends EventEmitter {
291
203
  }
292
204
  return undefined;
293
205
  }
294
- /**
295
- * Retrieves the netmask of the specified interface address.
296
- *
297
- * @param {string} interfaceAddress - The interface address for which to retrieve the netmask.
298
- * @returns {string | undefined} The netmask of the specified interface address or undefined if not found.
299
- */
300
206
  getNetmask(interfaceAddress) {
301
- // Remove zone index if present (e.g. for IPv6 "fe80::1%eth0")
302
207
  const noZoneAddress = interfaceAddress.includes('%') ? interfaceAddress.split('%')[0] : interfaceAddress;
303
- // Iterate over all interfaces.
304
208
  const nets = os.networkInterfaces();
305
209
  for (const ifaceName in nets) {
306
210
  const ifaceAddresses = nets[ifaceName];
@@ -314,13 +218,6 @@ export class Dgram extends EventEmitter {
314
218
  }
315
219
  return undefined;
316
220
  }
317
- /**
318
- * Computes the broadcast address given an IPv4 address and netmask.
319
- *
320
- * @param {string | undefined} [ipAddress] - The IPv4 address e.g. "192.168.1.20"
321
- * @param {string | undefined} [netmask] - The IPv4 netmask e.g. "255.255.255.0"
322
- * @returns {string | undefined} The computed broadcast address, e.g. "192.168.1.255"
323
- */
324
221
  getIpv4BroadcastAddress(ipAddress, netmask) {
325
222
  if (!ipAddress || !netmask) {
326
223
  return undefined;
@@ -330,17 +227,9 @@ export class Dgram extends EventEmitter {
330
227
  const broadcastParts = ipParts.map((octet, i) => (octet & maskParts[i]) | (255 - maskParts[i]));
331
228
  return broadcastParts.join('.');
332
229
  }
333
- /**
334
- * Returns the broadcast IPv6 address.
335
- *
336
- * @returns {string} The broadcast IPv6 address, e.g. "ff02::1"
337
- */
338
230
  getIpv6BroadcastAddress() {
339
231
  return 'ff02::1';
340
232
  }
341
- /**
342
- * Logs all available network interfaces and their details.
343
- */
344
233
  listNetworkInterfaces() {
345
234
  const interfaces = os.networkInterfaces();
346
235
  for (const [name, addresses] of Object.entries(interfaces)) {
@@ -353,4 +242,3 @@ export class Dgram extends EventEmitter {
353
242
  }
354
243
  }
355
244
  }
356
- //# sourceMappingURL=dgram.js.map
@@ -1,65 +1,28 @@
1
- /**
2
- * @description This file contains the bin mb_coap for the class Coap.
3
- * @file src/dgram/mb_coap.ts
4
- * @author Luca Liguori
5
- * @created 2025-07-22
6
- * @version 1.0.0
7
- * @license Apache-2.0
8
- *
9
- * Copyright 2025, 2026, 2027 Luca Liguori.
10
- *
11
- * Licensed under the Apache License, Version 2.0 (the "License");
12
- * you may not use this file except in compliance with the License.
13
- * You may obtain a copy of the License at
14
- *
15
- * http://www.apache.org/licenses/LICENSE-2.0
16
- *
17
- * Unless required by applicable law or agreed to in writing, software
18
- * distributed under the License is distributed on an "AS IS" BASIS,
19
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20
- * See the License for the specific language governing permissions and
21
- * limitations under the License.
22
- */
23
- // Net imports
24
1
  import { COAP_MULTICAST_IPV4_ADDRESS, COAP_MULTICAST_IPV6_ADDRESS, COAP_MULTICAST_PORT } from './multicast.js';
25
2
  import { Coap, COAP_OPTION_URI_PATH } from './coap.js';
26
- // istanbul ignore next
27
3
  {
28
4
  const coapIpv4 = new Coap('CoAP Server udp4', COAP_MULTICAST_IPV4_ADDRESS, COAP_MULTICAST_PORT, 'udp4', true);
29
5
  const coapIpv6 = new Coap('CoAP Server udp6', COAP_MULTICAST_IPV6_ADDRESS, COAP_MULTICAST_PORT, 'udp6', true);
30
6
  coapIpv4.listNetworkInterfaces();
31
- /**
32
- * Cleanup and log device information before exiting.
33
- */
34
7
  function cleanupAndLogAndExit() {
35
8
  if (process.argv.includes('--coap-udp4'))
36
9
  coapIpv4.stop();
37
10
  if (process.argv.includes('--coap-udp6'))
38
11
  coapIpv6.stop();
39
- // eslint-disable-next-line n/no-process-exit
40
12
  process.exit(0);
41
13
  }
42
- /**
43
- * Queries mDNS services over UDP IPv4 and sends a response for a specific service instance.
44
- * This function sends a query for Shelly, HTTP, and services, and responds with the appropriate PTR records.
45
- */
46
14
  const requestUdp4 = () => {
47
15
  coapIpv4.sendRequest(32000, [
48
16
  { number: COAP_OPTION_URI_PATH, value: Buffer.from('cit') },
49
17
  { number: COAP_OPTION_URI_PATH, value: Buffer.from('d') },
50
18
  ], {}, undefined, COAP_MULTICAST_IPV4_ADDRESS, COAP_MULTICAST_PORT);
51
19
  };
52
- /**
53
- * Queries mDNS services over UDP IPv4 and sends a response for a specific service instance.
54
- * This function sends a query for Shelly, HTTP, and services, and responds with the appropriate PTR records.
55
- */
56
20
  const requestUdp6 = () => {
57
21
  coapIpv6.sendRequest(32000, [
58
22
  { number: COAP_OPTION_URI_PATH, value: Buffer.from('cit') },
59
23
  { number: COAP_OPTION_URI_PATH, value: Buffer.from('d') },
60
24
  ], {}, undefined, COAP_MULTICAST_IPV6_ADDRESS, COAP_MULTICAST_PORT);
61
25
  };
62
- // Handle Ctrl+C (SIGINT) to stop and log devices
63
26
  process.on('SIGINT', () => {
64
27
  cleanupAndLogAndExit();
65
28
  });
@@ -67,7 +30,7 @@ import { Coap, COAP_OPTION_URI_PATH } from './coap.js';
67
30
  coapIpv4.on('ready', (address) => {
68
31
  coapIpv4.log.info(`coapIpv4 server ready on ${address.family} ${address.address}:${address.port}`);
69
32
  if (!process.argv.includes('--coap-request'))
70
- return; // Skip querying if --coap-request is not specified
33
+ return;
71
34
  requestUdp4();
72
35
  setInterval(() => {
73
36
  requestUdp4();
@@ -77,7 +40,7 @@ import { Coap, COAP_OPTION_URI_PATH } from './coap.js';
77
40
  coapIpv6.on('ready', (address) => {
78
41
  coapIpv6.log.info(`coapIpv6 server ready on ${address.family} ${address.address}:${address.port}`);
79
42
  if (!process.argv.includes('--coap-request'))
80
- return; // Skip querying if --coap-request is not specified
43
+ return;
81
44
  requestUdp6();
82
45
  setInterval(() => {
83
46
  requestUdp6();
@@ -85,6 +48,5 @@ import { Coap, COAP_OPTION_URI_PATH } from './coap.js';
85
48
  });
86
49
  setTimeout(() => {
87
50
  cleanupAndLogAndExit();
88
- }, 600000); // 10 minutes timeout to exit if no activity
51
+ }, 600000);
89
52
  }
90
- //# sourceMappingURL=mb_coap.js.map
@@ -1,39 +1,12 @@
1
- /**
2
- * @description This file contains the bin mb_mdns for the class Mdns.
3
- * @file src/dgram/mb_mdns.ts
4
- * @author Luca Liguori
5
- * @created 2025-07-22
6
- * @version 1.0.0
7
- * @license Apache-2.0
8
- *
9
- * Copyright 2025, 2026, 2027 Luca Liguori.
10
- *
11
- * Licensed under the Apache License, Version 2.0 (the "License");
12
- * you may not use this file except in compliance with the License.
13
- * You may obtain a copy of the License at
14
- *
15
- * http://www.apache.org/licenses/LICENSE-2.0
16
- *
17
- * Unless required by applicable law or agreed to in writing, software
18
- * distributed under the License is distributed on an "AS IS" BASIS,
19
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20
- * See the License for the specific language governing permissions and
21
- * limitations under the License.
22
- */
23
1
  import os from 'node:os';
24
- // Matterbridge
25
2
  import { getIntParameter, getParameter, getStringArrayParameter, hasParameter } from '../utils/commandLine.js';
26
- // Net imports
27
3
  import { MDNS_MULTICAST_IPV4_ADDRESS, MDNS_MULTICAST_IPV6_ADDRESS, MDNS_MULTICAST_PORT } from './multicast.js';
28
4
  import { Mdns } from './mdns.js';
29
5
  import { MdnsReflectorClient } from './mdnsReflectorClient.js';
30
6
  import { MdnsReflectorServer } from './mdnsReflectorServer.js';
31
- // istanbul ignore next
32
7
  {
33
8
  if (hasParameter('h') || hasParameter('help')) {
34
- // eslint-disable-next-line no-console
35
9
  console.log(`Copyright (c) Matterbridge. All rights reserved. Version 1.0.0.\n`);
36
- // eslint-disable-next-line no-console
37
10
  console.log(`Usage: mb_mdns [options...]
38
11
 
39
12
  If no command line is provided, mb_mdns shows all incoming mDNS records on all interfaces (0.0.0.0 and ::).
@@ -82,10 +55,8 @@ Examples:
82
55
  # Query each 5s and listen for _matterbridge._tcp.local service records
83
56
  mb_mdns --query 5000 --filter _matterbridge._tcp.local
84
57
  `);
85
- // eslint-disable-next-line n/no-process-exit
86
58
  process.exit(0);
87
59
  }
88
- // Dynamic JSON import (Node >= 20) with import attributes
89
60
  const { default: pkg } = await import('../../package.json', { with: { type: 'json' } });
90
61
  let mdnsIpv4QueryInterval;
91
62
  let mdnsIpv6QueryInterval;
@@ -95,9 +66,6 @@ Examples:
95
66
  let mdnsIpv6 = undefined;
96
67
  let reflectorClient = undefined;
97
68
  let reflectorServer = undefined;
98
- /**
99
- * Cleanup and log device information before exiting.
100
- */
101
69
  async function cleanupAndLogAndExit() {
102
70
  clearInterval(mdnsIpv4QueryInterval);
103
71
  clearInterval(mdnsIpv6QueryInterval);
@@ -105,38 +73,32 @@ Examples:
105
73
  clearInterval(mdnsIpv6AdvertiseInterval);
106
74
  if (hasParameter('advertise')) {
107
75
  if (mdnsIpv4)
108
- advertise(mdnsIpv4, 0); // Send goodbye with TTL 0
76
+ advertise(mdnsIpv4, 0);
109
77
  if (mdnsIpv6)
110
- advertise(mdnsIpv6, 0); // Send goodbye with TTL 0
78
+ advertise(mdnsIpv6, 0);
111
79
  }
112
- await new Promise((resolve) => setTimeout(resolve, 250)); // Wait for 250ms to allow goodbye messages to be sent
80
+ await new Promise((resolve) => setTimeout(resolve, 250));
113
81
  mdnsIpv4?.stop();
114
82
  mdnsIpv6?.stop();
115
83
  mdnsIpv4?.logDevices();
116
84
  mdnsIpv6?.logDevices();
117
- await new Promise((resolve) => setTimeout(resolve, 250)); // Wait for 250ms to allow sockets to close
85
+ await new Promise((resolve) => setTimeout(resolve, 250));
118
86
  await reflectorClient?.stop();
119
87
  await reflectorServer?.stop();
120
88
  }
121
89
  const query = (mdns) => {
122
90
  mdns.log.info('Sending mDNS query for common services...');
123
91
  mdns.sendQuery([
124
- { name: '_matterc._udp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
125
- { name: '_matter._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
126
- { name: '_matterbridge._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
127
- { name: '_home-assistant._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
128
- { name: '_shelly._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
129
- { name: '_mqtt._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
130
- { name: '_http._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
131
- { name: '_services._dns-sd._udp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
92
+ { name: '_matterc._udp.local', type: 12, class: 1, unicastResponse: true },
93
+ { name: '_matter._tcp.local', type: 12, class: 1, unicastResponse: true },
94
+ { name: '_matterbridge._tcp.local', type: 12, class: 1, unicastResponse: true },
95
+ { name: '_home-assistant._tcp.local', type: 12, class: 1, unicastResponse: true },
96
+ { name: '_shelly._tcp.local', type: 12, class: 1, unicastResponse: true },
97
+ { name: '_mqtt._tcp.local', type: 12, class: 1, unicastResponse: true },
98
+ { name: '_http._tcp.local', type: 12, class: 1, unicastResponse: true },
99
+ { name: '_services._dns-sd._udp.local', type: 12, class: 1, unicastResponse: true },
132
100
  ]);
133
101
  };
134
- /**
135
- * Sends an mDNS advertisement for the HTTP service over UDP IPv4.
136
- *
137
- * @param {Mdns} mdns - The Mdns instance to use for sending the advertisement.
138
- * @param {number} [ttl] - The time-to-live for the advertisement records. Defaults to 120 seconds. Send 0 for goodbye.
139
- */
140
102
  const advertise = (mdns, ttl = 120) => {
141
103
  mdns.log.info(`Sending mDNS advertisement for matterbridge service with TTL ${ttl ? ttl.toString() : 'goodbye'}...`);
142
104
  const httpServiceType = '_http._tcp.local';
@@ -152,25 +114,17 @@ Examples:
152
114
  const srvRdata = mdns.encodeSrvRdata(0, 0, port, hostName);
153
115
  const txtRdata = mdns.encodeTxtRdata([`version=${pkg.version}`, 'path=/']);
154
116
  const answers = [
155
- // PTR records for service types and instances
156
- { name: '_services._dns-sd._udp.local', rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrHttpServiceTypeRdata },
157
- { name: httpServiceType, rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrHttpInstanceRdata },
158
- { name: '_services._dns-sd._udp.local', rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrMatterbridgeServiceTypeRdata },
159
- { name: matterbridgeServiceType, rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrMatterbridgeInstanceRdata },
160
- // SRV record for the HTTP instance
161
- { name: httpInstanceName, rtype: 33 /* DnsRecordType.SRV */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: srvRdata },
162
- // SRV record for the matterbridge instance
163
- { name: matterbridgeInstanceName, rtype: 33 /* DnsRecordType.SRV */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: srvRdata },
164
- // TXT record for the HTTP instance
165
- { name: httpInstanceName, rtype: 16 /* DnsRecordType.TXT */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: txtRdata },
166
- // TXT record for the matterbridge instance
167
- { name: matterbridgeInstanceName, rtype: 16 /* DnsRecordType.TXT */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: txtRdata },
117
+ { name: '_services._dns-sd._udp.local', rtype: 12, rclass: 1, ttl, rdata: ptrHttpServiceTypeRdata },
118
+ { name: httpServiceType, rtype: 12, rclass: 1, ttl, rdata: ptrHttpInstanceRdata },
119
+ { name: '_services._dns-sd._udp.local', rtype: 12, rclass: 1, ttl, rdata: ptrMatterbridgeServiceTypeRdata },
120
+ { name: matterbridgeServiceType, rtype: 12, rclass: 1, ttl, rdata: ptrMatterbridgeInstanceRdata },
121
+ { name: httpInstanceName, rtype: 33, rclass: 1 | 32768, ttl, rdata: srvRdata },
122
+ { name: matterbridgeInstanceName, rtype: 33, rclass: 1 | 32768, ttl, rdata: srvRdata },
123
+ { name: httpInstanceName, rtype: 16, rclass: 1 | 32768, ttl, rdata: txtRdata },
124
+ { name: matterbridgeInstanceName, rtype: 16, rclass: 1 | 32768, ttl, rdata: txtRdata },
168
125
  ];
169
- // Always attempt to add both A and all AAAA records (best effort), regardless of the socket family.
170
126
  const interfaces = os.networkInterfaces();
171
- // Use specified interface name if provided
172
127
  let interfaceInfos = mdns.interfaceName ? interfaces[mdns.interfaceName] : undefined;
173
- // Find the first non-internal IPv4 and IPv6 addresses if interface name is not provided or not found
174
128
  if (!interfaceInfos) {
175
129
  interfaceInfos = [];
176
130
  for (const name of Object.keys(interfaces)) {
@@ -181,16 +135,15 @@ Examples:
181
135
  }
182
136
  }
183
137
  }
184
- // Encode A and AAAA records for all non-internal addresses of the selected interface
185
138
  try {
186
139
  for (const info of interfaceInfos) {
187
140
  if (info.family === 'IPv4' && !info.internal) {
188
141
  const ipv4 = info.address;
189
- answers.push({ name: hostName, rtype: 1 /* DnsRecordType.A */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: mdns.encodeA(ipv4) });
142
+ answers.push({ name: hostName, rtype: 1, rclass: 1 | 32768, ttl, rdata: mdns.encodeA(ipv4) });
190
143
  }
191
144
  else if (info.family === 'IPv6' && !info.internal) {
192
145
  const ipv6 = info.address;
193
- answers.push({ name: hostName, rtype: 28 /* DnsRecordType.AAAA */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: mdns.encodeAAAA(ipv6) });
146
+ answers.push({ name: hostName, rtype: 28, rclass: 1 | 32768, ttl, rdata: mdns.encodeAAAA(ipv6) });
194
147
  }
195
148
  }
196
149
  }
@@ -203,11 +156,9 @@ Examples:
203
156
  mdnsIpv4 = new Mdns('mDNS Server udp4', MDNS_MULTICAST_IPV4_ADDRESS, MDNS_MULTICAST_PORT, 'udp4', true, getParameter('interfaceName'), getParameter('ipv4InterfaceAddress') || '0.0.0.0', getParameter('outgoingIpv4InterfaceAddress'));
204
157
  if (hasParameter('v') || hasParameter('verbose'))
205
158
  mdnsIpv4.listNetworkInterfaces();
206
- // Apply filters if any
207
159
  const filters = getStringArrayParameter('filter');
208
160
  if (filters)
209
161
  mdnsIpv4.filters.push(...filters);
210
- // Start the IPv4 mDNS server
211
162
  mdnsIpv4.start();
212
163
  mdnsIpv4.on('ready', (address) => {
213
164
  mdnsIpv4?.socket.setMulticastLoopback(false);
@@ -226,11 +177,9 @@ Examples:
226
177
  mdnsIpv6 = new Mdns('mDNS Server udp6', MDNS_MULTICAST_IPV6_ADDRESS, MDNS_MULTICAST_PORT, 'udp6', true, getParameter('interfaceName'), getParameter('ipv6InterfaceAddress') || '::', getParameter('outgoingIpv6InterfaceAddress'));
227
178
  if (hasParameter('v') || hasParameter('verbose'))
228
179
  mdnsIpv6.listNetworkInterfaces();
229
- // Apply filters if any
230
180
  const filters = getStringArrayParameter('filter');
231
181
  if (filters)
232
182
  mdnsIpv6.filters.push(...filters);
233
- // Start the IPv6 mDNS server
234
183
  mdnsIpv6.start();
235
184
  mdnsIpv6.on('ready', (address) => {
236
185
  mdnsIpv6?.socket.setMulticastLoopback(false);
@@ -253,18 +202,15 @@ Examples:
253
202
  reflectorServer = new MdnsReflectorServer();
254
203
  await reflectorServer.start();
255
204
  }
256
- // Handle Ctrl+C (SIGINT) and SIGTERM to stop and log devices
257
205
  process.on('SIGINT', async () => {
258
206
  await cleanupAndLogAndExit();
259
207
  });
260
208
  process.on('SIGTERM', async () => {
261
209
  await cleanupAndLogAndExit();
262
210
  });
263
- // Exit after a timeout to avoid running indefinitely in test environments
264
211
  if (!hasParameter('no-timeout') && !hasParameter('reflector-server') && !hasParameter('reflector-client')) {
265
212
  setTimeout(async () => {
266
213
  await cleanupAndLogAndExit();
267
- }, 600000).unref(); // 10 minutes timeout to exit if no activity
214
+ }, 600000).unref();
268
215
  }
269
216
  }
270
- //# sourceMappingURL=mb_mdns.js.map