matterbridge 3.5.0-dev-20260119-f9ea00e → 3.5.0

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 (325) hide show
  1. package/CHANGELOG.md +119 -117
  2. package/dist/broadcastServer.d.ts +115 -0
  3. package/dist/broadcastServer.d.ts.map +1 -0
  4. package/dist/broadcastServer.js +117 -0
  5. package/dist/broadcastServer.js.map +1 -0
  6. package/dist/broadcastServerTypes.d.ts +43 -0
  7. package/dist/broadcastServerTypes.d.ts.map +1 -0
  8. package/dist/broadcastServerTypes.js +24 -0
  9. package/dist/broadcastServerTypes.js.map +1 -0
  10. package/dist/cli.d.ts +24 -0
  11. package/dist/cli.d.ts.map +1 -0
  12. package/dist/cli.js +97 -1
  13. package/dist/cli.js.map +1 -0
  14. package/dist/cliEmitter.d.ts +36 -0
  15. package/dist/cliEmitter.d.ts.map +1 -0
  16. package/dist/cliEmitter.js +37 -0
  17. package/dist/cliEmitter.js.map +1 -0
  18. package/dist/cliHistory.d.ts +42 -0
  19. package/dist/cliHistory.d.ts.map +1 -0
  20. package/dist/cliHistory.js +38 -0
  21. package/dist/cliHistory.js.map +1 -0
  22. package/dist/clusters/export.d.ts +1 -0
  23. package/dist/clusters/export.d.ts.map +1 -0
  24. package/dist/clusters/export.js +2 -0
  25. package/dist/clusters/export.js.map +1 -0
  26. package/dist/deviceManager.d.ts +108 -0
  27. package/dist/deviceManager.d.ts.map +1 -0
  28. package/dist/deviceManager.js +113 -1
  29. package/dist/deviceManager.js.map +1 -0
  30. package/dist/devices/airConditioner.d.ts +75 -0
  31. package/dist/devices/airConditioner.d.ts.map +1 -0
  32. package/dist/devices/airConditioner.js +57 -0
  33. package/dist/devices/airConditioner.js.map +1 -0
  34. package/dist/devices/batteryStorage.d.ts +43 -0
  35. package/dist/devices/batteryStorage.d.ts.map +1 -0
  36. package/dist/devices/batteryStorage.js +48 -1
  37. package/dist/devices/batteryStorage.js.map +1 -0
  38. package/dist/devices/cooktop.d.ts +55 -0
  39. package/dist/devices/cooktop.d.ts.map +1 -0
  40. package/dist/devices/cooktop.js +56 -0
  41. package/dist/devices/cooktop.js.map +1 -0
  42. package/dist/devices/dishwasher.d.ts +55 -0
  43. package/dist/devices/dishwasher.d.ts.map +1 -0
  44. package/dist/devices/dishwasher.js +57 -0
  45. package/dist/devices/dishwasher.js.map +1 -0
  46. package/dist/devices/evse.d.ts +57 -0
  47. package/dist/devices/evse.d.ts.map +1 -0
  48. package/dist/devices/evse.js +74 -10
  49. package/dist/devices/evse.js.map +1 -0
  50. package/dist/devices/export.d.ts +1 -0
  51. package/dist/devices/export.d.ts.map +1 -0
  52. package/dist/devices/export.js +5 -0
  53. package/dist/devices/export.js.map +1 -0
  54. package/dist/devices/extractorHood.d.ts +41 -0
  55. package/dist/devices/extractorHood.d.ts.map +1 -0
  56. package/dist/devices/extractorHood.js +43 -0
  57. package/dist/devices/extractorHood.js.map +1 -0
  58. package/dist/devices/heatPump.d.ts +43 -0
  59. package/dist/devices/heatPump.d.ts.map +1 -0
  60. package/dist/devices/heatPump.js +50 -2
  61. package/dist/devices/heatPump.js.map +1 -0
  62. package/dist/devices/laundryDryer.d.ts +58 -0
  63. package/dist/devices/laundryDryer.d.ts.map +1 -0
  64. package/dist/devices/laundryDryer.js +62 -3
  65. package/dist/devices/laundryDryer.js.map +1 -0
  66. package/dist/devices/laundryWasher.d.ts +64 -0
  67. package/dist/devices/laundryWasher.d.ts.map +1 -0
  68. package/dist/devices/laundryWasher.js +70 -4
  69. package/dist/devices/laundryWasher.js.map +1 -0
  70. package/dist/devices/microwaveOven.d.ts +77 -1
  71. package/dist/devices/microwaveOven.d.ts.map +1 -0
  72. package/dist/devices/microwaveOven.js +88 -5
  73. package/dist/devices/microwaveOven.js.map +1 -0
  74. package/dist/devices/oven.d.ts +82 -0
  75. package/dist/devices/oven.d.ts.map +1 -0
  76. package/dist/devices/oven.js +85 -0
  77. package/dist/devices/oven.js.map +1 -0
  78. package/dist/devices/refrigerator.d.ts +100 -0
  79. package/dist/devices/refrigerator.d.ts.map +1 -0
  80. package/dist/devices/refrigerator.js +102 -0
  81. package/dist/devices/refrigerator.js.map +1 -0
  82. package/dist/devices/roboticVacuumCleaner.d.ts +83 -0
  83. package/dist/devices/roboticVacuumCleaner.d.ts.map +1 -0
  84. package/dist/devices/roboticVacuumCleaner.js +100 -9
  85. package/dist/devices/roboticVacuumCleaner.js.map +1 -0
  86. package/dist/devices/solarPower.d.ts +36 -0
  87. package/dist/devices/solarPower.d.ts.map +1 -0
  88. package/dist/devices/solarPower.js +38 -0
  89. package/dist/devices/solarPower.js.map +1 -0
  90. package/dist/devices/speaker.d.ts +79 -0
  91. package/dist/devices/speaker.d.ts.map +1 -0
  92. package/dist/devices/speaker.js +84 -0
  93. package/dist/devices/speaker.js.map +1 -0
  94. package/dist/devices/temperatureControl.d.ts +21 -0
  95. package/dist/devices/temperatureControl.d.ts.map +1 -0
  96. package/dist/devices/temperatureControl.js +24 -3
  97. package/dist/devices/temperatureControl.js.map +1 -0
  98. package/dist/devices/waterHeater.d.ts +74 -0
  99. package/dist/devices/waterHeater.d.ts.map +1 -0
  100. package/dist/devices/waterHeater.js +82 -2
  101. package/dist/devices/waterHeater.js.map +1 -0
  102. package/dist/dgram/coap.d.ts +171 -0
  103. package/dist/dgram/coap.d.ts.map +1 -0
  104. package/dist/dgram/coap.js +126 -13
  105. package/dist/dgram/coap.js.map +1 -0
  106. package/dist/dgram/dgram.d.ts +99 -0
  107. package/dist/dgram/dgram.d.ts.map +1 -0
  108. package/dist/dgram/dgram.js +114 -2
  109. package/dist/dgram/dgram.js.map +1 -0
  110. package/dist/dgram/mb_coap.d.ts +23 -0
  111. package/dist/dgram/mb_coap.d.ts.map +1 -0
  112. package/dist/dgram/mb_coap.js +41 -3
  113. package/dist/dgram/mb_coap.js.map +1 -0
  114. package/dist/dgram/mb_mdns.d.ts +23 -0
  115. package/dist/dgram/mb_mdns.d.ts.map +1 -0
  116. package/dist/dgram/mb_mdns.js +80 -24
  117. package/dist/dgram/mb_mdns.js.map +1 -0
  118. package/dist/dgram/mdns.d.ts +187 -4
  119. package/dist/dgram/mdns.d.ts.map +1 -0
  120. package/dist/dgram/mdns.js +371 -139
  121. package/dist/dgram/mdns.js.map +1 -0
  122. package/dist/dgram/multicast.d.ts +49 -0
  123. package/dist/dgram/multicast.d.ts.map +1 -0
  124. package/dist/dgram/multicast.js +62 -1
  125. package/dist/dgram/multicast.js.map +1 -0
  126. package/dist/dgram/unicast.d.ts +53 -0
  127. package/dist/dgram/unicast.d.ts.map +1 -0
  128. package/dist/dgram/unicast.js +60 -0
  129. package/dist/dgram/unicast.js.map +1 -0
  130. package/dist/frontend.d.ts +187 -0
  131. package/dist/frontend.d.ts.map +1 -0
  132. package/dist/frontend.js +498 -37
  133. package/dist/frontend.js.map +1 -0
  134. package/dist/frontendTypes.d.ts +57 -0
  135. package/dist/frontendTypes.d.ts.map +1 -0
  136. package/dist/frontendTypes.js +45 -0
  137. package/dist/frontendTypes.js.map +1 -0
  138. package/dist/helpers.d.ts +43 -0
  139. package/dist/helpers.d.ts.map +1 -0
  140. package/dist/helpers.js +53 -0
  141. package/dist/helpers.js.map +1 -0
  142. package/dist/index.d.ts +23 -0
  143. package/dist/index.d.ts.map +1 -0
  144. package/dist/index.js +25 -0
  145. package/dist/index.js.map +1 -0
  146. package/dist/jestutils/export.d.ts +1 -0
  147. package/dist/jestutils/export.d.ts.map +1 -0
  148. package/dist/jestutils/export.js +1 -0
  149. package/dist/jestutils/export.js.map +1 -0
  150. package/dist/jestutils/jestHelpers.d.ts +255 -0
  151. package/dist/jestutils/jestHelpers.d.ts.map +1 -0
  152. package/dist/jestutils/jestHelpers.js +372 -14
  153. package/dist/jestutils/jestHelpers.js.map +1 -0
  154. package/dist/logger/export.d.ts +1 -0
  155. package/dist/logger/export.d.ts.map +1 -0
  156. package/dist/logger/export.js +1 -0
  157. package/dist/logger/export.js.map +1 -0
  158. package/dist/matter/behaviors.d.ts +1 -0
  159. package/dist/matter/behaviors.d.ts.map +1 -0
  160. package/dist/matter/behaviors.js +2 -0
  161. package/dist/matter/behaviors.js.map +1 -0
  162. package/dist/matter/clusters.d.ts +1 -0
  163. package/dist/matter/clusters.d.ts.map +1 -0
  164. package/dist/matter/clusters.js +2 -0
  165. package/dist/matter/clusters.js.map +1 -0
  166. package/dist/matter/devices.d.ts +1 -0
  167. package/dist/matter/devices.d.ts.map +1 -0
  168. package/dist/matter/devices.js +2 -0
  169. package/dist/matter/devices.js.map +1 -0
  170. package/dist/matter/endpoints.d.ts +1 -0
  171. package/dist/matter/endpoints.d.ts.map +1 -0
  172. package/dist/matter/endpoints.js +2 -0
  173. package/dist/matter/endpoints.js.map +1 -0
  174. package/dist/matter/export.d.ts +1 -0
  175. package/dist/matter/export.d.ts.map +1 -0
  176. package/dist/matter/export.js +2 -0
  177. package/dist/matter/export.js.map +1 -0
  178. package/dist/matter/types.d.ts +1 -0
  179. package/dist/matter/types.d.ts.map +1 -0
  180. package/dist/matter/types.js +2 -0
  181. package/dist/matter/types.js.map +1 -0
  182. package/dist/matterNode.d.ts +258 -0
  183. package/dist/matterNode.d.ts.map +1 -0
  184. package/dist/matterNode.js +359 -8
  185. package/dist/matterNode.js.map +1 -0
  186. package/dist/matterbridge.d.ts +362 -0
  187. package/dist/matterbridge.d.ts.map +1 -0
  188. package/dist/matterbridge.js +842 -46
  189. package/dist/matterbridge.js.map +1 -0
  190. package/dist/matterbridgeAccessoryPlatform.d.ts +36 -0
  191. package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -0
  192. package/dist/matterbridgeAccessoryPlatform.js +38 -0
  193. package/dist/matterbridgeAccessoryPlatform.js.map +1 -0
  194. package/dist/matterbridgeBehaviors.d.ts +24 -0
  195. package/dist/matterbridgeBehaviors.d.ts.map +1 -0
  196. package/dist/matterbridgeBehaviors.js +68 -5
  197. package/dist/matterbridgeBehaviors.js.map +1 -0
  198. package/dist/matterbridgeDeviceTypes.d.ts +649 -0
  199. package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
  200. package/dist/matterbridgeDeviceTypes.js +673 -6
  201. package/dist/matterbridgeDeviceTypes.js.map +1 -0
  202. package/dist/matterbridgeDynamicPlatform.d.ts +36 -0
  203. package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -0
  204. package/dist/matterbridgeDynamicPlatform.js +38 -0
  205. package/dist/matterbridgeDynamicPlatform.js.map +1 -0
  206. package/dist/matterbridgeEndpoint.d.ts +1332 -0
  207. package/dist/matterbridgeEndpoint.d.ts.map +1 -0
  208. package/dist/matterbridgeEndpoint.js +1457 -53
  209. package/dist/matterbridgeEndpoint.js.map +1 -0
  210. package/dist/matterbridgeEndpointHelpers.d.ts +425 -0
  211. package/dist/matterbridgeEndpointHelpers.d.ts.map +1 -0
  212. package/dist/matterbridgeEndpointHelpers.js +483 -20
  213. package/dist/matterbridgeEndpointHelpers.js.map +1 -0
  214. package/dist/matterbridgeEndpointTypes.d.ts +70 -0
  215. package/dist/matterbridgeEndpointTypes.d.ts.map +1 -0
  216. package/dist/matterbridgeEndpointTypes.js +25 -0
  217. package/dist/matterbridgeEndpointTypes.js.map +1 -0
  218. package/dist/matterbridgePlatform.d.ts +425 -0
  219. package/dist/matterbridgePlatform.d.ts.map +1 -0
  220. package/dist/matterbridgePlatform.js +451 -1
  221. package/dist/matterbridgePlatform.js.map +1 -0
  222. package/dist/matterbridgeTypes.d.ts +46 -0
  223. package/dist/matterbridgeTypes.d.ts.map +1 -0
  224. package/dist/matterbridgeTypes.js +26 -0
  225. package/dist/matterbridgeTypes.js.map +1 -0
  226. package/dist/pluginManager.d.ts +305 -0
  227. package/dist/pluginManager.d.ts.map +1 -0
  228. package/dist/pluginManager.js +341 -5
  229. package/dist/pluginManager.js.map +1 -0
  230. package/dist/shelly.d.ts +157 -0
  231. package/dist/shelly.d.ts.map +1 -0
  232. package/dist/shelly.js +178 -7
  233. package/dist/shelly.js.map +1 -0
  234. package/dist/storage/export.d.ts +1 -0
  235. package/dist/storage/export.d.ts.map +1 -0
  236. package/dist/storage/export.js +1 -0
  237. package/dist/storage/export.js.map +1 -0
  238. package/dist/update.d.ts +75 -0
  239. package/dist/update.d.ts.map +1 -0
  240. package/dist/update.js +93 -1
  241. package/dist/update.js.map +1 -0
  242. package/dist/utils/colorUtils.d.ts +77 -0
  243. package/dist/utils/colorUtils.d.ts.map +1 -0
  244. package/dist/utils/colorUtils.js +97 -2
  245. package/dist/utils/colorUtils.js.map +1 -0
  246. package/dist/utils/commandLine.d.ts +60 -0
  247. package/dist/utils/commandLine.d.ts.map +1 -0
  248. package/dist/utils/commandLine.js +60 -0
  249. package/dist/utils/commandLine.js.map +1 -0
  250. package/dist/utils/copyDirectory.d.ts +33 -0
  251. package/dist/utils/copyDirectory.d.ts.map +1 -0
  252. package/dist/utils/copyDirectory.js +37 -0
  253. package/dist/utils/copyDirectory.js.map +1 -0
  254. package/dist/utils/createDirectory.d.ts +32 -0
  255. package/dist/utils/createDirectory.d.ts.map +1 -0
  256. package/dist/utils/createDirectory.js +33 -0
  257. package/dist/utils/createDirectory.js.map +1 -0
  258. package/dist/utils/createZip.d.ts +38 -0
  259. package/dist/utils/createZip.d.ts.map +1 -0
  260. package/dist/utils/createZip.js +47 -2
  261. package/dist/utils/createZip.js.map +1 -0
  262. package/dist/utils/deepCopy.d.ts +31 -0
  263. package/dist/utils/deepCopy.d.ts.map +1 -0
  264. package/dist/utils/deepCopy.js +39 -0
  265. package/dist/utils/deepCopy.js.map +1 -0
  266. package/dist/utils/deepEqual.d.ts +53 -0
  267. package/dist/utils/deepEqual.d.ts.map +1 -0
  268. package/dist/utils/deepEqual.js +72 -1
  269. package/dist/utils/deepEqual.js.map +1 -0
  270. package/dist/utils/error.d.ts +42 -0
  271. package/dist/utils/error.d.ts.map +1 -0
  272. package/dist/utils/error.js +42 -0
  273. package/dist/utils/error.js.map +1 -0
  274. package/dist/utils/export.d.ts +1 -0
  275. package/dist/utils/export.d.ts.map +1 -0
  276. package/dist/utils/export.js +1 -0
  277. package/dist/utils/export.js.map +1 -0
  278. package/dist/utils/format.d.ts +49 -0
  279. package/dist/utils/format.d.ts.map +1 -0
  280. package/dist/utils/format.js +49 -0
  281. package/dist/utils/format.js.map +1 -0
  282. package/dist/utils/hex.d.ts +85 -0
  283. package/dist/utils/hex.d.ts.map +1 -0
  284. package/dist/utils/hex.js +124 -0
  285. package/dist/utils/hex.js.map +1 -0
  286. package/dist/utils/inspector.d.ts +63 -0
  287. package/dist/utils/inspector.d.ts.map +1 -0
  288. package/dist/utils/inspector.js +69 -1
  289. package/dist/utils/inspector.js.map +1 -0
  290. package/dist/utils/isValid.d.ts +93 -0
  291. package/dist/utils/isValid.d.ts.map +1 -0
  292. package/dist/utils/isValid.js +93 -0
  293. package/dist/utils/isValid.js.map +1 -0
  294. package/dist/utils/network.d.ts +116 -0
  295. package/dist/utils/network.d.ts.map +1 -0
  296. package/dist/utils/network.js +126 -5
  297. package/dist/utils/network.js.map +1 -0
  298. package/dist/utils/spawn.d.ts +32 -0
  299. package/dist/utils/spawn.d.ts.map +1 -0
  300. package/dist/utils/spawn.js +71 -1
  301. package/dist/utils/spawn.js.map +1 -0
  302. package/dist/utils/tracker.d.ts +56 -0
  303. package/dist/utils/tracker.d.ts.map +1 -0
  304. package/dist/utils/tracker.js +64 -1
  305. package/dist/utils/tracker.js.map +1 -0
  306. package/dist/utils/wait.d.ts +51 -0
  307. package/dist/utils/wait.d.ts.map +1 -0
  308. package/dist/utils/wait.js +60 -8
  309. package/dist/utils/wait.js.map +1 -0
  310. package/dist/workerGlobalPrefix.d.ts +24 -0
  311. package/dist/workerGlobalPrefix.d.ts.map +1 -0
  312. package/dist/workerGlobalPrefix.js +37 -5
  313. package/dist/workerGlobalPrefix.js.map +1 -0
  314. package/dist/workerTypes.d.ts +25 -0
  315. package/dist/workerTypes.d.ts.map +1 -0
  316. package/dist/workerTypes.js +24 -0
  317. package/dist/workerTypes.js.map +1 -0
  318. package/dist/workers.d.ts +61 -0
  319. package/dist/workers.d.ts.map +1 -0
  320. package/dist/workers.js +68 -4
  321. package/dist/workers.js.map +1 -0
  322. package/frontend/build/assets/index.js +4 -4
  323. package/frontend/package.json +1 -1
  324. package/npm-shrinkwrap.json +5 -35
  325. package/package.json +7 -7
@@ -1,9 +1,36 @@
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
+ */
1
23
  import os from 'node:os';
24
+ // Net imports
2
25
  import { MDNS_MULTICAST_IPV4_ADDRESS, MDNS_MULTICAST_IPV6_ADDRESS, MDNS_MULTICAST_PORT, Mdns } from '@matterbridge/dgram';
26
+ // Utils imports
3
27
  import { getIntParameter, getParameter, getStringArrayParameter, hasParameter } from '@matterbridge/utils';
28
+ // istanbul ignore next
4
29
  {
5
30
  if (hasParameter('h') || hasParameter('help')) {
31
+ // eslint-disable-next-line no-console
6
32
  console.log(`Copyright (c) Matterbridge. All rights reserved. Version 1.0.0.\n`);
33
+ // eslint-disable-next-line no-console
7
34
  console.log(`Usage: mb_mdns [options...]
8
35
 
9
36
  If no command line is provided, mb_mdns shows all incoming mDNS records on all interfaces (0.0.0.0 and ::).
@@ -44,8 +71,10 @@ Examples:
44
71
  # Query each 5s and listen for _matterbridge._tcp.local service records
45
72
  mb_mdns --query 5000 --filter _matterbridge._tcp.local
46
73
  `);
74
+ // eslint-disable-next-line n/no-process-exit
47
75
  process.exit(0);
48
76
  }
77
+ // Dynamic JSON import (Node >= 20) with import attributes
49
78
  const { default: pkg } = await import('../../package.json', { with: { type: 'json' } });
50
79
  let mdnsIpv4QueryInterval;
51
80
  let mdnsIpv6QueryInterval;
@@ -53,6 +82,9 @@ Examples:
53
82
  let mdnsIpv6AdvertiseInterval;
54
83
  let mdnsIpv4 = undefined;
55
84
  let mdnsIpv6 = undefined;
85
+ /**
86
+ * Cleanup and log device information before exiting.
87
+ */
56
88
  async function cleanupAndLogAndExit() {
57
89
  clearInterval(mdnsIpv4QueryInterval);
58
90
  clearInterval(mdnsIpv6QueryInterval);
@@ -60,36 +92,42 @@ Examples:
60
92
  clearInterval(mdnsIpv6AdvertiseInterval);
61
93
  if (hasParameter('advertise')) {
62
94
  if (mdnsIpv4)
63
- advertise(mdnsIpv4, 0);
95
+ advertise(mdnsIpv4, 0); // Send goodbye with TTL 0
64
96
  if (mdnsIpv6)
65
- advertise(mdnsIpv6, 0);
97
+ advertise(mdnsIpv6, 0); // Send goodbye with TTL 0
66
98
  }
67
- await new Promise((resolve) => setTimeout(resolve, 250));
99
+ await new Promise((resolve) => setTimeout(resolve, 250)); // Wait for 250ms to allow goodbye messages to be sent
68
100
  mdnsIpv4?.stop();
69
101
  mdnsIpv6?.stop();
70
102
  mdnsIpv4?.logDevices();
71
103
  mdnsIpv6?.logDevices();
72
- await new Promise((resolve) => setTimeout(resolve, 250));
104
+ await new Promise((resolve) => setTimeout(resolve, 250)); // Wait for 250ms to allow sockets to close
73
105
  }
74
106
  const query = (mdns) => {
75
107
  mdns.log.info('Sending mDNS query for common services...');
76
108
  try {
77
109
  mdns.sendQuery([
78
- { name: '_matterc._udp.local', type: 12, class: 1, unicastResponse: true },
79
- { name: '_matter._tcp.local', type: 12, class: 1, unicastResponse: true },
80
- { name: '_matterbridge._tcp.local', type: 12, class: 1, unicastResponse: true },
81
- { name: '_home-assistant._tcp.local', type: 12, class: 1, unicastResponse: true },
82
- { name: '_shelly._tcp.local', type: 12, class: 1, unicastResponse: true },
83
- { name: '_mqtt._tcp.local', type: 12, class: 1, unicastResponse: true },
84
- { name: '_http._tcp.local', type: 12, class: 1, unicastResponse: true },
85
- { name: '_googlecast._tcp.local', type: 12, class: 1, unicastResponse: true },
86
- { name: '_services._dns-sd._udp.local', type: 12, class: 1, unicastResponse: true },
110
+ { name: '_matterc._udp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
111
+ { name: '_matter._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
112
+ { name: '_matterbridge._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
113
+ { name: '_home-assistant._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
114
+ { name: '_shelly._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
115
+ { name: '_mqtt._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
116
+ { name: '_http._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
117
+ { name: '_googlecast._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
118
+ { name: '_services._dns-sd._udp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
87
119
  ]);
88
120
  }
89
121
  catch (error) {
90
122
  mdns.log.error(`Error sending mDNS query: ${error.message}`);
91
123
  }
92
124
  };
125
+ /**
126
+ * Sends an mDNS advertisement for the HTTP service over UDP IPv4.
127
+ *
128
+ * @param {Mdns} mdns - The Mdns instance to use for sending the advertisement.
129
+ * @param {number} [ttl] - The time-to-live for the advertisement records. Defaults to 120 seconds. Send 0 for goodbye.
130
+ */
93
131
  const advertise = (mdns, ttl = 120) => {
94
132
  mdns.log.info(`Sending mDNS advertisement for matterbridge service with TTL ${ttl ? ttl.toString() : 'goodbye'}...`);
95
133
  const httpServiceType = '_http._tcp.local';
@@ -105,17 +143,25 @@ Examples:
105
143
  const srvRdata = mdns.encodeSrvRdata(0, 0, port, hostName);
106
144
  const txtRdata = mdns.encodeTxtRdata([`version=${pkg.version}`, 'path=/']);
107
145
  const answers = [
108
- { name: '_services._dns-sd._udp.local', rtype: 12, rclass: 1, ttl, rdata: ptrHttpServiceTypeRdata },
109
- { name: httpServiceType, rtype: 12, rclass: 1, ttl, rdata: ptrHttpInstanceRdata },
110
- { name: '_services._dns-sd._udp.local', rtype: 12, rclass: 1, ttl, rdata: ptrMatterbridgeServiceTypeRdata },
111
- { name: matterbridgeServiceType, rtype: 12, rclass: 1, ttl, rdata: ptrMatterbridgeInstanceRdata },
112
- { name: httpInstanceName, rtype: 33, rclass: 1 | 32768, ttl, rdata: srvRdata },
113
- { name: matterbridgeInstanceName, rtype: 33, rclass: 1 | 32768, ttl, rdata: srvRdata },
114
- { name: httpInstanceName, rtype: 16, rclass: 1 | 32768, ttl, rdata: txtRdata },
115
- { name: matterbridgeInstanceName, rtype: 16, rclass: 1 | 32768, ttl, rdata: txtRdata },
146
+ // PTR records for service types and instances
147
+ { name: '_services._dns-sd._udp.local', rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrHttpServiceTypeRdata },
148
+ { name: httpServiceType, rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrHttpInstanceRdata },
149
+ { name: '_services._dns-sd._udp.local', rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrMatterbridgeServiceTypeRdata },
150
+ { name: matterbridgeServiceType, rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrMatterbridgeInstanceRdata },
151
+ // SRV record for the HTTP instance
152
+ { name: httpInstanceName, rtype: 33 /* DnsRecordType.SRV */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: srvRdata },
153
+ // SRV record for the matterbridge instance
154
+ { name: matterbridgeInstanceName, rtype: 33 /* DnsRecordType.SRV */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: srvRdata },
155
+ // TXT record for the HTTP instance
156
+ { name: httpInstanceName, rtype: 16 /* DnsRecordType.TXT */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: txtRdata },
157
+ // TXT record for the matterbridge instance
158
+ { name: matterbridgeInstanceName, rtype: 16 /* DnsRecordType.TXT */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: txtRdata },
116
159
  ];
160
+ // Always attempt to add both A and all AAAA records (best effort), regardless of the socket family.
117
161
  const interfaces = os.networkInterfaces();
162
+ // Use specified interface name if provided
118
163
  let interfaceInfos = mdns.interfaceName ? interfaces[mdns.interfaceName] : undefined;
164
+ // Find the first non-internal IPv4 and IPv6 addresses if interface name is not provided or not found
119
165
  if (!interfaceInfos) {
120
166
  interfaceInfos = [];
121
167
  for (const name of Object.keys(interfaces)) {
@@ -126,14 +172,15 @@ Examples:
126
172
  }
127
173
  }
128
174
  }
175
+ // Encode A and AAAA records for all non-internal addresses of the selected interface
129
176
  for (const info of interfaceInfos) {
130
177
  if (info.family === 'IPv4' && !info.internal) {
131
178
  const ipv4 = info.address;
132
- answers.push({ name: hostName, rtype: 1, rclass: 1 | 32768, ttl, rdata: mdns.encodeA(ipv4) });
179
+ answers.push({ name: hostName, rtype: 1 /* DnsRecordType.A */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: mdns.encodeA(ipv4) });
133
180
  }
134
181
  else if (info.family === 'IPv6' && !info.internal) {
135
182
  const ipv6 = info.address;
136
- answers.push({ name: hostName, rtype: 28, rclass: 1 | 32768, ttl, rdata: mdns.encodeAAAA(ipv6) });
183
+ answers.push({ name: hostName, rtype: 28 /* DnsRecordType.AAAA */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: mdns.encodeAAAA(ipv6) });
137
184
  }
138
185
  }
139
186
  try {
@@ -147,12 +194,15 @@ Examples:
147
194
  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'));
148
195
  if (hasParameter('v') || hasParameter('verbose'))
149
196
  mdnsIpv4.listNetworkInterfaces();
197
+ // Apply filters if any
150
198
  const filters = getStringArrayParameter('filter');
151
199
  if (filters)
152
200
  mdnsIpv4.filters.push(...filters);
201
+ // Handle errors
153
202
  mdnsIpv4.on('error', (err) => {
154
203
  mdnsIpv4?.log.error(`mDNS udp4 Server error: ${err.message}\n${err.stack}`);
155
204
  });
205
+ // Start the IPv4 mDNS server
156
206
  mdnsIpv4.start();
157
207
  mdnsIpv4.on('ready', (address) => {
158
208
  mdnsIpv4?.socket.setMulticastLoopback(false);
@@ -171,12 +221,15 @@ Examples:
171
221
  mdnsIpv6 = new Mdns('mDNS Server udp6', MDNS_MULTICAST_IPV6_ADDRESS, MDNS_MULTICAST_PORT, 'udp6', true, getParameter('interfaceName'), getParameter('ipv6InterfaceAddress') || '::', getParameter('outgoingIpv6InterfaceAddress'));
172
222
  if (hasParameter('v') || hasParameter('verbose'))
173
223
  mdnsIpv6.listNetworkInterfaces();
224
+ // Apply filters if any
174
225
  const filters = getStringArrayParameter('filter');
175
226
  if (filters)
176
227
  mdnsIpv6.filters.push(...filters);
228
+ // Handle errors
177
229
  mdnsIpv6.on('error', (err) => {
178
230
  mdnsIpv6?.log.error(`mDNS udp6 Server error: ${err.message}\n${err.stack}`);
179
231
  });
232
+ // Start the IPv6 mDNS server
180
233
  mdnsIpv6.start();
181
234
  mdnsIpv6.on('ready', (address) => {
182
235
  mdnsIpv6?.socket.setMulticastLoopback(false);
@@ -191,15 +244,18 @@ Examples:
191
244
  }
192
245
  });
193
246
  }
247
+ // Handle Ctrl+C (SIGINT) and SIGTERM to stop and log devices
194
248
  process.on('SIGINT', async () => {
195
249
  await cleanupAndLogAndExit();
196
250
  });
197
251
  process.on('SIGTERM', async () => {
198
252
  await cleanupAndLogAndExit();
199
253
  });
254
+ // Exit after a timeout to avoid running indefinitely in test environments
200
255
  if (!hasParameter('no-timeout')) {
201
256
  setTimeout(async () => {
202
257
  await cleanupAndLogAndExit();
203
- }, 600000).unref();
258
+ }, 600000).unref(); // 10 minutes timeout to exit if no activity
204
259
  }
205
260
  }
261
+ //# sourceMappingURL=mb_mdns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mb_mdns.js","sourceRoot":"","sources":["../../src/dgram/mb_mdns.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,25 @@
1
+ /**
2
+ * @description This file contains the class Mdns.
3
+ * @file mdns.ts
4
+ * @author Luca Liguori
5
+ * @created 2025-03-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
+ */
1
23
  import dgram from 'node:dgram';
2
24
  import { AnsiLogger } from 'node-ansi-logger';
3
25
  import { Multicast } from './multicast.js';
@@ -94,13 +116,13 @@ export declare const enum DnsRecordType {
94
116
  DLV = 32769
95
117
  }
96
118
  export declare const enum DnsClass {
97
- IN = 1,
98
- CH = 3,
99
- HS = 4,
119
+ IN = 1,// Internet
120
+ CH = 3,// Chaos
121
+ HS = 4,// Hesiod
100
122
  ANY = 255
101
123
  }
102
124
  export declare const enum DnsClassFlag {
103
- FLUSH = 32768,
125
+ FLUSH = 32768,// For answers (resource records)
104
126
  QU = 32768
105
127
  }
106
128
  export interface MdnsMessage {
@@ -134,8 +156,26 @@ interface MdnsRecord {
134
156
  ttl: number;
135
157
  data: string;
136
158
  }
159
+ /**
160
+ * Checks if a given message is an mDNS message.
161
+ *
162
+ * @param {Buffer} message - The message buffer to check.
163
+ * @returns {boolean} True if the message is an mDNS message, false otherwise.
164
+ */
137
165
  export declare function isMdns(message: Buffer): boolean;
166
+ /**
167
+ * Checks if a given mDNS message is a query.
168
+ *
169
+ * @param {Buffer} message - The mDNS message buffer to check.
170
+ * @returns {boolean} True if the message is a query, false otherwise.
171
+ */
138
172
  export declare function isMdnsQuery(message: Buffer): boolean;
173
+ /**
174
+ * Checks if a given mDNS message is a query.
175
+ *
176
+ * @param {Buffer} message - The mDNS message buffer to check.
177
+ * @returns {boolean} True if the message is a query, false otherwise.
178
+ */
139
179
  export declare function isMdnsResponse(message: Buffer): boolean;
140
180
  export declare class Mdns extends Multicast {
141
181
  deviceQueries: Map<string, {
@@ -148,30 +188,143 @@ export declare class Mdns extends Multicast {
148
188
  dataPTR?: string;
149
189
  }>;
150
190
  filters: string[];
191
+ /**
192
+ * Creates an instance of the Mdns class.
193
+ *
194
+ * @param {string} name - The internal name of the mDNS server for the logs.
195
+ * @param {string} multicastAddress - The multicast address for mDNS (i.e. 224.0.0.251 for udp4 or ff02::fb for udp6).
196
+ * @param {number} multicastPort - The port for mDNS (i.e. 5353).
197
+ * @param {('udp4' | 'udp6')} socketType - The type of socket to create (either 'udp4' or 'udp6').
198
+ * @param {boolean} [reuseAddr] - Whether to reuse the address. Defaults to true.
199
+ * @param {string} [interfaceName] - The optional name of the network interface to use.
200
+ * @param {string} [interfaceAddress] - The optional IP address of the network interface to use.
201
+ * @param {string} [outgoingInterfaceAddress] - The address of the outgoing network interface.
202
+ */
151
203
  constructor(name: string, multicastAddress: string, multicastPort: number, socketType: 'udp4' | 'udp6', reuseAddr?: boolean | undefined, interfaceName?: string, interfaceAddress?: string, outgoingInterfaceAddress?: string);
152
204
  onQuery(rinfo: dgram.RemoteInfo, _query: MdnsMessage): void;
153
205
  onResponse(rinfo: dgram.RemoteInfo, _response: MdnsMessage): void;
154
206
  onMessage(msg: Buffer, rinfo: dgram.RemoteInfo): void;
207
+ /**
208
+ * Decodes an mDNS message, including the header, question section, answer section,
209
+ * authority section, and additional section.
210
+ *
211
+ * @param {Buffer} msg - The raw mDNS message buffer.
212
+ * @returns {MdnsMessage} An object representing the decoded mDNS message.
213
+ * @throws {Error} if the message is too short.
214
+ */
155
215
  decodeMdnsMessage(msg: Buffer): MdnsMessage;
216
+ /**
217
+ * Decodes a DNS name from a buffer, handling compression.
218
+ *
219
+ * @param {Buffer} msg - The full mDNS message buffer.
220
+ * @param {number} offset - The offset at which the DNS name starts.
221
+ * @returns {{ name: string; newOffset: number }} An object with the decoded name and the new offset.
222
+ * @throws {Error} if the offset exceeds the buffer length or too many iterations are performed.
223
+ */
156
224
  decodeDnsName(msg: Buffer, offset: number): {
157
225
  name: string;
158
226
  newOffset: number;
159
227
  };
228
+ /**
229
+ * Encodes a domain name into the DNS label format.
230
+ *
231
+ * For example, "example.local" becomes:
232
+ * [7] "example" [5] "local" [0]
233
+ *
234
+ * @param {string} name - The domain name to encode.
235
+ * @returns {Buffer} The encoded domain name as a Buffer.
236
+ */
160
237
  encodeDnsName(name: string): Buffer;
238
+ /**
239
+ * Encodes TXT record RDATA.
240
+ *
241
+ * In DNS/mDNS, TXT RDATA is a sequence of one or more <character-string>,
242
+ * each encoded as: [length byte][UTF-8 bytes].
243
+ *
244
+ * @param {string[]} txt - Array of TXT entries, e.g. ["key=value", "path=/"].
245
+ * @returns {Buffer} Encoded TXT RDATA.
246
+ * @throws {Error} If any entry exceeds 255 bytes.
247
+ *
248
+ * @example
249
+ * const txtRdata = mdns.encodeTxtRdata(['txtvers=1', 'path=/']);
250
+ * mdns.sendResponse([
251
+ * { name: 'example._http._tcp.local', rtype: DnsRecordType.TXT, rclass: DnsClass.IN | DnsClassFlag.FLUSH, ttl: 120, rdata: txtRdata },
252
+ * ]);
253
+ */
161
254
  encodeTxtRdata(txt: string[]): Buffer;
255
+ /**
256
+ * Encodes SRV record RDATA.
257
+ *
258
+ * SRV RDATA layout (RFC 2782):
259
+ * - priority (2 bytes)
260
+ * - weight (2 bytes)
261
+ * - port (2 bytes)
262
+ * - target (DNS name)
263
+ *
264
+ * @param {number} priority - SRV priority.
265
+ * @param {number} weight - SRV weight.
266
+ * @param {number} port - Service port.
267
+ * @param {string} target - Target hostname (e.g. "matterbridge.local").
268
+ * @returns {Buffer} Encoded SRV RDATA.
269
+ */
162
270
  encodeSrvRdata(priority: number, weight: number, port: number, target: string): Buffer;
271
+ /**
272
+ * Encodes an IPv4 address for an A record RDATA (4 bytes).
273
+ *
274
+ * @param {string} ipv4 - IPv4 address, e.g. "192.168.1.10".
275
+ * @returns {Buffer} 4-byte buffer.
276
+ * @throws {Error} If the address is not a valid dotted-quad.
277
+ */
163
278
  encodeA(ipv4: string): Buffer;
279
+ /**
280
+ * Encodes an IPv6 address for an AAAA record RDATA (16 bytes).
281
+ *
282
+ * Supports the "::" zero-compression form and ignores an optional scope id
283
+ * suffix (e.g. "fe80::1%12" or "fe80::1%eth0").
284
+ *
285
+ * @param {string} ipv6WithOptionalScope - IPv6 address (optionally with scope id).
286
+ * @returns {Buffer} 16-byte buffer.
287
+ * @throws {Error} If the address is not a valid IPv6 literal.
288
+ */
164
289
  encodeAAAA(ipv6WithOptionalScope: string): Buffer;
290
+ /**
291
+ * Decodes a DNS resource record.
292
+ *
293
+ * @param {Buffer} msg - The full mDNS message buffer.
294
+ * @param {number} offset - The offset at which the resource record starts.
295
+ * @returns {{ record: MdnsRecord; newOffset: number }} An object containing the decoded record and the new offset.
296
+ */
165
297
  decodeResourceRecord(msg: Buffer, offset: number): {
166
298
  record: MdnsRecord;
167
299
  newOffset: number;
168
300
  };
301
+ /**
302
+ * Sends a DNS query with multiple questions.
303
+ *
304
+ * @param {Array<{ name: string; type: number; class: number; unicastResponse?: boolean }>} questions - Array of questions
305
+ * to include in the query.
306
+ * @returns {Buffer<ArrayBuffer>} The constructed query buffer.
307
+ *
308
+ * @remarks
309
+ * Each question should have a name (e.g., "_http._tcp.local"), type (e.g., DnsRecordType.PTR), class (e.g., DnsClass.IN),
310
+ * and an optional unicastResponse flag (this will add the DnsClassFlag.QU flag to the query).
311
+ */
169
312
  sendQuery(questions: {
170
313
  name: string;
171
314
  type: number;
172
315
  class: number;
173
316
  unicastResponse?: boolean;
174
317
  }[]): Buffer<ArrayBuffer>;
318
+ /**
319
+ * Constructs an mDNS response packet and sends it to the multicast address and port.
320
+ *
321
+ * @param {Array<{ name: string; rtype: number; rclass: number; ttl: number; rdata: Buffer }>} answers - Array of answer records.
322
+ * @returns {Buffer<ArrayBuffer>} The constructed response buffer.
323
+ *
324
+ * @example
325
+ * const ptrRdata = mdnsIpv4.encodeDnsName('matterbridge._http._tcp.local');
326
+ * mdnsIpv4.sendResponse([{ name: '_http._tcp.local', rtype: DnsRecordType.PTR, rclass: DnsClass.IN, ttl: 120, rdata: ptrRdata }]);
327
+ */
175
328
  sendResponse(answers: {
176
329
  name: string;
177
330
  rtype: number;
@@ -179,10 +332,40 @@ export declare class Mdns extends Multicast {
179
332
  ttl: number;
180
333
  rdata: Buffer;
181
334
  }[]): Buffer<ArrayBuffer>;
335
+ /**
336
+ * Converts a DNS record type numeric value to its string representation.
337
+ *
338
+ * @param {number} type - The numeric DNS record type.
339
+ * @returns {string} The string representation of the record type.
340
+ */
182
341
  dnsTypeToString(type: number): string;
342
+ /**
343
+ * Converts a DNS response class numeric value to its string representation.
344
+ *
345
+ * @param {number} cls - The numeric DNS class.
346
+ * @returns {string} The string representation of the DNS class.
347
+ */
183
348
  dnsResponseClassToString(cls: number): string;
349
+ /**
350
+ * Converts a DNS question class to a human-readable string.
351
+ * Adds support for mDNS QU (unicast-response) bit.
352
+ *
353
+ * @param {number} cls - The numeric question class.
354
+ * @returns {string} The string representation, e.g. "IN|QU"
355
+ */
184
356
  dnsQuestionClassToString(cls: number): string;
357
+ /**
358
+ * Logs the decoded mDNS message header.
359
+ *
360
+ * @param {MdnsMessage} msg - The mDNS message header object.
361
+ * @param {AnsiLogger} [log] - The logger to use (defaults to this.log).
362
+ * @param {string} [text] - Optional additional text to include in the log.
363
+ */
185
364
  logMdnsMessage(msg: MdnsMessage, log?: AnsiLogger, text?: string): void;
365
+ /**
366
+ * Logs the discovered devices from the mDNS queries and responses.
367
+ */
186
368
  logDevices(): void;
187
369
  }
188
370
  export {};
371
+ //# sourceMappingURL=mdns.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mdns.d.ts","sourceRoot":"","sources":["../../src/dgram/mdns.ts"],"names":[],"mappings":"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"}