matterbridge 3.4.5 → 3.4.6-dev-20251228-e06f048

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 (335) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/broadcastServer.js +0 -117
  3. package/dist/broadcastServerTypes.js +0 -24
  4. package/dist/cli.js +1 -97
  5. package/dist/cliEmitter.js +0 -37
  6. package/dist/cliHistory.js +0 -38
  7. package/dist/clusters/export.js +0 -2
  8. package/dist/deviceManager.js +1 -113
  9. package/dist/devices/airConditioner.js +0 -57
  10. package/dist/devices/batteryStorage.js +1 -48
  11. package/dist/devices/cooktop.js +0 -56
  12. package/dist/devices/dishwasher.js +0 -57
  13. package/dist/devices/evse.js +10 -74
  14. package/dist/devices/export.js +0 -5
  15. package/dist/devices/extractorHood.js +0 -43
  16. package/dist/devices/heatPump.js +2 -50
  17. package/dist/devices/laundryDryer.js +3 -62
  18. package/dist/devices/laundryWasher.js +4 -70
  19. package/dist/devices/microwaveOven.js +5 -88
  20. package/dist/devices/oven.js +0 -85
  21. package/dist/devices/refrigerator.js +0 -102
  22. package/dist/devices/roboticVacuumCleaner.js +9 -100
  23. package/dist/devices/solarPower.js +0 -38
  24. package/dist/devices/speaker.js +0 -84
  25. package/dist/devices/temperatureControl.js +3 -24
  26. package/dist/devices/waterHeater.js +2 -82
  27. package/dist/dgram/coap.js +13 -126
  28. package/dist/dgram/dgram.js +2 -114
  29. package/dist/dgram/mb_coap.js +3 -41
  30. package/dist/dgram/mb_mdns.js +22 -76
  31. package/dist/dgram/mdns.js +137 -351
  32. package/dist/dgram/mdnsReflectorClient.js +5 -29
  33. package/dist/dgram/mdnsReflectorServer.js +8 -49
  34. package/dist/dgram/mdnsReflectorTypes.js +1 -24
  35. package/dist/dgram/multicast.js +1 -62
  36. package/dist/dgram/unicast.js +0 -60
  37. package/dist/frontend.js +38 -485
  38. package/dist/frontendTypes.js +0 -45
  39. package/dist/helpers.js +0 -53
  40. package/dist/index.js +0 -25
  41. package/dist/jestutils/export.js +0 -1
  42. package/dist/jestutils/jestHelpers.js +14 -371
  43. package/dist/logger/export.js +0 -1
  44. package/dist/matter/behaviors.js +0 -2
  45. package/dist/matter/clusters.js +0 -2
  46. package/dist/matter/devices.js +0 -2
  47. package/dist/matter/endpoints.js +0 -2
  48. package/dist/matter/export.js +0 -3
  49. package/dist/matter/types.js +0 -3
  50. package/dist/matterNode.js +8 -369
  51. package/dist/matterbridge.js +46 -824
  52. package/dist/matterbridgeAccessoryPlatform.js +0 -38
  53. package/dist/matterbridgeBehaviors.js +5 -68
  54. package/dist/matterbridgeDeviceTypes.js +14 -635
  55. package/dist/matterbridgeDynamicPlatform.js +0 -38
  56. package/dist/matterbridgeEndpoint.js +53 -1457
  57. package/dist/matterbridgeEndpointHelpers.js +20 -483
  58. package/dist/matterbridgeEndpointTypes.js +0 -25
  59. package/dist/matterbridgePlatform.js +1 -451
  60. package/dist/matterbridgeTypes.js +0 -26
  61. package/dist/pluginManager.js +5 -341
  62. package/dist/shelly.js +7 -178
  63. package/dist/storage/export.js +0 -1
  64. package/dist/update.js +1 -93
  65. package/dist/utils/colorUtils.js +2 -97
  66. package/dist/utils/commandLine.js +0 -60
  67. package/dist/utils/copyDirectory.js +0 -37
  68. package/dist/utils/createDirectory.js +0 -33
  69. package/dist/utils/createZip.js +2 -47
  70. package/dist/utils/deepCopy.js +0 -39
  71. package/dist/utils/deepEqual.js +1 -72
  72. package/dist/utils/error.js +0 -42
  73. package/dist/utils/export.js +0 -1
  74. package/dist/utils/format.js +0 -49
  75. package/dist/utils/hex.js +0 -124
  76. package/dist/utils/inspector.js +1 -69
  77. package/dist/utils/isvalid.js +0 -101
  78. package/dist/utils/network.js +5 -103
  79. package/dist/utils/spawn.js +1 -71
  80. package/dist/utils/tracker.js +1 -64
  81. package/dist/utils/wait.js +8 -60
  82. package/dist/workerGlobalPrefix.js +5 -37
  83. package/dist/workerTypes.js +0 -24
  84. package/dist/workers.js +4 -68
  85. package/npm-shrinkwrap.json +2 -2
  86. package/package.json +1 -2
  87. package/dist/broadcastServer.d.ts +0 -144
  88. package/dist/broadcastServer.d.ts.map +0 -1
  89. package/dist/broadcastServer.js.map +0 -1
  90. package/dist/broadcastServerTypes.d.ts +0 -841
  91. package/dist/broadcastServerTypes.d.ts.map +0 -1
  92. package/dist/broadcastServerTypes.js.map +0 -1
  93. package/dist/cli.d.ts +0 -30
  94. package/dist/cli.d.ts.map +0 -1
  95. package/dist/cli.js.map +0 -1
  96. package/dist/cliEmitter.d.ts +0 -50
  97. package/dist/cliEmitter.d.ts.map +0 -1
  98. package/dist/cliEmitter.js.map +0 -1
  99. package/dist/cliHistory.d.ts +0 -48
  100. package/dist/cliHistory.d.ts.map +0 -1
  101. package/dist/cliHistory.js.map +0 -1
  102. package/dist/clusters/export.d.ts +0 -2
  103. package/dist/clusters/export.d.ts.map +0 -1
  104. package/dist/clusters/export.js.map +0 -1
  105. package/dist/deviceManager.d.ts +0 -135
  106. package/dist/deviceManager.d.ts.map +0 -1
  107. package/dist/deviceManager.js.map +0 -1
  108. package/dist/devices/airConditioner.d.ts +0 -98
  109. package/dist/devices/airConditioner.d.ts.map +0 -1
  110. package/dist/devices/airConditioner.js.map +0 -1
  111. package/dist/devices/batteryStorage.d.ts +0 -48
  112. package/dist/devices/batteryStorage.d.ts.map +0 -1
  113. package/dist/devices/batteryStorage.js.map +0 -1
  114. package/dist/devices/cooktop.d.ts +0 -61
  115. package/dist/devices/cooktop.d.ts.map +0 -1
  116. package/dist/devices/cooktop.js.map +0 -1
  117. package/dist/devices/dishwasher.d.ts +0 -71
  118. package/dist/devices/dishwasher.d.ts.map +0 -1
  119. package/dist/devices/dishwasher.js.map +0 -1
  120. package/dist/devices/evse.d.ts +0 -76
  121. package/dist/devices/evse.d.ts.map +0 -1
  122. package/dist/devices/evse.js.map +0 -1
  123. package/dist/devices/export.d.ts +0 -17
  124. package/dist/devices/export.d.ts.map +0 -1
  125. package/dist/devices/export.js.map +0 -1
  126. package/dist/devices/extractorHood.d.ts +0 -46
  127. package/dist/devices/extractorHood.d.ts.map +0 -1
  128. package/dist/devices/extractorHood.js.map +0 -1
  129. package/dist/devices/heatPump.d.ts +0 -47
  130. package/dist/devices/heatPump.d.ts.map +0 -1
  131. package/dist/devices/heatPump.js.map +0 -1
  132. package/dist/devices/laundryDryer.d.ts +0 -67
  133. package/dist/devices/laundryDryer.d.ts.map +0 -1
  134. package/dist/devices/laundryDryer.js.map +0 -1
  135. package/dist/devices/laundryWasher.d.ts +0 -81
  136. package/dist/devices/laundryWasher.d.ts.map +0 -1
  137. package/dist/devices/laundryWasher.js.map +0 -1
  138. package/dist/devices/microwaveOven.d.ts +0 -168
  139. package/dist/devices/microwaveOven.d.ts.map +0 -1
  140. package/dist/devices/microwaveOven.js.map +0 -1
  141. package/dist/devices/oven.d.ts +0 -105
  142. package/dist/devices/oven.d.ts.map +0 -1
  143. package/dist/devices/oven.js.map +0 -1
  144. package/dist/devices/refrigerator.d.ts +0 -118
  145. package/dist/devices/refrigerator.d.ts.map +0 -1
  146. package/dist/devices/refrigerator.js.map +0 -1
  147. package/dist/devices/roboticVacuumCleaner.d.ts +0 -112
  148. package/dist/devices/roboticVacuumCleaner.d.ts.map +0 -1
  149. package/dist/devices/roboticVacuumCleaner.js.map +0 -1
  150. package/dist/devices/solarPower.d.ts +0 -40
  151. package/dist/devices/solarPower.d.ts.map +0 -1
  152. package/dist/devices/solarPower.js.map +0 -1
  153. package/dist/devices/speaker.d.ts +0 -87
  154. package/dist/devices/speaker.d.ts.map +0 -1
  155. package/dist/devices/speaker.js.map +0 -1
  156. package/dist/devices/temperatureControl.d.ts +0 -166
  157. package/dist/devices/temperatureControl.d.ts.map +0 -1
  158. package/dist/devices/temperatureControl.js.map +0 -1
  159. package/dist/devices/waterHeater.d.ts +0 -111
  160. package/dist/devices/waterHeater.d.ts.map +0 -1
  161. package/dist/devices/waterHeater.js.map +0 -1
  162. package/dist/dgram/coap.d.ts +0 -205
  163. package/dist/dgram/coap.d.ts.map +0 -1
  164. package/dist/dgram/coap.js.map +0 -1
  165. package/dist/dgram/dgram.d.ts +0 -143
  166. package/dist/dgram/dgram.d.ts.map +0 -1
  167. package/dist/dgram/dgram.js.map +0 -1
  168. package/dist/dgram/mb_coap.d.ts +0 -24
  169. package/dist/dgram/mb_coap.d.ts.map +0 -1
  170. package/dist/dgram/mb_coap.js.map +0 -1
  171. package/dist/dgram/mb_mdns.d.ts +0 -24
  172. package/dist/dgram/mb_mdns.d.ts.map +0 -1
  173. package/dist/dgram/mb_mdns.js.map +0 -1
  174. package/dist/dgram/mdns.d.ts +0 -350
  175. package/dist/dgram/mdns.d.ts.map +0 -1
  176. package/dist/dgram/mdns.js.map +0 -1
  177. package/dist/dgram/mdnsReflectorClient.d.ts +0 -39
  178. package/dist/dgram/mdnsReflectorClient.d.ts.map +0 -1
  179. package/dist/dgram/mdnsReflectorClient.js.map +0 -1
  180. package/dist/dgram/mdnsReflectorServer.d.ts +0 -54
  181. package/dist/dgram/mdnsReflectorServer.d.ts.map +0 -1
  182. package/dist/dgram/mdnsReflectorServer.js.map +0 -1
  183. package/dist/dgram/mdnsReflectorTypes.d.ts +0 -28
  184. package/dist/dgram/mdnsReflectorTypes.d.ts.map +0 -1
  185. package/dist/dgram/mdnsReflectorTypes.js.map +0 -1
  186. package/dist/dgram/multicast.d.ts +0 -67
  187. package/dist/dgram/multicast.d.ts.map +0 -1
  188. package/dist/dgram/multicast.js.map +0 -1
  189. package/dist/dgram/unicast.d.ts +0 -64
  190. package/dist/dgram/unicast.d.ts.map +0 -1
  191. package/dist/dgram/unicast.js.map +0 -1
  192. package/dist/frontend.d.ts +0 -245
  193. package/dist/frontend.d.ts.map +0 -1
  194. package/dist/frontend.js.map +0 -1
  195. package/dist/frontendTypes.d.ts +0 -529
  196. package/dist/frontendTypes.d.ts.map +0 -1
  197. package/dist/frontendTypes.js.map +0 -1
  198. package/dist/helpers.d.ts +0 -48
  199. package/dist/helpers.d.ts.map +0 -1
  200. package/dist/helpers.js.map +0 -1
  201. package/dist/index.d.ts +0 -34
  202. package/dist/index.d.ts.map +0 -1
  203. package/dist/index.js.map +0 -1
  204. package/dist/jestutils/export.d.ts +0 -2
  205. package/dist/jestutils/export.d.ts.map +0 -1
  206. package/dist/jestutils/export.js.map +0 -1
  207. package/dist/jestutils/jestHelpers.d.ts +0 -345
  208. package/dist/jestutils/jestHelpers.d.ts.map +0 -1
  209. package/dist/jestutils/jestHelpers.js.map +0 -1
  210. package/dist/logger/export.d.ts +0 -2
  211. package/dist/logger/export.d.ts.map +0 -1
  212. package/dist/logger/export.js.map +0 -1
  213. package/dist/matter/behaviors.d.ts +0 -2
  214. package/dist/matter/behaviors.d.ts.map +0 -1
  215. package/dist/matter/behaviors.js.map +0 -1
  216. package/dist/matter/clusters.d.ts +0 -2
  217. package/dist/matter/clusters.d.ts.map +0 -1
  218. package/dist/matter/clusters.js.map +0 -1
  219. package/dist/matter/devices.d.ts +0 -2
  220. package/dist/matter/devices.d.ts.map +0 -1
  221. package/dist/matter/devices.js.map +0 -1
  222. package/dist/matter/endpoints.d.ts +0 -2
  223. package/dist/matter/endpoints.d.ts.map +0 -1
  224. package/dist/matter/endpoints.js.map +0 -1
  225. package/dist/matter/export.d.ts +0 -5
  226. package/dist/matter/export.d.ts.map +0 -1
  227. package/dist/matter/export.js.map +0 -1
  228. package/dist/matter/types.d.ts +0 -3
  229. package/dist/matter/types.d.ts.map +0 -1
  230. package/dist/matter/types.js.map +0 -1
  231. package/dist/matterNode.d.ts +0 -342
  232. package/dist/matterNode.d.ts.map +0 -1
  233. package/dist/matterNode.js.map +0 -1
  234. package/dist/matterbridge.d.ts +0 -505
  235. package/dist/matterbridge.d.ts.map +0 -1
  236. package/dist/matterbridge.js.map +0 -1
  237. package/dist/matterbridgeAccessoryPlatform.d.ts +0 -41
  238. package/dist/matterbridgeAccessoryPlatform.d.ts.map +0 -1
  239. package/dist/matterbridgeAccessoryPlatform.js.map +0 -1
  240. package/dist/matterbridgeBehaviors.d.ts +0 -2404
  241. package/dist/matterbridgeBehaviors.d.ts.map +0 -1
  242. package/dist/matterbridgeBehaviors.js.map +0 -1
  243. package/dist/matterbridgeDeviceTypes.d.ts +0 -698
  244. package/dist/matterbridgeDeviceTypes.d.ts.map +0 -1
  245. package/dist/matterbridgeDeviceTypes.js.map +0 -1
  246. package/dist/matterbridgeDynamicPlatform.d.ts +0 -41
  247. package/dist/matterbridgeDynamicPlatform.d.ts.map +0 -1
  248. package/dist/matterbridgeDynamicPlatform.js.map +0 -1
  249. package/dist/matterbridgeEndpoint.d.ts +0 -1507
  250. package/dist/matterbridgeEndpoint.d.ts.map +0 -1
  251. package/dist/matterbridgeEndpoint.js.map +0 -1
  252. package/dist/matterbridgeEndpointHelpers.d.ts +0 -787
  253. package/dist/matterbridgeEndpointHelpers.d.ts.map +0 -1
  254. package/dist/matterbridgeEndpointHelpers.js.map +0 -1
  255. package/dist/matterbridgeEndpointTypes.d.ts +0 -166
  256. package/dist/matterbridgeEndpointTypes.d.ts.map +0 -1
  257. package/dist/matterbridgeEndpointTypes.js.map +0 -1
  258. package/dist/matterbridgePlatform.d.ts +0 -539
  259. package/dist/matterbridgePlatform.d.ts.map +0 -1
  260. package/dist/matterbridgePlatform.js.map +0 -1
  261. package/dist/matterbridgeTypes.d.ts +0 -252
  262. package/dist/matterbridgeTypes.d.ts.map +0 -1
  263. package/dist/matterbridgeTypes.js.map +0 -1
  264. package/dist/pluginManager.d.ts +0 -372
  265. package/dist/pluginManager.d.ts.map +0 -1
  266. package/dist/pluginManager.js.map +0 -1
  267. package/dist/shelly.d.ts +0 -181
  268. package/dist/shelly.d.ts.map +0 -1
  269. package/dist/shelly.js.map +0 -1
  270. package/dist/storage/export.d.ts +0 -2
  271. package/dist/storage/export.d.ts.map +0 -1
  272. package/dist/storage/export.js.map +0 -1
  273. package/dist/update.d.ts +0 -84
  274. package/dist/update.d.ts.map +0 -1
  275. package/dist/update.js.map +0 -1
  276. package/dist/utils/colorUtils.d.ts +0 -101
  277. package/dist/utils/colorUtils.d.ts.map +0 -1
  278. package/dist/utils/colorUtils.js.map +0 -1
  279. package/dist/utils/commandLine.d.ts +0 -66
  280. package/dist/utils/commandLine.d.ts.map +0 -1
  281. package/dist/utils/commandLine.js.map +0 -1
  282. package/dist/utils/copyDirectory.d.ts +0 -35
  283. package/dist/utils/copyDirectory.d.ts.map +0 -1
  284. package/dist/utils/copyDirectory.js.map +0 -1
  285. package/dist/utils/createDirectory.d.ts +0 -34
  286. package/dist/utils/createDirectory.d.ts.map +0 -1
  287. package/dist/utils/createDirectory.js.map +0 -1
  288. package/dist/utils/createZip.d.ts +0 -39
  289. package/dist/utils/createZip.d.ts.map +0 -1
  290. package/dist/utils/createZip.js.map +0 -1
  291. package/dist/utils/deepCopy.d.ts +0 -32
  292. package/dist/utils/deepCopy.d.ts.map +0 -1
  293. package/dist/utils/deepCopy.js.map +0 -1
  294. package/dist/utils/deepEqual.d.ts +0 -54
  295. package/dist/utils/deepEqual.d.ts.map +0 -1
  296. package/dist/utils/deepEqual.js.map +0 -1
  297. package/dist/utils/error.d.ts +0 -45
  298. package/dist/utils/error.d.ts.map +0 -1
  299. package/dist/utils/error.js.map +0 -1
  300. package/dist/utils/export.d.ts +0 -13
  301. package/dist/utils/export.d.ts.map +0 -1
  302. package/dist/utils/export.js.map +0 -1
  303. package/dist/utils/format.d.ts +0 -53
  304. package/dist/utils/format.d.ts.map +0 -1
  305. package/dist/utils/format.js.map +0 -1
  306. package/dist/utils/hex.d.ts +0 -89
  307. package/dist/utils/hex.d.ts.map +0 -1
  308. package/dist/utils/hex.js.map +0 -1
  309. package/dist/utils/inspector.d.ts +0 -87
  310. package/dist/utils/inspector.d.ts.map +0 -1
  311. package/dist/utils/inspector.js.map +0 -1
  312. package/dist/utils/isvalid.d.ts +0 -103
  313. package/dist/utils/isvalid.d.ts.map +0 -1
  314. package/dist/utils/isvalid.js.map +0 -1
  315. package/dist/utils/network.d.ts +0 -117
  316. package/dist/utils/network.d.ts.map +0 -1
  317. package/dist/utils/network.js.map +0 -1
  318. package/dist/utils/spawn.d.ts +0 -33
  319. package/dist/utils/spawn.d.ts.map +0 -1
  320. package/dist/utils/spawn.js.map +0 -1
  321. package/dist/utils/tracker.d.ts +0 -108
  322. package/dist/utils/tracker.d.ts.map +0 -1
  323. package/dist/utils/tracker.js.map +0 -1
  324. package/dist/utils/wait.d.ts +0 -54
  325. package/dist/utils/wait.d.ts.map +0 -1
  326. package/dist/utils/wait.js.map +0 -1
  327. package/dist/workerGlobalPrefix.d.ts +0 -25
  328. package/dist/workerGlobalPrefix.d.ts.map +0 -1
  329. package/dist/workerGlobalPrefix.js.map +0 -1
  330. package/dist/workerTypes.d.ts +0 -52
  331. package/dist/workerTypes.d.ts.map +0 -1
  332. package/dist/workerTypes.js.map +0 -1
  333. package/dist/workers.d.ts +0 -69
  334. package/dist/workers.d.ts.map +0 -1
  335. package/dist/workers.js.map +0 -1
@@ -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 ::).
@@ -76,10 +49,8 @@ Examples:
76
49
  # Query each 5s and listen for _matterbridge._tcp.local service records
77
50
  mb_mdns --query 5000 --filter _matterbridge._tcp.local
78
51
  `);
79
- // eslint-disable-next-line n/no-process-exit
80
52
  process.exit(0);
81
53
  }
82
- // Dynamic JSON import (Node >= 20) with import attributes
83
54
  const { default: pkg } = await import('../../package.json', { with: { type: 'json' } });
84
55
  let mdnsIpv4QueryInterval;
85
56
  let mdnsIpv6QueryInterval;
@@ -89,9 +60,6 @@ Examples:
89
60
  let mdnsIpv6 = undefined;
90
61
  let reflectorClient = undefined;
91
62
  let reflectorServer = undefined;
92
- /**
93
- * Cleanup and log device information before exiting.
94
- */
95
63
  async function cleanupAndLogAndExit() {
96
64
  clearInterval(mdnsIpv4QueryInterval);
97
65
  clearInterval(mdnsIpv6QueryInterval);
@@ -99,37 +67,31 @@ Examples:
99
67
  clearInterval(mdnsIpv6AdvertiseInterval);
100
68
  if (hasParameter('advertise')) {
101
69
  if (mdnsIpv4)
102
- advertise(mdnsIpv4, 0); // Send goodbye with TTL 0
70
+ advertise(mdnsIpv4, 0);
103
71
  if (mdnsIpv6)
104
- advertise(mdnsIpv6, 0); // Send goodbye with TTL 0
72
+ advertise(mdnsIpv6, 0);
105
73
  }
106
- await new Promise((resolve) => setTimeout(resolve, 250)); // Wait for 250ms to allow goodbye messages to be sent
74
+ await new Promise((resolve) => setTimeout(resolve, 250));
107
75
  mdnsIpv4?.stop();
108
76
  mdnsIpv6?.stop();
109
77
  mdnsIpv4?.logDevices();
110
78
  mdnsIpv6?.logDevices();
111
- await new Promise((resolve) => setTimeout(resolve, 250)); // Wait for 250ms to allow sockets to close
79
+ await new Promise((resolve) => setTimeout(resolve, 250));
112
80
  await reflectorClient?.stop();
113
81
  await reflectorServer?.stop();
114
82
  }
115
83
  const query = (mdns) => {
116
84
  mdns.log.info('Sending mDNS query for services...');
117
85
  mdns.sendQuery([
118
- { name: '_matterc._udp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
119
- { name: '_matter._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
120
- { name: '_matterbridge._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
121
- { name: '_shelly._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
122
- { name: '_mqtt._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
123
- { name: '_http._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
124
- { name: '_services._dns-sd._udp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
86
+ { name: '_matterc._udp.local', type: 12, class: 1, unicastResponse: true },
87
+ { name: '_matter._tcp.local', type: 12, class: 1, unicastResponse: true },
88
+ { name: '_matterbridge._tcp.local', type: 12, class: 1, unicastResponse: true },
89
+ { name: '_shelly._tcp.local', type: 12, class: 1, unicastResponse: true },
90
+ { name: '_mqtt._tcp.local', type: 12, class: 1, unicastResponse: true },
91
+ { name: '_http._tcp.local', type: 12, class: 1, unicastResponse: true },
92
+ { name: '_services._dns-sd._udp.local', type: 12, class: 1, unicastResponse: true },
125
93
  ]);
126
94
  };
127
- /**
128
- * Sends an mDNS advertisement for the HTTP service over UDP IPv4.
129
- *
130
- * @param {Mdns} mdns - The Mdns instance to use for sending the advertisement.
131
- * @param {number} [ttl] - The time-to-live for the advertisement records. Defaults to 120 seconds. Send 0 for goodbye.
132
- */
133
95
  const advertise = (mdns, ttl = 120) => {
134
96
  mdns.log.info(`Sending mDNS advertisement for matterbridge service with TTL ${ttl ? ttl.toString() : 'goodbye'}...`);
135
97
  const httpServiceType = '_http._tcp.local';
@@ -145,25 +107,17 @@ Examples:
145
107
  const srvRdata = mdns.encodeSrvRdata(0, 0, port, hostName);
146
108
  const txtRdata = mdns.encodeTxtRdata([`version=${pkg.version}`, 'path=/']);
147
109
  const answers = [
148
- // PTR records for service types and instances
149
- { name: '_services._dns-sd._udp.local', rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrHttpServiceTypeRdata },
150
- { name: httpServiceType, rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrHttpInstanceRdata },
151
- { name: '_services._dns-sd._udp.local', rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrMatterbridgeServiceTypeRdata },
152
- { name: matterbridgeServiceType, rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrMatterbridgeInstanceRdata },
153
- // SRV record for the HTTP instance
154
- { name: httpInstanceName, rtype: 33 /* DnsRecordType.SRV */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: srvRdata },
155
- // SRV record for the matterbridge instance
156
- { name: matterbridgeInstanceName, rtype: 33 /* DnsRecordType.SRV */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: srvRdata },
157
- // TXT record for the HTTP instance
158
- { name: httpInstanceName, rtype: 16 /* DnsRecordType.TXT */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: txtRdata },
159
- // TXT record for the matterbridge instance
160
- { name: matterbridgeInstanceName, rtype: 16 /* DnsRecordType.TXT */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: txtRdata },
110
+ { name: '_services._dns-sd._udp.local', rtype: 12, rclass: 1, ttl, rdata: ptrHttpServiceTypeRdata },
111
+ { name: httpServiceType, rtype: 12, rclass: 1, ttl, rdata: ptrHttpInstanceRdata },
112
+ { name: '_services._dns-sd._udp.local', rtype: 12, rclass: 1, ttl, rdata: ptrMatterbridgeServiceTypeRdata },
113
+ { name: matterbridgeServiceType, rtype: 12, rclass: 1, ttl, rdata: ptrMatterbridgeInstanceRdata },
114
+ { name: httpInstanceName, rtype: 33, rclass: 1 | 32768, ttl, rdata: srvRdata },
115
+ { name: matterbridgeInstanceName, rtype: 33, rclass: 1 | 32768, ttl, rdata: srvRdata },
116
+ { name: httpInstanceName, rtype: 16, rclass: 1 | 32768, ttl, rdata: txtRdata },
117
+ { name: matterbridgeInstanceName, rtype: 16, rclass: 1 | 32768, ttl, rdata: txtRdata },
161
118
  ];
162
- // Always attempt to add both A and all AAAA records (best effort), regardless of the socket family.
163
119
  const interfaces = os.networkInterfaces();
164
- // Use specified interface name if provided
165
120
  let interfaceInfos = mdns.interfaceName ? interfaces[mdns.interfaceName] : undefined;
166
- // Find the first non-internal IPv4 and IPv6 addresses if interface name is not provided or not found
167
121
  if (!interfaceInfos) {
168
122
  interfaceInfos = [];
169
123
  for (const name of Object.keys(interfaces)) {
@@ -174,16 +128,15 @@ Examples:
174
128
  }
175
129
  }
176
130
  }
177
- // Encode A and AAAA records for all non-internal addresses of the selected interface
178
131
  try {
179
132
  for (const info of interfaceInfos) {
180
133
  if (info.family === 'IPv4' && !info.internal) {
181
134
  const ipv4 = info.address;
182
- answers.push({ name: hostName, rtype: 1 /* DnsRecordType.A */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: mdns.encodeA(ipv4) });
135
+ answers.push({ name: hostName, rtype: 1, rclass: 1 | 32768, ttl, rdata: mdns.encodeA(ipv4) });
183
136
  }
184
137
  else if (info.family === 'IPv6' && !info.internal) {
185
138
  const ipv6 = info.address;
186
- answers.push({ name: hostName, rtype: 28 /* DnsRecordType.AAAA */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: mdns.encodeAAAA(ipv6) });
139
+ answers.push({ name: hostName, rtype: 28, rclass: 1 | 32768, ttl, rdata: mdns.encodeAAAA(ipv6) });
187
140
  }
188
141
  }
189
142
  }
@@ -196,11 +149,9 @@ Examples:
196
149
  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'));
197
150
  if (hasParameter('v') || hasParameter('verbose'))
198
151
  mdnsIpv4.listNetworkInterfaces();
199
- // Apply filters if any
200
152
  const filters = getStringArrayParameter('filter');
201
153
  if (filters)
202
154
  mdnsIpv4.filters.push(...filters);
203
- // Start the IPv4 mDNS server
204
155
  mdnsIpv4.start();
205
156
  mdnsIpv4.on('ready', (address) => {
206
157
  mdnsIpv4?.log.info(`mdnsIpv4 server ready on ${address.family} ${address.address}:${address.port}`);
@@ -218,11 +169,9 @@ Examples:
218
169
  mdnsIpv6 = new Mdns('mDNS Server udp6', MDNS_MULTICAST_IPV6_ADDRESS, MDNS_MULTICAST_PORT, 'udp6', true, getParameter('interfaceName'), getParameter('ipv6InterfaceAddress') || '::', getParameter('outgoingIpv6InterfaceAddress'));
219
170
  if (hasParameter('v') || hasParameter('verbose'))
220
171
  mdnsIpv6.listNetworkInterfaces();
221
- // Apply filters if any
222
172
  const filters = getStringArrayParameter('filter');
223
173
  if (filters)
224
174
  mdnsIpv6.filters.push(...filters);
225
- // Start the IPv6 mDNS server
226
175
  mdnsIpv6.start();
227
176
  mdnsIpv6.on('ready', (address) => {
228
177
  mdnsIpv6?.log.info(`mdnsIpv6 server ready on ${address.family} ${address.address}:${address.port}`);
@@ -244,18 +193,15 @@ Examples:
244
193
  reflectorServer = new MdnsReflectorServer();
245
194
  await reflectorServer.start();
246
195
  }
247
- // Handle Ctrl+C (SIGINT) and SIGTERM to stop and log devices
248
196
  process.on('SIGINT', async () => {
249
197
  await cleanupAndLogAndExit();
250
198
  });
251
199
  process.on('SIGTERM', async () => {
252
200
  await cleanupAndLogAndExit();
253
201
  });
254
- // Exit after a timeout to avoid running indefinitely in test environments
255
202
  if (!hasParameter('no-timeout') && !hasParameter('reflector-server') && !hasParameter('reflector-client')) {
256
203
  setTimeout(async () => {
257
204
  await cleanupAndLogAndExit();
258
- }, 600000).unref(); // 10 minutes timeout to exit if no activity
205
+ }, 600000).unref();
259
206
  }
260
207
  }
261
- //# sourceMappingURL=mb_mdns.js.map