matterbridge 3.4.6 → 3.4.7-dev-20260104-6b10cee

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 (354) hide show
  1. package/CHANGELOG.md +17 -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 +6 -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.d.ts +21 -0
  89. package/packages/mb-lib-test/dist/jestutils/jestHelpers.js +77 -0
  90. package/packages/mb-lib-test/dist/module.d.ts +2 -0
  91. package/packages/mb-lib-test/dist/module.js +2 -0
  92. package/packages/mb-lib-test/dist/vitestutils/vitestHelpers.d.ts +21 -0
  93. package/packages/mb-lib-test/dist/vitestutils/vitestHelpers.js +77 -0
  94. package/packages/mb-lib-test/package.json +12 -11
  95. package/reflector/DockerDesktopSetup.png +0 -0
  96. package/reflector/Reflector.md +158 -0
  97. package/reflector/ReflectorClient.png +0 -0
  98. package/reflector/ReflectorServer.png +0 -0
  99. package/reflector/docker-compose.yml +32 -0
  100. package/reflector/mDnsPacket.png +0 -0
  101. package/dist/broadcastServer.d.ts +0 -144
  102. package/dist/broadcastServer.d.ts.map +0 -1
  103. package/dist/broadcastServer.js.map +0 -1
  104. package/dist/broadcastServerTypes.d.ts +0 -841
  105. package/dist/broadcastServerTypes.d.ts.map +0 -1
  106. package/dist/broadcastServerTypes.js.map +0 -1
  107. package/dist/cli.d.ts +0 -30
  108. package/dist/cli.d.ts.map +0 -1
  109. package/dist/cli.js.map +0 -1
  110. package/dist/cliEmitter.d.ts +0 -50
  111. package/dist/cliEmitter.d.ts.map +0 -1
  112. package/dist/cliEmitter.js.map +0 -1
  113. package/dist/cliHistory.d.ts +0 -48
  114. package/dist/cliHistory.d.ts.map +0 -1
  115. package/dist/cliHistory.js.map +0 -1
  116. package/dist/clusters/export.d.ts +0 -2
  117. package/dist/clusters/export.d.ts.map +0 -1
  118. package/dist/clusters/export.js.map +0 -1
  119. package/dist/deviceManager.d.ts +0 -135
  120. package/dist/deviceManager.d.ts.map +0 -1
  121. package/dist/deviceManager.js.map +0 -1
  122. package/dist/devices/airConditioner.d.ts +0 -98
  123. package/dist/devices/airConditioner.d.ts.map +0 -1
  124. package/dist/devices/airConditioner.js.map +0 -1
  125. package/dist/devices/batteryStorage.d.ts +0 -48
  126. package/dist/devices/batteryStorage.d.ts.map +0 -1
  127. package/dist/devices/batteryStorage.js.map +0 -1
  128. package/dist/devices/cooktop.d.ts +0 -61
  129. package/dist/devices/cooktop.d.ts.map +0 -1
  130. package/dist/devices/cooktop.js.map +0 -1
  131. package/dist/devices/dishwasher.d.ts +0 -71
  132. package/dist/devices/dishwasher.d.ts.map +0 -1
  133. package/dist/devices/dishwasher.js.map +0 -1
  134. package/dist/devices/evse.d.ts +0 -76
  135. package/dist/devices/evse.d.ts.map +0 -1
  136. package/dist/devices/evse.js.map +0 -1
  137. package/dist/devices/export.d.ts +0 -17
  138. package/dist/devices/export.d.ts.map +0 -1
  139. package/dist/devices/export.js.map +0 -1
  140. package/dist/devices/extractorHood.d.ts +0 -46
  141. package/dist/devices/extractorHood.d.ts.map +0 -1
  142. package/dist/devices/extractorHood.js.map +0 -1
  143. package/dist/devices/heatPump.d.ts +0 -47
  144. package/dist/devices/heatPump.d.ts.map +0 -1
  145. package/dist/devices/heatPump.js.map +0 -1
  146. package/dist/devices/laundryDryer.d.ts +0 -67
  147. package/dist/devices/laundryDryer.d.ts.map +0 -1
  148. package/dist/devices/laundryDryer.js.map +0 -1
  149. package/dist/devices/laundryWasher.d.ts +0 -81
  150. package/dist/devices/laundryWasher.d.ts.map +0 -1
  151. package/dist/devices/laundryWasher.js.map +0 -1
  152. package/dist/devices/microwaveOven.d.ts +0 -168
  153. package/dist/devices/microwaveOven.d.ts.map +0 -1
  154. package/dist/devices/microwaveOven.js.map +0 -1
  155. package/dist/devices/oven.d.ts +0 -105
  156. package/dist/devices/oven.d.ts.map +0 -1
  157. package/dist/devices/oven.js.map +0 -1
  158. package/dist/devices/refrigerator.d.ts +0 -118
  159. package/dist/devices/refrigerator.d.ts.map +0 -1
  160. package/dist/devices/refrigerator.js.map +0 -1
  161. package/dist/devices/roboticVacuumCleaner.d.ts +0 -112
  162. package/dist/devices/roboticVacuumCleaner.d.ts.map +0 -1
  163. package/dist/devices/roboticVacuumCleaner.js.map +0 -1
  164. package/dist/devices/solarPower.d.ts +0 -40
  165. package/dist/devices/solarPower.d.ts.map +0 -1
  166. package/dist/devices/solarPower.js.map +0 -1
  167. package/dist/devices/speaker.d.ts +0 -87
  168. package/dist/devices/speaker.d.ts.map +0 -1
  169. package/dist/devices/speaker.js.map +0 -1
  170. package/dist/devices/temperatureControl.d.ts +0 -166
  171. package/dist/devices/temperatureControl.d.ts.map +0 -1
  172. package/dist/devices/temperatureControl.js.map +0 -1
  173. package/dist/devices/waterHeater.d.ts +0 -111
  174. package/dist/devices/waterHeater.d.ts.map +0 -1
  175. package/dist/devices/waterHeater.js.map +0 -1
  176. package/dist/dgram/coap.d.ts +0 -205
  177. package/dist/dgram/coap.d.ts.map +0 -1
  178. package/dist/dgram/coap.js.map +0 -1
  179. package/dist/dgram/dgram.d.ts +0 -143
  180. package/dist/dgram/dgram.d.ts.map +0 -1
  181. package/dist/dgram/dgram.js.map +0 -1
  182. package/dist/dgram/mb_coap.d.ts +0 -24
  183. package/dist/dgram/mb_coap.d.ts.map +0 -1
  184. package/dist/dgram/mb_coap.js.map +0 -1
  185. package/dist/dgram/mb_mdns.d.ts +0 -24
  186. package/dist/dgram/mb_mdns.d.ts.map +0 -1
  187. package/dist/dgram/mb_mdns.js.map +0 -1
  188. package/dist/dgram/mdns.d.ts +0 -371
  189. package/dist/dgram/mdns.d.ts.map +0 -1
  190. package/dist/dgram/mdns.js.map +0 -1
  191. package/dist/dgram/mdnsReflectorClient.d.ts +0 -88
  192. package/dist/dgram/mdnsReflectorClient.d.ts.map +0 -1
  193. package/dist/dgram/mdnsReflectorClient.js.map +0 -1
  194. package/dist/dgram/mdnsReflectorServer.d.ts +0 -78
  195. package/dist/dgram/mdnsReflectorServer.d.ts.map +0 -1
  196. package/dist/dgram/mdnsReflectorServer.js.map +0 -1
  197. package/dist/dgram/mdnsReflectorTypes.d.ts +0 -28
  198. package/dist/dgram/mdnsReflectorTypes.d.ts.map +0 -1
  199. package/dist/dgram/mdnsReflectorTypes.js.map +0 -1
  200. package/dist/dgram/multicast.d.ts +0 -67
  201. package/dist/dgram/multicast.d.ts.map +0 -1
  202. package/dist/dgram/multicast.js.map +0 -1
  203. package/dist/dgram/unicast.d.ts +0 -64
  204. package/dist/dgram/unicast.d.ts.map +0 -1
  205. package/dist/dgram/unicast.js.map +0 -1
  206. package/dist/frontend.d.ts +0 -245
  207. package/dist/frontend.d.ts.map +0 -1
  208. package/dist/frontend.js.map +0 -1
  209. package/dist/frontendTypes.d.ts +0 -529
  210. package/dist/frontendTypes.d.ts.map +0 -1
  211. package/dist/frontendTypes.js.map +0 -1
  212. package/dist/helpers.d.ts +0 -48
  213. package/dist/helpers.d.ts.map +0 -1
  214. package/dist/helpers.js.map +0 -1
  215. package/dist/index.d.ts +0 -34
  216. package/dist/index.d.ts.map +0 -1
  217. package/dist/index.js.map +0 -1
  218. package/dist/jestutils/export.d.ts +0 -2
  219. package/dist/jestutils/export.d.ts.map +0 -1
  220. package/dist/jestutils/export.js.map +0 -1
  221. package/dist/jestutils/jestHelpers.d.ts +0 -345
  222. package/dist/jestutils/jestHelpers.d.ts.map +0 -1
  223. package/dist/jestutils/jestHelpers.js.map +0 -1
  224. package/dist/logger/export.d.ts +0 -2
  225. package/dist/logger/export.d.ts.map +0 -1
  226. package/dist/logger/export.js.map +0 -1
  227. package/dist/matter/behaviors.d.ts +0 -2
  228. package/dist/matter/behaviors.d.ts.map +0 -1
  229. package/dist/matter/behaviors.js.map +0 -1
  230. package/dist/matter/clusters.d.ts +0 -2
  231. package/dist/matter/clusters.d.ts.map +0 -1
  232. package/dist/matter/clusters.js.map +0 -1
  233. package/dist/matter/devices.d.ts +0 -2
  234. package/dist/matter/devices.d.ts.map +0 -1
  235. package/dist/matter/devices.js.map +0 -1
  236. package/dist/matter/endpoints.d.ts +0 -2
  237. package/dist/matter/endpoints.d.ts.map +0 -1
  238. package/dist/matter/endpoints.js.map +0 -1
  239. package/dist/matter/export.d.ts +0 -5
  240. package/dist/matter/export.d.ts.map +0 -1
  241. package/dist/matter/export.js.map +0 -1
  242. package/dist/matter/types.d.ts +0 -3
  243. package/dist/matter/types.d.ts.map +0 -1
  244. package/dist/matter/types.js.map +0 -1
  245. package/dist/matterNode.d.ts +0 -342
  246. package/dist/matterNode.d.ts.map +0 -1
  247. package/dist/matterNode.js.map +0 -1
  248. package/dist/matterbridge.d.ts +0 -505
  249. package/dist/matterbridge.d.ts.map +0 -1
  250. package/dist/matterbridge.js.map +0 -1
  251. package/dist/matterbridgeAccessoryPlatform.d.ts +0 -41
  252. package/dist/matterbridgeAccessoryPlatform.d.ts.map +0 -1
  253. package/dist/matterbridgeAccessoryPlatform.js.map +0 -1
  254. package/dist/matterbridgeBehaviors.d.ts +0 -2404
  255. package/dist/matterbridgeBehaviors.d.ts.map +0 -1
  256. package/dist/matterbridgeBehaviors.js.map +0 -1
  257. package/dist/matterbridgeDeviceTypes.d.ts +0 -698
  258. package/dist/matterbridgeDeviceTypes.d.ts.map +0 -1
  259. package/dist/matterbridgeDeviceTypes.js.map +0 -1
  260. package/dist/matterbridgeDynamicPlatform.d.ts +0 -41
  261. package/dist/matterbridgeDynamicPlatform.d.ts.map +0 -1
  262. package/dist/matterbridgeDynamicPlatform.js.map +0 -1
  263. package/dist/matterbridgeEndpoint.d.ts +0 -1507
  264. package/dist/matterbridgeEndpoint.d.ts.map +0 -1
  265. package/dist/matterbridgeEndpoint.js.map +0 -1
  266. package/dist/matterbridgeEndpointHelpers.d.ts +0 -787
  267. package/dist/matterbridgeEndpointHelpers.d.ts.map +0 -1
  268. package/dist/matterbridgeEndpointHelpers.js.map +0 -1
  269. package/dist/matterbridgeEndpointTypes.d.ts +0 -166
  270. package/dist/matterbridgeEndpointTypes.d.ts.map +0 -1
  271. package/dist/matterbridgeEndpointTypes.js.map +0 -1
  272. package/dist/matterbridgePlatform.d.ts +0 -539
  273. package/dist/matterbridgePlatform.d.ts.map +0 -1
  274. package/dist/matterbridgePlatform.js.map +0 -1
  275. package/dist/matterbridgeTypes.d.ts +0 -252
  276. package/dist/matterbridgeTypes.d.ts.map +0 -1
  277. package/dist/matterbridgeTypes.js.map +0 -1
  278. package/dist/pluginManager.d.ts +0 -372
  279. package/dist/pluginManager.d.ts.map +0 -1
  280. package/dist/pluginManager.js.map +0 -1
  281. package/dist/shelly.d.ts +0 -181
  282. package/dist/shelly.d.ts.map +0 -1
  283. package/dist/shelly.js.map +0 -1
  284. package/dist/storage/export.d.ts +0 -2
  285. package/dist/storage/export.d.ts.map +0 -1
  286. package/dist/storage/export.js.map +0 -1
  287. package/dist/update.d.ts +0 -84
  288. package/dist/update.d.ts.map +0 -1
  289. package/dist/update.js.map +0 -1
  290. package/dist/utils/colorUtils.d.ts +0 -101
  291. package/dist/utils/colorUtils.d.ts.map +0 -1
  292. package/dist/utils/colorUtils.js.map +0 -1
  293. package/dist/utils/commandLine.d.ts +0 -66
  294. package/dist/utils/commandLine.d.ts.map +0 -1
  295. package/dist/utils/commandLine.js.map +0 -1
  296. package/dist/utils/copyDirectory.d.ts +0 -35
  297. package/dist/utils/copyDirectory.d.ts.map +0 -1
  298. package/dist/utils/copyDirectory.js.map +0 -1
  299. package/dist/utils/createDirectory.d.ts +0 -34
  300. package/dist/utils/createDirectory.d.ts.map +0 -1
  301. package/dist/utils/createDirectory.js.map +0 -1
  302. package/dist/utils/createZip.d.ts +0 -39
  303. package/dist/utils/createZip.d.ts.map +0 -1
  304. package/dist/utils/createZip.js.map +0 -1
  305. package/dist/utils/deepCopy.d.ts +0 -32
  306. package/dist/utils/deepCopy.d.ts.map +0 -1
  307. package/dist/utils/deepCopy.js.map +0 -1
  308. package/dist/utils/deepEqual.d.ts +0 -54
  309. package/dist/utils/deepEqual.d.ts.map +0 -1
  310. package/dist/utils/deepEqual.js.map +0 -1
  311. package/dist/utils/error.d.ts +0 -45
  312. package/dist/utils/error.d.ts.map +0 -1
  313. package/dist/utils/error.js.map +0 -1
  314. package/dist/utils/export.d.ts +0 -13
  315. package/dist/utils/export.d.ts.map +0 -1
  316. package/dist/utils/export.js.map +0 -1
  317. package/dist/utils/format.d.ts +0 -53
  318. package/dist/utils/format.d.ts.map +0 -1
  319. package/dist/utils/format.js.map +0 -1
  320. package/dist/utils/hex.d.ts +0 -89
  321. package/dist/utils/hex.d.ts.map +0 -1
  322. package/dist/utils/hex.js.map +0 -1
  323. package/dist/utils/inspector.d.ts +0 -87
  324. package/dist/utils/inspector.d.ts.map +0 -1
  325. package/dist/utils/inspector.js.map +0 -1
  326. package/dist/utils/isValid.d.ts +0 -103
  327. package/dist/utils/isValid.d.ts.map +0 -1
  328. package/dist/utils/isValid.js.map +0 -1
  329. package/dist/utils/network.d.ts +0 -140
  330. package/dist/utils/network.d.ts.map +0 -1
  331. package/dist/utils/network.js.map +0 -1
  332. package/dist/utils/spawn.d.ts +0 -33
  333. package/dist/utils/spawn.d.ts.map +0 -1
  334. package/dist/utils/spawn.js.map +0 -1
  335. package/dist/utils/tracker.d.ts +0 -108
  336. package/dist/utils/tracker.d.ts.map +0 -1
  337. package/dist/utils/tracker.js.map +0 -1
  338. package/dist/utils/wait.d.ts +0 -54
  339. package/dist/utils/wait.d.ts.map +0 -1
  340. package/dist/utils/wait.js.map +0 -1
  341. package/dist/workerGlobalPrefix.d.ts +0 -25
  342. package/dist/workerGlobalPrefix.d.ts.map +0 -1
  343. package/dist/workerGlobalPrefix.js.map +0 -1
  344. package/dist/workerTypes.d.ts +0 -52
  345. package/dist/workerTypes.d.ts.map +0 -1
  346. package/dist/workerTypes.js.map +0 -1
  347. package/dist/workers.d.ts +0 -69
  348. package/dist/workers.d.ts.map +0 -1
  349. package/dist/workers.js.map +0 -1
  350. package/scripts/data_model.mjs +0 -2058
  351. package/scripts/fetch-chip.mjs +0 -102
  352. package/scripts/marked.mjs +0 -133
  353. package/scripts/markedFooter.html +0 -42
  354. 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,20 @@ 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)) {
101
+ if (interfaceName.toLowerCase().includes('tailscale'))
102
+ continue;
155
103
  if (!interfaceDetails)
156
104
  continue;
157
- // Check if at least one external IPv4 address exists on this interface.
158
105
  for (const detail of interfaceDetails) {
159
106
  if (detail.family === 'IPv4' && !detail.internal) {
160
107
  networkInterface = interfaceName;
@@ -168,7 +115,6 @@ export class Dgram extends EventEmitter {
168
115
  if (!networkInterface) {
169
116
  throw new Error(`Didn't find an external IPv4 network interface`);
170
117
  }
171
- // Select the first external IPv4 address from the interface.
172
118
  const addresses = interfaces[networkInterface];
173
119
  const ipv4Address = addresses?.find((addr) => addr.family === 'IPv4' && !addr.internal);
174
120
  if (!ipv4Address) {
@@ -176,27 +122,18 @@ export class Dgram extends EventEmitter {
176
122
  }
177
123
  return ipv4Address.address;
178
124
  }
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
125
  getIpv6InterfaceAddress(networkInterface) {
188
- // Normalize the interface name: treat an empty string as undefined.
189
126
  if (networkInterface === '')
190
127
  networkInterface = undefined;
191
128
  const interfaces = os.networkInterfaces();
192
- // If a specific interface is provided, verify it exists. Otherwise, warn and use the first external IPv6 interface.
193
129
  if (networkInterface && !interfaces[networkInterface]) {
194
130
  this.log.warn(`Interface "${networkInterface}" not found. Using first external IPv6 interface.`);
195
131
  networkInterface = undefined;
196
132
  }
197
- // If no network interface was specified, search for the first external IPv6 interface.
198
133
  if (!networkInterface) {
199
134
  for (const [interfaceName, interfaceDetails] of Object.entries(interfaces)) {
135
+ if (interfaceName.toLowerCase().includes('tailscale'))
136
+ continue;
200
137
  if (!interfaceDetails)
201
138
  continue;
202
139
  for (const detail of interfaceDetails) {
@@ -213,21 +150,18 @@ export class Dgram extends EventEmitter {
213
150
  throw new Error(`Didn't find an external IPv6 network interface`);
214
151
  }
215
152
  const addresses = interfaces[networkInterface];
216
- // Try to find a link-local address and use scopeid
217
153
  const linkLocalAddress = addresses?.find((addr) => addr.family === 'IPv6' && !addr.internal && addr.address.startsWith('fe80'));
218
154
  if (linkLocalAddress) {
219
155
  this.log.debug('Found IPv6 link-local address');
220
156
  return linkLocalAddress.scopeid ? `${linkLocalAddress.address}%${process.platform !== 'win32' ? networkInterface : linkLocalAddress.scopeid}` : linkLocalAddress.address;
221
157
  }
222
158
  this.log.debug('No IPv6 link-local address found');
223
- // Try to find a unique local address
224
159
  const ulaAddress = addresses?.find((addr) => addr.family === 'IPv6' && !addr.internal && addr.address.startsWith('fd') && addr.netmask === 'ffff:ffff:ffff:ffff::');
225
160
  if (ulaAddress) {
226
161
  this.log.debug('Found IPv6 Unique Local Addresses (ULA) unicast address');
227
162
  return ulaAddress.address;
228
163
  }
229
164
  this.log.debug('No IPv6 Unique Local Addresses (ULA) unicast address found');
230
- // Try to find a unique local address
231
165
  const uniqueLocalAddress = addresses?.find((addr) => addr.family === 'IPv6' && !addr.internal && addr.address.startsWith('fd'));
232
166
  if (uniqueLocalAddress) {
233
167
  this.log.debug('Found IPv6 Unique Local Addresses (ULA) address');
@@ -236,11 +170,6 @@ export class Dgram extends EventEmitter {
236
170
  this.log.debug('No IPv6 Unique Local Addresses (ULA) address found');
237
171
  throw new Error(`Interface ${networkInterface} does not have a suitable external IPv6 address`);
238
172
  }
239
- /**
240
- * Retrieves the names of all available network interfaces.
241
- *
242
- * @returns {string[]} An array of network interface names.
243
- */
244
173
  getInterfacesNames() {
245
174
  const interfaces = os.networkInterfaces();
246
175
  const interfaceNames = [];
@@ -251,12 +180,6 @@ export class Dgram extends EventEmitter {
251
180
  }
252
181
  return interfaceNames;
253
182
  }
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
183
  getIpv6ScopeId(interfaceName) {
261
184
  const interfaces = os.networkInterfaces();
262
185
  for (const name in interfaces) {
@@ -266,24 +189,17 @@ export class Dgram extends EventEmitter {
266
189
  if (iface) {
267
190
  const ipv6Address = iface.find((addr) => addr.family === 'IPv6' && !addr.internal && addr.scopeid);
268
191
  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
192
+ return process.platform === 'win32' ? '%' + String(ipv6Address.scopeid) : '%' + name;
270
193
  }
271
194
  }
272
195
  }
273
196
  return '';
274
197
  }
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
198
  getInterfaceNameFromScopeId(scopeId) {
282
199
  const nets = os.networkInterfaces();
283
200
  for (const ifaceName in nets) {
284
201
  const addresses = nets[ifaceName] || [];
285
202
  for (const addr of addresses) {
286
- // Check for IPv6 addresses with a matching scope id.
287
203
  if (addr.family === 'IPv6' && addr.scopeid === scopeId) {
288
204
  return ifaceName;
289
205
  }
@@ -291,16 +207,8 @@ export class Dgram extends EventEmitter {
291
207
  }
292
208
  return undefined;
293
209
  }
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
210
  getNetmask(interfaceAddress) {
301
- // Remove zone index if present (e.g. for IPv6 "fe80::1%eth0")
302
211
  const noZoneAddress = interfaceAddress.includes('%') ? interfaceAddress.split('%')[0] : interfaceAddress;
303
- // Iterate over all interfaces.
304
212
  const nets = os.networkInterfaces();
305
213
  for (const ifaceName in nets) {
306
214
  const ifaceAddresses = nets[ifaceName];
@@ -314,13 +222,6 @@ export class Dgram extends EventEmitter {
314
222
  }
315
223
  return undefined;
316
224
  }
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
225
  getIpv4BroadcastAddress(ipAddress, netmask) {
325
226
  if (!ipAddress || !netmask) {
326
227
  return undefined;
@@ -330,17 +231,9 @@ export class Dgram extends EventEmitter {
330
231
  const broadcastParts = ipParts.map((octet, i) => (octet & maskParts[i]) | (255 - maskParts[i]));
331
232
  return broadcastParts.join('.');
332
233
  }
333
- /**
334
- * Returns the broadcast IPv6 address.
335
- *
336
- * @returns {string} The broadcast IPv6 address, e.g. "ff02::1"
337
- */
338
234
  getIpv6BroadcastAddress() {
339
235
  return 'ff02::1';
340
236
  }
341
- /**
342
- * Logs all available network interfaces and their details.
343
- */
344
237
  listNetworkInterfaces() {
345
238
  const interfaces = os.networkInterfaces();
346
239
  for (const [name, addresses] of Object.entries(interfaces)) {
@@ -353,4 +246,3 @@ export class Dgram extends EventEmitter {
353
246
  }
354
247
  }
355
248
  }
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