matterbridge 3.4.5-dev-20251225-2f72161 → 3.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (335) hide show
  1. package/CHANGELOG.md +5 -8
  2. package/dist/broadcastServer.d.ts +144 -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 +841 -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 +30 -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 +50 -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 +48 -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 +2 -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 +135 -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 +98 -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 +48 -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 +61 -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 +71 -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 +76 -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 +17 -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 +46 -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 +47 -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 +67 -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 +81 -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 +168 -0
  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 +105 -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 +118 -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 +112 -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 +40 -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 +87 -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 +166 -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 +111 -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 +205 -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 +143 -0
  107. package/dist/dgram/dgram.d.ts.map +1 -0
  108. package/dist/dgram/dgram.js +121 -4
  109. package/dist/dgram/dgram.js.map +1 -0
  110. package/dist/dgram/mb_coap.d.ts +24 -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 +24 -0
  115. package/dist/dgram/mb_mdns.d.ts.map +1 -0
  116. package/dist/dgram/mb_mdns.js +172 -172
  117. package/dist/dgram/mb_mdns.js.map +1 -0
  118. package/dist/dgram/mdns.d.ts +350 -0
  119. package/dist/dgram/mdns.d.ts.map +1 -0
  120. package/dist/dgram/mdns.js +358 -144
  121. package/dist/dgram/mdns.js.map +1 -0
  122. package/dist/dgram/mdnsReflectorClient.d.ts +39 -0
  123. package/dist/dgram/mdnsReflectorClient.d.ts.map +1 -0
  124. package/dist/dgram/mdnsReflectorClient.js +132 -0
  125. package/dist/dgram/mdnsReflectorClient.js.map +1 -0
  126. package/dist/dgram/mdnsReflectorServer.d.ts +54 -0
  127. package/dist/dgram/mdnsReflectorServer.d.ts.map +1 -0
  128. package/dist/dgram/mdnsReflectorServer.js +294 -0
  129. package/dist/dgram/mdnsReflectorServer.js.map +1 -0
  130. package/dist/dgram/mdnsReflectorTypes.d.ts +28 -0
  131. package/dist/dgram/mdnsReflectorTypes.d.ts.map +1 -0
  132. package/dist/dgram/mdnsReflectorTypes.js +28 -0
  133. package/dist/dgram/mdnsReflectorTypes.js.map +1 -0
  134. package/dist/dgram/multicast.d.ts +67 -0
  135. package/dist/dgram/multicast.d.ts.map +1 -0
  136. package/dist/dgram/multicast.js +62 -1
  137. package/dist/dgram/multicast.js.map +1 -0
  138. package/dist/dgram/unicast.d.ts +64 -0
  139. package/dist/dgram/unicast.d.ts.map +1 -0
  140. package/dist/dgram/unicast.js +64 -1
  141. package/dist/dgram/unicast.js.map +1 -0
  142. package/dist/frontend.d.ts +245 -0
  143. package/dist/frontend.d.ts.map +1 -0
  144. package/dist/frontend.js +485 -38
  145. package/dist/frontend.js.map +1 -0
  146. package/dist/frontendTypes.d.ts +529 -0
  147. package/dist/frontendTypes.d.ts.map +1 -0
  148. package/dist/frontendTypes.js +45 -0
  149. package/dist/frontendTypes.js.map +1 -0
  150. package/dist/helpers.d.ts +48 -0
  151. package/dist/helpers.d.ts.map +1 -0
  152. package/dist/helpers.js +53 -0
  153. package/dist/helpers.js.map +1 -0
  154. package/dist/index.d.ts +34 -0
  155. package/dist/index.d.ts.map +1 -0
  156. package/dist/index.js +25 -0
  157. package/dist/index.js.map +1 -0
  158. package/dist/jestutils/export.d.ts +2 -0
  159. package/dist/jestutils/export.d.ts.map +1 -0
  160. package/dist/jestutils/export.js +1 -0
  161. package/dist/jestutils/export.js.map +1 -0
  162. package/dist/jestutils/jestHelpers.d.ts +345 -0
  163. package/dist/jestutils/jestHelpers.d.ts.map +1 -0
  164. package/dist/jestutils/jestHelpers.js +371 -14
  165. package/dist/jestutils/jestHelpers.js.map +1 -0
  166. package/dist/logger/export.d.ts +2 -0
  167. package/dist/logger/export.d.ts.map +1 -0
  168. package/dist/logger/export.js +1 -0
  169. package/dist/logger/export.js.map +1 -0
  170. package/dist/matter/behaviors.d.ts +2 -0
  171. package/dist/matter/behaviors.d.ts.map +1 -0
  172. package/dist/matter/behaviors.js +2 -0
  173. package/dist/matter/behaviors.js.map +1 -0
  174. package/dist/matter/clusters.d.ts +2 -0
  175. package/dist/matter/clusters.d.ts.map +1 -0
  176. package/dist/matter/clusters.js +2 -0
  177. package/dist/matter/clusters.js.map +1 -0
  178. package/dist/matter/devices.d.ts +2 -0
  179. package/dist/matter/devices.d.ts.map +1 -0
  180. package/dist/matter/devices.js +2 -0
  181. package/dist/matter/devices.js.map +1 -0
  182. package/dist/matter/endpoints.d.ts +2 -0
  183. package/dist/matter/endpoints.d.ts.map +1 -0
  184. package/dist/matter/endpoints.js +2 -0
  185. package/dist/matter/endpoints.js.map +1 -0
  186. package/dist/matter/export.d.ts +5 -0
  187. package/dist/matter/export.d.ts.map +1 -0
  188. package/dist/matter/export.js +3 -0
  189. package/dist/matter/export.js.map +1 -0
  190. package/dist/matter/types.d.ts +3 -0
  191. package/dist/matter/types.d.ts.map +1 -0
  192. package/dist/matter/types.js +3 -0
  193. package/dist/matter/types.js.map +1 -0
  194. package/dist/matterNode.d.ts +342 -0
  195. package/dist/matterNode.d.ts.map +1 -0
  196. package/dist/matterNode.js +369 -8
  197. package/dist/matterNode.js.map +1 -0
  198. package/dist/matterbridge.d.ts +505 -0
  199. package/dist/matterbridge.d.ts.map +1 -0
  200. package/dist/matterbridge.js +824 -46
  201. package/dist/matterbridge.js.map +1 -0
  202. package/dist/matterbridgeAccessoryPlatform.d.ts +41 -0
  203. package/dist/matterbridgeAccessoryPlatform.d.ts.map +1 -0
  204. package/dist/matterbridgeAccessoryPlatform.js +38 -0
  205. package/dist/matterbridgeAccessoryPlatform.js.map +1 -0
  206. package/dist/matterbridgeBehaviors.d.ts +2404 -0
  207. package/dist/matterbridgeBehaviors.d.ts.map +1 -0
  208. package/dist/matterbridgeBehaviors.js +68 -5
  209. package/dist/matterbridgeBehaviors.js.map +1 -0
  210. package/dist/matterbridgeDeviceTypes.d.ts +698 -0
  211. package/dist/matterbridgeDeviceTypes.d.ts.map +1 -0
  212. package/dist/matterbridgeDeviceTypes.js +635 -14
  213. package/dist/matterbridgeDeviceTypes.js.map +1 -0
  214. package/dist/matterbridgeDynamicPlatform.d.ts +41 -0
  215. package/dist/matterbridgeDynamicPlatform.d.ts.map +1 -0
  216. package/dist/matterbridgeDynamicPlatform.js +38 -0
  217. package/dist/matterbridgeDynamicPlatform.js.map +1 -0
  218. package/dist/matterbridgeEndpoint.d.ts +1507 -0
  219. package/dist/matterbridgeEndpoint.d.ts.map +1 -0
  220. package/dist/matterbridgeEndpoint.js +1457 -53
  221. package/dist/matterbridgeEndpoint.js.map +1 -0
  222. package/dist/matterbridgeEndpointHelpers.d.ts +787 -0
  223. package/dist/matterbridgeEndpointHelpers.d.ts.map +1 -0
  224. package/dist/matterbridgeEndpointHelpers.js +483 -20
  225. package/dist/matterbridgeEndpointHelpers.js.map +1 -0
  226. package/dist/matterbridgeEndpointTypes.d.ts +166 -0
  227. package/dist/matterbridgeEndpointTypes.d.ts.map +1 -0
  228. package/dist/matterbridgeEndpointTypes.js +25 -0
  229. package/dist/matterbridgeEndpointTypes.js.map +1 -0
  230. package/dist/matterbridgePlatform.d.ts +539 -0
  231. package/dist/matterbridgePlatform.d.ts.map +1 -0
  232. package/dist/matterbridgePlatform.js +451 -1
  233. package/dist/matterbridgePlatform.js.map +1 -0
  234. package/dist/matterbridgeTypes.d.ts +252 -0
  235. package/dist/matterbridgeTypes.d.ts.map +1 -0
  236. package/dist/matterbridgeTypes.js +26 -0
  237. package/dist/matterbridgeTypes.js.map +1 -0
  238. package/dist/pluginManager.d.ts +372 -0
  239. package/dist/pluginManager.d.ts.map +1 -0
  240. package/dist/pluginManager.js +341 -5
  241. package/dist/pluginManager.js.map +1 -0
  242. package/dist/shelly.d.ts +181 -0
  243. package/dist/shelly.d.ts.map +1 -0
  244. package/dist/shelly.js +178 -7
  245. package/dist/shelly.js.map +1 -0
  246. package/dist/storage/export.d.ts +2 -0
  247. package/dist/storage/export.d.ts.map +1 -0
  248. package/dist/storage/export.js +1 -0
  249. package/dist/storage/export.js.map +1 -0
  250. package/dist/update.d.ts +84 -0
  251. package/dist/update.d.ts.map +1 -0
  252. package/dist/update.js +93 -1
  253. package/dist/update.js.map +1 -0
  254. package/dist/utils/colorUtils.d.ts +101 -0
  255. package/dist/utils/colorUtils.d.ts.map +1 -0
  256. package/dist/utils/colorUtils.js +97 -2
  257. package/dist/utils/colorUtils.js.map +1 -0
  258. package/dist/utils/commandLine.d.ts +66 -0
  259. package/dist/utils/commandLine.d.ts.map +1 -0
  260. package/dist/utils/commandLine.js +61 -1
  261. package/dist/utils/commandLine.js.map +1 -0
  262. package/dist/utils/copyDirectory.d.ts +35 -0
  263. package/dist/utils/copyDirectory.d.ts.map +1 -0
  264. package/dist/utils/copyDirectory.js +37 -0
  265. package/dist/utils/copyDirectory.js.map +1 -0
  266. package/dist/utils/createDirectory.d.ts +34 -0
  267. package/dist/utils/createDirectory.d.ts.map +1 -0
  268. package/dist/utils/createDirectory.js +33 -0
  269. package/dist/utils/createDirectory.js.map +1 -0
  270. package/dist/utils/createZip.d.ts +39 -0
  271. package/dist/utils/createZip.d.ts.map +1 -0
  272. package/dist/utils/createZip.js +47 -2
  273. package/dist/utils/createZip.js.map +1 -0
  274. package/dist/utils/deepCopy.d.ts +32 -0
  275. package/dist/utils/deepCopy.d.ts.map +1 -0
  276. package/dist/utils/deepCopy.js +39 -0
  277. package/dist/utils/deepCopy.js.map +1 -0
  278. package/dist/utils/deepEqual.d.ts +54 -0
  279. package/dist/utils/deepEqual.d.ts.map +1 -0
  280. package/dist/utils/deepEqual.js +72 -1
  281. package/dist/utils/deepEqual.js.map +1 -0
  282. package/dist/utils/error.d.ts +45 -0
  283. package/dist/utils/error.d.ts.map +1 -0
  284. package/dist/utils/error.js +42 -0
  285. package/dist/utils/error.js.map +1 -0
  286. package/dist/utils/export.d.ts +13 -0
  287. package/dist/utils/export.d.ts.map +1 -0
  288. package/dist/utils/export.js +1 -0
  289. package/dist/utils/export.js.map +1 -0
  290. package/dist/utils/format.d.ts +53 -0
  291. package/dist/utils/format.d.ts.map +1 -0
  292. package/dist/utils/format.js +49 -0
  293. package/dist/utils/format.js.map +1 -0
  294. package/dist/utils/hex.d.ts +89 -0
  295. package/dist/utils/hex.d.ts.map +1 -0
  296. package/dist/utils/hex.js +124 -0
  297. package/dist/utils/hex.js.map +1 -0
  298. package/dist/utils/inspector.d.ts +87 -0
  299. package/dist/utils/inspector.d.ts.map +1 -0
  300. package/dist/utils/inspector.js +69 -1
  301. package/dist/utils/inspector.js.map +1 -0
  302. package/dist/utils/isvalid.d.ts +103 -0
  303. package/dist/utils/isvalid.d.ts.map +1 -0
  304. package/dist/utils/isvalid.js +101 -0
  305. package/dist/utils/isvalid.js.map +1 -0
  306. package/dist/utils/network.d.ts +117 -0
  307. package/dist/utils/network.d.ts.map +1 -0
  308. package/dist/utils/network.js +103 -5
  309. package/dist/utils/network.js.map +1 -0
  310. package/dist/utils/spawn.d.ts +33 -0
  311. package/dist/utils/spawn.d.ts.map +1 -0
  312. package/dist/utils/spawn.js +71 -1
  313. package/dist/utils/spawn.js.map +1 -0
  314. package/dist/utils/tracker.d.ts +108 -0
  315. package/dist/utils/tracker.d.ts.map +1 -0
  316. package/dist/utils/tracker.js +64 -1
  317. package/dist/utils/tracker.js.map +1 -0
  318. package/dist/utils/wait.d.ts +54 -0
  319. package/dist/utils/wait.d.ts.map +1 -0
  320. package/dist/utils/wait.js +60 -8
  321. package/dist/utils/wait.js.map +1 -0
  322. package/dist/workerGlobalPrefix.d.ts +25 -0
  323. package/dist/workerGlobalPrefix.d.ts.map +1 -0
  324. package/dist/workerGlobalPrefix.js +37 -5
  325. package/dist/workerGlobalPrefix.js.map +1 -0
  326. package/dist/workerTypes.d.ts +52 -0
  327. package/dist/workerTypes.d.ts.map +1 -0
  328. package/dist/workerTypes.js +24 -0
  329. package/dist/workerTypes.js.map +1 -0
  330. package/dist/workers.d.ts +69 -0
  331. package/dist/workers.d.ts.map +1 -0
  332. package/dist/workers.js +68 -4
  333. package/dist/workers.js.map +1 -0
  334. package/npm-shrinkwrap.json +2 -2
  335. package/package.json +2 -1
@@ -1,13 +1,42 @@
1
+ /**
2
+ * @description This file contains the bin mb_mdns for the class Mdns.
3
+ * @file src/dgram/mb_mdns.ts
4
+ * @author Luca Liguori
5
+ * @created 2025-07-22
6
+ * @version 1.0.0
7
+ * @license Apache-2.0
8
+ *
9
+ * Copyright 2025, 2026, 2027 Luca Liguori.
10
+ *
11
+ * Licensed under the Apache License, Version 2.0 (the "License");
12
+ * you may not use this file except in compliance with the License.
13
+ * You may obtain a copy of the License at
14
+ *
15
+ * http://www.apache.org/licenses/LICENSE-2.0
16
+ *
17
+ * Unless required by applicable law or agreed to in writing, software
18
+ * distributed under the License is distributed on an "AS IS" BASIS,
19
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20
+ * See the License for the specific language governing permissions and
21
+ * limitations under the License.
22
+ */
23
+ import os from 'node:os';
24
+ // Matterbridge
1
25
  import { getIntParameter, getParameter, getStringArrayParameter, hasParameter } from '../utils/commandLine.js';
26
+ // Net imports
2
27
  import { MDNS_MULTICAST_IPV4_ADDRESS, MDNS_MULTICAST_IPV6_ADDRESS, MDNS_MULTICAST_PORT } from './multicast.js';
3
28
  import { Mdns } from './mdns.js';
4
- import { Unicast } from './unicast.js';
29
+ import { MdnsReflectorClient } from './mdnsReflectorClient.js';
30
+ import { MdnsReflectorServer } from './mdnsReflectorServer.js';
31
+ // istanbul ignore next
5
32
  {
6
33
  if (hasParameter('h') || hasParameter('help')) {
7
- console.log(`Copyright (c) Matterbridge. All rights reserved.\n`);
34
+ // eslint-disable-next-line no-console
35
+ console.log(`Copyright (c) Matterbridge. All rights reserved. Version 1.0.0.\n`);
36
+ // eslint-disable-next-line no-console
8
37
  console.log(`Usage: mb_mdns [options...]
9
38
 
10
- If no command line is provided, mb_mdns shows all incoming mDNS records.
39
+ If no command line is provided, mb_mdns shows all incoming mDNS records on all interfaces (0.0.0.0 and ::).
11
40
 
12
41
  Options:
13
42
  -h, --help Show this help message and exit.
@@ -16,14 +45,17 @@ Options:
16
45
  --ipv6InterfaceAddress <address> IPv6 address of the network interface to bind to (default: ::).
17
46
  --outgoingIpv4InterfaceAddress <address> Outgoing IPv4 address of the network interface (default first external address).
18
47
  --outgoingIpv6InterfaceAddress <address> Outgoing IPv6 address of the network interface (default first external address).
19
- --unicastIpv4 <address> Unicast IPv4 address to send mDNS advertisements to (default: disabled).
20
- --unicastIpv6 <address> Unicast IPv6 address to send mDNS advertisements to (default: disabled).
21
- --broadcast Enable broadcasting of mDNS advertisements (default: disabled).
22
- --localhost Enable sending mDNS advertisements to localhost (default: disabled).
23
48
  --advertise <interval> Enable matterbridge mDNS advertisement each ms (default interval: 10000ms).
24
49
  --query <interval> Enable common mDNS services query each ms (default interval: 10000ms).
25
50
  --filter <string...> Filter strings to match in the mDNS record name (default: no filter).
51
+ --noIpv4 Disable IPv4 mDNS server (default: enabled).
52
+ --noIpv6 Disable IPv6 mDNS server (default: enabled).
53
+ --no-timeout Disable automatic timeout of 10 minutes. Reflector mode disables timeout automatically.
54
+ --reflector-client Enable mDNS reflector client (default: disabled).
55
+ --reflector-server Enable mDNS reflector server (default: disabled).
56
+ -d, --debug Enable debug logging (default: disabled).
26
57
  -v, --verbose Enable verbose logging (default: disabled).
58
+ -s, --silent Enable silent mode, only log notices, warnings and errors.
27
59
 
28
60
  Examples:
29
61
  # Listen for Matter device commissioner service records only on eth0 interface
@@ -44,62 +76,60 @@ Examples:
44
76
  # Query each 5s and listen for _matterbridge._tcp.local service records
45
77
  mb_mdns --query 5000 --filter _matterbridge._tcp.local
46
78
  `);
79
+ // eslint-disable-next-line n/no-process-exit
47
80
  process.exit(0);
48
81
  }
82
+ // Dynamic JSON import (Node >= 20) with import attributes
49
83
  const { default: pkg } = await import('../../package.json', { with: { type: 'json' } });
50
84
  let mdnsIpv4QueryInterval;
51
85
  let mdnsIpv6QueryInterval;
52
86
  let mdnsIpv4AdvertiseInterval;
53
87
  let mdnsIpv6AdvertiseInterval;
54
- const 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'));
55
- const mdnsIpv6 = new Mdns('mDNS Server udp6', MDNS_MULTICAST_IPV6_ADDRESS, MDNS_MULTICAST_PORT, 'udp6', true, getParameter('interfaceName'), getParameter('ipv6InterfaceAddress') || '::', getParameter('outgoingIpv6InterfaceAddress'));
56
- const unicast = new Unicast('mDNS Unicast Server', 'udp4', true, undefined, 'localhost', MDNS_MULTICAST_PORT);
57
- if (hasParameter('v') || hasParameter('verbose')) {
58
- mdnsIpv4.log.logLevel = "debug";
59
- mdnsIpv6.log.logLevel = "debug";
60
- unicast.log.logLevel = "debug";
61
- }
62
- else {
63
- mdnsIpv4.log.logLevel = "info";
64
- mdnsIpv6.log.logLevel = "info";
65
- unicast.log.logLevel = "info";
66
- }
67
- mdnsIpv4.listNetworkInterfaces();
68
- const filters = getStringArrayParameter('filter');
69
- if (filters) {
70
- mdnsIpv4.filters.push(...filters);
71
- mdnsIpv6.filters.push(...filters);
72
- }
88
+ let mdnsIpv4 = undefined;
89
+ let mdnsIpv6 = undefined;
90
+ let reflectorClient = undefined;
91
+ let reflectorServer = undefined;
92
+ /**
93
+ * Cleanup and log device information before exiting.
94
+ */
73
95
  async function cleanupAndLogAndExit() {
74
- if (hasParameter('advertise')) {
75
- advertise(mdnsIpv4, 0);
76
- advertise(mdnsIpv6, 0);
77
- }
78
- await new Promise((resolve) => setTimeout(resolve, 250));
79
96
  clearInterval(mdnsIpv4QueryInterval);
80
97
  clearInterval(mdnsIpv6QueryInterval);
81
98
  clearInterval(mdnsIpv4AdvertiseInterval);
82
99
  clearInterval(mdnsIpv6AdvertiseInterval);
83
- mdnsIpv4.stop();
84
- mdnsIpv6.stop();
85
- unicast.stop();
86
- await new Promise((resolve) => setTimeout(resolve, 250));
87
- mdnsIpv4.logDevices();
88
- mdnsIpv6.logDevices();
89
- process.exit(0);
100
+ if (hasParameter('advertise')) {
101
+ if (mdnsIpv4)
102
+ advertise(mdnsIpv4, 0); // Send goodbye with TTL 0
103
+ if (mdnsIpv6)
104
+ advertise(mdnsIpv6, 0); // Send goodbye with TTL 0
105
+ }
106
+ await new Promise((resolve) => setTimeout(resolve, 250)); // Wait for 250ms to allow goodbye messages to be sent
107
+ mdnsIpv4?.stop();
108
+ mdnsIpv6?.stop();
109
+ mdnsIpv4?.logDevices();
110
+ mdnsIpv6?.logDevices();
111
+ await new Promise((resolve) => setTimeout(resolve, 250)); // Wait for 250ms to allow sockets to close
112
+ await reflectorClient?.stop();
113
+ await reflectorServer?.stop();
90
114
  }
91
115
  const query = (mdns) => {
92
116
  mdns.log.info('Sending mDNS query for services...');
93
117
  mdns.sendQuery([
94
- { name: '_matterc._udp.local', type: 12, class: 1, unicastResponse: true },
95
- { name: '_matter._tcp.local', type: 12, class: 1, unicastResponse: true },
96
- { name: '_matterbridge._tcp.local', type: 12, class: 1, unicastResponse: true },
97
- { name: '_shelly._tcp.local', type: 12, class: 1, unicastResponse: true },
98
- { name: '_mqtt._tcp.local', type: 12, class: 1, unicastResponse: true },
99
- { name: '_http._tcp.local', type: 12, class: 1, unicastResponse: true },
100
- { name: '_services._dns-sd._udp.local', type: 12, class: 1, unicastResponse: true },
118
+ { name: '_matterc._udp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
119
+ { name: '_matter._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
120
+ { name: '_matterbridge._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
121
+ { name: '_shelly._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
122
+ { name: '_mqtt._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
123
+ { name: '_http._tcp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
124
+ { name: '_services._dns-sd._udp.local', type: 12 /* DnsRecordType.PTR */, class: 1 /* DnsClass.IN */, unicastResponse: true },
101
125
  ]);
102
126
  };
127
+ /**
128
+ * Sends an mDNS advertisement for the HTTP service over UDP IPv4.
129
+ *
130
+ * @param {Mdns} mdns - The Mdns instance to use for sending the advertisement.
131
+ * @param {number} [ttl] - The time-to-live for the advertisement records. Defaults to 120 seconds. Send 0 for goodbye.
132
+ */
103
133
  const advertise = (mdns, ttl = 120) => {
104
134
  mdns.log.info(`Sending mDNS advertisement for matterbridge service with TTL ${ttl ? ttl.toString() : 'goodbye'}...`);
105
135
  const httpServiceType = '_http._tcp.local';
@@ -115,147 +145,117 @@ Examples:
115
145
  const srvRdata = mdns.encodeSrvRdata(0, 0, port, hostName);
116
146
  const txtRdata = mdns.encodeTxtRdata([`version=${pkg.version}`, 'path=/']);
117
147
  const answers = [
118
- { name: '_services._dns-sd._udp.local', rtype: 12, rclass: 1, ttl, rdata: ptrHttpServiceTypeRdata },
119
- { name: httpServiceType, rtype: 12, rclass: 1, ttl, rdata: ptrHttpInstanceRdata },
120
- { name: '_services._dns-sd._udp.local', rtype: 12, rclass: 1, ttl, rdata: ptrMatterbridgeServiceTypeRdata },
121
- { name: matterbridgeServiceType, rtype: 12, rclass: 1, ttl, rdata: ptrMatterbridgeInstanceRdata },
122
- { name: httpInstanceName, rtype: 33, rclass: 1 | 32768, ttl, rdata: srvRdata },
123
- { name: matterbridgeInstanceName, rtype: 33, rclass: 1 | 32768, ttl, rdata: srvRdata },
124
- { name: httpInstanceName, rtype: 16, rclass: 1 | 32768, ttl, rdata: txtRdata },
125
- { name: matterbridgeInstanceName, rtype: 16, rclass: 1 | 32768, ttl, rdata: txtRdata },
148
+ // PTR records for service types and instances
149
+ { name: '_services._dns-sd._udp.local', rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrHttpServiceTypeRdata },
150
+ { name: httpServiceType, rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrHttpInstanceRdata },
151
+ { name: '_services._dns-sd._udp.local', rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrMatterbridgeServiceTypeRdata },
152
+ { name: matterbridgeServiceType, rtype: 12 /* DnsRecordType.PTR */, rclass: 1 /* DnsClass.IN */, ttl, rdata: ptrMatterbridgeInstanceRdata },
153
+ // SRV record for the HTTP instance
154
+ { name: httpInstanceName, rtype: 33 /* DnsRecordType.SRV */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: srvRdata },
155
+ // SRV record for the matterbridge instance
156
+ { name: matterbridgeInstanceName, rtype: 33 /* DnsRecordType.SRV */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: srvRdata },
157
+ // TXT record for the HTTP instance
158
+ { name: httpInstanceName, rtype: 16 /* DnsRecordType.TXT */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: txtRdata },
159
+ // TXT record for the matterbridge instance
160
+ { name: matterbridgeInstanceName, rtype: 16 /* DnsRecordType.TXT */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: txtRdata },
126
161
  ];
127
- try {
128
- const ipv4 = mdns.getIpv4InterfaceAddress(mdns.interfaceName);
129
- if (ipv4) {
130
- answers.push({ name: hostName, rtype: 1, rclass: 1 | 32768, ttl, rdata: mdns.encodeA(ipv4) });
162
+ // Always attempt to add both A and all AAAA records (best effort), regardless of the socket family.
163
+ const interfaces = os.networkInterfaces();
164
+ // Use specified interface name if provided
165
+ let interfaceInfos = mdns.interfaceName ? interfaces[mdns.interfaceName] : undefined;
166
+ // Find the first non-internal IPv4 and IPv6 addresses if interface name is not provided or not found
167
+ if (!interfaceInfos) {
168
+ interfaceInfos = [];
169
+ for (const name of Object.keys(interfaces)) {
170
+ const infos = interfaces[name];
171
+ if (infos && infos.length > 0 && !infos[0].internal) {
172
+ interfaceInfos.push(...infos);
173
+ break;
174
+ }
131
175
  }
132
176
  }
133
- catch (error) {
134
- mdns.log.warn(`Error sending mDNS advertisement for matterbridge service A record: ${error.message}`);
135
- }
177
+ // Encode A and AAAA records for all non-internal addresses of the selected interface
136
178
  try {
137
- const ipv6 = mdns.getIpv6InterfaceAddress(mdns.interfaceName);
138
- if (ipv6) {
139
- answers.push({ name: hostName, rtype: 28, rclass: 1 | 32768, ttl, rdata: mdns.encodeAAAA(ipv6) });
179
+ for (const info of interfaceInfos) {
180
+ if (info.family === 'IPv4' && !info.internal) {
181
+ const ipv4 = info.address;
182
+ answers.push({ name: hostName, rtype: 1 /* DnsRecordType.A */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: mdns.encodeA(ipv4) });
183
+ }
184
+ else if (info.family === 'IPv6' && !info.internal) {
185
+ const ipv6 = info.address;
186
+ answers.push({ name: hostName, rtype: 28 /* DnsRecordType.AAAA */, rclass: 1 /* DnsClass.IN */ | 32768 /* DnsClassFlag.FLUSH */, ttl, rdata: mdns.encodeAAAA(ipv6) });
187
+ }
140
188
  }
141
189
  }
142
190
  catch (error) {
143
- mdns.log.warn(`Error sending mDNS advertisement for matterbridge service AAAA record: ${error.message}`);
191
+ mdns.log.error(`Error encoding network interface addresses: ${error.message}`);
144
192
  }
145
- const response = mdns.sendResponse(answers);
146
- if (hasParameter('broadcast')) {
147
- try {
148
- const address = mdns.socketType === 'udp4' ? mdns.getIpv4InterfaceAddress(mdns.interfaceName) : mdns.getIpv6InterfaceAddress(mdns.interfaceName);
149
- const mask = mdns.socketType === 'udp4' ? mdns.getNetmask(address) : undefined;
150
- const broadcastAddress = mdns.socketType === 'udp4' ? mdns.getIpv4BroadcastAddress(address, mask) : mdns.getIpv6BroadcastAddress();
151
- mdns.log.info(`***Broadcasting mDNS advertisement for matterbridge service to ${broadcastAddress}...`);
152
- mdns.socket.send(response, 0, response.length, MDNS_MULTICAST_PORT, broadcastAddress, (error) => {
153
- if (error) {
154
- mdns.log.error(`Error broadcasting mDNS advertisement to ${broadcastAddress}: ${error.message}`);
155
- }
156
- else {
157
- mdns.log.info(`**mDNS advertisement broadcasted successfully to ${broadcastAddress}`);
158
- }
159
- });
160
- }
161
- catch (error) {
162
- mdns.log.error(`Error broadcasting mDNS advertisement: ${error.message}`);
163
- }
164
- }
165
- if (mdns.socketType === 'udp4' && hasParameter('localhost')) {
166
- try {
167
- mdns.log.info(`**Sending mDNS advertisement for matterbridge service to localhost...`);
168
- mdns.socket.send(response, 0, response.length, MDNS_MULTICAST_PORT, 'localhost', (error) => {
169
- if (error) {
170
- mdns.log.error(`**Error sending mDNS advertisement to localhost: ${error.message}`);
171
- }
172
- else {
173
- mdns.log.info(`**mDNS advertisement sent successfully to localhost`);
174
- }
175
- });
176
- }
177
- catch (error) {
178
- mdns.log.error(`**Error sending mDNS advertisement to localhost: ${error.message}`);
179
- }
180
- }
181
- if (mdns.socketType === 'udp4' && getParameter('unicastIpv4')) {
182
- const unicastAddress = getParameter('unicastIpv4');
183
- try {
184
- mdns.log.info(`**Sending mDNS advertisement for matterbridge service to unicast ${unicastAddress}...`);
185
- mdns.socket.send(response, 0, response.length, MDNS_MULTICAST_PORT, unicastAddress, (error) => {
186
- if (error) {
187
- mdns.log.error(`Error sending mDNS advertisement to unicast ${unicastAddress}: ${error.message}`);
188
- }
189
- else {
190
- mdns.log.info(`**mDNS advertisement sent successfully to unicast ${unicastAddress}`);
191
- }
192
- });
193
+ const _response = mdns.sendResponse(answers);
194
+ };
195
+ if (!hasParameter('noIpv4') && !hasParameter('reflector-server') && !hasParameter('reflector-client')) {
196
+ mdnsIpv4 = new Mdns('mDNS Server udp4', MDNS_MULTICAST_IPV4_ADDRESS, MDNS_MULTICAST_PORT, 'udp4', true, getParameter('interfaceName'), getParameter('ipv4InterfaceAddress') || '0.0.0.0', getParameter('outgoingIpv4InterfaceAddress'));
197
+ if (hasParameter('v') || hasParameter('verbose'))
198
+ mdnsIpv4.listNetworkInterfaces();
199
+ // Apply filters if any
200
+ const filters = getStringArrayParameter('filter');
201
+ if (filters)
202
+ mdnsIpv4.filters.push(...filters);
203
+ // Start the IPv4 mDNS server
204
+ mdnsIpv4.start();
205
+ mdnsIpv4.on('ready', (address) => {
206
+ mdnsIpv4?.log.info(`mdnsIpv4 server ready on ${address.family} ${address.address}:${address.port}`);
207
+ if (hasParameter('advertise')) {
208
+ advertise(mdnsIpv4);
209
+ mdnsIpv4AdvertiseInterval = setInterval(() => advertise(mdnsIpv4), getIntParameter('advertise') || 10000).unref();
193
210
  }
194
- catch (error) {
195
- mdns.log.error(`Error sending mDNS advertisement to unicast ${unicastAddress}: ${error.message}`);
211
+ if (hasParameter('query')) {
212
+ query(mdnsIpv4);
213
+ mdnsIpv4QueryInterval = setInterval(() => query(mdnsIpv4), getIntParameter('query') || 10000).unref();
196
214
  }
197
- }
198
- if (mdns.socketType === 'udp6' && getParameter('unicastIpv6')) {
199
- const unicastAddress = getParameter('unicastIpv6');
200
- try {
201
- mdns.log.info(`**Sending mDNS advertisement for matterbridge service to unicast ${unicastAddress}...`);
202
- mdns.socket.send(response, 0, response.length, MDNS_MULTICAST_PORT, unicastAddress, (error) => {
203
- if (error) {
204
- mdns.log.error(`Error sending mDNS advertisement to unicast ${unicastAddress}: ${error.message}`);
205
- }
206
- else {
207
- mdns.log.info(`**mDNS advertisement sent successfully to unicast ${unicastAddress}`);
208
- }
209
- });
215
+ });
216
+ }
217
+ if (!hasParameter('noIpv6') && !hasParameter('reflector-server') && !hasParameter('reflector-client')) {
218
+ mdnsIpv6 = new Mdns('mDNS Server udp6', MDNS_MULTICAST_IPV6_ADDRESS, MDNS_MULTICAST_PORT, 'udp6', true, getParameter('interfaceName'), getParameter('ipv6InterfaceAddress') || '::', getParameter('outgoingIpv6InterfaceAddress'));
219
+ if (hasParameter('v') || hasParameter('verbose'))
220
+ mdnsIpv6.listNetworkInterfaces();
221
+ // Apply filters if any
222
+ const filters = getStringArrayParameter('filter');
223
+ if (filters)
224
+ mdnsIpv6.filters.push(...filters);
225
+ // Start the IPv6 mDNS server
226
+ mdnsIpv6.start();
227
+ mdnsIpv6.on('ready', (address) => {
228
+ mdnsIpv6?.log.info(`mdnsIpv6 server ready on ${address.family} ${address.address}:${address.port}`);
229
+ if (hasParameter('advertise')) {
230
+ advertise(mdnsIpv6);
231
+ mdnsIpv6AdvertiseInterval = setInterval(() => advertise(mdnsIpv6), getIntParameter('advertise') || 10000).unref();
210
232
  }
211
- catch (error) {
212
- mdns.log.error(`Error sending mDNS advertisement to unicast ${unicastAddress}: ${error.message}`);
233
+ if (hasParameter('query')) {
234
+ query(mdnsIpv6);
235
+ mdnsIpv6QueryInterval = setInterval(() => query(mdnsIpv6), getIntParameter('query') || 10000).unref();
213
236
  }
214
- }
215
- };
237
+ });
238
+ }
239
+ if (hasParameter('reflector-client')) {
240
+ reflectorClient = new MdnsReflectorClient();
241
+ await reflectorClient.start();
242
+ }
243
+ if (hasParameter('reflector-server')) {
244
+ reflectorServer = new MdnsReflectorServer();
245
+ await reflectorServer.start();
246
+ }
247
+ // Handle Ctrl+C (SIGINT) and SIGTERM to stop and log devices
216
248
  process.on('SIGINT', async () => {
217
249
  await cleanupAndLogAndExit();
218
250
  });
219
- mdnsIpv4.start();
220
- mdnsIpv4.on('ready', (address) => {
221
- mdnsIpv4.log.info(`mdnsIpv4 server ready on ${address.family} ${address.address}:${address.port}`);
222
- if (hasParameter('advertise')) {
223
- advertise(mdnsIpv4);
224
- mdnsIpv4AdvertiseInterval = setInterval(() => {
225
- advertise(mdnsIpv4);
226
- }, getIntParameter('advertise') || 10000).unref();
227
- }
228
- if (hasParameter('query')) {
229
- query(mdnsIpv4);
230
- mdnsIpv4QueryInterval = setInterval(() => {
231
- query(mdnsIpv4);
232
- }, getIntParameter('query') || 10000).unref();
233
- }
234
- });
235
- mdnsIpv6.start();
236
- mdnsIpv6.on('ready', (address) => {
237
- mdnsIpv6.log.info(`mdnsIpv6 server ready on ${address.family} ${address.address}:${address.port}`);
238
- if (hasParameter('advertise')) {
239
- advertise(mdnsIpv6);
240
- mdnsIpv6AdvertiseInterval = setInterval(() => {
241
- advertise(mdnsIpv6);
242
- }, getIntParameter('advertise') || 10000).unref();
243
- }
244
- if (hasParameter('query')) {
245
- query(mdnsIpv6);
246
- mdnsIpv6QueryInterval = setInterval(() => {
247
- query(mdnsIpv6);
248
- }, getIntParameter('query') || 10000).unref();
249
- }
250
- });
251
- unicast.start();
252
- unicast.on('ready', (address) => {
253
- unicast.log.info(`**Ready on ${address.family} ${address.address}:${address.port}`);
254
- });
255
- unicast.on('message', (msg, rinfo) => {
256
- unicast.log.info(`**Received message from ${rinfo.address}:${rinfo.port} - ${msg.length} bytes`);
257
- });
258
- setTimeout(async () => {
251
+ process.on('SIGTERM', async () => {
259
252
  await cleanupAndLogAndExit();
260
- }, 600000).unref();
253
+ });
254
+ // Exit after a timeout to avoid running indefinitely in test environments
255
+ if (!hasParameter('no-timeout') && !hasParameter('reflector-server') && !hasParameter('reflector-client')) {
256
+ setTimeout(async () => {
257
+ await cleanupAndLogAndExit();
258
+ }, 600000).unref(); // 10 minutes timeout to exit if no activity
259
+ }
261
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":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAIH,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,eAAe;AACf,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAE/G,cAAc;AACd,OAAO,EAAE,2BAA2B,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAC/G,OAAO,EAAyC,IAAI,EAAE,MAAM,WAAW,CAAC;AACxE,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,uBAAuB;AACvB,CAAC;IACC,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9C,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;QACjF,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyCf,CAAC,CAAC;QACC,6CAA6C;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,0DAA0D;IAC1D,MAAM,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAExF,IAAI,qBAAiD,CAAC;IACtD,IAAI,qBAAiD,CAAC;IACtD,IAAI,yBAAqD,CAAC;IAC1D,IAAI,yBAAqD,CAAC;IAE1D,IAAI,QAAQ,GAAqB,SAAS,CAAC;IAC3C,IAAI,QAAQ,GAAqB,SAAS,CAAC;IAE3C,IAAI,eAAe,GAAoC,SAAS,CAAC;IACjE,IAAI,eAAe,GAAoC,SAAS,CAAC;IAEjE;;OAEG;IACH,KAAK,UAAU,oBAAoB;QACjC,aAAa,CAAC,qBAAqB,CAAC,CAAC;QACrC,aAAa,CAAC,qBAAqB,CAAC,CAAC;QACrC,aAAa,CAAC,yBAAyB,CAAC,CAAC;QACzC,aAAa,CAAC,yBAAyB,CAAC,CAAC;QACzC,IAAI,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,IAAI,QAAQ;gBAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,0BAA0B;YAChE,IAAI,QAAQ;gBAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,0BAA0B;QAClE,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,sDAAsD;QAChH,QAAQ,EAAE,IAAI,EAAE,CAAC;QACjB,QAAQ,EAAE,IAAI,EAAE,CAAC;QACjB,QAAQ,EAAE,UAAU,EAAE,CAAC;QACvB,QAAQ,EAAE,UAAU,EAAE,CAAC;QACvB,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,2CAA2C;QAErG,MAAM,eAAe,EAAE,IAAI,EAAE,CAAC;QAC9B,MAAM,eAAe,EAAE,IAAI,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,IAAU,EAAE,EAAE;QAC3B,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QACpD,IAAI,CAAC,SAAS,CAAC;YACb,EAAE,IAAI,EAAE,qBAAqB,EAAE,IAAI,4BAAmB,EAAE,KAAK,qBAAa,EAAE,eAAe,EAAE,IAAI,EAAE;YACnG,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,4BAAmB,EAAE,KAAK,qBAAa,EAAE,eAAe,EAAE,IAAI,EAAE;YAClG,EAAE,IAAI,EAAE,0BAA0B,EAAE,IAAI,4BAAmB,EAAE,KAAK,qBAAa,EAAE,eAAe,EAAE,IAAI,EAAE;YACxG,EAAE,IAAI,EAAE,oBAAoB,EAAE,IAAI,4BAAmB,EAAE,KAAK,qBAAa,EAAE,eAAe,EAAE,IAAI,EAAE;YAClG,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,4BAAmB,EAAE,KAAK,qBAAa,EAAE,eAAe,EAAE,IAAI,EAAE;YAChG,EAAE,IAAI,EAAE,kBAAkB,EAAE,IAAI,4BAAmB,EAAE,KAAK,qBAAa,EAAE,eAAe,EAAE,IAAI,EAAE;YAChG,EAAE,IAAI,EAAE,8BAA8B,EAAE,IAAI,4BAAmB,EAAE,KAAK,qBAAa,EAAE,eAAe,EAAE,IAAI,EAAE;SAC7G,CAAC,CAAC;IACL,CAAC,CAAC;IAEF;;;;;OAKG;IACH,MAAM,SAAS,GAAG,CAAC,IAAU,EAAE,MAAc,GAAG,EAAE,EAAE;QAClD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,gEAAgE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,CAAC,CAAC;QACrH,MAAM,eAAe,GAAG,kBAAkB,CAAC;QAC3C,MAAM,uBAAuB,GAAG,0BAA0B,CAAC;QAC3D,MAAM,gBAAgB,GAAG,+BAA+B,CAAC;QACzD,MAAM,wBAAwB,GAAG,uCAAuC,CAAC;QACzE,MAAM,QAAQ,GAAG,oBAAoB,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC;QAElB,MAAM,uBAAuB,GAAG,IAAI,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;QACpE,MAAM,+BAA+B,GAAG,IAAI,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;QACpF,MAAM,oBAAoB,GAAG,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;QAClE,MAAM,4BAA4B,GAAG,IAAI,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;QAClF,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,WAAW,GAAG,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;QAE3E,MAAM,OAAO,GAAkF;YAC7F,8CAA8C;YAC9C,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,4BAAmB,EAAE,MAAM,qBAAa,EAAE,GAAG,EAAE,KAAK,EAAE,uBAAuB,EAAE;YAC5H,EAAE,IAAI,EAAE,eAAe,EAAE,KAAK,4BAAmB,EAAE,MAAM,qBAAa,EAAE,GAAG,EAAE,KAAK,EAAE,oBAAoB,EAAE;YAC1G,EAAE,IAAI,EAAE,8BAA8B,EAAE,KAAK,4BAAmB,EAAE,MAAM,qBAAa,EAAE,GAAG,EAAE,KAAK,EAAE,+BAA+B,EAAE;YACpI,EAAE,IAAI,EAAE,uBAAuB,EAAE,KAAK,4BAAmB,EAAE,MAAM,qBAAa,EAAE,GAAG,EAAE,KAAK,EAAE,4BAA4B,EAAE;YAC1H,mCAAmC;YACnC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,4BAAmB,EAAE,MAAM,EAAE,oDAAgC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;YACpH,2CAA2C;YAC3C,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,4BAAmB,EAAE,MAAM,EAAE,oDAAgC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;YAC5H,mCAAmC;YACnC,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,4BAAmB,EAAE,MAAM,EAAE,oDAAgC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;YACpH,2CAA2C;YAC3C,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,4BAAmB,EAAE,MAAM,EAAE,oDAAgC,EAAE,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE;SAC7H,CAAC;QACF,oGAAoG;QACpG,MAAM,UAAU,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAC;QAC1C,2CAA2C;QAC3C,IAAI,cAAc,GAA0C,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5H,qGAAqG;QACrG,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,cAAc,GAAG,EAAE,CAAC;YACpB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC3C,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC/B,IAAI,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC;oBACpD,cAAc,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;oBAC9B,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QACD,qFAAqF;QACrF,IAAI,CAAC;YACH,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE,CAAC;gBAClC,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC7C,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;oBAC1B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,yBAAiB,EAAE,MAAM,EAAE,oDAAgC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBACrI,CAAC;qBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACpD,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;oBAC1B,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,6BAAoB,EAAE,MAAM,EAAE,oDAAgC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;gBAC3I,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,+CAAgD,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5F,CAAC;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC,CAAC;IAEF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACtG,QAAQ,GAAG,IAAI,IAAI,CAAC,kBAAkB,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,eAAe,CAAC,EAAE,YAAY,CAAC,sBAAsB,CAAC,IAAI,SAAS,EAAE,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACxO,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC;YAAE,QAAQ,CAAC,qBAAqB,EAAE,CAAC;QAEnF,uBAAuB;QACvB,MAAM,OAAO,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,OAAO;YAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAE/C,6BAA6B;QAC7B,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,OAAoB,EAAE,EAAE;YAC5C,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACpG,IAAI,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9B,SAAS,CAAC,QAAgB,CAAC,CAAC;gBAC5B,yBAAyB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,QAAgB,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YAC5H,CAAC;YACD,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,KAAK,CAAC,QAAgB,CAAC,CAAC;gBACxB,qBAAqB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAgB,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YAChH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACtG,QAAQ,GAAG,IAAI,IAAI,CAAC,kBAAkB,EAAE,2BAA2B,EAAE,mBAAmB,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,CAAC,eAAe,CAAC,EAAE,YAAY,CAAC,sBAAsB,CAAC,IAAI,IAAI,EAAE,YAAY,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACnO,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,YAAY,CAAC,SAAS,CAAC;YAAE,QAAQ,CAAC,qBAAqB,EAAE,CAAC;QAEnF,uBAAuB;QACvB,MAAM,OAAO,GAAG,uBAAuB,CAAC,QAAQ,CAAC,CAAC;QAClD,IAAI,OAAO;YAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;QAE/C,6BAA6B;QAC7B,QAAQ,CAAC,KAAK,EAAE,CAAC;QACjB,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,OAAoB,EAAE,EAAE;YAC5C,QAAQ,EAAE,GAAG,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;YACpG,IAAI,YAAY,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC9B,SAAS,CAAC,QAAgB,CAAC,CAAC;gBAC5B,yBAAyB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,QAAgB,CAAC,EAAE,eAAe,CAAC,WAAW,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YAC5H,CAAC;YACD,IAAI,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,KAAK,CAAC,QAAgB,CAAC,CAAC;gBACxB,qBAAqB,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAgB,CAAC,EAAE,eAAe,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,CAAC,KAAK,EAAE,CAAC;YAChH,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,IAAI,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACrC,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC5C,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,IAAI,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACrC,eAAe,GAAG,IAAI,mBAAmB,EAAE,CAAC;QAC5C,MAAM,eAAe,CAAC,KAAK,EAAE,CAAC;IAChC,CAAC;IAED,6DAA6D;IAC7D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;QAC9B,MAAM,oBAAoB,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,IAAI,EAAE;QAC/B,MAAM,oBAAoB,EAAE,CAAC;IAC/B,CAAC,CAAC,CAAC;IAEH,0EAA0E;IAC1E,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,EAAE,CAAC;QAC1G,UAAU,CAAC,KAAK,IAAI,EAAE;YACpB,MAAM,oBAAoB,EAAE,CAAC;QAC/B,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,4CAA4C;IAClE,CAAC;AACH,CAAC"}