matterbridge 3.4.7 → 3.5.0-dev-20260113-96c82db

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 (449) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/dist/broadcastServer.d.ts +0 -115
  3. package/dist/broadcastServer.js +0 -117
  4. package/dist/broadcastServerTypes.d.ts +0 -43
  5. package/dist/broadcastServerTypes.js +0 -24
  6. package/dist/cli.d.ts +0 -24
  7. package/dist/cli.js +1 -97
  8. package/dist/cliEmitter.d.ts +0 -36
  9. package/dist/cliEmitter.js +0 -37
  10. package/dist/cliHistory.d.ts +0 -42
  11. package/dist/cliHistory.js +0 -38
  12. package/dist/clusters/export.d.ts +0 -1
  13. package/dist/clusters/export.js +0 -2
  14. package/dist/deviceManager.d.ts +0 -108
  15. package/dist/deviceManager.js +1 -113
  16. package/dist/devices/airConditioner.d.ts +0 -75
  17. package/dist/devices/airConditioner.js +0 -57
  18. package/dist/devices/batteryStorage.d.ts +0 -43
  19. package/dist/devices/batteryStorage.js +1 -48
  20. package/dist/devices/cooktop.d.ts +0 -55
  21. package/dist/devices/cooktop.js +0 -56
  22. package/dist/devices/dishwasher.d.ts +0 -55
  23. package/dist/devices/dishwasher.js +0 -57
  24. package/dist/devices/evse.d.ts +0 -57
  25. package/dist/devices/evse.js +10 -74
  26. package/dist/devices/export.d.ts +0 -1
  27. package/dist/devices/export.js +0 -5
  28. package/dist/devices/extractorHood.d.ts +0 -41
  29. package/dist/devices/extractorHood.js +0 -43
  30. package/dist/devices/heatPump.d.ts +0 -43
  31. package/dist/devices/heatPump.js +2 -50
  32. package/dist/devices/laundryDryer.d.ts +0 -58
  33. package/dist/devices/laundryDryer.js +3 -62
  34. package/dist/devices/laundryWasher.d.ts +0 -64
  35. package/dist/devices/laundryWasher.js +4 -70
  36. package/dist/devices/microwaveOven.d.ts +1 -77
  37. package/dist/devices/microwaveOven.js +5 -88
  38. package/dist/devices/oven.d.ts +0 -82
  39. package/dist/devices/oven.js +0 -85
  40. package/dist/devices/refrigerator.d.ts +0 -100
  41. package/dist/devices/refrigerator.js +0 -102
  42. package/dist/devices/roboticVacuumCleaner.d.ts +0 -83
  43. package/dist/devices/roboticVacuumCleaner.js +9 -100
  44. package/dist/devices/solarPower.d.ts +0 -36
  45. package/dist/devices/solarPower.js +0 -38
  46. package/dist/devices/speaker.d.ts +0 -79
  47. package/dist/devices/speaker.js +0 -84
  48. package/dist/devices/temperatureControl.d.ts +0 -21
  49. package/dist/devices/temperatureControl.js +3 -24
  50. package/dist/devices/waterHeater.d.ts +0 -74
  51. package/dist/devices/waterHeater.js +2 -82
  52. package/dist/dgram/coap.d.ts +0 -171
  53. package/dist/dgram/coap.js +13 -126
  54. package/dist/dgram/dgram.d.ts +0 -99
  55. package/dist/dgram/dgram.js +2 -114
  56. package/dist/dgram/mb_coap.d.ts +0 -23
  57. package/dist/dgram/mb_coap.js +3 -41
  58. package/dist/dgram/mb_mdns.d.ts +0 -23
  59. package/dist/dgram/mb_mdns.js +24 -80
  60. package/dist/dgram/mdns.d.ts +4 -187
  61. package/dist/dgram/mdns.js +139 -371
  62. package/dist/dgram/multicast.d.ts +0 -49
  63. package/dist/dgram/multicast.js +1 -62
  64. package/dist/dgram/unicast.d.ts +0 -53
  65. package/dist/dgram/unicast.js +0 -60
  66. package/dist/frontend.d.ts +0 -187
  67. package/dist/frontend.js +38 -485
  68. package/dist/frontendTypes.d.ts +0 -57
  69. package/dist/frontendTypes.js +0 -45
  70. package/dist/helpers.d.ts +0 -43
  71. package/dist/helpers.js +0 -53
  72. package/dist/index.d.ts +0 -23
  73. package/dist/index.js +0 -25
  74. package/dist/jestutils/export.d.ts +0 -1
  75. package/dist/jestutils/export.js +0 -1
  76. package/dist/jestutils/jestHelpers.d.ts +0 -255
  77. package/dist/jestutils/jestHelpers.js +14 -371
  78. package/dist/logger/export.d.ts +0 -1
  79. package/dist/logger/export.js +0 -1
  80. package/dist/matter/behaviors.d.ts +0 -1
  81. package/dist/matter/behaviors.js +0 -2
  82. package/dist/matter/clusters.d.ts +0 -1
  83. package/dist/matter/clusters.js +0 -2
  84. package/dist/matter/devices.d.ts +0 -1
  85. package/dist/matter/devices.js +0 -2
  86. package/dist/matter/endpoints.d.ts +0 -1
  87. package/dist/matter/endpoints.js +0 -2
  88. package/dist/matter/export.d.ts +0 -1
  89. package/dist/matter/export.js +0 -3
  90. package/dist/matter/types.d.ts +0 -1
  91. package/dist/matter/types.js +0 -3
  92. package/dist/matterNode.d.ts +0 -258
  93. package/dist/matterNode.js +8 -369
  94. package/dist/matterbridge.d.ts +0 -353
  95. package/dist/matterbridge.js +46 -824
  96. package/dist/matterbridgeAccessoryPlatform.d.ts +0 -36
  97. package/dist/matterbridgeAccessoryPlatform.js +0 -38
  98. package/dist/matterbridgeBehaviors.d.ts +0 -24
  99. package/dist/matterbridgeBehaviors.js +5 -68
  100. package/dist/matterbridgeDeviceTypes.d.ts +0 -603
  101. package/dist/matterbridgeDeviceTypes.js +14 -635
  102. package/dist/matterbridgeDynamicPlatform.d.ts +0 -36
  103. package/dist/matterbridgeDynamicPlatform.js +0 -38
  104. package/dist/matterbridgeEndpoint.d.ts +0 -1332
  105. package/dist/matterbridgeEndpoint.js +53 -1457
  106. package/dist/matterbridgeEndpointHelpers.d.ts +0 -425
  107. package/dist/matterbridgeEndpointHelpers.js +20 -483
  108. package/dist/matterbridgeEndpointTypes.d.ts +0 -70
  109. package/dist/matterbridgeEndpointTypes.js +0 -25
  110. package/dist/matterbridgePlatform.d.ts +0 -425
  111. package/dist/matterbridgePlatform.js +1 -451
  112. package/dist/matterbridgeTypes.d.ts +0 -46
  113. package/dist/matterbridgeTypes.js +0 -26
  114. package/dist/pluginManager.d.ts +0 -305
  115. package/dist/pluginManager.js +5 -341
  116. package/dist/shelly.d.ts +0 -157
  117. package/dist/shelly.js +7 -178
  118. package/dist/storage/export.d.ts +0 -1
  119. package/dist/storage/export.js +0 -1
  120. package/dist/update.d.ts +0 -75
  121. package/dist/update.js +1 -93
  122. package/dist/utils/colorUtils.d.ts +0 -77
  123. package/dist/utils/colorUtils.js +2 -97
  124. package/dist/utils/commandLine.d.ts +0 -60
  125. package/dist/utils/commandLine.js +0 -60
  126. package/dist/utils/copyDirectory.d.ts +0 -33
  127. package/dist/utils/copyDirectory.js +0 -37
  128. package/dist/utils/createDirectory.d.ts +0 -32
  129. package/dist/utils/createDirectory.js +0 -33
  130. package/dist/utils/createZip.d.ts +0 -38
  131. package/dist/utils/createZip.js +2 -47
  132. package/dist/utils/deepCopy.d.ts +0 -31
  133. package/dist/utils/deepCopy.js +0 -39
  134. package/dist/utils/deepEqual.d.ts +0 -53
  135. package/dist/utils/deepEqual.js +1 -72
  136. package/dist/utils/error.d.ts +0 -42
  137. package/dist/utils/error.js +0 -42
  138. package/dist/utils/export.d.ts +0 -1
  139. package/dist/utils/export.js +0 -1
  140. package/dist/utils/format.d.ts +0 -49
  141. package/dist/utils/format.js +0 -49
  142. package/dist/utils/hex.d.ts +0 -85
  143. package/dist/utils/hex.js +0 -124
  144. package/dist/utils/inspector.d.ts +0 -63
  145. package/dist/utils/inspector.js +1 -69
  146. package/dist/utils/isValid.d.ts +0 -93
  147. package/dist/utils/isValid.js +0 -93
  148. package/dist/utils/network.d.ts +0 -116
  149. package/dist/utils/network.js +5 -126
  150. package/dist/utils/spawn.d.ts +0 -32
  151. package/dist/utils/spawn.js +1 -71
  152. package/dist/utils/tracker.d.ts +0 -56
  153. package/dist/utils/tracker.js +1 -64
  154. package/dist/utils/wait.d.ts +0 -51
  155. package/dist/utils/wait.js +8 -60
  156. package/dist/workerGlobalPrefix.d.ts +0 -24
  157. package/dist/workerGlobalPrefix.js +5 -37
  158. package/dist/workerTypes.d.ts +0 -25
  159. package/dist/workerTypes.js +0 -24
  160. package/dist/workers.d.ts +0 -61
  161. package/dist/workers.js +4 -68
  162. package/npm-shrinkwrap.json +1500 -11420
  163. package/package.json +1 -7
  164. package/dist/broadcastServer.d.ts.map +0 -1
  165. package/dist/broadcastServer.js.map +0 -1
  166. package/dist/broadcastServerTypes.d.ts.map +0 -1
  167. package/dist/broadcastServerTypes.js.map +0 -1
  168. package/dist/cli.d.ts.map +0 -1
  169. package/dist/cli.js.map +0 -1
  170. package/dist/cliEmitter.d.ts.map +0 -1
  171. package/dist/cliEmitter.js.map +0 -1
  172. package/dist/cliHistory.d.ts.map +0 -1
  173. package/dist/cliHistory.js.map +0 -1
  174. package/dist/clusters/export.d.ts.map +0 -1
  175. package/dist/clusters/export.js.map +0 -1
  176. package/dist/deviceManager.d.ts.map +0 -1
  177. package/dist/deviceManager.js.map +0 -1
  178. package/dist/devices/airConditioner.d.ts.map +0 -1
  179. package/dist/devices/airConditioner.js.map +0 -1
  180. package/dist/devices/batteryStorage.d.ts.map +0 -1
  181. package/dist/devices/batteryStorage.js.map +0 -1
  182. package/dist/devices/cooktop.d.ts.map +0 -1
  183. package/dist/devices/cooktop.js.map +0 -1
  184. package/dist/devices/dishwasher.d.ts.map +0 -1
  185. package/dist/devices/dishwasher.js.map +0 -1
  186. package/dist/devices/evse.d.ts.map +0 -1
  187. package/dist/devices/evse.js.map +0 -1
  188. package/dist/devices/export.d.ts.map +0 -1
  189. package/dist/devices/export.js.map +0 -1
  190. package/dist/devices/extractorHood.d.ts.map +0 -1
  191. package/dist/devices/extractorHood.js.map +0 -1
  192. package/dist/devices/heatPump.d.ts.map +0 -1
  193. package/dist/devices/heatPump.js.map +0 -1
  194. package/dist/devices/laundryDryer.d.ts.map +0 -1
  195. package/dist/devices/laundryDryer.js.map +0 -1
  196. package/dist/devices/laundryWasher.d.ts.map +0 -1
  197. package/dist/devices/laundryWasher.js.map +0 -1
  198. package/dist/devices/microwaveOven.d.ts.map +0 -1
  199. package/dist/devices/microwaveOven.js.map +0 -1
  200. package/dist/devices/oven.d.ts.map +0 -1
  201. package/dist/devices/oven.js.map +0 -1
  202. package/dist/devices/refrigerator.d.ts.map +0 -1
  203. package/dist/devices/refrigerator.js.map +0 -1
  204. package/dist/devices/roboticVacuumCleaner.d.ts.map +0 -1
  205. package/dist/devices/roboticVacuumCleaner.js.map +0 -1
  206. package/dist/devices/solarPower.d.ts.map +0 -1
  207. package/dist/devices/solarPower.js.map +0 -1
  208. package/dist/devices/speaker.d.ts.map +0 -1
  209. package/dist/devices/speaker.js.map +0 -1
  210. package/dist/devices/temperatureControl.d.ts.map +0 -1
  211. package/dist/devices/temperatureControl.js.map +0 -1
  212. package/dist/devices/waterHeater.d.ts.map +0 -1
  213. package/dist/devices/waterHeater.js.map +0 -1
  214. package/dist/dgram/coap.d.ts.map +0 -1
  215. package/dist/dgram/coap.js.map +0 -1
  216. package/dist/dgram/dgram.d.ts.map +0 -1
  217. package/dist/dgram/dgram.js.map +0 -1
  218. package/dist/dgram/mb_coap.d.ts.map +0 -1
  219. package/dist/dgram/mb_coap.js.map +0 -1
  220. package/dist/dgram/mb_mdns.d.ts.map +0 -1
  221. package/dist/dgram/mb_mdns.js.map +0 -1
  222. package/dist/dgram/mdns.d.ts.map +0 -1
  223. package/dist/dgram/mdns.js.map +0 -1
  224. package/dist/dgram/multicast.d.ts.map +0 -1
  225. package/dist/dgram/multicast.js.map +0 -1
  226. package/dist/dgram/unicast.d.ts.map +0 -1
  227. package/dist/dgram/unicast.js.map +0 -1
  228. package/dist/frontend.d.ts.map +0 -1
  229. package/dist/frontend.js.map +0 -1
  230. package/dist/frontendTypes.d.ts.map +0 -1
  231. package/dist/frontendTypes.js.map +0 -1
  232. package/dist/helpers.d.ts.map +0 -1
  233. package/dist/helpers.js.map +0 -1
  234. package/dist/index.d.ts.map +0 -1
  235. package/dist/index.js.map +0 -1
  236. package/dist/jestutils/export.d.ts.map +0 -1
  237. package/dist/jestutils/export.js.map +0 -1
  238. package/dist/jestutils/jestHelpers.d.ts.map +0 -1
  239. package/dist/jestutils/jestHelpers.js.map +0 -1
  240. package/dist/logger/export.d.ts.map +0 -1
  241. package/dist/logger/export.js.map +0 -1
  242. package/dist/matter/behaviors.d.ts.map +0 -1
  243. package/dist/matter/behaviors.js.map +0 -1
  244. package/dist/matter/clusters.d.ts.map +0 -1
  245. package/dist/matter/clusters.js.map +0 -1
  246. package/dist/matter/devices.d.ts.map +0 -1
  247. package/dist/matter/devices.js.map +0 -1
  248. package/dist/matter/endpoints.d.ts.map +0 -1
  249. package/dist/matter/endpoints.js.map +0 -1
  250. package/dist/matter/export.d.ts.map +0 -1
  251. package/dist/matter/export.js.map +0 -1
  252. package/dist/matter/types.d.ts.map +0 -1
  253. package/dist/matter/types.js.map +0 -1
  254. package/dist/matterNode.d.ts.map +0 -1
  255. package/dist/matterNode.js.map +0 -1
  256. package/dist/matterbridge.d.ts.map +0 -1
  257. package/dist/matterbridge.js.map +0 -1
  258. package/dist/matterbridgeAccessoryPlatform.d.ts.map +0 -1
  259. package/dist/matterbridgeAccessoryPlatform.js.map +0 -1
  260. package/dist/matterbridgeBehaviors.d.ts.map +0 -1
  261. package/dist/matterbridgeBehaviors.js.map +0 -1
  262. package/dist/matterbridgeDeviceTypes.d.ts.map +0 -1
  263. package/dist/matterbridgeDeviceTypes.js.map +0 -1
  264. package/dist/matterbridgeDynamicPlatform.d.ts.map +0 -1
  265. package/dist/matterbridgeDynamicPlatform.js.map +0 -1
  266. package/dist/matterbridgeEndpoint.d.ts.map +0 -1
  267. package/dist/matterbridgeEndpoint.js.map +0 -1
  268. package/dist/matterbridgeEndpointHelpers.d.ts.map +0 -1
  269. package/dist/matterbridgeEndpointHelpers.js.map +0 -1
  270. package/dist/matterbridgeEndpointTypes.d.ts.map +0 -1
  271. package/dist/matterbridgeEndpointTypes.js.map +0 -1
  272. package/dist/matterbridgePlatform.d.ts.map +0 -1
  273. package/dist/matterbridgePlatform.js.map +0 -1
  274. package/dist/matterbridgeTypes.d.ts.map +0 -1
  275. package/dist/matterbridgeTypes.js.map +0 -1
  276. package/dist/pluginManager.d.ts.map +0 -1
  277. package/dist/pluginManager.js.map +0 -1
  278. package/dist/shelly.d.ts.map +0 -1
  279. package/dist/shelly.js.map +0 -1
  280. package/dist/storage/export.d.ts.map +0 -1
  281. package/dist/storage/export.js.map +0 -1
  282. package/dist/update.d.ts.map +0 -1
  283. package/dist/update.js.map +0 -1
  284. package/dist/utils/colorUtils.d.ts.map +0 -1
  285. package/dist/utils/colorUtils.js.map +0 -1
  286. package/dist/utils/commandLine.d.ts.map +0 -1
  287. package/dist/utils/commandLine.js.map +0 -1
  288. package/dist/utils/copyDirectory.d.ts.map +0 -1
  289. package/dist/utils/copyDirectory.js.map +0 -1
  290. package/dist/utils/createDirectory.d.ts.map +0 -1
  291. package/dist/utils/createDirectory.js.map +0 -1
  292. package/dist/utils/createZip.d.ts.map +0 -1
  293. package/dist/utils/createZip.js.map +0 -1
  294. package/dist/utils/deepCopy.d.ts.map +0 -1
  295. package/dist/utils/deepCopy.js.map +0 -1
  296. package/dist/utils/deepEqual.d.ts.map +0 -1
  297. package/dist/utils/deepEqual.js.map +0 -1
  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.map +0 -1
  301. package/dist/utils/export.js.map +0 -1
  302. package/dist/utils/format.d.ts.map +0 -1
  303. package/dist/utils/format.js.map +0 -1
  304. package/dist/utils/hex.d.ts.map +0 -1
  305. package/dist/utils/hex.js.map +0 -1
  306. package/dist/utils/inspector.d.ts.map +0 -1
  307. package/dist/utils/inspector.js.map +0 -1
  308. package/dist/utils/isValid.d.ts.map +0 -1
  309. package/dist/utils/isValid.js.map +0 -1
  310. package/dist/utils/network.d.ts.map +0 -1
  311. package/dist/utils/network.js.map +0 -1
  312. package/dist/utils/spawn.d.ts.map +0 -1
  313. package/dist/utils/spawn.js.map +0 -1
  314. package/dist/utils/tracker.d.ts.map +0 -1
  315. package/dist/utils/tracker.js.map +0 -1
  316. package/dist/utils/wait.d.ts.map +0 -1
  317. package/dist/utils/wait.js.map +0 -1
  318. package/dist/workerGlobalPrefix.d.ts.map +0 -1
  319. package/dist/workerGlobalPrefix.js.map +0 -1
  320. package/dist/workerTypes.d.ts.map +0 -1
  321. package/dist/workerTypes.js.map +0 -1
  322. package/dist/workers.d.ts.map +0 -1
  323. package/dist/workers.js.map +0 -1
  324. package/frontend/index.html +0 -15
  325. package/frontend/package-lock.json +0 -7553
  326. package/packages/dgram/LICENSE +0 -202
  327. package/packages/dgram/dist/coap.d.ts +0 -205
  328. package/packages/dgram/dist/coap.d.ts.map +0 -1
  329. package/packages/dgram/dist/coap.js +0 -365
  330. package/packages/dgram/dist/coap.js.map +0 -1
  331. package/packages/dgram/dist/dgram.d.ts +0 -144
  332. package/packages/dgram/dist/dgram.d.ts.map +0 -1
  333. package/packages/dgram/dist/dgram.js +0 -367
  334. package/packages/dgram/dist/dgram.js.map +0 -1
  335. package/packages/dgram/dist/export.d.ts +0 -6
  336. package/packages/dgram/dist/export.d.ts.map +0 -1
  337. package/packages/dgram/dist/export.js +0 -6
  338. package/packages/dgram/dist/export.js.map +0 -1
  339. package/packages/dgram/dist/mdns.d.ts +0 -371
  340. package/packages/dgram/dist/mdns.d.ts.map +0 -1
  341. package/packages/dgram/dist/mdns.js +0 -934
  342. package/packages/dgram/dist/mdns.js.map +0 -1
  343. package/packages/dgram/dist/multicast.d.ts +0 -67
  344. package/packages/dgram/dist/multicast.d.ts.map +0 -1
  345. package/packages/dgram/dist/multicast.js +0 -180
  346. package/packages/dgram/dist/multicast.js.map +0 -1
  347. package/packages/dgram/dist/unicast.d.ts +0 -64
  348. package/packages/dgram/dist/unicast.d.ts.map +0 -1
  349. package/packages/dgram/dist/unicast.js +0 -100
  350. package/packages/dgram/dist/unicast.js.map +0 -1
  351. package/packages/dgram/package.json +0 -110
  352. package/packages/jest-utils/LICENSE +0 -202
  353. package/packages/jest-utils/dist/export.d.ts +0 -2
  354. package/packages/jest-utils/dist/export.d.ts.map +0 -1
  355. package/packages/jest-utils/dist/export.js +0 -2
  356. package/packages/jest-utils/dist/export.js.map +0 -1
  357. package/packages/jest-utils/dist/jestHelpers.d.ts +0 -77
  358. package/packages/jest-utils/dist/jestHelpers.d.ts.map +0 -1
  359. package/packages/jest-utils/dist/jestHelpers.js +0 -138
  360. package/packages/jest-utils/dist/jestHelpers.js.map +0 -1
  361. package/packages/jest-utils/package.json +0 -109
  362. package/packages/utils/LICENSE +0 -202
  363. package/packages/utils/dist/colorUtils.d.ts +0 -101
  364. package/packages/utils/dist/colorUtils.d.ts.map +0 -1
  365. package/packages/utils/dist/colorUtils.js +0 -282
  366. package/packages/utils/dist/colorUtils.js.map +0 -1
  367. package/packages/utils/dist/commandLine.d.ts +0 -66
  368. package/packages/utils/dist/commandLine.d.ts.map +0 -1
  369. package/packages/utils/dist/commandLine.js +0 -123
  370. package/packages/utils/dist/commandLine.js.map +0 -1
  371. package/packages/utils/dist/copyDirectory.d.ts +0 -35
  372. package/packages/utils/dist/copyDirectory.d.ts.map +0 -1
  373. package/packages/utils/dist/copyDirectory.js +0 -76
  374. package/packages/utils/dist/copyDirectory.js.map +0 -1
  375. package/packages/utils/dist/createDirectory.d.ts +0 -34
  376. package/packages/utils/dist/createDirectory.d.ts.map +0 -1
  377. package/packages/utils/dist/createDirectory.js +0 -54
  378. package/packages/utils/dist/createDirectory.js.map +0 -1
  379. package/packages/utils/dist/createZip.d.ts +0 -39
  380. package/packages/utils/dist/createZip.d.ts.map +0 -1
  381. package/packages/utils/dist/createZip.js +0 -114
  382. package/packages/utils/dist/createZip.js.map +0 -1
  383. package/packages/utils/dist/deepCopy.d.ts +0 -32
  384. package/packages/utils/dist/deepCopy.d.ts.map +0 -1
  385. package/packages/utils/dist/deepCopy.js +0 -79
  386. package/packages/utils/dist/deepCopy.js.map +0 -1
  387. package/packages/utils/dist/deepEqual.d.ts +0 -54
  388. package/packages/utils/dist/deepEqual.d.ts.map +0 -1
  389. package/packages/utils/dist/deepEqual.js +0 -130
  390. package/packages/utils/dist/deepEqual.js.map +0 -1
  391. package/packages/utils/dist/error.d.ts +0 -45
  392. package/packages/utils/dist/error.d.ts.map +0 -1
  393. package/packages/utils/dist/error.js +0 -54
  394. package/packages/utils/dist/error.js.map +0 -1
  395. package/packages/utils/dist/export.d.ts +0 -16
  396. package/packages/utils/dist/export.d.ts.map +0 -1
  397. package/packages/utils/dist/export.js +0 -16
  398. package/packages/utils/dist/export.js.map +0 -1
  399. package/packages/utils/dist/format.d.ts +0 -53
  400. package/packages/utils/dist/format.d.ts.map +0 -1
  401. package/packages/utils/dist/format.js +0 -78
  402. package/packages/utils/dist/format.js.map +0 -1
  403. package/packages/utils/dist/githubVersion.d.ts +0 -43
  404. package/packages/utils/dist/githubVersion.d.ts.map +0 -1
  405. package/packages/utils/dist/githubVersion.js +0 -70
  406. package/packages/utils/dist/githubVersion.js.map +0 -1
  407. package/packages/utils/dist/hex.d.ts +0 -89
  408. package/packages/utils/dist/hex.d.ts.map +0 -1
  409. package/packages/utils/dist/hex.js +0 -242
  410. package/packages/utils/dist/hex.js.map +0 -1
  411. package/packages/utils/dist/inspector.d.ts +0 -87
  412. package/packages/utils/dist/inspector.d.ts.map +0 -1
  413. package/packages/utils/dist/inspector.js +0 -268
  414. package/packages/utils/dist/inspector.js.map +0 -1
  415. package/packages/utils/dist/isValid.d.ts +0 -103
  416. package/packages/utils/dist/isValid.d.ts.map +0 -1
  417. package/packages/utils/dist/isValid.js +0 -162
  418. package/packages/utils/dist/isValid.js.map +0 -1
  419. package/packages/utils/dist/network.d.ts +0 -105
  420. package/packages/utils/dist/network.d.ts.map +0 -1
  421. package/packages/utils/dist/network.js +0 -201
  422. package/packages/utils/dist/network.js.map +0 -1
  423. package/packages/utils/dist/npmRoot.d.ts +0 -29
  424. package/packages/utils/dist/npmRoot.d.ts.map +0 -1
  425. package/packages/utils/dist/npmRoot.js +0 -41
  426. package/packages/utils/dist/npmRoot.js.map +0 -1
  427. package/packages/utils/dist/npmVersion.d.ts +0 -33
  428. package/packages/utils/dist/npmVersion.d.ts.map +0 -1
  429. package/packages/utils/dist/npmVersion.js +0 -76
  430. package/packages/utils/dist/npmVersion.js.map +0 -1
  431. package/packages/utils/dist/tracker.d.ts +0 -108
  432. package/packages/utils/dist/tracker.d.ts.map +0 -1
  433. package/packages/utils/dist/tracker.js +0 -264
  434. package/packages/utils/dist/tracker.js.map +0 -1
  435. package/packages/utils/dist/wait.d.ts +0 -54
  436. package/packages/utils/dist/wait.d.ts.map +0 -1
  437. package/packages/utils/dist/wait.js +0 -125
  438. package/packages/utils/dist/wait.js.map +0 -1
  439. package/packages/utils/package.json +0 -110
  440. package/packages/vitest-utils/LICENSE +0 -202
  441. package/packages/vitest-utils/dist/export.d.ts +0 -2
  442. package/packages/vitest-utils/dist/export.d.ts.map +0 -1
  443. package/packages/vitest-utils/dist/export.js +0 -2
  444. package/packages/vitest-utils/dist/export.js.map +0 -1
  445. package/packages/vitest-utils/dist/vitestHelpers.d.ts +0 -58
  446. package/packages/vitest-utils/dist/vitestHelpers.d.ts.map +0 -1
  447. package/packages/vitest-utils/dist/vitestHelpers.js +0 -119
  448. package/packages/vitest-utils/dist/vitestHelpers.js.map +0 -1
  449. package/packages/vitest-utils/package.json +0 -109
@@ -1,30 +1,5 @@
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
- */
23
- // AnsiLogger imports
24
1
  import { BLUE, CYAN, db, GREEN, idn, MAGENTA, nf, rs } from 'node-ansi-logger';
25
- // Utils imports
26
2
  import { hasParameter } from '../utils/commandLine.js';
27
- // Net imports
28
3
  import { Multicast } from './multicast.js';
29
4
  export var DnsRecordType;
30
5
  (function (DnsRecordType) {
@@ -116,7 +91,6 @@ export var DnsRecordType;
116
91
  DnsRecordType[DnsRecordType["DOA"] = 259] = "DOA";
117
92
  DnsRecordType[DnsRecordType["AMTRELAY"] = 260] = "AMTRELAY";
118
93
  DnsRecordType[DnsRecordType["ZONEVERSION"] = 261] = "ZONEVERSION";
119
- // 262-32767 are unassigned/reserved
120
94
  DnsRecordType[DnsRecordType["TA"] = 32768] = "TA";
121
95
  DnsRecordType[DnsRecordType["DLV"] = 32769] = "DLV";
122
96
  })(DnsRecordType || (DnsRecordType = {}));
@@ -130,65 +104,34 @@ export var DnsClass;
130
104
  export var DnsClassFlag;
131
105
  (function (DnsClassFlag) {
132
106
  DnsClassFlag[DnsClassFlag["FLUSH"] = 32768] = "FLUSH";
133
- // eslint-disable-next-line @typescript-eslint/no-duplicate-enum-values
134
107
  DnsClassFlag[DnsClassFlag["QU"] = 32768] = "QU";
135
108
  })(DnsClassFlag || (DnsClassFlag = {}));
136
- /**
137
- * Checks if a given message is an mDNS message.
138
- *
139
- * @param {Buffer} message - The message buffer to check.
140
- * @returns {boolean} True if the message is an mDNS message, false otherwise.
141
- */
142
109
  export function isMdns(message) {
143
110
  if (!message || message.length < 12)
144
111
  return false;
145
112
  const id = message.readUInt16BE(0);
146
113
  return id === 0;
147
114
  }
148
- /**
149
- * Checks if a given mDNS message is a query.
150
- *
151
- * @param {Buffer} message - The mDNS message buffer to check.
152
- * @returns {boolean} True if the message is a query, false otherwise.
153
- */
154
115
  export function isMdnsQuery(message) {
155
116
  if (message.length < 12)
156
117
  return false;
157
118
  const id = message.readUInt16BE(0);
158
119
  const flags = message.readUInt16BE(2);
159
- const qr = (flags & 0x8000) >> 15; // Bit 15: 0=query, 1=response.
120
+ const qr = (flags & 0x8000) >> 15;
160
121
  return id == 0 && qr === 0;
161
122
  }
162
- /**
163
- * Checks if a given mDNS message is a query.
164
- *
165
- * @param {Buffer} message - The mDNS message buffer to check.
166
- * @returns {boolean} True if the message is a query, false otherwise.
167
- */
168
123
  export function isMdnsResponse(message) {
169
124
  if (message.length < 12)
170
125
  return false;
171
126
  const id = message.readUInt16BE(0);
172
127
  const flags = message.readUInt16BE(2);
173
- const qr = (flags & 0x8000) >> 15; // Bit 15: 0=query, 1=response.
128
+ const qr = (flags & 0x8000) >> 15;
174
129
  return id == 0 && qr === 1;
175
130
  }
176
131
  export class Mdns extends Multicast {
177
132
  deviceQueries = new Map();
178
133
  deviceResponses = new Map();
179
134
  filters = [];
180
- /**
181
- * Creates an instance of the Mdns class.
182
- *
183
- * @param {string} name - The internal name of the mDNS server for the logs.
184
- * @param {string} multicastAddress - The multicast address for mDNS (i.e. 224.0.0.251 for udp4 or ff02::fb for udp6).
185
- * @param {number} multicastPort - The port for mDNS (i.e. 5353).
186
- * @param {('udp4' | 'udp6')} socketType - The type of socket to create (either 'udp4' or 'udp6').
187
- * @param {boolean} [reuseAddr] - Whether to reuse the address. Defaults to true.
188
- * @param {string} [interfaceName] - The optional name of the network interface to use.
189
- * @param {string} [interfaceAddress] - The optional IP address of the network interface to use.
190
- * @param {string} [outgoingInterfaceAddress] - The address of the outgoing network interface.
191
- */
192
135
  constructor(name, multicastAddress, multicastPort, socketType, reuseAddr = true, interfaceName, interfaceAddress, outgoingInterfaceAddress) {
193
136
  super(name, multicastAddress, multicastPort, socketType, reuseAddr, interfaceName, interfaceAddress, outgoingInterfaceAddress);
194
137
  }
@@ -208,17 +151,16 @@ export class Mdns extends Multicast {
208
151
  this.onQuery(rinfo, result);
209
152
  }
210
153
  else {
211
- const ptr = result.answers?.find((record) => record.name === '_shelly._tcp.local' && record.type === 12 /* DnsRecordType.PTR */) ||
212
- result.answers?.find((record) => record.name === '_http._tcp.local' && record.type === 12 /* DnsRecordType.PTR */) ||
213
- result.answers?.find((record) => record.type === 12 /* DnsRecordType.PTR */) ||
214
- result.answers?.find((record) => record.type === 16 /* DnsRecordType.TXT */) ||
154
+ const ptr = result.answers?.find((record) => record.name === '_shelly._tcp.local' && record.type === 12) ||
155
+ result.answers?.find((record) => record.name === '_http._tcp.local' && record.type === 12) ||
156
+ result.answers?.find((record) => record.type === 12) ||
157
+ result.answers?.find((record) => record.type === 16) ||
215
158
  result.answers
216
159
  ? result.answers[0]
217
- : undefined; // Fallback to the first answer if no PTR or TXT found
218
- this.deviceResponses.set(rinfo.address, { rinfo, response: result, dataPTR: ptr?.type === 12 /* DnsRecordType.PTR */ ? ptr?.data : ptr?.name });
160
+ : undefined;
161
+ this.deviceResponses.set(rinfo.address, { rinfo, response: result, dataPTR: ptr?.type === 12 ? ptr?.data : ptr?.name });
219
162
  this.onResponse(rinfo, result);
220
163
  }
221
- // Apply filters if any
222
164
  if (this.filters.length > 0) {
223
165
  this.log.debug(`mDNS message filtered out by filters: ${this.filters.join(', ')}`);
224
166
  for (const filter of this.filters) {
@@ -240,28 +182,20 @@ export class Mdns extends Multicast {
240
182
  this.log.error(`Error decoding mDNS message: ${error instanceof Error ? error.message : error}`);
241
183
  }
242
184
  }
243
- /**
244
- * Decodes an mDNS message, including the header, question section, answer section,
245
- * authority section, and additional section.
246
- *
247
- * @param {Buffer} msg - The raw mDNS message buffer.
248
- * @returns {MdnsMessage} An object representing the decoded mDNS message.
249
- * @throws {Error} if the message is too short.
250
- */
251
185
  decodeMdnsMessage(msg) {
252
186
  if (msg.length < 12) {
253
187
  throw new Error('mDNS message too short');
254
188
  }
255
189
  const id = msg.readUInt16BE(0);
256
190
  const flags = msg.readUInt16BE(2);
257
- const qr = (flags & 0x8000) >> 15; // Bit 15: 0=query, 1=response (QR = Query/Response).
258
- const opcode = (flags & 0x7800) >> 11; // Bits 14-11 (OPCODE: kind of query; in mDNS this is typically 0 = standard query).
259
- const aa = Boolean(flags & 0x0400); // Bit 10 (AA: Authoritative Answer; sender claims authority for the name).
260
- const tc = Boolean(flags & 0x0200); // Bit 9 (TC: TrunCation; message was truncated due to length limits).
261
- const rd = Boolean(flags & 0x0100); // Bit 8 (RD: Recursion Desired; usually 0 in mDNS).
262
- const ra = Boolean(flags & 0x0080); // Bit 7 (RA: Recursion Available; meaningful for recursive resolvers, usually 0 in mDNS).
263
- const z = (flags & 0x0070) >> 4; // Bits 6-4 (Z: reserved in DNS; should be 0 in classic DNS/mDNS).
264
- const rcode = flags & 0x000f; // Bits 3-0 (RCODE: Response Code; 0 = NoError, 3 = NXDomain, etc).
191
+ const qr = (flags & 0x8000) >> 15;
192
+ const opcode = (flags & 0x7800) >> 11;
193
+ const aa = Boolean(flags & 0x0400);
194
+ const tc = Boolean(flags & 0x0200);
195
+ const rd = Boolean(flags & 0x0100);
196
+ const ra = Boolean(flags & 0x0080);
197
+ const z = (flags & 0x0070) >> 4;
198
+ const rcode = flags & 0x000f;
265
199
  const qdCount = msg.readUInt16BE(4);
266
200
  const anCount = msg.readUInt16BE(6);
267
201
  const nsCount = msg.readUInt16BE(8);
@@ -286,7 +220,6 @@ export class Mdns extends Multicast {
286
220
  additionals: [],
287
221
  };
288
222
  let offset = 12;
289
- // Decode the question section.
290
223
  for (let i = 0; i < qdCount; i++) {
291
224
  const qnameResult = this.decodeDnsName(msg, offset);
292
225
  const qname = qnameResult.name;
@@ -297,19 +230,16 @@ export class Mdns extends Multicast {
297
230
  offset += 2;
298
231
  mdnsMessage.questions?.push({ name: qname, type: qtype, class: qclass });
299
232
  }
300
- // Decode the answer section.
301
233
  for (let i = 0; i < anCount; i++) {
302
234
  const rrResult = this.decodeResourceRecord(msg, offset);
303
235
  mdnsMessage.answers?.push(rrResult.record);
304
236
  offset = rrResult.newOffset;
305
237
  }
306
- // Decode the authority (NS) section.
307
238
  for (let i = 0; i < nsCount; i++) {
308
239
  const rrResult = this.decodeResourceRecord(msg, offset);
309
240
  mdnsMessage.authorities?.push(rrResult.record);
310
241
  offset = rrResult.newOffset;
311
242
  }
312
- // Decode the additional records section.
313
243
  for (let i = 0; i < arCount; i++) {
314
244
  const rrResult = this.decodeResourceRecord(msg, offset);
315
245
  mdnsMessage.additionals?.push(rrResult.record);
@@ -317,25 +247,15 @@ export class Mdns extends Multicast {
317
247
  }
318
248
  return mdnsMessage;
319
249
  }
320
- /**
321
- * Decodes a DNS name from a buffer, handling compression.
322
- *
323
- * @param {Buffer} msg - The full mDNS message buffer.
324
- * @param {number} offset - The offset at which the DNS name starts.
325
- * @returns {{ name: string; newOffset: number }} An object with the decoded name and the new offset.
326
- * @throws {Error} if the offset exceeds the buffer length or too many iterations are performed.
327
- */
328
250
  decodeDnsName(msg, offset) {
329
251
  const labels = [];
330
252
  let jumped = false;
331
253
  let originalOffset = offset;
332
- let iterations = 0; // Prevent infinite loops
254
+ let iterations = 0;
333
255
  while (true) {
334
- // Safety guard: prevent infinite loops in malformed messages.
335
256
  if (iterations++ > 1000) {
336
257
  throw new Error('Too many iterations while decoding DNS name. Possible malformed message.');
337
258
  }
338
- // Check that offset is within buffer bounds.
339
259
  if (offset >= msg.length) {
340
260
  throw new Error('Offset exceeds buffer length while decoding DNS name.');
341
261
  }
@@ -344,9 +264,7 @@ export class Mdns extends Multicast {
344
264
  offset++;
345
265
  break;
346
266
  }
347
- // Check for pointer (first two bits are 11)
348
267
  if ((len & 0xc0) === 0xc0) {
349
- // Ensure the pointer has two bytes available.
350
268
  if (offset + 1 >= msg.length) {
351
269
  throw new Error('Incomplete pointer encountered while decoding DNS name.');
352
270
  }
@@ -359,7 +277,6 @@ export class Mdns extends Multicast {
359
277
  continue;
360
278
  }
361
279
  offset++;
362
- // Check that the label length doesn't go beyond the buffer.
363
280
  if (offset + len > msg.length) {
364
281
  throw new Error('Label length exceeds buffer bounds while decoding DNS name.');
365
282
  }
@@ -368,15 +285,6 @@ export class Mdns extends Multicast {
368
285
  }
369
286
  return { name: labels.join('.'), newOffset: jumped ? originalOffset : offset };
370
287
  }
371
- /**
372
- * Encodes a domain name into the DNS label format.
373
- *
374
- * For example, "example.local" becomes:
375
- * [7] "example" [5] "local" [0]
376
- *
377
- * @param {string} name - The domain name to encode.
378
- * @returns {Buffer} The encoded domain name as a Buffer.
379
- */
380
288
  encodeDnsName(name) {
381
289
  const labels = name.split('.');
382
290
  const buffers = labels.map((label) => {
@@ -384,25 +292,8 @@ export class Mdns extends Multicast {
384
292
  lenBuf.writeUInt8(label.length, 0);
385
293
  return Buffer.concat([lenBuf, Buffer.from(label)]);
386
294
  });
387
- // Append the null byte to terminate the name.
388
295
  return Buffer.concat([...buffers, Buffer.from([0])]);
389
296
  }
390
- /**
391
- * Encodes TXT record RDATA.
392
- *
393
- * In DNS/mDNS, TXT RDATA is a sequence of one or more <character-string>,
394
- * each encoded as: [length byte][UTF-8 bytes].
395
- *
396
- * @param {string[]} txt - Array of TXT entries, e.g. ["key=value", "path=/"].
397
- * @returns {Buffer} Encoded TXT RDATA.
398
- * @throws {Error} If any entry exceeds 255 bytes.
399
- *
400
- * @example
401
- * const txtRdata = mdns.encodeTxtRdata(['txtvers=1', 'path=/']);
402
- * mdns.sendResponse([
403
- * { name: 'example._http._tcp.local', rtype: DnsRecordType.TXT, rclass: DnsClass.IN | DnsClassFlag.FLUSH, ttl: 120, rdata: txtRdata },
404
- * ]);
405
- */
406
297
  encodeTxtRdata(txt) {
407
298
  const parts = txt.map((entry) => {
408
299
  const value = Buffer.from(entry, 'utf8');
@@ -412,21 +303,6 @@ export class Mdns extends Multicast {
412
303
  });
413
304
  return Buffer.concat(parts);
414
305
  }
415
- /**
416
- * Encodes SRV record RDATA.
417
- *
418
- * SRV RDATA layout (RFC 2782):
419
- * - priority (2 bytes)
420
- * - weight (2 bytes)
421
- * - port (2 bytes)
422
- * - target (DNS name)
423
- *
424
- * @param {number} priority - SRV priority.
425
- * @param {number} weight - SRV weight.
426
- * @param {number} port - Service port.
427
- * @param {string} target - Target hostname (e.g. "matterbridge.local").
428
- * @returns {Buffer} Encoded SRV RDATA.
429
- */
430
306
  encodeSrvRdata(priority, weight, port, target) {
431
307
  const fixed = Buffer.alloc(6);
432
308
  fixed.writeUInt16BE(priority, 0);
@@ -434,13 +310,6 @@ export class Mdns extends Multicast {
434
310
  fixed.writeUInt16BE(port, 4);
435
311
  return Buffer.concat([fixed, this.encodeDnsName(target)]);
436
312
  }
437
- /**
438
- * Encodes an IPv4 address for an A record RDATA (4 bytes).
439
- *
440
- * @param {string} ipv4 - IPv4 address, e.g. "192.168.1.10".
441
- * @returns {Buffer} 4-byte buffer.
442
- * @throws {Error} If the address is not a valid dotted-quad.
443
- */
444
313
  encodeA(ipv4) {
445
314
  const parts = ipv4.split('.').map((p) => Number(p));
446
315
  if (parts.length !== 4 || parts.some((n) => !Number.isInteger(n) || n < 0 || n > 255)) {
@@ -448,19 +317,8 @@ export class Mdns extends Multicast {
448
317
  }
449
318
  return Buffer.from(parts);
450
319
  }
451
- /**
452
- * Encodes an IPv6 address for an AAAA record RDATA (16 bytes).
453
- *
454
- * Supports the "::" zero-compression form and ignores an optional scope id
455
- * suffix (e.g. "fe80::1%12" or "fe80::1%eth0").
456
- *
457
- * @param {string} ipv6WithOptionalScope - IPv6 address (optionally with scope id).
458
- * @returns {Buffer} 16-byte buffer.
459
- * @throws {Error} If the address is not a valid IPv6 literal.
460
- */
461
320
  encodeAAAA(ipv6WithOptionalScope) {
462
321
  const ipv6 = ipv6WithOptionalScope.split('%')[0];
463
- // Expand IPv6 to 8 groups of 16-bit words.
464
322
  const [left, right] = ipv6.split('::');
465
323
  const leftParts = left ? left.split(':').filter(Boolean) : [];
466
324
  const rightParts = right ? right.split(':').filter(Boolean) : [];
@@ -489,19 +347,10 @@ export class Mdns extends Multicast {
489
347
  return [(word >> 8) & 0xff, word & 0xff];
490
348
  }));
491
349
  }
492
- /**
493
- * Decodes a DNS resource record.
494
- *
495
- * @param {Buffer} msg - The full mDNS message buffer.
496
- * @param {number} offset - The offset at which the resource record starts.
497
- * @returns {{ record: MdnsRecord; newOffset: number }} An object containing the decoded record and the new offset.
498
- */
499
350
  decodeResourceRecord(msg, offset) {
500
- // Decode the NAME field (which may be compressed)
501
351
  const nameResult = this.decodeDnsName(msg, offset);
502
352
  const name = nameResult.name;
503
353
  offset = nameResult.newOffset;
504
- // Read TYPE (16 bits), CLASS (16 bits), TTL (32 bits), and RDLENGTH (16 bits)
505
354
  const type = msg.readUInt16BE(offset);
506
355
  offset += 2;
507
356
  const rrclass = msg.readUInt16BE(offset);
@@ -511,14 +360,12 @@ export class Mdns extends Multicast {
511
360
  const rdlength = msg.readUInt16BE(offset);
512
361
  offset += 2;
513
362
  let data = '';
514
- if (type === 12 /* DnsRecordType.PTR */) {
515
- // PTR record (type 12): decode its RDATA as a domain name.
363
+ if (type === 12) {
516
364
  const ptrResult = this.decodeDnsName(msg, offset);
517
365
  data = ptrResult.name;
518
366
  offset += rdlength;
519
367
  }
520
- else if (type === 16 /* DnsRecordType.TXT */) {
521
- // TXT record: may consist of one or more length-prefixed strings.
368
+ else if (type === 16) {
522
369
  const txtStrings = [];
523
370
  const end = offset + rdlength;
524
371
  while (offset < end) {
@@ -530,8 +377,7 @@ export class Mdns extends Multicast {
530
377
  }
531
378
  data = txtStrings.join(', ');
532
379
  }
533
- else if (type === 33 /* DnsRecordType.SRV */) {
534
- // SRV record (type === 33): consists of 2 bytes for priority, 2 for weight, 2 for port, followed by the target domain name.
380
+ else if (type === 33) {
535
381
  const priority = msg.readUInt16BE(offset);
536
382
  const weight = msg.readUInt16BE(offset + 2);
537
383
  const port = msg.readUInt16BE(offset + 4);
@@ -545,16 +391,13 @@ export class Mdns extends Multicast {
545
391
  });
546
392
  offset = srvTargetResult.newOffset;
547
393
  }
548
- else if (type === 1 /* DnsRecordType.A */) {
549
- // A record (type 1): an IPv4 address stored in 4 bytes.
394
+ else if (type === 1) {
550
395
  const ipBytes = msg.slice(offset, offset + 4);
551
396
  data = Array.from(ipBytes).join('.');
552
397
  offset += 4;
553
398
  }
554
- else if (type === 28 /* DnsRecordType.AAAA */) {
555
- // AAAA record (type 28): IPv6 address stored in 16 bytes.
399
+ else if (type === 28) {
556
400
  const ipBytes = msg.slice(offset, offset + 16);
557
- // Convert the 16 bytes into an IPv6 address string (colon-separated)
558
401
  const ipv6Parts = [];
559
402
  for (let i = 0; i < 16; i += 2) {
560
403
  ipv6Parts.push(ipBytes.readUInt16BE(i).toString(16));
@@ -562,14 +405,10 @@ export class Mdns extends Multicast {
562
405
  data = ipv6Parts.join(':');
563
406
  offset += 16;
564
407
  }
565
- else if (type === 47 /* DnsRecordType.NSEC */) {
566
- // NSEC record: RDATA consists of:
567
- // - Next Domain Name (in DNS label format)
568
- // - Type Bit Maps (variable length)
408
+ else if (type === 47) {
569
409
  const { name: nextDomain, newOffset } = this.decodeDnsName(msg, offset);
570
410
  const nextDomainLength = newOffset - offset;
571
411
  offset = newOffset;
572
- // Calculate the remaining length for the type bit maps.
573
412
  const bitmapLength = rdlength - nextDomainLength;
574
413
  const bitmapData = msg.slice(offset, offset + bitmapLength);
575
414
  const types = [];
@@ -596,7 +435,6 @@ export class Mdns extends Multicast {
596
435
  offset += bitmapLength;
597
436
  }
598
437
  else {
599
- // Fall back
600
438
  data = msg.slice(offset, offset + rdlength).toString('hex');
601
439
  offset += rdlength;
602
440
  }
@@ -605,30 +443,19 @@ export class Mdns extends Multicast {
605
443
  newOffset: offset,
606
444
  };
607
445
  }
608
- /**
609
- * Sends a DNS query with multiple questions.
610
- *
611
- * @param {Array<{ name: string; type: number; class: number; unicastResponse?: boolean }>} questions - Array of questions
612
- * to include in the query.
613
- * @returns {Buffer<ArrayBuffer>} The constructed query buffer.
614
- *
615
- * @remarks
616
- * Each question should have a name (e.g., "_http._tcp.local"), type (e.g., DnsRecordType.PTR), class (e.g., DnsClass.IN),
617
- * and an optional unicastResponse flag (this will add the DnsClassFlag.QU flag to the query).
618
- */
619
446
  sendQuery(questions) {
620
447
  const header = Buffer.alloc(12);
621
- header.writeUInt16BE(0, 0); // ID
622
- header.writeUInt16BE(0, 2); // Flags
623
- header.writeUInt16BE(questions.length, 4); // QDCOUNT
624
- header.writeUInt16BE(0, 6); // ANCOUNT
625
- header.writeUInt16BE(0, 8); // NSCOUNT
626
- header.writeUInt16BE(0, 10); // ARCOUNT
448
+ header.writeUInt16BE(0, 0);
449
+ header.writeUInt16BE(0, 2);
450
+ header.writeUInt16BE(questions.length, 4);
451
+ header.writeUInt16BE(0, 6);
452
+ header.writeUInt16BE(0, 8);
453
+ header.writeUInt16BE(0, 10);
627
454
  const questionBuffers = questions.map(({ name, type: qtype, class: qclass, unicastResponse = false }) => {
628
455
  const qname = this.encodeDnsName(name);
629
456
  const qfields = Buffer.alloc(4);
630
457
  qfields.writeUInt16BE(qtype, 0);
631
- qfields.writeUInt16BE(unicastResponse ? qclass | 32768 /* DnsClassFlag.QU */ : qclass, 2);
458
+ qfields.writeUInt16BE(unicastResponse ? qclass | 32768 : qclass, 2);
632
459
  return Buffer.concat([qname, qfields]);
633
460
  });
634
461
  const query = Buffer.concat([header, ...questionBuffers]);
@@ -648,52 +475,31 @@ export class Mdns extends Multicast {
648
475
  });
649
476
  return query;
650
477
  }
651
- /**
652
- * Constructs an mDNS response packet and sends it to the multicast address and port.
653
- *
654
- * @param {Array<{ name: string; rtype: number; rclass: number; ttl: number; rdata: Buffer }>} answers - Array of answer records.
655
- * @returns {Buffer<ArrayBuffer>} The constructed response buffer.
656
- *
657
- * @example
658
- * const ptrRdata = mdnsIpv4.encodeDnsName('matterbridge._http._tcp.local');
659
- * mdnsIpv4.sendResponse([{ name: '_http._tcp.local', rtype: DnsRecordType.PTR, rclass: DnsClass.IN, ttl: 120, rdata: ptrRdata }]);
660
- */
661
478
  sendResponse(answers) {
662
479
  if (!Array.isArray(answers) || answers.length === 0) {
663
480
  throw new Error('sendResponse requires a non-empty answers array');
664
481
  }
665
- // Create a 12-byte DNS header.
666
482
  const header = Buffer.alloc(12);
667
- header.writeUInt16BE(0, 0); // ID is set to 0 in mDNS.
668
- // Set flags: QR (response) bit and AA (authoritative answer) bit.
483
+ header.writeUInt16BE(0, 0);
669
484
  header.writeUInt16BE(0x8400, 2);
670
- header.writeUInt16BE(0, 4); // QDCOUNT: 0 questions in response.
671
- header.writeUInt16BE(answers.length, 6); // ANCOUNT: number of answer records.
672
- header.writeUInt16BE(0, 8); // NSCOUNT: 0 authority records.
673
- header.writeUInt16BE(0, 10); // ARCOUNT: 0 additional records.
485
+ header.writeUInt16BE(0, 4);
486
+ header.writeUInt16BE(answers.length, 6);
487
+ header.writeUInt16BE(0, 8);
488
+ header.writeUInt16BE(0, 10);
674
489
  const answerBuffers = answers.map(({ name, rtype, rclass, ttl, rdata }) => {
675
- // Encode the domain name in DNS label format.
676
490
  const aname = this.encodeDnsName(name);
677
- // Prepare the fixed part of the answer record:
678
- // - 2 bytes for qtype,
679
- // - 2 bytes for qclass,
680
- // - 4 bytes for TTL,
681
- // - 2 bytes for RDLENGTH (length of the rdata).
682
491
  const answerFixed = Buffer.alloc(10);
683
- answerFixed.writeUInt16BE(rtype, 0); // Record type.
684
- answerFixed.writeUInt16BE(rclass, 2); // Record class.
685
- answerFixed.writeUInt32BE(ttl, 4); // Time-to-live.
686
- answerFixed.writeUInt16BE(rdata.length, 8); // RDLENGTH.
687
- // Concatenate the answer: encoded name, fixed fields, and resource data.
492
+ answerFixed.writeUInt16BE(rtype, 0);
493
+ answerFixed.writeUInt16BE(rclass, 2);
494
+ answerFixed.writeUInt32BE(ttl, 4);
495
+ answerFixed.writeUInt16BE(rdata.length, 8);
688
496
  return Buffer.concat([aname, answerFixed, rdata]);
689
497
  });
690
- // Concatenate header and answers to form the complete mDNS response packet.
691
498
  const response = Buffer.concat([header, ...answerBuffers]);
692
499
  if (hasParameter('v') || hasParameter('verbose')) {
693
500
  const decoded = this.decodeMdnsMessage(response);
694
501
  this.logMdnsMessage(decoded, undefined, 'Sending response mDNS message');
695
502
  }
696
- // Send the response packet via the socket.
697
503
  this.socket.send(response, 0, response.length, this.multicastPort, this.multicastAddress, (error) => {
698
504
  if (error) {
699
505
  this.log.error(`Dgram mDNS server failed to send response message: ${error instanceof Error ? error.message : error}`);
@@ -706,128 +512,116 @@ export class Mdns extends Multicast {
706
512
  });
707
513
  return response;
708
514
  }
709
- /**
710
- * Converts a DNS record type numeric value to its string representation.
711
- *
712
- * @param {number} type - The numeric DNS record type.
713
- * @returns {string} The string representation of the record type.
714
- */
715
515
  dnsTypeToString(type) {
716
516
  const typeMap = {
717
- [1 /* DnsRecordType.A */]: 'A',
718
- [2 /* DnsRecordType.NS */]: 'NS',
719
- [3 /* DnsRecordType.MD */]: 'MD',
720
- [4 /* DnsRecordType.MF */]: 'MF',
721
- [5 /* DnsRecordType.CNAME */]: 'CNAME',
722
- [6 /* DnsRecordType.SOA */]: 'SOA',
723
- [7 /* DnsRecordType.MB */]: 'MB',
724
- [8 /* DnsRecordType.MG */]: 'MG',
725
- [9 /* DnsRecordType.MR */]: 'MR',
726
- [10 /* DnsRecordType.NULL */]: 'NULL',
727
- [11 /* DnsRecordType.WKS */]: 'WKS',
728
- [12 /* DnsRecordType.PTR */]: 'PTR',
729
- [13 /* DnsRecordType.HINFO */]: 'HINFO',
730
- [14 /* DnsRecordType.MINFO */]: 'MINFO',
731
- [15 /* DnsRecordType.MX */]: 'MX',
732
- [16 /* DnsRecordType.TXT */]: 'TXT',
733
- [17 /* DnsRecordType.RP */]: 'RP',
734
- [18 /* DnsRecordType.AFSDB */]: 'AFSDB',
735
- [19 /* DnsRecordType.X25 */]: 'X25',
736
- [20 /* DnsRecordType.ISDN */]: 'ISDN',
737
- [21 /* DnsRecordType.RT */]: 'RT',
738
- [22 /* DnsRecordType.NSAP */]: 'NSAP',
739
- [23 /* DnsRecordType.NSAP_PTR */]: 'NSAP_PTR',
740
- [24 /* DnsRecordType.SIG */]: 'SIG',
741
- [25 /* DnsRecordType.KEY */]: 'KEY',
742
- [26 /* DnsRecordType.PX */]: 'PX',
743
- [27 /* DnsRecordType.GPOS */]: 'GPOS',
744
- [28 /* DnsRecordType.AAAA */]: 'AAAA',
745
- [29 /* DnsRecordType.LOC */]: 'LOC',
746
- [30 /* DnsRecordType.NXT */]: 'NXT',
747
- [31 /* DnsRecordType.EID */]: 'EID',
748
- [32 /* DnsRecordType.NIMLOC */]: 'NIMLOC',
749
- [33 /* DnsRecordType.SRV */]: 'SRV',
750
- [34 /* DnsRecordType.ATMA */]: 'ATMA',
751
- [35 /* DnsRecordType.NAPTR */]: 'NAPTR',
752
- [36 /* DnsRecordType.KX */]: 'KX',
753
- [37 /* DnsRecordType.CERT */]: 'CERT',
754
- [38 /* DnsRecordType.A6 */]: 'A6',
755
- [39 /* DnsRecordType.DNAME */]: 'DNAME',
756
- [40 /* DnsRecordType.SINK */]: 'SINK',
757
- [41 /* DnsRecordType.OPT */]: 'OPT',
758
- [42 /* DnsRecordType.APL */]: 'APL',
759
- [43 /* DnsRecordType.DS */]: 'DS',
760
- [44 /* DnsRecordType.SSHFP */]: 'SSHFP',
761
- [45 /* DnsRecordType.IPSECKEY */]: 'IPSECKEY',
762
- [46 /* DnsRecordType.RRSIG */]: 'RRSIG',
763
- [47 /* DnsRecordType.NSEC */]: 'NSEC',
764
- [48 /* DnsRecordType.DNSKEY */]: 'DNSKEY',
765
- [49 /* DnsRecordType.DHCID */]: 'DHCID',
766
- [50 /* DnsRecordType.NSEC3 */]: 'NSEC3',
767
- [51 /* DnsRecordType.NSEC3PARAM */]: 'NSEC3PARAM',
768
- [52 /* DnsRecordType.TLSA */]: 'TLSA',
769
- [53 /* DnsRecordType.SMIMEA */]: 'SMIMEA',
770
- [55 /* DnsRecordType.HIP */]: 'HIP',
771
- [56 /* DnsRecordType.NINFO */]: 'NINFO',
772
- [57 /* DnsRecordType.RKEY */]: 'RKEY',
773
- [58 /* DnsRecordType.TALINK */]: 'TALINK',
774
- [59 /* DnsRecordType.CDS */]: 'CDS',
775
- [60 /* DnsRecordType.CDNSKEY */]: 'CDNSKEY',
776
- [61 /* DnsRecordType.OPENPGPKEY */]: 'OPENPGPKEY',
777
- [62 /* DnsRecordType.CSYNC */]: 'CSYNC',
778
- [63 /* DnsRecordType.ZONEMD */]: 'ZONEMD',
779
- [64 /* DnsRecordType.SVCB */]: 'SVCB',
780
- [65 /* DnsRecordType.HTTPS */]: 'HTTPS',
781
- [99 /* DnsRecordType.SPF */]: 'SPF',
782
- [100 /* DnsRecordType.UINFO */]: 'UINFO',
783
- [101 /* DnsRecordType.UID */]: 'UID',
784
- [102 /* DnsRecordType.GID */]: 'GID',
785
- [103 /* DnsRecordType.UNSPEC */]: 'UNSPEC',
786
- [104 /* DnsRecordType.NID */]: 'NID',
787
- [105 /* DnsRecordType.L32 */]: 'L32',
788
- [106 /* DnsRecordType.L64 */]: 'L64',
789
- [107 /* DnsRecordType.LP */]: 'LP',
790
- [108 /* DnsRecordType.EUI48 */]: 'EUI48',
791
- [109 /* DnsRecordType.EUI64 */]: 'EUI64',
792
- [249 /* DnsRecordType.TKEY */]: 'TKEY',
793
- [250 /* DnsRecordType.TSIG */]: 'TSIG',
794
- [251 /* DnsRecordType.IXFR */]: 'IXFR',
795
- [252 /* DnsRecordType.AXFR */]: 'AXFR',
796
- [253 /* DnsRecordType.MAILB */]: 'MAILB',
797
- [254 /* DnsRecordType.MAILA */]: 'MAILA',
798
- [255 /* DnsRecordType.ANY */]: 'ANY',
799
- [256 /* DnsRecordType.URI */]: 'URI',
800
- [257 /* DnsRecordType.CAA */]: 'CAA',
801
- [258 /* DnsRecordType.AVC */]: 'AVC',
802
- [259 /* DnsRecordType.DOA */]: 'DOA',
803
- [260 /* DnsRecordType.AMTRELAY */]: 'AMTRELAY',
804
- [261 /* DnsRecordType.ZONEVERSION */]: 'ZONEVERSION',
805
- [32768 /* DnsRecordType.TA */]: 'TA',
806
- [32769 /* DnsRecordType.DLV */]: 'DLV',
517
+ [1]: 'A',
518
+ [2]: 'NS',
519
+ [3]: 'MD',
520
+ [4]: 'MF',
521
+ [5]: 'CNAME',
522
+ [6]: 'SOA',
523
+ [7]: 'MB',
524
+ [8]: 'MG',
525
+ [9]: 'MR',
526
+ [10]: 'NULL',
527
+ [11]: 'WKS',
528
+ [12]: 'PTR',
529
+ [13]: 'HINFO',
530
+ [14]: 'MINFO',
531
+ [15]: 'MX',
532
+ [16]: 'TXT',
533
+ [17]: 'RP',
534
+ [18]: 'AFSDB',
535
+ [19]: 'X25',
536
+ [20]: 'ISDN',
537
+ [21]: 'RT',
538
+ [22]: 'NSAP',
539
+ [23]: 'NSAP_PTR',
540
+ [24]: 'SIG',
541
+ [25]: 'KEY',
542
+ [26]: 'PX',
543
+ [27]: 'GPOS',
544
+ [28]: 'AAAA',
545
+ [29]: 'LOC',
546
+ [30]: 'NXT',
547
+ [31]: 'EID',
548
+ [32]: 'NIMLOC',
549
+ [33]: 'SRV',
550
+ [34]: 'ATMA',
551
+ [35]: 'NAPTR',
552
+ [36]: 'KX',
553
+ [37]: 'CERT',
554
+ [38]: 'A6',
555
+ [39]: 'DNAME',
556
+ [40]: 'SINK',
557
+ [41]: 'OPT',
558
+ [42]: 'APL',
559
+ [43]: 'DS',
560
+ [44]: 'SSHFP',
561
+ [45]: 'IPSECKEY',
562
+ [46]: 'RRSIG',
563
+ [47]: 'NSEC',
564
+ [48]: 'DNSKEY',
565
+ [49]: 'DHCID',
566
+ [50]: 'NSEC3',
567
+ [51]: 'NSEC3PARAM',
568
+ [52]: 'TLSA',
569
+ [53]: 'SMIMEA',
570
+ [55]: 'HIP',
571
+ [56]: 'NINFO',
572
+ [57]: 'RKEY',
573
+ [58]: 'TALINK',
574
+ [59]: 'CDS',
575
+ [60]: 'CDNSKEY',
576
+ [61]: 'OPENPGPKEY',
577
+ [62]: 'CSYNC',
578
+ [63]: 'ZONEMD',
579
+ [64]: 'SVCB',
580
+ [65]: 'HTTPS',
581
+ [99]: 'SPF',
582
+ [100]: 'UINFO',
583
+ [101]: 'UID',
584
+ [102]: 'GID',
585
+ [103]: 'UNSPEC',
586
+ [104]: 'NID',
587
+ [105]: 'L32',
588
+ [106]: 'L64',
589
+ [107]: 'LP',
590
+ [108]: 'EUI48',
591
+ [109]: 'EUI64',
592
+ [249]: 'TKEY',
593
+ [250]: 'TSIG',
594
+ [251]: 'IXFR',
595
+ [252]: 'AXFR',
596
+ [253]: 'MAILB',
597
+ [254]: 'MAILA',
598
+ [255]: 'ANY',
599
+ [256]: 'URI',
600
+ [257]: 'CAA',
601
+ [258]: 'AVC',
602
+ [259]: 'DOA',
603
+ [260]: 'AMTRELAY',
604
+ [261]: 'ZONEVERSION',
605
+ [32768]: 'TA',
606
+ [32769]: 'DLV',
807
607
  };
808
608
  return typeMap[type] ?? `TYPE${type}`;
809
609
  }
810
- /**
811
- * Converts a DNS response class numeric value to its string representation.
812
- *
813
- * @param {number} cls - The numeric DNS class.
814
- * @returns {string} The string representation of the DNS class.
815
- */
816
610
  dnsResponseClassToString(cls) {
817
- const isFlush = !!(cls & 32768 /* DnsClassFlag.FLUSH */);
611
+ const isFlush = !!(cls & 32768);
818
612
  const baseClass = cls & 0x7fff;
819
613
  let classStr;
820
614
  switch (baseClass) {
821
- case 1 /* DnsClass.IN */:
615
+ case 1:
822
616
  classStr = 'IN';
823
617
  break;
824
- case 3 /* DnsClass.CH */:
618
+ case 3:
825
619
  classStr = 'CH';
826
620
  break;
827
- case 4 /* DnsClass.HS */:
621
+ case 4:
828
622
  classStr = 'HS';
829
623
  break;
830
- case 255 /* DnsClass.ANY */:
624
+ case 255:
831
625
  classStr = 'ANY';
832
626
  break;
833
627
  default:
@@ -835,28 +629,21 @@ export class Mdns extends Multicast {
835
629
  }
836
630
  return isFlush ? `${classStr}|FLUSH` : classStr;
837
631
  }
838
- /**
839
- * Converts a DNS question class to a human-readable string.
840
- * Adds support for mDNS QU (unicast-response) bit.
841
- *
842
- * @param {number} cls - The numeric question class.
843
- * @returns {string} The string representation, e.g. "IN|QU"
844
- */
845
632
  dnsQuestionClassToString(cls) {
846
- const isQU = !!(cls & 32768 /* DnsClassFlag.QU */);
633
+ const isQU = !!(cls & 32768);
847
634
  const baseClass = cls & 0x7fff;
848
635
  let classStr;
849
636
  switch (baseClass) {
850
- case 1 /* DnsClass.IN */:
637
+ case 1:
851
638
  classStr = 'IN';
852
639
  break;
853
- case 3 /* DnsClass.CH */:
640
+ case 3:
854
641
  classStr = 'CH';
855
642
  break;
856
- case 4 /* DnsClass.HS */:
643
+ case 4:
857
644
  classStr = 'HS';
858
645
  break;
859
- case 255 /* DnsClass.ANY */:
646
+ case 255:
860
647
  classStr = 'ANY';
861
648
  break;
862
649
  default:
@@ -864,13 +651,6 @@ export class Mdns extends Multicast {
864
651
  }
865
652
  return isQU ? `${classStr}|QU` : classStr;
866
653
  }
867
- /**
868
- * Logs the decoded mDNS message header.
869
- *
870
- * @param {MdnsMessage} msg - The mDNS message header object.
871
- * @param {AnsiLogger} [log] - The logger to use (defaults to this.log).
872
- * @param {string} [text] - Optional additional text to include in the log.
873
- */
874
654
  logMdnsMessage(msg, log = this.log, text = 'Decoded mDNS message') {
875
655
  log.info(`${text}: ID ${MAGENTA}${msg.id}${nf}, QR ${GREEN}${msg.qr === 0 ? 'Query' : 'Response'}${nf}, OPCODE ${MAGENTA}${msg.opcode}${nf}, AA ${MAGENTA}${msg.aa}${nf}, TC ${MAGENTA}${msg.tc}${nf}, RD ${MAGENTA}${msg.rd}${nf}, RA ${MAGENTA}${msg.ra}${nf}, Z ${MAGENTA}${msg.z}${nf}, RCODE ${MAGENTA}${msg.rcode}${nf}, QDCount ${MAGENTA}${msg.qdCount}${nf}, ANCount ${MAGENTA}${msg.anCount}${nf}, NSCount ${MAGENTA}${msg.nsCount}${nf}, ARCount ${MAGENTA}${msg.arCount}${nf}`);
876
656
  msg.questions?.forEach((question) => {
@@ -887,14 +667,9 @@ export class Mdns extends Multicast {
887
667
  });
888
668
  log.info(`---\n`);
889
669
  }
890
- /**
891
- * Logs the discovered devices from the mDNS queries and responses.
892
- */
893
670
  logDevices() {
894
671
  this.log.info(`Discovered query devices: ${MAGENTA}${this.deviceQueries.size}${nf}`);
895
- // Collect devices into an array
896
672
  const deviceQueryArray = Array.from(this.deviceQueries.entries());
897
- // Sort the array by numeric value of the IP address
898
673
  deviceQueryArray.sort(([addressA], [addressB]) => {
899
674
  const partsA = addressA.split('.').map(Number);
900
675
  const partsB = addressB.split('.').map(Number);
@@ -903,17 +678,13 @@ export class Mdns extends Multicast {
903
678
  if (diff !== 0)
904
679
  return diff;
905
680
  }
906
- // istanbul ignore next
907
681
  return 0;
908
682
  });
909
- // Log the sorted devices
910
683
  deviceQueryArray.forEach(([rinfo, response]) => {
911
684
  this.log.info(`- ${MAGENTA}${rinfo}${nf} family ${BLUE}${response.rinfo.family}${nf} address ${BLUE}${response.rinfo.address}${nf} port ${BLUE}${response.rinfo.port}${nf}`);
912
685
  });
913
686
  this.log.info(`Discovered response devices: ${MAGENTA}${this.deviceResponses.size}${nf}`);
914
- // Collect devices into an array
915
687
  const deviceResponseArray = Array.from(this.deviceResponses.entries());
916
- // Sort the array by numeric value of the IP address
917
688
  deviceResponseArray.sort(([addressA], [addressB]) => {
918
689
  const partsA = addressA.split(/[:.]/).map((part) => parseInt(part, 16));
919
690
  const partsB = addressB.split(/[:.]/).map((part) => parseInt(part, 16));
@@ -922,13 +693,10 @@ export class Mdns extends Multicast {
922
693
  if (diff !== 0)
923
694
  return diff;
924
695
  }
925
- // istanbul ignore next
926
696
  return 0;
927
697
  });
928
- // Log the sorted devices
929
698
  deviceResponseArray.forEach(([rinfo, response]) => {
930
699
  this.log.info(`- ${MAGENTA}${rinfo}${nf} family ${BLUE}${response.rinfo.family}${nf} address ${BLUE}${response.rinfo.address}${nf} port ${BLUE}${response.rinfo.port}${nf} PTR ${GREEN}${response.dataPTR}${nf}`);
931
700
  });
932
701
  }
933
702
  }
934
- //# sourceMappingURL=mdns.js.map