@smarthome.exchange/integrations 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1066) hide show
  1. package/changelog.md +131 -0
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/cli/classes.cliruntime.d.ts +1 -1
  4. package/dist_ts/cli/commands.discover.js +1 -1
  5. package/dist_ts/cli/commands.setup.d.ts +1 -1
  6. package/dist_ts/core/classes.configrecord.d.ts +15 -0
  7. package/dist_ts/core/classes.configrecord.js +93 -0
  8. package/dist_ts/core/classes.configstore.d.ts +38 -10
  9. package/dist_ts/core/classes.configstore.js +298 -32
  10. package/dist_ts/core/classes.discoveryengine.js +12 -2
  11. package/dist_ts/core/classes.runtimemanager.d.ts +6 -2
  12. package/dist_ts/core/classes.runtimemanager.js +74 -39
  13. package/dist_ts/core/classes.simplelocalintegration.js +1 -1
  14. package/dist_ts/core/errors.d.ts +2 -2
  15. package/dist_ts/core/errors.js +1 -1
  16. package/dist_ts/core/types.d.ts +13 -4
  17. package/dist_ts/index.d.ts +4 -1
  18. package/dist_ts/index.js +7 -1
  19. package/dist_ts/integrations/adguard/adguard.classes.client.js +1 -1
  20. package/dist_ts/integrations/adguard/adguard.classes.integration.d.ts +1 -1
  21. package/dist_ts/integrations/adguard/adguard.classes.integration.js +1 -1
  22. package/dist_ts/integrations/adguard/adguard.discovery.d.ts +1 -1
  23. package/dist_ts/integrations/adguard/adguard.mapper.js +1 -1
  24. package/dist_ts/integrations/agent_dvr/agent_dvr.classes.client.js +1 -1
  25. package/dist_ts/integrations/agent_dvr/agent_dvr.classes.integration.d.ts +1 -1
  26. package/dist_ts/integrations/agent_dvr/agent_dvr.classes.integration.js +1 -1
  27. package/dist_ts/integrations/agent_dvr/agent_dvr.discovery.d.ts +3 -3
  28. package/dist_ts/integrations/agent_dvr/agent_dvr.mapper.js +1 -1
  29. package/dist_ts/integrations/agent_dvr/agent_dvr.types.d.ts +1 -1
  30. package/dist_ts/integrations/airgradient/airgradient.classes.client.js +1 -1
  31. package/dist_ts/integrations/airgradient/airgradient.classes.integration.d.ts +1 -1
  32. package/dist_ts/integrations/airgradient/airgradient.classes.integration.js +1 -1
  33. package/dist_ts/integrations/airgradient/airgradient.discovery.d.ts +2 -2
  34. package/dist_ts/integrations/airos/airos.classes.client.js +1 -1
  35. package/dist_ts/integrations/airos/airos.classes.integration.d.ts +1 -1
  36. package/dist_ts/integrations/airos/airos.classes.integration.js +1 -1
  37. package/dist_ts/integrations/airos/airos.discovery.d.ts +4 -4
  38. package/dist_ts/integrations/airos/airos.discovery.js +1 -1
  39. package/dist_ts/integrations/airos/airos.mapper.js +1 -1
  40. package/dist_ts/integrations/amcrest/amcrest.classes.client.js +1 -1
  41. package/dist_ts/integrations/amcrest/amcrest.classes.integration.d.ts +1 -1
  42. package/dist_ts/integrations/amcrest/amcrest.classes.integration.js +1 -1
  43. package/dist_ts/integrations/amcrest/amcrest.discovery.d.ts +3 -3
  44. package/dist_ts/integrations/amcrest/amcrest.types.d.ts +5 -5
  45. package/dist_ts/integrations/android_ip_webcam/android_ip_webcam.classes.client.js +1 -1
  46. package/dist_ts/integrations/android_ip_webcam/android_ip_webcam.classes.integration.d.ts +1 -1
  47. package/dist_ts/integrations/android_ip_webcam/android_ip_webcam.classes.integration.js +1 -1
  48. package/dist_ts/integrations/android_ip_webcam/android_ip_webcam.discovery.d.ts +1 -1
  49. package/dist_ts/integrations/androidtv/androidtv.classes.client.js +1 -1
  50. package/dist_ts/integrations/androidtv/androidtv.classes.integration.d.ts +1 -1
  51. package/dist_ts/integrations/androidtv/androidtv.classes.integration.js +1 -1
  52. package/dist_ts/integrations/androidtv/androidtv.discovery.d.ts +3 -3
  53. package/dist_ts/integrations/androidtv_remote/androidtv_remote.classes.client.js +1 -1
  54. package/dist_ts/integrations/androidtv_remote/androidtv_remote.classes.integration.d.ts +1 -1
  55. package/dist_ts/integrations/androidtv_remote/androidtv_remote.classes.integration.js +1 -1
  56. package/dist_ts/integrations/androidtv_remote/androidtv_remote.discovery.d.ts +2 -2
  57. package/dist_ts/integrations/apcupsd/apcupsd.classes.client.js +1 -1
  58. package/dist_ts/integrations/apcupsd/apcupsd.classes.integration.d.ts +1 -1
  59. package/dist_ts/integrations/apcupsd/apcupsd.classes.integration.js +1 -1
  60. package/dist_ts/integrations/apcupsd/apcupsd.discovery.d.ts +1 -1
  61. package/dist_ts/integrations/apcupsd/apcupsd.mapper.js +1 -1
  62. package/dist_ts/integrations/arcam_fmj/arcam_fmj.classes.client.js +1 -1
  63. package/dist_ts/integrations/arcam_fmj/arcam_fmj.classes.integration.d.ts +1 -1
  64. package/dist_ts/integrations/arcam_fmj/arcam_fmj.classes.integration.js +1 -1
  65. package/dist_ts/integrations/arcam_fmj/arcam_fmj.discovery.d.ts +2 -2
  66. package/dist_ts/integrations/asuswrt/asuswrt.classes.client.js +1 -1
  67. package/dist_ts/integrations/asuswrt/asuswrt.classes.integration.d.ts +1 -1
  68. package/dist_ts/integrations/asuswrt/asuswrt.classes.integration.js +1 -1
  69. package/dist_ts/integrations/asuswrt/asuswrt.discovery.d.ts +1 -1
  70. package/dist_ts/integrations/asuswrt/asuswrt.mapper.js +1 -1
  71. package/dist_ts/integrations/axis/axis.classes.client.js +1 -1
  72. package/dist_ts/integrations/axis/axis.classes.integration.d.ts +1 -1
  73. package/dist_ts/integrations/axis/axis.classes.integration.js +1 -1
  74. package/dist_ts/integrations/axis/axis.discovery.d.ts +3 -3
  75. package/dist_ts/integrations/blebox/blebox.classes.client.js +1 -1
  76. package/dist_ts/integrations/blebox/blebox.classes.integration.d.ts +1 -1
  77. package/dist_ts/integrations/blebox/blebox.classes.integration.js +1 -1
  78. package/dist_ts/integrations/blebox/blebox.discovery.d.ts +2 -2
  79. package/dist_ts/integrations/bluesound/bluesound.classes.client.d.ts +9 -4
  80. package/dist_ts/integrations/bluesound/bluesound.classes.client.js +1 -1
  81. package/dist_ts/integrations/bluesound/bluesound.classes.integration.d.ts +1 -1
  82. package/dist_ts/integrations/bluesound/bluesound.classes.integration.js +1 -1
  83. package/dist_ts/integrations/bluesound/bluesound.discovery.d.ts +2 -2
  84. package/dist_ts/integrations/bluetooth_le_tracker/bluetooth_le_tracker.classes.client.js +1 -1
  85. package/dist_ts/integrations/bluetooth_le_tracker/bluetooth_le_tracker.classes.integration.d.ts +1 -1
  86. package/dist_ts/integrations/bluetooth_le_tracker/bluetooth_le_tracker.classes.integration.js +1 -1
  87. package/dist_ts/integrations/bluetooth_le_tracker/bluetooth_le_tracker.discovery.d.ts +2 -2
  88. package/dist_ts/integrations/bluetooth_le_tracker/bluetooth_le_tracker.mapper.js +1 -1
  89. package/dist_ts/integrations/bond/bond.classes.client.js +1 -1
  90. package/dist_ts/integrations/bond/bond.classes.integration.d.ts +1 -1
  91. package/dist_ts/integrations/bond/bond.classes.integration.js +1 -1
  92. package/dist_ts/integrations/bond/bond.discovery.d.ts +3 -3
  93. package/dist_ts/integrations/bond/bond.mapper.js +1 -1
  94. package/dist_ts/integrations/bond/bond.types.d.ts +71 -71
  95. package/dist_ts/integrations/bosch_shc/bosch_shc.classes.client.js +1 -1
  96. package/dist_ts/integrations/bosch_shc/bosch_shc.classes.integration.d.ts +1 -1
  97. package/dist_ts/integrations/bosch_shc/bosch_shc.classes.integration.js +1 -1
  98. package/dist_ts/integrations/bosch_shc/bosch_shc.discovery.d.ts +2 -2
  99. package/dist_ts/integrations/bosch_shc/bosch_shc.mapper.js +1 -1
  100. package/dist_ts/integrations/braviatv/braviatv.classes.client.js +1 -1
  101. package/dist_ts/integrations/braviatv/braviatv.classes.integration.d.ts +1 -1
  102. package/dist_ts/integrations/braviatv/braviatv.classes.integration.js +1 -1
  103. package/dist_ts/integrations/braviatv/braviatv.discovery.d.ts +3 -3
  104. package/dist_ts/integrations/broadlink/broadlink.classes.client.js +1 -1
  105. package/dist_ts/integrations/broadlink/broadlink.classes.integration.d.ts +1 -1
  106. package/dist_ts/integrations/broadlink/broadlink.classes.integration.js +1 -1
  107. package/dist_ts/integrations/broadlink/broadlink.discovery.d.ts +3 -3
  108. package/dist_ts/integrations/broadlink/broadlink.mapper.js +1 -1
  109. package/dist_ts/integrations/broadlink/broadlink.packet.d.ts +2 -2
  110. package/dist_ts/integrations/broadlink/broadlink.packet.js +1 -1
  111. package/dist_ts/integrations/brother/brother.classes.client.js +1 -1
  112. package/dist_ts/integrations/brother/brother.classes.integration.d.ts +1 -1
  113. package/dist_ts/integrations/brother/brother.classes.integration.js +1 -1
  114. package/dist_ts/integrations/brother/brother.constants.d.ts +12 -12
  115. package/dist_ts/integrations/brother/brother.discovery.d.ts +2 -2
  116. package/dist_ts/integrations/brother/brother.mapper.js +1 -1
  117. package/dist_ts/integrations/cast/cast.classes.client.js +1 -1
  118. package/dist_ts/integrations/cast/cast.classes.integration.d.ts +1 -1
  119. package/dist_ts/integrations/cast/cast.classes.integration.js +1 -1
  120. package/dist_ts/integrations/cast/cast.discovery.d.ts +2 -2
  121. package/dist_ts/integrations/channels/channels.classes.client.js +1 -1
  122. package/dist_ts/integrations/channels/channels.classes.integration.d.ts +1 -1
  123. package/dist_ts/integrations/channels/channels.classes.integration.js +1 -1
  124. package/dist_ts/integrations/channels/channels.discovery.d.ts +2 -2
  125. package/dist_ts/integrations/cisco_ios/cisco_ios.classes.client.js +1 -1
  126. package/dist_ts/integrations/cisco_ios/cisco_ios.classes.integration.d.ts +1 -1
  127. package/dist_ts/integrations/cisco_ios/cisco_ios.classes.integration.js +1 -1
  128. package/dist_ts/integrations/cisco_ios/cisco_ios.discovery.d.ts +2 -2
  129. package/dist_ts/integrations/cisco_ios/cisco_ios.mapper.js +1 -1
  130. package/dist_ts/integrations/daikin/daikin.classes.client.js +1 -1
  131. package/dist_ts/integrations/daikin/daikin.classes.integration.d.ts +1 -1
  132. package/dist_ts/integrations/daikin/daikin.classes.integration.js +1 -1
  133. package/dist_ts/integrations/daikin/daikin.discovery.d.ts +5 -5
  134. package/dist_ts/integrations/daikin/daikin.mapper.js +1 -1
  135. package/dist_ts/integrations/ddwrt/ddwrt.classes.client.js +1 -1
  136. package/dist_ts/integrations/ddwrt/ddwrt.classes.integration.d.ts +1 -1
  137. package/dist_ts/integrations/ddwrt/ddwrt.classes.integration.js +1 -1
  138. package/dist_ts/integrations/ddwrt/ddwrt.discovery.d.ts +3 -3
  139. package/dist_ts/integrations/ddwrt/ddwrt.mapper.js +1 -1
  140. package/dist_ts/integrations/deconz/deconz.classes.client.d.ts +31 -22
  141. package/dist_ts/integrations/deconz/deconz.classes.client.js +302 -153
  142. package/dist_ts/integrations/deconz/deconz.classes.configflow.js +43 -26
  143. package/dist_ts/integrations/deconz/deconz.classes.integration.d.ts +3 -1
  144. package/dist_ts/integrations/deconz/deconz.classes.integration.js +133 -20
  145. package/dist_ts/integrations/deconz/deconz.discovery.d.ts +4 -4
  146. package/dist_ts/integrations/deconz/deconz.mapper.d.ts +2 -1
  147. package/dist_ts/integrations/deconz/deconz.mapper.js +23 -18
  148. package/dist_ts/integrations/deconz/deconz.types.d.ts +34 -3
  149. package/dist_ts/integrations/deconz/deconz.validation.d.ts +14 -0
  150. package/dist_ts/integrations/deconz/deconz.validation.js +269 -0
  151. package/dist_ts/integrations/deluge/deluge.classes.client.js +1 -1
  152. package/dist_ts/integrations/deluge/deluge.classes.integration.d.ts +1 -1
  153. package/dist_ts/integrations/deluge/deluge.classes.integration.js +1 -1
  154. package/dist_ts/integrations/deluge/deluge.discovery.d.ts +2 -2
  155. package/dist_ts/integrations/denon/denon.classes.client.js +1 -1
  156. package/dist_ts/integrations/denon/denon.classes.integration.d.ts +1 -1
  157. package/dist_ts/integrations/denon/denon.classes.integration.js +1 -1
  158. package/dist_ts/integrations/denon/denon.discovery.d.ts +1 -1
  159. package/dist_ts/integrations/denonavr/denonavr.classes.client.js +1 -1
  160. package/dist_ts/integrations/denonavr/denonavr.classes.integration.d.ts +1 -1
  161. package/dist_ts/integrations/denonavr/denonavr.classes.integration.js +1 -1
  162. package/dist_ts/integrations/denonavr/denonavr.discovery.d.ts +3 -3
  163. package/dist_ts/integrations/devolo_home_network/devolo_home_network.classes.client.js +1 -1
  164. package/dist_ts/integrations/devolo_home_network/devolo_home_network.classes.integration.d.ts +1 -1
  165. package/dist_ts/integrations/devolo_home_network/devolo_home_network.classes.integration.js +1 -1
  166. package/dist_ts/integrations/devolo_home_network/devolo_home_network.discovery.d.ts +3 -3
  167. package/dist_ts/integrations/devolo_home_network/devolo_home_network.mapper.js +1 -1
  168. package/dist_ts/integrations/directv/directv.classes.client.js +1 -1
  169. package/dist_ts/integrations/directv/directv.classes.integration.d.ts +1 -1
  170. package/dist_ts/integrations/directv/directv.classes.integration.js +1 -1
  171. package/dist_ts/integrations/directv/directv.discovery.d.ts +2 -2
  172. package/dist_ts/integrations/directv/directv.types.d.ts +1 -1
  173. package/dist_ts/integrations/dlink/dlink.classes.client.d.ts +6 -3
  174. package/dist_ts/integrations/dlink/dlink.classes.client.js +1 -1
  175. package/dist_ts/integrations/dlink/dlink.classes.integration.d.ts +1 -1
  176. package/dist_ts/integrations/dlink/dlink.classes.integration.js +1 -1
  177. package/dist_ts/integrations/dlink/dlink.discovery.d.ts +2 -2
  178. package/dist_ts/integrations/dlink/dlink.mapper.js +1 -1
  179. package/dist_ts/integrations/dlna_dmr/dlna_dmr.classes.client.js +1 -1
  180. package/dist_ts/integrations/dlna_dmr/dlna_dmr.classes.integration.d.ts +1 -1
  181. package/dist_ts/integrations/dlna_dmr/dlna_dmr.classes.integration.js +1 -1
  182. package/dist_ts/integrations/dlna_dmr/dlna_dmr.discovery.d.ts +2 -2
  183. package/dist_ts/integrations/dlna_dms/dlna_dms.classes.client.js +1 -1
  184. package/dist_ts/integrations/dlna_dms/dlna_dms.classes.integration.d.ts +1 -1
  185. package/dist_ts/integrations/dlna_dms/dlna_dms.classes.integration.js +1 -1
  186. package/dist_ts/integrations/dlna_dms/dlna_dms.discovery.d.ts +2 -2
  187. package/dist_ts/integrations/doorbird/doorbird.classes.client.js +1 -1
  188. package/dist_ts/integrations/doorbird/doorbird.classes.integration.d.ts +1 -1
  189. package/dist_ts/integrations/doorbird/doorbird.classes.integration.js +1 -1
  190. package/dist_ts/integrations/doorbird/doorbird.discovery.d.ts +2 -2
  191. package/dist_ts/integrations/dsmr/dsmr.classes.client.js +1 -1
  192. package/dist_ts/integrations/dsmr/dsmr.classes.integration.d.ts +1 -1
  193. package/dist_ts/integrations/dsmr/dsmr.classes.integration.js +1 -1
  194. package/dist_ts/integrations/dsmr/dsmr.discovery.d.ts +1 -1
  195. package/dist_ts/integrations/dsmr/dsmr.parser.js +1 -1
  196. package/dist_ts/integrations/dunehd/dunehd.classes.client.js +1 -1
  197. package/dist_ts/integrations/dunehd/dunehd.classes.integration.d.ts +1 -1
  198. package/dist_ts/integrations/dunehd/dunehd.classes.integration.js +1 -1
  199. package/dist_ts/integrations/dunehd/dunehd.discovery.d.ts +3 -3
  200. package/dist_ts/integrations/edimax/edimax.classes.client.js +1 -1
  201. package/dist_ts/integrations/edl21/edl21.classes.client.js +1 -1
  202. package/dist_ts/integrations/egardia/egardia.classes.client.js +1 -1
  203. package/dist_ts/integrations/elgato/elgato.classes.client.js +1 -1
  204. package/dist_ts/integrations/elgato/elgato.classes.integration.d.ts +1 -1
  205. package/dist_ts/integrations/elgato/elgato.classes.integration.js +1 -1
  206. package/dist_ts/integrations/elgato/elgato.discovery.d.ts +3 -3
  207. package/dist_ts/integrations/emby/emby.classes.client.js +1 -1
  208. package/dist_ts/integrations/emby/emby.classes.integration.d.ts +1 -1
  209. package/dist_ts/integrations/emby/emby.classes.integration.js +1 -1
  210. package/dist_ts/integrations/emby/emby.discovery.d.ts +3 -3
  211. package/dist_ts/integrations/emoncms_history/emoncms_history.classes.client.js +1 -1
  212. package/dist_ts/integrations/emonitor/emonitor.classes.client.js +1 -1
  213. package/dist_ts/integrations/emulated_hue/emulated_hue.classes.client.js +1 -1
  214. package/dist_ts/integrations/emulated_kasa/emulated_kasa.classes.client.js +1 -1
  215. package/dist_ts/integrations/emulated_roku/emulated_roku.classes.client.js +1 -1
  216. package/dist_ts/integrations/energenie_power_sockets/energenie_power_sockets.classes.client.js +1 -1
  217. package/dist_ts/integrations/enigma2/enigma2.classes.client.js +1 -1
  218. package/dist_ts/integrations/enocean/enocean.classes.client.js +1 -1
  219. package/dist_ts/integrations/esphome/esphome.classes.client.d.ts +35 -18
  220. package/dist_ts/integrations/esphome/esphome.classes.client.js +267 -77
  221. package/dist_ts/integrations/esphome/esphome.classes.configflow.js +2 -4
  222. package/dist_ts/integrations/esphome/esphome.classes.integration.d.ts +22 -11
  223. package/dist_ts/integrations/esphome/esphome.classes.integration.js +68 -61
  224. package/dist_ts/integrations/esphome/esphome.discovery.d.ts +2 -2
  225. package/dist_ts/integrations/esphome/esphome.discovery.js +2 -2
  226. package/dist_ts/integrations/esphome/esphome.mapper.d.ts +1 -2
  227. package/dist_ts/integrations/esphome/esphome.mapper.js +79 -36
  228. package/dist_ts/integrations/esphome/esphome.types.d.ts +2 -0
  229. package/dist_ts/integrations/fibaro/fibaro.classes.client.js +1 -1
  230. package/dist_ts/integrations/file/file.classes.client.js +1 -1
  231. package/dist_ts/integrations/filesize/filesize.classes.client.js +1 -1
  232. package/dist_ts/integrations/flexit_bacnet/flexit_bacnet.classes.client.js +1 -1
  233. package/dist_ts/integrations/flic/flic.classes.client.js +1 -1
  234. package/dist_ts/integrations/flux_led/flux_led.classes.client.js +1 -1
  235. package/dist_ts/integrations/folder/folder.classes.client.js +1 -1
  236. package/dist_ts/integrations/folder_watcher/folder_watcher.classes.client.js +1 -1
  237. package/dist_ts/integrations/forked_daapd/forked_daapd.classes.client.js +1 -1
  238. package/dist_ts/integrations/forked_daapd/forked_daapd.classes.integration.d.ts +1 -1
  239. package/dist_ts/integrations/forked_daapd/forked_daapd.classes.integration.js +1 -1
  240. package/dist_ts/integrations/forked_daapd/forked_daapd.discovery.d.ts +2 -2
  241. package/dist_ts/integrations/foscam/foscam.classes.client.js +1 -1
  242. package/dist_ts/integrations/foscam/foscam.classes.integration.d.ts +1 -1
  243. package/dist_ts/integrations/foscam/foscam.classes.integration.js +1 -1
  244. package/dist_ts/integrations/foscam/foscam.discovery.d.ts +3 -3
  245. package/dist_ts/integrations/foscam/foscam.types.d.ts +2 -2
  246. package/dist_ts/integrations/freebox/freebox.classes.client.js +1 -1
  247. package/dist_ts/integrations/freebox/freebox.classes.integration.d.ts +1 -1
  248. package/dist_ts/integrations/freebox/freebox.classes.integration.js +1 -1
  249. package/dist_ts/integrations/freebox/freebox.discovery.d.ts +2 -2
  250. package/dist_ts/integrations/freebox/freebox.mapper.js +1 -1
  251. package/dist_ts/integrations/freebox/freebox.types.d.ts +11 -11
  252. package/dist_ts/integrations/fritz/fritz.classes.client.js +1 -1
  253. package/dist_ts/integrations/fritz/fritz.classes.integration.d.ts +1 -1
  254. package/dist_ts/integrations/fritz/fritz.classes.integration.js +1 -1
  255. package/dist_ts/integrations/fritz/fritz.discovery.d.ts +3 -3
  256. package/dist_ts/integrations/fritz/fritz.mapper.js +1 -1
  257. package/dist_ts/integrations/fritzbox_callmonitor/fritzbox_callmonitor.classes.client.js +1 -1
  258. package/dist_ts/integrations/fritzbox_callmonitor/fritzbox_callmonitor.classes.integration.d.ts +1 -1
  259. package/dist_ts/integrations/fritzbox_callmonitor/fritzbox_callmonitor.classes.integration.js +1 -1
  260. package/dist_ts/integrations/fritzbox_callmonitor/fritzbox_callmonitor.discovery.d.ts +3 -3
  261. package/dist_ts/integrations/fritzbox_callmonitor/fritzbox_callmonitor.mapper.js +1 -1
  262. package/dist_ts/integrations/fronius/fronius.classes.client.js +1 -1
  263. package/dist_ts/integrations/fronius/fronius.classes.integration.d.ts +1 -1
  264. package/dist_ts/integrations/fronius/fronius.classes.integration.js +1 -1
  265. package/dist_ts/integrations/fronius/fronius.discovery.d.ts +2 -2
  266. package/dist_ts/integrations/fronius/fronius.mapper.js +1 -1
  267. package/dist_ts/integrations/frontier_silicon/frontier_silicon.classes.client.js +1 -1
  268. package/dist_ts/integrations/frontier_silicon/frontier_silicon.classes.integration.d.ts +1 -1
  269. package/dist_ts/integrations/frontier_silicon/frontier_silicon.classes.integration.js +1 -1
  270. package/dist_ts/integrations/frontier_silicon/frontier_silicon.discovery.d.ts +2 -2
  271. package/dist_ts/integrations/fully_kiosk/fully_kiosk.classes.client.js +1 -1
  272. package/dist_ts/integrations/fully_kiosk/fully_kiosk.classes.integration.d.ts +1 -1
  273. package/dist_ts/integrations/fully_kiosk/fully_kiosk.classes.integration.js +1 -1
  274. package/dist_ts/integrations/fully_kiosk/fully_kiosk.discovery.d.ts +2 -2
  275. package/dist_ts/integrations/fully_kiosk/fully_kiosk.mapper.js +1 -1
  276. package/dist_ts/integrations/generated/index.d.ts +1 -1
  277. package/dist_ts/integrations/generated/index.js +5 -7
  278. package/dist_ts/integrations/generic/generic.classes.client.js +1 -1
  279. package/dist_ts/integrations/geniushub/geniushub.classes.client.js +1 -1
  280. package/dist_ts/integrations/glances/glances.classes.client.js +1 -1
  281. package/dist_ts/integrations/glances/glances.classes.integration.d.ts +1 -1
  282. package/dist_ts/integrations/glances/glances.classes.integration.js +1 -1
  283. package/dist_ts/integrations/glances/glances.discovery.d.ts +2 -2
  284. package/dist_ts/integrations/go2rtc/go2rtc.classes.client.js +1 -1
  285. package/dist_ts/integrations/go2rtc/go2rtc.classes.integration.d.ts +1 -1
  286. package/dist_ts/integrations/go2rtc/go2rtc.classes.integration.js +1 -1
  287. package/dist_ts/integrations/go2rtc/go2rtc.discovery.d.ts +2 -2
  288. package/dist_ts/integrations/go2rtc/go2rtc.mapper.js +1 -1
  289. package/dist_ts/integrations/goalzero/goalzero.classes.client.js +1 -1
  290. package/dist_ts/integrations/gogogate2/gogogate2.classes.client.js +1 -1
  291. package/dist_ts/integrations/goodwe/goodwe.classes.client.js +1 -1
  292. package/dist_ts/integrations/goodwe/goodwe.classes.integration.d.ts +1 -1
  293. package/dist_ts/integrations/goodwe/goodwe.classes.integration.js +1 -1
  294. package/dist_ts/integrations/goodwe/goodwe.discovery.d.ts +1 -1
  295. package/dist_ts/integrations/goodwe/goodwe.types.d.ts +8 -8
  296. package/dist_ts/integrations/google_wifi/google_wifi.classes.client.js +1 -1
  297. package/dist_ts/integrations/govee_ble/govee_ble.classes.client.js +1 -1
  298. package/dist_ts/integrations/govee_light_local/govee_light_local.classes.client.js +1 -1
  299. package/dist_ts/integrations/gpsd/gpsd.classes.client.js +1 -1
  300. package/dist_ts/integrations/graphite/graphite.classes.client.js +1 -1
  301. package/dist_ts/integrations/gree/gree.classes.client.js +1 -1
  302. package/dist_ts/integrations/harman_kardon_avr/harman_kardon_avr.classes.client.js +1 -1
  303. package/dist_ts/integrations/harman_kardon_avr/harman_kardon_avr.classes.integration.d.ts +1 -1
  304. package/dist_ts/integrations/harman_kardon_avr/harman_kardon_avr.classes.integration.js +1 -1
  305. package/dist_ts/integrations/harman_kardon_avr/harman_kardon_avr.discovery.d.ts +1 -1
  306. package/dist_ts/integrations/harman_kardon_avr/harman_kardon_avr.types.d.ts +12 -12
  307. package/dist_ts/integrations/harmony/harmony.classes.client.js +1 -1
  308. package/dist_ts/integrations/harmony/harmony.classes.integration.d.ts +1 -1
  309. package/dist_ts/integrations/harmony/harmony.classes.integration.js +1 -1
  310. package/dist_ts/integrations/harmony/harmony.discovery.d.ts +2 -2
  311. package/dist_ts/integrations/hddtemp/hddtemp.classes.client.js +1 -1
  312. package/dist_ts/integrations/hddtemp/hddtemp.classes.integration.d.ts +1 -1
  313. package/dist_ts/integrations/hddtemp/hddtemp.classes.integration.js +1 -1
  314. package/dist_ts/integrations/hddtemp/hddtemp.discovery.d.ts +2 -2
  315. package/dist_ts/integrations/hdfury/hdfury.classes.client.js +1 -1
  316. package/dist_ts/integrations/hdmi_cec/hdmi_cec.classes.client.js +1 -1
  317. package/dist_ts/integrations/heatmiser/heatmiser.classes.client.js +1 -1
  318. package/dist_ts/integrations/hegel/hegel.classes.client.js +1 -1
  319. package/dist_ts/integrations/heos/heos.classes.client.js +1 -1
  320. package/dist_ts/integrations/heos/heos.classes.integration.d.ts +1 -1
  321. package/dist_ts/integrations/heos/heos.classes.integration.js +1 -1
  322. package/dist_ts/integrations/heos/heos.discovery.d.ts +3 -3
  323. package/dist_ts/integrations/hikvision/hikvision.classes.client.js +1 -1
  324. package/dist_ts/integrations/hikvision/hikvision.classes.integration.d.ts +1 -1
  325. package/dist_ts/integrations/hikvision/hikvision.classes.integration.js +1 -1
  326. package/dist_ts/integrations/hikvision/hikvision.discovery.d.ts +3 -3
  327. package/dist_ts/integrations/hikvisioncam/hikvisioncam.classes.client.js +1 -1
  328. package/dist_ts/integrations/hisense_aehw4a1/hisense_aehw4a1.classes.client.js +1 -1
  329. package/dist_ts/integrations/hitron_coda/hitron_coda.classes.client.js +1 -1
  330. package/dist_ts/integrations/hlk_sw16/hlk_sw16.classes.client.js +1 -1
  331. package/dist_ts/integrations/holiday/holiday.classes.client.js +1 -1
  332. package/dist_ts/integrations/homeassistant/homeassistant.classes.client.d.ts +7 -1
  333. package/dist_ts/integrations/homeassistant/homeassistant.classes.client.js +174 -50
  334. package/dist_ts/integrations/homeassistant/homeassistant.classes.integration.d.ts +1 -1
  335. package/dist_ts/integrations/homeassistant/homeassistant.classes.integration.js +1 -1
  336. package/dist_ts/integrations/homeassistant/homeassistant.classes.runtime.d.ts +2 -0
  337. package/dist_ts/integrations/homeassistant/homeassistant.classes.runtime.js +35 -3
  338. package/dist_ts/integrations/homeassistant/homeassistant.mapper.d.ts +4 -4
  339. package/dist_ts/integrations/homeassistant/homeassistant.mapper.js +25 -36
  340. package/dist_ts/integrations/homeassistant/homeassistant.types.d.ts +10 -0
  341. package/dist_ts/integrations/homeassistant/homeassistant.validation.d.ts +9 -0
  342. package/dist_ts/integrations/homeassistant/homeassistant.validation.js +137 -0
  343. package/dist_ts/integrations/homee/homee.classes.client.js +1 -1
  344. package/dist_ts/integrations/homekit_controller/homekit_controller.classes.client.js +1 -1
  345. package/dist_ts/integrations/homekit_controller/homekit_controller.classes.integration.d.ts +1 -1
  346. package/dist_ts/integrations/homekit_controller/homekit_controller.classes.integration.js +1 -1
  347. package/dist_ts/integrations/homekit_controller/homekit_controller.discovery.d.ts +2 -2
  348. package/dist_ts/integrations/homekit_controller/homekit_controller.mapper.js +1 -1
  349. package/dist_ts/integrations/homematic/homematic.classes.client.d.ts +2 -2
  350. package/dist_ts/integrations/homematic/homematic.classes.client.js +1 -1
  351. package/dist_ts/integrations/homematic/homematic.classes.integration.d.ts +1 -1
  352. package/dist_ts/integrations/homematic/homematic.classes.integration.js +1 -1
  353. package/dist_ts/integrations/homematic/homematic.constants.d.ts +2 -2
  354. package/dist_ts/integrations/homematic/homematic.discovery.d.ts +2 -2
  355. package/dist_ts/integrations/homewizard/homewizard.classes.client.js +1 -1
  356. package/dist_ts/integrations/homewizard/homewizard.classes.integration.d.ts +3 -3
  357. package/dist_ts/integrations/homewizard/homewizard.classes.integration.js +1 -1
  358. package/dist_ts/integrations/homewizard/homewizard.discovery.d.ts +3 -3
  359. package/dist_ts/integrations/homewizard/homewizard.mapper.js +1 -1
  360. package/dist_ts/integrations/homewizard/homewizard.types.d.ts +10 -10
  361. package/dist_ts/integrations/huawei_lte/huawei_lte.classes.client.js +1 -1
  362. package/dist_ts/integrations/huawei_lte/huawei_lte.classes.integration.d.ts +2 -2
  363. package/dist_ts/integrations/huawei_lte/huawei_lte.classes.integration.js +1 -1
  364. package/dist_ts/integrations/huawei_lte/huawei_lte.discovery.d.ts +3 -3
  365. package/dist_ts/integrations/huawei_lte/huawei_lte.mapper.js +1 -1
  366. package/dist_ts/integrations/huawei_lte/huawei_lte.types.d.ts +1 -1
  367. package/dist_ts/integrations/hue/hue.classes.client.d.ts +13 -5
  368. package/dist_ts/integrations/hue/hue.classes.client.js +278 -23
  369. package/dist_ts/integrations/hue/hue.classes.configflow.js +34 -14
  370. package/dist_ts/integrations/hue/hue.classes.integration.d.ts +2 -1
  371. package/dist_ts/integrations/hue/hue.classes.integration.js +85 -25
  372. package/dist_ts/integrations/hue/hue.discovery.d.ts +2 -2
  373. package/dist_ts/integrations/hue/hue.discovery.js +79 -26
  374. package/dist_ts/integrations/hue/hue.mapper.d.ts +0 -1
  375. package/dist_ts/integrations/hue/hue.mapper.js +26 -54
  376. package/dist_ts/integrations/hue/hue.types.d.ts +14 -7
  377. package/dist_ts/integrations/hue/hue.validation.d.ts +11 -0
  378. package/dist_ts/integrations/hue/hue.validation.js +160 -0
  379. package/dist_ts/integrations/hunterdouglas_powerview/hunterdouglas_powerview.classes.client.js +1 -1
  380. package/dist_ts/integrations/hunterdouglas_powerview/hunterdouglas_powerview.classes.integration.d.ts +2 -2
  381. package/dist_ts/integrations/hunterdouglas_powerview/hunterdouglas_powerview.classes.integration.js +1 -1
  382. package/dist_ts/integrations/hunterdouglas_powerview/hunterdouglas_powerview.discovery.d.ts +3 -3
  383. package/dist_ts/integrations/hunterdouglas_powerview/hunterdouglas_powerview.types.d.ts +1 -1
  384. package/dist_ts/integrations/hyperion/hyperion.classes.client.js +1 -1
  385. package/dist_ts/integrations/hyperion/hyperion.classes.integration.d.ts +1 -1
  386. package/dist_ts/integrations/hyperion/hyperion.classes.integration.js +1 -1
  387. package/dist_ts/integrations/hyperion/hyperion.discovery.d.ts +3 -3
  388. package/dist_ts/integrations/hyperion/hyperion.types.d.ts +1 -1
  389. package/dist_ts/integrations/imeon_inverter/imeon_inverter.classes.client.js +1 -1
  390. package/dist_ts/integrations/immich/immich.classes.client.js +1 -1
  391. package/dist_ts/integrations/incomfort/incomfort.classes.integration.js +1 -1
  392. package/dist_ts/integrations/indevolt/indevolt.classes.integration.js +1 -1
  393. package/dist_ts/integrations/index.d.ts +4 -1
  394. package/dist_ts/integrations/index.js +5 -2
  395. package/dist_ts/integrations/influxdb/influxdb.classes.client.js +1 -1
  396. package/dist_ts/integrations/intellifire/intellifire.classes.client.js +1 -1
  397. package/dist_ts/integrations/intellifire/intellifire.mapper.js +1 -1
  398. package/dist_ts/integrations/iometer/iometer.classes.client.js +1 -1
  399. package/dist_ts/integrations/iometer/iometer.mapper.js +1 -1
  400. package/dist_ts/integrations/iotawatt/iotawatt.classes.client.js +1 -1
  401. package/dist_ts/integrations/iperf3/iperf3.classes.client.js +1 -1
  402. package/dist_ts/integrations/ipp/ipp.classes.client.js +1 -1
  403. package/dist_ts/integrations/ipp/ipp.classes.integration.d.ts +1 -1
  404. package/dist_ts/integrations/ipp/ipp.classes.integration.js +1 -1
  405. package/dist_ts/integrations/ipp/ipp.discovery.d.ts +2 -2
  406. package/dist_ts/integrations/iron_os/iron_os.classes.client.js +1 -1
  407. package/dist_ts/integrations/iskra/iskra.classes.client.js +1 -1
  408. package/dist_ts/integrations/iskra/iskra.mapper.js +1 -1
  409. package/dist_ts/integrations/itunes/itunes.classes.client.js +1 -1
  410. package/dist_ts/integrations/jellyfin/jellyfin.classes.client.js +1 -1
  411. package/dist_ts/integrations/jellyfin/jellyfin.classes.integration.d.ts +1 -1
  412. package/dist_ts/integrations/jellyfin/jellyfin.classes.integration.js +1 -1
  413. package/dist_ts/integrations/jellyfin/jellyfin.discovery.d.ts +3 -3
  414. package/dist_ts/integrations/jvc_projector/jvc_projector.classes.client.js +1 -1
  415. package/dist_ts/integrations/kaleidescape/kaleidescape.classes.client.js +1 -1
  416. package/dist_ts/integrations/kankun/kankun.classes.client.js +1 -1
  417. package/dist_ts/integrations/keenetic_ndms2/keenetic_ndms2.classes.client.js +1 -1
  418. package/dist_ts/integrations/kef/kef.classes.client.js +1 -1
  419. package/dist_ts/integrations/kiosker/kiosker.classes.client.js +1 -1
  420. package/dist_ts/integrations/kira/kira.classes.client.js +1 -1
  421. package/dist_ts/integrations/kmtronic/kmtronic.classes.client.js +1 -1
  422. package/dist_ts/integrations/knx/knx.classes.client.js +1 -1
  423. package/dist_ts/integrations/knx/knx.classes.integration.d.ts +1 -1
  424. package/dist_ts/integrations/knx/knx.classes.integration.js +1 -1
  425. package/dist_ts/integrations/knx/knx.discovery.d.ts +3 -3
  426. package/dist_ts/integrations/knx/knx.mapper.d.ts +1 -1
  427. package/dist_ts/integrations/knx/knx.mapper.js +1 -1
  428. package/dist_ts/integrations/kodi/kodi.classes.client.d.ts +2 -2
  429. package/dist_ts/integrations/kodi/kodi.classes.client.js +1 -1
  430. package/dist_ts/integrations/kodi/kodi.classes.integration.d.ts +1 -1
  431. package/dist_ts/integrations/kodi/kodi.classes.integration.js +1 -1
  432. package/dist_ts/integrations/kodi/kodi.discovery.d.ts +2 -2
  433. package/dist_ts/integrations/konnected/konnected.classes.client.js +1 -1
  434. package/dist_ts/integrations/kostal_plenticore/kostal_plenticore.classes.client.js +1 -1
  435. package/dist_ts/integrations/kostal_plenticore/kostal_plenticore.mapper.js +1 -1
  436. package/dist_ts/integrations/kwb/kwb.classes.client.js +1 -1
  437. package/dist_ts/integrations/kwb/kwb.mapper.js +1 -1
  438. package/dist_ts/integrations/lametric/lametric.classes.client.js +1 -1
  439. package/dist_ts/integrations/landisgyr_heat_meter/landisgyr_heat_meter.mapper.js +1 -1
  440. package/dist_ts/integrations/lcn/lcn.classes.client.js +1 -1
  441. package/dist_ts/integrations/lektrico/lektrico.classes.client.js +1 -1
  442. package/dist_ts/integrations/lektrico/lektrico.types.d.ts +4 -4
  443. package/dist_ts/integrations/lg_netcast/lg_netcast.classes.client.js +1 -1
  444. package/dist_ts/integrations/lg_soundbar/lg_soundbar.classes.client.js +1 -1
  445. package/dist_ts/integrations/libre_hardware_monitor/libre_hardware_monitor.classes.client.js +1 -1
  446. package/dist_ts/integrations/lidarr/lidarr.classes.client.js +1 -1
  447. package/dist_ts/integrations/lifx/lifx.classes.client.d.ts +10 -4
  448. package/dist_ts/integrations/lifx/lifx.classes.client.js +94 -6
  449. package/dist_ts/integrations/lifx/lifx.classes.configflow.d.ts +3 -3
  450. package/dist_ts/integrations/lifx/lifx.classes.configflow.js +37 -6
  451. package/dist_ts/integrations/lifx/lifx.classes.integration.d.ts +19 -4
  452. package/dist_ts/integrations/lifx/lifx.classes.integration.js +152 -7
  453. package/dist_ts/integrations/lifx/lifx.discovery.d.ts +2 -1
  454. package/dist_ts/integrations/lifx/lifx.discovery.js +26 -4
  455. package/dist_ts/integrations/lifx/lifx.mapper.d.ts +7 -8
  456. package/dist_ts/integrations/lifx/lifx.mapper.js +42 -12
  457. package/dist_ts/integrations/lifx/lifx.types.d.ts +61 -9
  458. package/dist_ts/integrations/lifx/lifx.types.js +9 -116
  459. package/dist_ts/integrations/lifx/lifx.validation.d.ts +10 -0
  460. package/dist_ts/integrations/lifx/lifx.validation.js +83 -0
  461. package/dist_ts/integrations/linkplay/linkplay.classes.client.js +1 -1
  462. package/dist_ts/integrations/linkplay/linkplay.classes.integration.d.ts +1 -1
  463. package/dist_ts/integrations/linkplay/linkplay.classes.integration.js +1 -1
  464. package/dist_ts/integrations/linkplay/linkplay.discovery.d.ts +3 -3
  465. package/dist_ts/integrations/linksys_smart/linksys_smart.classes.client.js +1 -1
  466. package/dist_ts/integrations/livisi/livisi.classes.client.js +1 -1
  467. package/dist_ts/integrations/local_calendar/local_calendar.classes.client.js +1 -1
  468. package/dist_ts/integrations/local_file/local_file.classes.client.js +1 -1
  469. package/dist_ts/integrations/local_ip/local_ip.classes.client.js +1 -1
  470. package/dist_ts/integrations/local_todo/local_todo.classes.client.js +1 -1
  471. package/dist_ts/integrations/lookin/lookin.classes.client.js +1 -1
  472. package/dist_ts/integrations/loqed/loqed.classes.client.js +1 -1
  473. package/dist_ts/integrations/loqed/loqed.mapper.d.ts +1 -1
  474. package/dist_ts/integrations/loqed/loqed.mapper.js +1 -1
  475. package/dist_ts/integrations/luci/luci.classes.client.js +1 -1
  476. package/dist_ts/integrations/luci/luci.mapper.js +1 -1
  477. package/dist_ts/integrations/lunatone/lunatone.classes.client.js +1 -1
  478. package/dist_ts/integrations/lunatone/lunatone.mapper.js +1 -1
  479. package/dist_ts/integrations/madvr/madvr.classes.client.js +1 -1
  480. package/dist_ts/integrations/madvr/madvr.classes.integration.d.ts +1 -1
  481. package/dist_ts/integrations/madvr/madvr.classes.integration.js +1 -1
  482. package/dist_ts/integrations/madvr/madvr.discovery.d.ts +2 -2
  483. package/dist_ts/integrations/marytts/marytts.classes.client.js +1 -1
  484. package/dist_ts/integrations/marytts/marytts.classes.integration.js +1 -1
  485. package/dist_ts/integrations/matter/matter.classes.client.js +1 -1
  486. package/dist_ts/integrations/matter/matter.classes.integration.d.ts +1 -1
  487. package/dist_ts/integrations/matter/matter.classes.integration.js +1 -1
  488. package/dist_ts/integrations/matter/matter.discovery.d.ts +2 -2
  489. package/dist_ts/integrations/matter/matter.mapper.js +1 -1
  490. package/dist_ts/integrations/maxcube/maxcube.classes.client.js +1 -1
  491. package/dist_ts/integrations/mcp/mcp.classes.client.js +1 -1
  492. package/dist_ts/integrations/mcp_server/mcp_server.classes.client.js +1 -1
  493. package/dist_ts/integrations/mealie/mealie.classes.client.js +1 -1
  494. package/dist_ts/integrations/mealie/mealie.mapper.js +1 -1
  495. package/dist_ts/integrations/medcom_ble/medcom_ble.classes.client.js +1 -1
  496. package/dist_ts/integrations/medcom_ble/medcom_ble.mapper.js +1 -1
  497. package/dist_ts/integrations/mediaroom/mediaroom.classes.client.js +1 -1
  498. package/dist_ts/integrations/mediaroom/mediaroom.mapper.js +1 -1
  499. package/dist_ts/integrations/mfi/mfi.mapper.js +1 -1
  500. package/dist_ts/integrations/mikrotik/mikrotik.classes.client.js +1 -1
  501. package/dist_ts/integrations/mikrotik/mikrotik.classes.integration.d.ts +1 -1
  502. package/dist_ts/integrations/mikrotik/mikrotik.classes.integration.js +1 -1
  503. package/dist_ts/integrations/mikrotik/mikrotik.discovery.d.ts +1 -1
  504. package/dist_ts/integrations/mikrotik/mikrotik.mapper.js +1 -1
  505. package/dist_ts/integrations/mill/mill.classes.client.js +1 -1
  506. package/dist_ts/integrations/mill/mill.mapper.js +1 -1
  507. package/dist_ts/integrations/minecraft_server/minecraft_server.classes.client.js +1 -1
  508. package/dist_ts/integrations/mjpeg/mjpeg.classes.client.js +1 -1
  509. package/dist_ts/integrations/mobile_app/mobile_app.classes.client.js +1 -1
  510. package/dist_ts/integrations/mochad/mochad.classes.client.js +1 -1
  511. package/dist_ts/integrations/modbus/modbus.classes.client.js +1 -1
  512. package/dist_ts/integrations/modbus/modbus.classes.integration.d.ts +1 -1
  513. package/dist_ts/integrations/modbus/modbus.classes.integration.js +1 -1
  514. package/dist_ts/integrations/modbus/modbus.discovery.d.ts +1 -1
  515. package/dist_ts/integrations/modern_forms/modern_forms.classes.client.js +1 -1
  516. package/dist_ts/integrations/moehlenhoff_alpha2/moehlenhoff_alpha2.classes.client.js +1 -1
  517. package/dist_ts/integrations/monoprice/monoprice.classes.client.js +1 -1
  518. package/dist_ts/integrations/motioneye/motioneye.classes.client.js +1 -1
  519. package/dist_ts/integrations/motioneye/motioneye.classes.integration.d.ts +1 -1
  520. package/dist_ts/integrations/motioneye/motioneye.classes.integration.js +1 -1
  521. package/dist_ts/integrations/motioneye/motioneye.discovery.d.ts +2 -2
  522. package/dist_ts/integrations/motioneye/motioneye.types.d.ts +1 -1
  523. package/dist_ts/integrations/motionmount/motionmount.classes.client.js +1 -1
  524. package/dist_ts/integrations/mpd/mpd.classes.client.js +1 -1
  525. package/dist_ts/integrations/mpd/mpd.classes.integration.d.ts +1 -1
  526. package/dist_ts/integrations/mpd/mpd.classes.integration.js +1 -1
  527. package/dist_ts/integrations/mpd/mpd.discovery.d.ts +2 -2
  528. package/dist_ts/integrations/mqtt/mqtt.classes.client.d.ts +54 -9
  529. package/dist_ts/integrations/mqtt/mqtt.classes.client.js +443 -352
  530. package/dist_ts/integrations/mqtt/mqtt.classes.configflow.d.ts +0 -1
  531. package/dist_ts/integrations/mqtt/mqtt.classes.configflow.js +23 -18
  532. package/dist_ts/integrations/mqtt/mqtt.classes.integration.d.ts +1 -1
  533. package/dist_ts/integrations/mqtt/mqtt.classes.integration.js +140 -37
  534. package/dist_ts/integrations/mqtt/mqtt.discovery.d.ts +2 -2
  535. package/dist_ts/integrations/mqtt/mqtt.mapper.d.ts +7 -1
  536. package/dist_ts/integrations/mqtt/mqtt.mapper.js +161 -48
  537. package/dist_ts/integrations/mqtt/mqtt.types.d.ts +17 -0
  538. package/dist_ts/integrations/mqtt_eventstream/mqtt_eventstream.classes.client.js +1 -1
  539. package/dist_ts/integrations/mqtt_json/mqtt_json.classes.client.js +1 -1
  540. package/dist_ts/integrations/mqtt_room/mqtt_room.classes.client.js +1 -1
  541. package/dist_ts/integrations/music_assistant/music_assistant.classes.client.js +1 -1
  542. package/dist_ts/integrations/music_assistant/music_assistant.mapper.js +1 -1
  543. package/dist_ts/integrations/mutesync/mutesync.classes.client.js +1 -1
  544. package/dist_ts/integrations/mutesync/mutesync.mapper.js +1 -1
  545. package/dist_ts/integrations/mycroft/mycroft.classes.client.js +1 -1
  546. package/dist_ts/integrations/mysensors/mysensors.classes.client.js +1 -1
  547. package/dist_ts/integrations/mystrom/mystrom.classes.client.js +1 -1
  548. package/dist_ts/integrations/nad/nad.classes.client.js +1 -1
  549. package/dist_ts/integrations/nam/nam.classes.client.js +1 -1
  550. package/dist_ts/integrations/nanoleaf/nanoleaf.classes.client.js +1 -1
  551. package/dist_ts/integrations/nanoleaf/nanoleaf.classes.integration.d.ts +1 -1
  552. package/dist_ts/integrations/nanoleaf/nanoleaf.classes.integration.js +1 -1
  553. package/dist_ts/integrations/nanoleaf/nanoleaf.discovery.d.ts +3 -3
  554. package/dist_ts/integrations/nasweb/nasweb.classes.client.js +1 -1
  555. package/dist_ts/integrations/netdata/netdata.classes.client.js +1 -1
  556. package/dist_ts/integrations/nibe_heatpump/nibe_heatpump.classes.client.js +1 -1
  557. package/dist_ts/integrations/niko_home_control/niko_home_control.classes.client.js +1 -1
  558. package/dist_ts/integrations/nobo_hub/nobo_hub.classes.client.js +1 -1
  559. package/dist_ts/integrations/nrgkick/nrgkick.classes.client.js +1 -1
  560. package/dist_ts/integrations/nuki/nuki.classes.client.js +1 -1
  561. package/dist_ts/integrations/nut/nut.classes.client.js +1 -1
  562. package/dist_ts/integrations/nut/nut.classes.integration.js +1 -1
  563. package/dist_ts/integrations/nx584/nx584.classes.client.js +1 -1
  564. package/dist_ts/integrations/nx584/nx584.classes.integration.js +1 -1
  565. package/dist_ts/integrations/nzbget/nzbget.classes.client.js +1 -1
  566. package/dist_ts/integrations/nzbget/nzbget.mapper.js +1 -1
  567. package/dist_ts/integrations/obihai/obihai.classes.client.js +1 -1
  568. package/dist_ts/integrations/octoprint/octoprint.classes.client.js +1 -1
  569. package/dist_ts/integrations/octoprint/octoprint.mapper.js +1 -1
  570. package/dist_ts/integrations/oem/oem.classes.client.js +1 -1
  571. package/dist_ts/integrations/ollama/ollama.classes.client.js +1 -1
  572. package/dist_ts/integrations/ombi/ombi.classes.client.js +1 -1
  573. package/dist_ts/integrations/onewire/onewire.classes.client.js +1 -1
  574. package/dist_ts/integrations/onkyo/onkyo.classes.client.js +1 -1
  575. package/dist_ts/integrations/onvif/onvif.classes.client.js +1 -1
  576. package/dist_ts/integrations/onvif/onvif.classes.integration.d.ts +1 -1
  577. package/dist_ts/integrations/onvif/onvif.classes.integration.js +1 -1
  578. package/dist_ts/integrations/onvif/onvif.discovery.d.ts +3 -3
  579. package/dist_ts/integrations/onvif/onvif.mapper.js +1 -1
  580. package/dist_ts/integrations/openevse/openevse.classes.client.js +1 -1
  581. package/dist_ts/integrations/openevse/openevse.mapper.js +1 -1
  582. package/dist_ts/integrations/opengarage/opengarage.classes.client.js +1 -1
  583. package/dist_ts/integrations/opengarage/opengarage.mapper.js +1 -1
  584. package/dist_ts/integrations/openhardwaremonitor/openhardwaremonitor.classes.client.js +1 -1
  585. package/dist_ts/integrations/openhome/openhome.classes.client.d.ts +2 -1
  586. package/dist_ts/integrations/openhome/openhome.classes.client.js +21 -19
  587. package/dist_ts/integrations/openrgb/openrgb.classes.client.js +1 -1
  588. package/dist_ts/integrations/openrgb/openrgb.classes.integration.d.ts +1 -1
  589. package/dist_ts/integrations/openrgb/openrgb.classes.integration.js +1 -1
  590. package/dist_ts/integrations/openrgb/openrgb.discovery.d.ts +2 -2
  591. package/dist_ts/integrations/openrgb/openrgb.mapper.js +1 -1
  592. package/dist_ts/integrations/opentherm_gw/opentherm_gw.classes.client.d.ts +1 -1
  593. package/dist_ts/integrations/opentherm_gw/opentherm_gw.classes.client.js +1 -1
  594. package/dist_ts/integrations/opentherm_gw/opentherm_gw.classes.integration.d.ts +1 -1
  595. package/dist_ts/integrations/opentherm_gw/opentherm_gw.classes.integration.js +1 -1
  596. package/dist_ts/integrations/opentherm_gw/opentherm_gw.discovery.d.ts +1 -1
  597. package/dist_ts/integrations/opnsense/opnsense.classes.client.js +1 -1
  598. package/dist_ts/integrations/opnsense/opnsense.classes.integration.d.ts +1 -1
  599. package/dist_ts/integrations/opnsense/opnsense.classes.integration.js +1 -1
  600. package/dist_ts/integrations/opnsense/opnsense.discovery.d.ts +1 -1
  601. package/dist_ts/integrations/opnsense/opnsense.mapper.js +1 -1
  602. package/dist_ts/integrations/orvibo/orvibo.classes.client.js +1 -1
  603. package/dist_ts/integrations/osramlightify/osramlightify.classes.client.js +1 -1
  604. package/dist_ts/integrations/otbr/otbr.classes.client.js +1 -1
  605. package/dist_ts/integrations/overkiz/overkiz.classes.client.js +1 -1
  606. package/dist_ts/integrations/overseerr/overseerr.classes.client.js +1 -1
  607. package/dist_ts/integrations/owntracks/owntracks.classes.client.js +1 -1
  608. package/dist_ts/integrations/p1_monitor/p1_monitor.classes.client.js +1 -1
  609. package/dist_ts/integrations/palazzetti/palazzetti.classes.client.js +1 -1
  610. package/dist_ts/integrations/panasonic_bluray/panasonic_bluray.classes.client.js +1 -1
  611. package/dist_ts/integrations/panasonic_viera/panasonic_viera.classes.client.js +1 -1
  612. package/dist_ts/integrations/paperless_ngx/paperless_ngx.classes.client.js +1 -1
  613. package/dist_ts/integrations/paperless_ngx/paperless_ngx.mapper.js +1 -1
  614. package/dist_ts/integrations/peblar/peblar.classes.client.js +1 -1
  615. package/dist_ts/integrations/peblar/peblar.mapper.js +1 -1
  616. package/dist_ts/integrations/pencom/pencom.classes.client.js +1 -1
  617. package/dist_ts/integrations/philips_js/philips_js.classes.client.js +1 -1
  618. package/dist_ts/integrations/pi_hole/pi_hole.classes.client.js +1 -1
  619. package/dist_ts/integrations/pi_hole/pi_hole.classes.integration.d.ts +1 -1
  620. package/dist_ts/integrations/pi_hole/pi_hole.classes.integration.js +1 -1
  621. package/dist_ts/integrations/pi_hole/pi_hole.discovery.d.ts +2 -2
  622. package/dist_ts/integrations/pi_hole/pi_hole.mapper.js +1 -1
  623. package/dist_ts/integrations/picotts/picotts.classes.client.js +1 -1
  624. package/dist_ts/integrations/pilight/pilight.classes.client.js +1 -1
  625. package/dist_ts/integrations/pilight/pilight.classes.integration.js +1 -1
  626. package/dist_ts/integrations/ping/ping.classes.client.js +1 -1
  627. package/dist_ts/integrations/pioneer/pioneer.classes.client.js +1 -1
  628. package/dist_ts/integrations/pjlink/pjlink.classes.client.js +1 -1
  629. package/dist_ts/integrations/plex/plex.classes.client.d.ts +1 -1
  630. package/dist_ts/integrations/plex/plex.classes.client.js +1 -1
  631. package/dist_ts/integrations/plex/plex.classes.integration.d.ts +1 -1
  632. package/dist_ts/integrations/plex/plex.classes.integration.js +1 -1
  633. package/dist_ts/integrations/plex/plex.discovery.d.ts +5 -5
  634. package/dist_ts/integrations/plugwise/plugwise.classes.client.js +1 -1
  635. package/dist_ts/integrations/prusalink/prusalink.classes.client.js +1 -1
  636. package/dist_ts/integrations/prusalink/prusalink.classes.integration.d.ts +1 -1
  637. package/dist_ts/integrations/prusalink/prusalink.classes.integration.js +1 -1
  638. package/dist_ts/integrations/prusalink/prusalink.discovery.d.ts +2 -2
  639. package/dist_ts/integrations/rainbird/rainbird.classes.client.js +1 -1
  640. package/dist_ts/integrations/rainbird/rainbird.classes.integration.d.ts +1 -1
  641. package/dist_ts/integrations/rainbird/rainbird.classes.integration.js +1 -1
  642. package/dist_ts/integrations/rainbird/rainbird.discovery.d.ts +1 -1
  643. package/dist_ts/integrations/rflink/rflink.classes.client.js +1 -1
  644. package/dist_ts/integrations/rflink/rflink.classes.integration.d.ts +1 -1
  645. package/dist_ts/integrations/rflink/rflink.classes.integration.js +1 -1
  646. package/dist_ts/integrations/rflink/rflink.discovery.d.ts +1 -1
  647. package/dist_ts/integrations/roku/roku.classes.client.d.ts +27 -14
  648. package/dist_ts/integrations/roku/roku.classes.client.js +213 -132
  649. package/dist_ts/integrations/roku/roku.classes.configflow.js +23 -14
  650. package/dist_ts/integrations/roku/roku.classes.integration.d.ts +4 -1
  651. package/dist_ts/integrations/roku/roku.classes.integration.js +74 -91
  652. package/dist_ts/integrations/roku/roku.discovery.d.ts +8 -8
  653. package/dist_ts/integrations/roku/roku.discovery.js +82 -65
  654. package/dist_ts/integrations/roku/roku.mapper.d.ts +0 -3
  655. package/dist_ts/integrations/roku/roku.mapper.js +18 -50
  656. package/dist_ts/integrations/roku/roku.types.d.ts +21 -12
  657. package/dist_ts/integrations/roku/roku.validation.d.ts +9 -0
  658. package/dist_ts/integrations/roku/roku.validation.js +74 -0
  659. package/dist_ts/integrations/samsungtv/samsungtv.classes.client.d.ts +9 -38
  660. package/dist_ts/integrations/samsungtv/samsungtv.classes.client.js +113 -417
  661. package/dist_ts/integrations/samsungtv/samsungtv.classes.configflow.js +31 -29
  662. package/dist_ts/integrations/samsungtv/samsungtv.classes.integration.d.ts +8 -7
  663. package/dist_ts/integrations/samsungtv/samsungtv.classes.integration.js +122 -117
  664. package/dist_ts/integrations/samsungtv/samsungtv.discovery.d.ts +11 -11
  665. package/dist_ts/integrations/samsungtv/samsungtv.discovery.js +120 -143
  666. package/dist_ts/integrations/samsungtv/samsungtv.mapper.d.ts +3 -11
  667. package/dist_ts/integrations/samsungtv/samsungtv.mapper.js +18 -117
  668. package/dist_ts/integrations/samsungtv/samsungtv.types.d.ts +18 -85
  669. package/dist_ts/integrations/samsungtv/samsungtv.validation.d.ts +7 -0
  670. package/dist_ts/integrations/samsungtv/samsungtv.validation.js +83 -0
  671. package/dist_ts/integrations/shelly/shelly.classes.client.d.ts +29 -14
  672. package/dist_ts/integrations/shelly/shelly.classes.client.js +310 -126
  673. package/dist_ts/integrations/shelly/shelly.classes.configflow.js +29 -11
  674. package/dist_ts/integrations/shelly/shelly.classes.integration.d.ts +4 -1
  675. package/dist_ts/integrations/shelly/shelly.classes.integration.js +120 -27
  676. package/dist_ts/integrations/shelly/shelly.classes.subscription.d.ts +47 -0
  677. package/dist_ts/integrations/shelly/shelly.classes.subscription.js +206 -0
  678. package/dist_ts/integrations/shelly/shelly.discovery.d.ts +2 -2
  679. package/dist_ts/integrations/shelly/shelly.discovery.js +6 -3
  680. package/dist_ts/integrations/shelly/shelly.rpc.d.ts +21 -0
  681. package/dist_ts/integrations/shelly/shelly.rpc.js +210 -0
  682. package/dist_ts/integrations/shelly/shelly.types.d.ts +26 -4
  683. package/dist_ts/integrations/snapcast/snapcast.classes.client.js +1 -1
  684. package/dist_ts/integrations/snapcast/snapcast.classes.integration.d.ts +1 -1
  685. package/dist_ts/integrations/snapcast/snapcast.classes.integration.js +1 -1
  686. package/dist_ts/integrations/snapcast/snapcast.discovery.d.ts +2 -2
  687. package/dist_ts/integrations/sonos/index.d.ts +3 -0
  688. package/dist_ts/integrations/sonos/index.js +4 -1
  689. package/dist_ts/integrations/sonos/sonos.classes.client.d.ts +30 -29
  690. package/dist_ts/integrations/sonos/sonos.classes.client.js +162 -208
  691. package/dist_ts/integrations/sonos/sonos.classes.configflow.js +27 -9
  692. package/dist_ts/integrations/sonos/sonos.classes.integration.d.ts +6 -5
  693. package/dist_ts/integrations/sonos/sonos.classes.integration.js +280 -61
  694. package/dist_ts/integrations/sonos/sonos.classes.ssdpprobe.d.ts +17 -0
  695. package/dist_ts/integrations/sonos/sonos.classes.ssdpprobe.js +88 -0
  696. package/dist_ts/integrations/sonos/sonos.config.d.ts +12 -0
  697. package/dist_ts/integrations/sonos/sonos.config.js +52 -0
  698. package/dist_ts/integrations/sonos/sonos.discovery.d.ts +1 -25
  699. package/dist_ts/integrations/sonos/sonos.discovery.js +6 -114
  700. package/dist_ts/integrations/sonos/sonos.mapper.d.ts +2 -1
  701. package/dist_ts/integrations/sonos/sonos.mapper.js +33 -13
  702. package/dist_ts/integrations/sonos/sonos.matchers.d.ts +25 -0
  703. package/dist_ts/integrations/sonos/sonos.matchers.js +82 -0
  704. package/dist_ts/integrations/sonos/sonos.topology.d.ts +2 -0
  705. package/dist_ts/integrations/sonos/sonos.topology.js +59 -0
  706. package/dist_ts/integrations/sonos/sonos.types.d.ts +18 -8
  707. package/dist_ts/integrations/sonos/sonos.xml.d.ts +3 -0
  708. package/dist_ts/integrations/sonos/sonos.xml.js +21 -0
  709. package/dist_ts/integrations/soundtouch/soundtouch.classes.client.js +1 -1
  710. package/dist_ts/integrations/soundtouch/soundtouch.classes.integration.d.ts +1 -1
  711. package/dist_ts/integrations/soundtouch/soundtouch.classes.integration.js +1 -1
  712. package/dist_ts/integrations/soundtouch/soundtouch.discovery.d.ts +2 -2
  713. package/dist_ts/integrations/soundtouch/soundtouch.types.d.ts +1 -1
  714. package/dist_ts/integrations/squeezebox/squeezebox.classes.client.js +1 -1
  715. package/dist_ts/integrations/squeezebox/squeezebox.classes.integration.d.ts +1 -1
  716. package/dist_ts/integrations/squeezebox/squeezebox.classes.integration.js +1 -1
  717. package/dist_ts/integrations/squeezebox/squeezebox.discovery.d.ts +3 -3
  718. package/dist_ts/integrations/synology_dsm/synology_dsm.classes.client.js +1 -1
  719. package/dist_ts/integrations/synology_dsm/synology_dsm.classes.integration.d.ts +1 -1
  720. package/dist_ts/integrations/synology_dsm/synology_dsm.classes.integration.js +1 -1
  721. package/dist_ts/integrations/synology_dsm/synology_dsm.discovery.d.ts +4 -4
  722. package/dist_ts/integrations/synology_dsm/synology_dsm.mapper.js +1 -1
  723. package/dist_ts/integrations/synology_srm/synology_srm.classes.client.js +1 -1
  724. package/dist_ts/integrations/synology_srm/synology_srm.classes.integration.d.ts +1 -1
  725. package/dist_ts/integrations/synology_srm/synology_srm.classes.integration.js +1 -1
  726. package/dist_ts/integrations/synology_srm/synology_srm.discovery.d.ts +2 -2
  727. package/dist_ts/integrations/synology_srm/synology_srm.mapper.js +1 -1
  728. package/dist_ts/integrations/tasmota/index.d.ts +4 -0
  729. package/dist_ts/integrations/tasmota/index.js +5 -1
  730. package/dist_ts/integrations/tasmota/tasmota.classes.integration.d.ts +21 -3
  731. package/dist_ts/integrations/tasmota/tasmota.classes.integration.js +24 -25
  732. package/dist_ts/integrations/tasmota/tasmota.classes.runtime.d.ts +36 -0
  733. package/dist_ts/integrations/tasmota/tasmota.classes.runtime.js +292 -0
  734. package/dist_ts/integrations/tasmota/tasmota.config.d.ts +2 -0
  735. package/dist_ts/integrations/tasmota/tasmota.config.js +78 -0
  736. package/dist_ts/integrations/tasmota/tasmota.discovery.d.ts +7 -0
  737. package/dist_ts/integrations/tasmota/tasmota.discovery.js +85 -0
  738. package/dist_ts/integrations/tasmota/tasmota.mapper.d.ts +12 -0
  739. package/dist_ts/integrations/tasmota/tasmota.mapper.js +91 -0
  740. package/dist_ts/integrations/tasmota/tasmota.types.d.ts +51 -1
  741. package/dist_ts/integrations/tplink/index.d.ts +3 -0
  742. package/dist_ts/integrations/tplink/index.js +4 -1
  743. package/dist_ts/integrations/tplink/tplink.classes.client.d.ts +8 -14
  744. package/dist_ts/integrations/tplink/tplink.classes.client.js +64 -64
  745. package/dist_ts/integrations/tplink/tplink.classes.configflow.d.ts +3 -8
  746. package/dist_ts/integrations/tplink/tplink.classes.configflow.js +53 -89
  747. package/dist_ts/integrations/tplink/tplink.classes.integration.d.ts +8 -13
  748. package/dist_ts/integrations/tplink/tplink.classes.integration.js +136 -37
  749. package/dist_ts/integrations/tplink/tplink.discovery.d.ts +11 -14
  750. package/dist_ts/integrations/tplink/tplink.discovery.js +125 -210
  751. package/dist_ts/integrations/tplink/tplink.mapper.js +1 -1
  752. package/dist_ts/integrations/tplink/tplink.native.mapper.d.ts +11 -0
  753. package/dist_ts/integrations/tplink/tplink.native.mapper.js +61 -0
  754. package/dist_ts/integrations/tplink/tplink.native.types.d.ts +32 -0
  755. package/dist_ts/integrations/tplink/tplink.native.types.js +2 -0
  756. package/dist_ts/integrations/tplink/tplink.validation.d.ts +4 -0
  757. package/dist_ts/integrations/tplink/tplink.validation.js +48 -0
  758. package/dist_ts/integrations/tradfri/tradfri.classes.client.js +1 -1
  759. package/dist_ts/integrations/tradfri/tradfri.classes.integration.d.ts +1 -1
  760. package/dist_ts/integrations/tradfri/tradfri.classes.integration.js +1 -1
  761. package/dist_ts/integrations/tradfri/tradfri.discovery.d.ts +2 -3
  762. package/dist_ts/integrations/tradfri/tradfri.discovery.js +52 -26
  763. package/dist_ts/integrations/tradfri/tradfri.mapper.js +1 -1
  764. package/dist_ts/integrations/tuya/tuya.classes.integration.d.ts +21 -3
  765. package/dist_ts/integrations/tuya/tuya.classes.integration.js +139 -28
  766. package/dist_ts/integrations/tuya/tuya.classes.runtime.d.ts +15 -0
  767. package/dist_ts/integrations/tuya/tuya.classes.runtime.js +189 -0
  768. package/dist_ts/integrations/tuya/tuya.mapper.d.ts +13 -0
  769. package/dist_ts/integrations/tuya/tuya.mapper.js +30 -0
  770. package/dist_ts/integrations/tuya/tuya.types.d.ts +40 -1
  771. package/dist_ts/integrations/tuya/tuya.validation.d.ts +10 -0
  772. package/dist_ts/integrations/tuya/tuya.validation.js +122 -0
  773. package/dist_ts/integrations/unifi/unifi.classes.client.js +1 -1
  774. package/dist_ts/integrations/unifi/unifi.classes.integration.d.ts +1 -1
  775. package/dist_ts/integrations/unifi/unifi.classes.integration.js +1 -1
  776. package/dist_ts/integrations/unifi/unifi.discovery.d.ts +4 -4
  777. package/dist_ts/integrations/unifi/unifi.mapper.js +6 -6
  778. package/dist_ts/integrations/velbus/velbus.classes.client.js +1 -1
  779. package/dist_ts/integrations/velbus/velbus.classes.integration.d.ts +1 -1
  780. package/dist_ts/integrations/velbus/velbus.classes.integration.js +1 -1
  781. package/dist_ts/integrations/velbus/velbus.discovery.d.ts +2 -2
  782. package/dist_ts/integrations/volumio/volumio.classes.client.js +1 -1
  783. package/dist_ts/integrations/volumio/volumio.classes.integration.d.ts +1 -1
  784. package/dist_ts/integrations/volumio/volumio.classes.integration.js +1 -1
  785. package/dist_ts/integrations/volumio/volumio.discovery.d.ts +2 -2
  786. package/dist_ts/integrations/wake_on_lan/wake_on_lan.classes.client.js +1 -1
  787. package/dist_ts/integrations/wake_on_lan/wake_on_lan.classes.integration.d.ts +1 -1
  788. package/dist_ts/integrations/wake_on_lan/wake_on_lan.classes.integration.js +1 -1
  789. package/dist_ts/integrations/wake_on_lan/wake_on_lan.discovery.d.ts +2 -2
  790. package/dist_ts/integrations/wake_on_lan/wake_on_lan.mapper.js +1 -1
  791. package/dist_ts/integrations/wake_on_lan/wake_on_lan.packet.js +1 -1
  792. package/dist_ts/integrations/webostv/webostv.classes.client.d.ts +10 -4
  793. package/dist_ts/integrations/webostv/webostv.classes.client.js +370 -6
  794. package/dist_ts/integrations/webostv/webostv.classes.configflow.d.ts +3 -3
  795. package/dist_ts/integrations/webostv/webostv.classes.configflow.js +23 -6
  796. package/dist_ts/integrations/webostv/webostv.classes.integration.d.ts +20 -5
  797. package/dist_ts/integrations/webostv/webostv.classes.integration.js +138 -7
  798. package/dist_ts/integrations/webostv/webostv.discovery.d.ts +2 -1
  799. package/dist_ts/integrations/webostv/webostv.discovery.js +26 -4
  800. package/dist_ts/integrations/webostv/webostv.mapper.d.ts +6 -8
  801. package/dist_ts/integrations/webostv/webostv.mapper.js +24 -13
  802. package/dist_ts/integrations/webostv/webostv.types.d.ts +61 -5
  803. package/dist_ts/integrations/webostv/webostv.types.js +5 -96
  804. package/dist_ts/integrations/webostv/webostv.validation.d.ts +6 -0
  805. package/dist_ts/integrations/webostv/webostv.validation.js +54 -0
  806. package/dist_ts/integrations/wiz/wiz.classes.client.js +1 -1
  807. package/dist_ts/integrations/wiz/wiz.classes.integration.d.ts +7 -7
  808. package/dist_ts/integrations/wiz/wiz.classes.integration.js +1 -1
  809. package/dist_ts/integrations/wiz/wiz.discovery.d.ts +4 -4
  810. package/dist_ts/integrations/wiz/wiz.mapper.js +1 -1
  811. package/dist_ts/integrations/wled/index.d.ts +1 -0
  812. package/dist_ts/integrations/wled/index.js +2 -1
  813. package/dist_ts/integrations/wled/wled.classes.client.d.ts +27 -4
  814. package/dist_ts/integrations/wled/wled.classes.client.js +231 -6
  815. package/dist_ts/integrations/wled/wled.classes.configflow.d.ts +3 -3
  816. package/dist_ts/integrations/wled/wled.classes.configflow.js +33 -6
  817. package/dist_ts/integrations/wled/wled.classes.integration.d.ts +24 -4
  818. package/dist_ts/integrations/wled/wled.classes.integration.js +171 -7
  819. package/dist_ts/integrations/wled/wled.classes.subscription.d.ts +37 -0
  820. package/dist_ts/integrations/wled/wled.classes.subscription.js +116 -0
  821. package/dist_ts/integrations/wled/wled.commands.d.ts +4 -0
  822. package/dist_ts/integrations/wled/wled.commands.js +65 -0
  823. package/dist_ts/integrations/wled/wled.discovery.d.ts +17 -1
  824. package/dist_ts/integrations/wled/wled.discovery.js +68 -4
  825. package/dist_ts/integrations/wled/wled.errors.d.ts +5 -0
  826. package/dist_ts/integrations/wled/wled.errors.js +9 -0
  827. package/dist_ts/integrations/wled/wled.mapper.d.ts +8 -8
  828. package/dist_ts/integrations/wled/wled.mapper.js +40 -16
  829. package/dist_ts/integrations/wled/wled.types.d.ts +75 -6
  830. package/dist_ts/integrations/wled/wled.types.js +12 -82
  831. package/dist_ts/integrations/wled/wled.validation.d.ts +7 -0
  832. package/dist_ts/integrations/wled/wled.validation.js +85 -0
  833. package/dist_ts/integrations/wolf_smartset/wolf_smartset.classes.client.js +1 -1
  834. package/dist_ts/integrations/wolf_smartset/wolf_smartset.classes.integration.d.ts +1 -1
  835. package/dist_ts/integrations/wolf_smartset/wolf_smartset.discovery.d.ts +1 -1
  836. package/dist_ts/integrations/xiaomi_miio/xiaomi_miio.classes.client.js +1 -1
  837. package/dist_ts/integrations/xiaomi_miio/xiaomi_miio.classes.integration.d.ts +1 -1
  838. package/dist_ts/integrations/xiaomi_miio/xiaomi_miio.classes.integration.js +1 -1
  839. package/dist_ts/integrations/xiaomi_miio/xiaomi_miio.discovery.d.ts +3 -3
  840. package/dist_ts/integrations/xiaomi_miio/xiaomi_miio.mapper.js +1 -1
  841. package/dist_ts/integrations/yamaha_musiccast/yamaha_musiccast.classes.client.js +1 -1
  842. package/dist_ts/integrations/yamaha_musiccast/yamaha_musiccast.classes.integration.d.ts +1 -1
  843. package/dist_ts/integrations/yamaha_musiccast/yamaha_musiccast.classes.integration.js +1 -1
  844. package/dist_ts/integrations/yamaha_musiccast/yamaha_musiccast.discovery.d.ts +3 -3
  845. package/dist_ts/integrations/yeelight/yeelight.classes.client.d.ts +34 -26
  846. package/dist_ts/integrations/yeelight/yeelight.classes.client.js +225 -275
  847. package/dist_ts/integrations/yeelight/yeelight.classes.configflow.d.ts +0 -2
  848. package/dist_ts/integrations/yeelight/yeelight.classes.configflow.js +29 -30
  849. package/dist_ts/integrations/yeelight/yeelight.classes.integration.d.ts +11 -5
  850. package/dist_ts/integrations/yeelight/yeelight.classes.integration.js +140 -80
  851. package/dist_ts/integrations/yeelight/yeelight.discovery.d.ts +11 -13
  852. package/dist_ts/integrations/yeelight/yeelight.discovery.js +90 -128
  853. package/dist_ts/integrations/yeelight/yeelight.mapper.d.ts +2 -10
  854. package/dist_ts/integrations/yeelight/yeelight.mapper.js +57 -178
  855. package/dist_ts/integrations/yeelight/yeelight.types.d.ts +37 -139
  856. package/dist_ts/integrations/yeelight/yeelight.validation.d.ts +10 -0
  857. package/dist_ts/integrations/yeelight/yeelight.validation.js +111 -0
  858. package/dist_ts/integrations/zha/zha.classes.client.js +1 -1
  859. package/dist_ts/integrations/zha/zha.classes.integration.d.ts +1 -1
  860. package/dist_ts/integrations/zha/zha.classes.integration.js +1 -1
  861. package/dist_ts/integrations/zha/zha.discovery.d.ts +3 -12
  862. package/dist_ts/integrations/zha/zha.discovery.js +102 -222
  863. package/dist_ts/integrations/zha/zha.discoveryvalidation.d.ts +10 -0
  864. package/dist_ts/integrations/zha/zha.discoveryvalidation.js +71 -0
  865. package/dist_ts/integrations/zha/zha.mapper.js +1 -1
  866. package/dist_ts/integrations/zigbee2mqtt/index.d.ts +5 -0
  867. package/dist_ts/integrations/zigbee2mqtt/index.js +6 -0
  868. package/dist_ts/integrations/zigbee2mqtt/zigbee2mqtt.classes.configflow.d.ts +5 -0
  869. package/dist_ts/integrations/zigbee2mqtt/zigbee2mqtt.classes.configflow.js +27 -0
  870. package/dist_ts/integrations/zigbee2mqtt/zigbee2mqtt.classes.integration.d.ts +19 -0
  871. package/dist_ts/integrations/zigbee2mqtt/zigbee2mqtt.classes.integration.js +19 -0
  872. package/dist_ts/integrations/zigbee2mqtt/zigbee2mqtt.classes.runtime.d.ts +55 -0
  873. package/dist_ts/integrations/zigbee2mqtt/zigbee2mqtt.classes.runtime.js +464 -0
  874. package/dist_ts/integrations/zigbee2mqtt/zigbee2mqtt.mapper.d.ts +15 -0
  875. package/dist_ts/integrations/zigbee2mqtt/zigbee2mqtt.mapper.js +186 -0
  876. package/dist_ts/integrations/zigbee2mqtt/zigbee2mqtt.types.d.ts +57 -0
  877. package/dist_ts/integrations/zigbee2mqtt/zigbee2mqtt.types.js +2 -0
  878. package/dist_ts/integrations/zigbee2mqtt/zigbee2mqtt.validation.d.ts +5 -0
  879. package/dist_ts/integrations/zigbee2mqtt/zigbee2mqtt.validation.js +66 -0
  880. package/dist_ts/integrations/zwave_js/zwave_js.classes.client.d.ts +19 -21
  881. package/dist_ts/integrations/zwave_js/zwave_js.classes.client.js +303 -134
  882. package/dist_ts/integrations/zwave_js/zwave_js.classes.configflow.d.ts +0 -3
  883. package/dist_ts/integrations/zwave_js/zwave_js.classes.configflow.js +31 -26
  884. package/dist_ts/integrations/zwave_js/zwave_js.classes.integration.d.ts +2 -1
  885. package/dist_ts/integrations/zwave_js/zwave_js.classes.integration.js +71 -76
  886. package/dist_ts/integrations/zwave_js/zwave_js.discovery.d.ts +3 -3
  887. package/dist_ts/integrations/zwave_js/zwave_js.discovery.js +120 -16
  888. package/dist_ts/integrations/zwave_js/zwave_js.mapper.d.ts +13 -14
  889. package/dist_ts/integrations/zwave_js/zwave_js.mapper.js +140 -257
  890. package/dist_ts/integrations/zwave_js/zwave_js.types.d.ts +30 -19
  891. package/dist_ts/integrations/zwave_js/zwave_js.validation.d.ts +15 -0
  892. package/dist_ts/integrations/zwave_js/zwave_js.validation.js +191 -0
  893. package/dist_ts/plugins.d.ts +10 -2
  894. package/dist_ts/plugins.js +11 -3
  895. package/dist_ts_migration/001.import-json-config.d.ts +10 -0
  896. package/dist_ts_migration/001.import-json-config.js +147 -0
  897. package/dist_ts_migration/index.d.ts +1 -0
  898. package/dist_ts_migration/index.js +2 -0
  899. package/package.json +20 -11
  900. package/readme.md +49 -10
  901. package/ts/00_commitinfo_data.ts +1 -1
  902. package/ts/core/classes.configrecord.ts +23 -0
  903. package/ts/core/classes.configstore.ts +324 -25
  904. package/ts/core/classes.discoveryengine.ts +11 -1
  905. package/ts/core/classes.runtimemanager.ts +88 -44
  906. package/ts/core/types.ts +15 -4
  907. package/ts/index.ts +6 -0
  908. package/ts/integrations/deconz/deconz.classes.client.ts +243 -190
  909. package/ts/integrations/deconz/deconz.classes.configflow.ts +34 -25
  910. package/ts/integrations/deconz/deconz.classes.integration.ts +105 -22
  911. package/ts/integrations/deconz/deconz.mapper.ts +24 -18
  912. package/ts/integrations/deconz/deconz.types.ts +38 -3
  913. package/ts/integrations/deconz/deconz.validation.ts +261 -0
  914. package/ts/integrations/deconz/readme.md +44 -0
  915. package/ts/integrations/esphome/esphome.classes.client.ts +254 -74
  916. package/ts/integrations/esphome/esphome.classes.configflow.ts +1 -3
  917. package/ts/integrations/esphome/esphome.classes.integration.ts +61 -66
  918. package/ts/integrations/esphome/esphome.discovery.ts +1 -1
  919. package/ts/integrations/esphome/esphome.mapper.ts +71 -37
  920. package/ts/integrations/esphome/esphome.types.ts +2 -0
  921. package/ts/integrations/esphome/readme.md +66 -0
  922. package/ts/integrations/generated/index.ts +4 -6
  923. package/ts/integrations/homeassistant/homeassistant.classes.client.ts +166 -63
  924. package/ts/integrations/homeassistant/homeassistant.classes.runtime.ts +41 -3
  925. package/ts/integrations/homeassistant/homeassistant.mapper.ts +32 -36
  926. package/ts/integrations/homeassistant/homeassistant.types.ts +11 -0
  927. package/ts/integrations/homeassistant/homeassistant.validation.ts +139 -0
  928. package/ts/integrations/homeassistant/readme.md +40 -0
  929. package/ts/integrations/hue/hue.classes.client.ts +251 -21
  930. package/ts/integrations/hue/hue.classes.configflow.ts +26 -13
  931. package/ts/integrations/hue/hue.classes.integration.ts +76 -30
  932. package/ts/integrations/hue/hue.discovery.ts +61 -26
  933. package/ts/integrations/hue/hue.mapper.ts +28 -60
  934. package/ts/integrations/hue/hue.types.ts +12 -18
  935. package/ts/integrations/hue/hue.validation.ts +154 -0
  936. package/ts/integrations/hue/readme.md +71 -0
  937. package/ts/integrations/index.ts +5 -1
  938. package/ts/integrations/lifx/lifx.classes.client.ts +95 -6
  939. package/ts/integrations/lifx/lifx.classes.configflow.ts +32 -5
  940. package/ts/integrations/lifx/lifx.classes.integration.ts +142 -7
  941. package/ts/integrations/lifx/lifx.discovery.ts +26 -3
  942. package/ts/integrations/lifx/lifx.mapper.ts +45 -17
  943. package/ts/integrations/lifx/lifx.types.ts +51 -125
  944. package/ts/integrations/lifx/lifx.validation.ts +86 -0
  945. package/ts/integrations/lifx/readme.md +55 -0
  946. package/ts/integrations/mqtt/mqtt.classes.client.ts +394 -366
  947. package/ts/integrations/mqtt/mqtt.classes.configflow.ts +22 -18
  948. package/ts/integrations/mqtt/mqtt.classes.integration.ts +119 -44
  949. package/ts/integrations/mqtt/mqtt.mapper.ts +139 -47
  950. package/ts/integrations/mqtt/mqtt.types.ts +19 -0
  951. package/ts/integrations/mqtt/readme.md +28 -0
  952. package/ts/integrations/openhome/openhome.classes.client.ts +22 -18
  953. package/ts/integrations/roku/readme.md +95 -0
  954. package/ts/integrations/roku/roku.classes.client.ts +194 -131
  955. package/ts/integrations/roku/roku.classes.configflow.ts +20 -13
  956. package/ts/integrations/roku/roku.classes.integration.ts +69 -98
  957. package/ts/integrations/roku/roku.discovery.ts +68 -71
  958. package/ts/integrations/roku/roku.mapper.ts +17 -52
  959. package/ts/integrations/roku/roku.types.ts +23 -14
  960. package/ts/integrations/roku/roku.validation.ts +79 -0
  961. package/ts/integrations/samsungtv/readme.md +30 -0
  962. package/ts/integrations/samsungtv/samsungtv.classes.client.ts +107 -481
  963. package/ts/integrations/samsungtv/samsungtv.classes.configflow.ts +28 -29
  964. package/ts/integrations/samsungtv/samsungtv.classes.integration.ts +108 -132
  965. package/ts/integrations/samsungtv/samsungtv.discovery.ts +101 -165
  966. package/ts/integrations/samsungtv/samsungtv.mapper.ts +20 -127
  967. package/ts/integrations/samsungtv/samsungtv.types.ts +18 -95
  968. package/ts/integrations/samsungtv/samsungtv.validation.ts +84 -0
  969. package/ts/integrations/shelly/readme.md +34 -0
  970. package/ts/integrations/shelly/shelly.classes.client.ts +275 -137
  971. package/ts/integrations/shelly/shelly.classes.configflow.ts +24 -10
  972. package/ts/integrations/shelly/shelly.classes.integration.ts +109 -32
  973. package/ts/integrations/shelly/shelly.classes.subscription.ts +218 -0
  974. package/ts/integrations/shelly/shelly.discovery.ts +5 -2
  975. package/ts/integrations/shelly/shelly.rpc.ts +190 -0
  976. package/ts/integrations/shelly/shelly.types.ts +16 -4
  977. package/ts/integrations/sonos/index.ts +3 -0
  978. package/ts/integrations/sonos/readme.md +74 -0
  979. package/ts/integrations/sonos/sonos.classes.client.ts +153 -225
  980. package/ts/integrations/sonos/sonos.classes.configflow.ts +21 -8
  981. package/ts/integrations/sonos/sonos.classes.integration.ts +234 -72
  982. package/ts/integrations/sonos/sonos.classes.ssdpprobe.ts +85 -0
  983. package/ts/integrations/sonos/sonos.config.ts +57 -0
  984. package/ts/integrations/sonos/sonos.discovery.ts +5 -123
  985. package/ts/integrations/sonos/sonos.mapper.ts +29 -13
  986. package/ts/integrations/sonos/sonos.matchers.ts +83 -0
  987. package/ts/integrations/sonos/sonos.topology.ts +54 -0
  988. package/ts/integrations/sonos/sonos.types.ts +20 -8
  989. package/ts/integrations/sonos/sonos.xml.ts +19 -0
  990. package/ts/integrations/tasmota/index.ts +4 -0
  991. package/ts/integrations/tasmota/readme.md +33 -0
  992. package/ts/integrations/tasmota/tasmota.classes.integration.ts +27 -24
  993. package/ts/integrations/tasmota/tasmota.classes.runtime.ts +274 -0
  994. package/ts/integrations/tasmota/tasmota.config.ts +69 -0
  995. package/ts/integrations/tasmota/tasmota.discovery.ts +84 -0
  996. package/ts/integrations/tasmota/tasmota.mapper.ts +88 -0
  997. package/ts/integrations/tasmota/tasmota.types.ts +48 -2
  998. package/ts/integrations/tplink/index.ts +3 -0
  999. package/ts/integrations/tplink/readme.md +38 -0
  1000. package/ts/integrations/tplink/tplink.classes.client.ts +56 -75
  1001. package/ts/integrations/tplink/tplink.classes.configflow.ts +48 -100
  1002. package/ts/integrations/tplink/tplink.classes.integration.ts +118 -40
  1003. package/ts/integrations/tplink/tplink.discovery.ts +106 -235
  1004. package/ts/integrations/tplink/tplink.native.mapper.ts +67 -0
  1005. package/ts/integrations/tplink/tplink.native.types.ts +32 -0
  1006. package/ts/integrations/tplink/tplink.validation.ts +50 -0
  1007. package/ts/integrations/tradfri/tradfri.discovery.ts +52 -26
  1008. package/ts/integrations/tuya/readme.md +106 -0
  1009. package/ts/integrations/tuya/tuya.classes.integration.ts +127 -28
  1010. package/ts/integrations/tuya/tuya.classes.runtime.ts +166 -0
  1011. package/ts/integrations/tuya/tuya.mapper.ts +47 -0
  1012. package/ts/integrations/tuya/tuya.types.ts +47 -2
  1013. package/ts/integrations/tuya/tuya.validation.ts +118 -0
  1014. package/ts/integrations/unifi/unifi.mapper.ts +8 -5
  1015. package/ts/integrations/webostv/readme.md +48 -0
  1016. package/ts/integrations/webostv/webostv.classes.client.ts +297 -6
  1017. package/ts/integrations/webostv/webostv.classes.configflow.ts +18 -5
  1018. package/ts/integrations/webostv/webostv.classes.integration.ts +92 -7
  1019. package/ts/integrations/webostv/webostv.discovery.ts +22 -3
  1020. package/ts/integrations/webostv/webostv.mapper.ts +27 -18
  1021. package/ts/integrations/webostv/webostv.types.ts +47 -101
  1022. package/ts/integrations/webostv/webostv.validation.ts +48 -0
  1023. package/ts/integrations/wled/index.ts +1 -0
  1024. package/ts/integrations/wled/readme.md +83 -0
  1025. package/ts/integrations/wled/wled.classes.client.ts +208 -6
  1026. package/ts/integrations/wled/wled.classes.configflow.ts +26 -5
  1027. package/ts/integrations/wled/wled.classes.integration.ts +142 -7
  1028. package/ts/integrations/wled/wled.classes.subscription.ts +122 -0
  1029. package/ts/integrations/wled/wled.commands.ts +54 -0
  1030. package/ts/integrations/wled/wled.discovery.ts +52 -3
  1031. package/ts/integrations/wled/wled.errors.ts +9 -0
  1032. package/ts/integrations/wled/wled.mapper.ts +39 -19
  1033. package/ts/integrations/wled/wled.types.ts +59 -87
  1034. package/ts/integrations/wled/wled.validation.ts +72 -0
  1035. package/ts/integrations/yeelight/readme.md +47 -0
  1036. package/ts/integrations/yeelight/yeelight.classes.client.ts +201 -302
  1037. package/ts/integrations/yeelight/yeelight.classes.configflow.ts +23 -32
  1038. package/ts/integrations/yeelight/yeelight.classes.integration.ts +115 -87
  1039. package/ts/integrations/yeelight/yeelight.discovery.ts +78 -140
  1040. package/ts/integrations/yeelight/yeelight.mapper.ts +61 -191
  1041. package/ts/integrations/yeelight/yeelight.types.ts +31 -162
  1042. package/ts/integrations/yeelight/yeelight.validation.ts +112 -0
  1043. package/ts/integrations/zha/readme.md +23 -0
  1044. package/ts/integrations/zha/zha.discovery.ts +92 -232
  1045. package/ts/integrations/zha/zha.discoveryvalidation.ts +67 -0
  1046. package/ts/integrations/zigbee2mqtt/index.ts +5 -0
  1047. package/ts/integrations/zigbee2mqtt/readme.md +40 -0
  1048. package/ts/integrations/zigbee2mqtt/zigbee2mqtt.classes.configflow.ts +26 -0
  1049. package/ts/integrations/zigbee2mqtt/zigbee2mqtt.classes.integration.ts +23 -0
  1050. package/ts/integrations/zigbee2mqtt/zigbee2mqtt.classes.runtime.ts +414 -0
  1051. package/ts/integrations/zigbee2mqtt/zigbee2mqtt.mapper.ts +172 -0
  1052. package/ts/integrations/zigbee2mqtt/zigbee2mqtt.types.ts +63 -0
  1053. package/ts/integrations/zigbee2mqtt/zigbee2mqtt.validation.ts +65 -0
  1054. package/ts/integrations/zwave_js/readme.md +23 -0
  1055. package/ts/integrations/zwave_js/zwave_js.classes.client.ts +256 -136
  1056. package/ts/integrations/zwave_js/zwave_js.classes.configflow.ts +26 -28
  1057. package/ts/integrations/zwave_js/zwave_js.classes.integration.ts +65 -81
  1058. package/ts/integrations/zwave_js/zwave_js.discovery.ts +100 -15
  1059. package/ts/integrations/zwave_js/zwave_js.mapper.ts +129 -256
  1060. package/ts/integrations/zwave_js/zwave_js.types.ts +32 -19
  1061. package/ts/integrations/zwave_js/zwave_js.validation.ts +191 -0
  1062. package/ts/plugins.ts +12 -3
  1063. package/ts_migration/001.import-json-config.ts +81 -0
  1064. package/ts_migration/index.ts +1 -0
  1065. package/ts/integrations/tasmota/.generated-by-smarthome-exchange +0 -1
  1066. package/ts/integrations/tuya/.generated-by-smarthome-exchange +0 -1
@@ -1,4 +1,5 @@
1
1
  import * as plugins from '../../plugins.js';
2
+ import { homeAssistantRecord, validateHomeAssistantEntity, validateHomeAssistantServices, validateHomeAssistantServiceCall } from './homeassistant.validation.js';
2
3
  const entityIdPattern = /^[a-z0-9_]+\.[a-z0-9_]+$/;
3
4
  const entityDomainPattern = /^[a-z0-9_]+$/;
4
5
  const maximumTimerMs = 2_147_483_647;
@@ -13,8 +14,13 @@ const normalizeStringSet = (valuesArg, labelArg, patternArg) => {
13
14
  if (valuesArg === undefined) {
14
15
  return undefined;
15
16
  }
17
+ if (!Array.isArray(valuesArg) || valuesArg.length > 10_000) {
18
+ throw new Error(`Home Assistant ${labelArg} allowlist must be a bounded array.`);
19
+ }
16
20
  const result = new Set();
17
21
  for (const value of valuesArg) {
22
+ if (typeof value !== 'string')
23
+ throw new Error(`Home Assistant ${labelArg} entries must be strings.`);
18
24
  const normalizedValue = value.trim().toLowerCase();
19
25
  if (!patternArg.test(normalizedValue)) {
20
26
  throw new Error(`Invalid Home Assistant ${labelArg}: ${value}`);
@@ -24,6 +30,10 @@ const normalizeStringSet = (valuesArg, labelArg, patternArg) => {
24
30
  return result;
25
31
  };
26
32
  export const normalizeHomeAssistantConfig = (configArg) => {
33
+ homeAssistantRecord(configArg);
34
+ if (typeof configArg.homeId !== 'string' || !/^[a-zA-Z0-9][a-zA-Z0-9_.:-]{0,127}$/.test(configArg.homeId)) {
35
+ throw new Error('Home Assistant homeId must be a stable identifier of at most 128 characters.');
36
+ }
27
37
  let parsedUrl;
28
38
  try {
29
39
  parsedUrl = new URL(configArg.baseUrl);
@@ -41,8 +51,8 @@ export const normalizeHomeAssistantConfig = (configArg) => {
41
51
  || parsedUrl.hash) {
42
52
  throw new Error('Home Assistant baseUrl must contain only the scheme, host, and optional port.');
43
53
  }
44
- const accessToken = configArg.accessToken?.trim();
45
- if (!accessToken) {
54
+ const accessToken = typeof configArg.accessToken === 'string' ? configArg.accessToken.trim() : undefined;
55
+ if (!accessToken || accessToken.length > 8192 || /[\s\x00-\x1f\x7f]/.test(accessToken)) {
46
56
  throw new Error('Home Assistant accessToken is required.');
47
57
  }
48
58
  const entityIds = normalizeStringSet(configArg.entityIds, 'entity ID', entityIdPattern);
@@ -81,6 +91,8 @@ export const normalizeHomeAssistantConfig = (configArg) => {
81
91
  throw new Error(`Home Assistant required entity IDs are outside the entityDomains allowlist: ${contradictoryEntityIds.join(', ')}`);
82
92
  }
83
93
  return {
94
+ homeId: configArg.homeId,
95
+ instanceId: plugins.crypto.createHash('sha256').update(parsedUrl.origin).digest('hex').slice(0, 24),
84
96
  baseUrl: parsedUrl.origin,
85
97
  accessToken,
86
98
  entityIds,
@@ -104,6 +116,9 @@ export class HomeAssistantClient {
104
116
  upstreamSnapshot = {};
105
117
  snapshot = {};
106
118
  entityPlatforms = {};
119
+ services = new Set();
120
+ catalogueUnsubscribes = new Set();
121
+ serviceSettlements = new Set();
107
122
  connectionReady = false;
108
123
  snapshotReady = false;
109
124
  requiredEntitiesPresent = true;
@@ -125,6 +140,7 @@ export class HomeAssistantClient {
125
140
  this.connectionReady = true;
126
141
  this.snapshotReady = false;
127
142
  this.entityPlatforms = {};
143
+ this.services.clear();
128
144
  this.bufferedStateEvents.clear();
129
145
  const generation = this.advanceConnectionGeneration();
130
146
  this.emitChange();
@@ -152,6 +168,7 @@ export class HomeAssistantClient {
152
168
  this.connectionReady = false;
153
169
  this.snapshotReady = false;
154
170
  this.entityPlatforms = {};
171
+ this.services.clear();
155
172
  this.bufferedStateEvents.clear();
156
173
  this.advanceConnectionGeneration();
157
174
  this.emitChange();
@@ -244,6 +261,12 @@ export class HomeAssistantClient {
244
261
  getEntityPlatforms() {
245
262
  return structuredClone(this.entityPlatforms);
246
263
  }
264
+ getServices() {
265
+ return new Set(this.services);
266
+ }
267
+ getTargetScope() {
268
+ return { homeId: this.config.homeId, instanceId: this.config.instanceId };
269
+ }
247
270
  subscribe(handlerArg) {
248
271
  if (this.isStopping()) {
249
272
  throw new Error('Home Assistant client is destroyed.');
@@ -274,12 +297,21 @@ export class HomeAssistantClient {
274
297
  if (!this.requiredEntitiesPresent) {
275
298
  throw new Error('Home Assistant snapshot is missing required entities.');
276
299
  }
300
+ const target = homeAssistantRecord(homeAssistantRecord(requestArg).target);
301
+ const entity = typeof target.entity_id === 'string' ? this.snapshot[target.entity_id] : undefined;
302
+ if (!entity)
303
+ throw new Error('Home Assistant service target is outside the selected snapshot.');
304
+ const request = validateHomeAssistantServiceCall(requestArg, entity, this.services);
277
305
  const connection = this.connection;
278
306
  const operationAbortController = new AbortController();
279
307
  const propagateAbort = () => {
280
308
  operationAbortController.abort(abortSignalArg?.reason);
281
309
  };
282
310
  abortSignalArg?.addEventListener('abort', propagateAbort, { once: true });
311
+ const propagateLifetimeAbort = () => {
312
+ operationAbortController.abort(this.lifetimeAbortController.signal.reason);
313
+ };
314
+ this.lifetimeAbortController.signal.addEventListener('abort', propagateLifetimeAbort, { once: true });
283
315
  const cancelPendingCommand = () => {
284
316
  if (this.connection === connection && !this.isStopping()) {
285
317
  connection.reconnect(true);
@@ -290,12 +322,16 @@ export class HomeAssistantClient {
290
322
  }
291
323
  if (operationAbortController.signal.aborted) {
292
324
  abortSignalArg?.removeEventListener('abort', propagateAbort);
325
+ this.lifetimeAbortController.signal.removeEventListener('abort', propagateLifetimeAbort);
293
326
  throw abortError(operationAbortController.signal);
294
327
  }
295
328
  let timeout;
329
+ let resolveSettlement;
330
+ const settlement = new Promise((resolve) => { resolveSettlement = resolve; });
331
+ this.serviceSettlements.add(settlement);
296
332
  this.activeServiceCallCount++;
297
333
  try {
298
- const operationPromise = this.api.callService(connection, requestArg.domain, requestArg.service, requestArg.data, requestArg.target);
334
+ const operationPromise = this.api.callService(connection, request.domain, request.service, request.data, request.target);
299
335
  operationAbortController.signal.addEventListener('abort', cancelPendingCommand, { once: true });
300
336
  if (operationAbortController.signal.aborted) {
301
337
  cancelPendingCommand();
@@ -312,13 +348,16 @@ export class HomeAssistantClient {
312
348
  }
313
349
  abortSignalArg?.removeEventListener('abort', propagateAbort);
314
350
  operationAbortController.signal.removeEventListener('abort', cancelPendingCommand);
351
+ this.lifetimeAbortController.signal.removeEventListener('abort', propagateLifetimeAbort);
352
+ resolveSettlement();
353
+ this.serviceSettlements.delete(settlement);
315
354
  }
316
355
  }
317
356
  destroy() {
318
357
  if (this.destroyPromise) {
319
358
  return this.destroyPromise;
320
359
  }
321
- if (this.lifecycle === 'destroyed' && !this.stateUnsubscribe) {
360
+ if (this.lifecycle === 'destroyed' && !this.stateUnsubscribe && this.catalogueUnsubscribes.size === 0 && this.ownedSockets.size === 0) {
322
361
  return Promise.resolve();
323
362
  }
324
363
  this.lifecycle = 'destroying';
@@ -347,6 +386,11 @@ export class HomeAssistantClient {
347
386
  connection.removeEventListener('disconnected', this.handleDisconnected);
348
387
  }
349
388
  try {
389
+ await Promise.all([...this.serviceSettlements]);
390
+ for (const unsubscribeCatalogue of [...this.catalogueUnsubscribes]) {
391
+ await this.settleStateUnsubscribe(unsubscribeCatalogue);
392
+ this.catalogueUnsubscribes.delete(unsubscribeCatalogue);
393
+ }
350
394
  if (unsubscribe) {
351
395
  await this.settleStateUnsubscribe(unsubscribe);
352
396
  if (this.stateUnsubscribe === unsubscribe) {
@@ -361,16 +405,21 @@ export class HomeAssistantClient {
361
405
  }
362
406
  connection.close();
363
407
  }
364
- this.closeOwnedSockets(connectionSocket);
365
- this.advanceConnectionGeneration();
366
- this.connectionReady = false;
367
- this.snapshotReady = false;
368
- this.requiredEntitiesPresent = false;
369
- this.bufferedStateEvents.clear();
370
- this.upstreamSnapshot = {};
371
- this.snapshot = {};
372
- this.entityPlatforms = {};
373
- this.handlers.clear();
408
+ try {
409
+ await this.drainOwnedSockets(connectionSocket);
410
+ }
411
+ finally {
412
+ this.advanceConnectionGeneration();
413
+ this.connectionReady = false;
414
+ this.snapshotReady = false;
415
+ this.requiredEntitiesPresent = false;
416
+ this.bufferedStateEvents.clear();
417
+ this.upstreamSnapshot = {};
418
+ this.snapshot = {};
419
+ this.entityPlatforms = {};
420
+ this.services.clear();
421
+ this.handlers.clear();
422
+ }
374
423
  }
375
424
  }
376
425
  async createConnection(authArg, abortSignalArg, initializationDeadlineArg) {
@@ -478,7 +527,6 @@ export class HomeAssistantClient {
478
527
  }
479
528
  settled = true;
480
529
  cleanupAuthenticationListeners();
481
- this.ownedSockets.delete(socket);
482
530
  try {
483
531
  socket.close();
484
532
  }
@@ -502,13 +550,13 @@ export class HomeAssistantClient {
502
550
  })().catch(fail);
503
551
  };
504
552
  const handleMessage = (eventArg) => {
505
- if (typeof eventArg.data !== 'string') {
553
+ if (typeof eventArg.data !== 'string' || eventArg.data.length > 16_384) {
506
554
  fail(new Error('Home Assistant authentication returned a non-text message.'));
507
555
  return;
508
556
  }
509
557
  let message;
510
558
  try {
511
- message = JSON.parse(eventArg.data);
559
+ message = homeAssistantRecord(JSON.parse(eventArg.data));
512
560
  }
513
561
  catch {
514
562
  fail(new Error('Home Assistant authentication returned invalid JSON.'));
@@ -569,10 +617,13 @@ export class HomeAssistantClient {
569
617
  }
570
618
  closeOwnedSockets(excludedSocketArg) {
571
619
  for (const socket of [...this.ownedSockets]) {
572
- this.ownedSockets.delete(socket);
573
620
  if (socket === excludedSocketArg) {
574
621
  continue;
575
622
  }
623
+ if (socket.readyState === 3) {
624
+ this.ownedSockets.delete(socket);
625
+ continue;
626
+ }
576
627
  try {
577
628
  socket.close();
578
629
  }
@@ -581,6 +632,35 @@ export class HomeAssistantClient {
581
632
  }
582
633
  }
583
634
  }
635
+ async drainOwnedSockets(connectionSocketArg) {
636
+ const sockets = new Set(this.ownedSockets);
637
+ if (connectionSocketArg)
638
+ sockets.add(connectionSocketArg);
639
+ await Promise.all([...sockets].map((socket) => new Promise((resolve, reject) => {
640
+ if (socket.readyState === 3) {
641
+ this.ownedSockets.delete(socket);
642
+ resolve();
643
+ return;
644
+ }
645
+ const finish = (error) => {
646
+ clearTimeout(timeout);
647
+ socket.removeEventListener('close', handleClose);
648
+ if (!error)
649
+ this.ownedSockets.delete(socket);
650
+ error ? reject(error) : resolve();
651
+ };
652
+ const handleClose = () => finish();
653
+ const timeout = setTimeout(() => finish(new Error('Home Assistant socket did not close within 1000 ms.')), 1000);
654
+ socket.addEventListener('close', handleClose, { once: true });
655
+ try {
656
+ if (socket.readyState !== 2)
657
+ socket.close();
658
+ }
659
+ catch (error) {
660
+ finish(error instanceof Error ? error : new Error('Home Assistant socket close failed.'));
661
+ }
662
+ })));
663
+ }
584
664
  async raceAbort(operationArg, abortSignalArg) {
585
665
  if (abortSignalArg.aborted) {
586
666
  throw abortError(abortSignalArg);
@@ -689,6 +769,17 @@ export class HomeAssistantClient {
689
769
  throw new Error('Home Assistant client was destroyed during state subscription.');
690
770
  }
691
771
  this.stateUnsubscribe = unsubscribe;
772
+ for (const eventType of ['service_registered', 'service_removed', 'entity_registry_updated']) {
773
+ const unsubscribePromise = connectionArg.subscribeEvents(() => this.handleReady(), eventType);
774
+ try {
775
+ const unsubscribeCatalogue = await this.raceAbortWithDeadline(unsubscribePromise, abortSignalArg, initializationDeadlineArg, 'Home Assistant did not acknowledge its catalogue subscription before the startup deadline.');
776
+ this.catalogueUnsubscribes.add(unsubscribeCatalogue);
777
+ }
778
+ catch (errorArg) {
779
+ void unsubscribePromise.then((lateUnsubscribe) => this.settleStateUnsubscribe(lateUnsubscribe)).catch(() => undefined);
780
+ throw errorArg;
781
+ }
782
+ }
692
783
  }
693
784
  async refreshCurrentGeneration(connectionArg, abortSignalArg, initializationDeadlineArg, requireCompleteArg) {
694
785
  while (!this.isStopping()) {
@@ -741,56 +832,82 @@ export class HomeAssistantClient {
741
832
  if (generationArg !== this.connectionGeneration || !this.connectionReady) {
742
833
  return false;
743
834
  }
835
+ if (!Array.isArray(statesResult.value) || statesResult.value.length > 10_000) {
836
+ throw new Error('Home Assistant returned an invalid or oversized entity snapshot.');
837
+ }
744
838
  const entities = {};
745
- for (const state of statesResult.value) {
839
+ for (const rawState of statesResult.value) {
840
+ const state = validateHomeAssistantEntity(rawState);
746
841
  if (this.shouldIncludeEntityId(state.entity_id)) {
842
+ if (Object.hasOwn(entities, state.entity_id))
843
+ throw new Error('Home Assistant returned duplicate entity states.');
747
844
  entities[state.entity_id] = state;
748
845
  }
749
846
  }
750
- for (const event of this.bufferedStateEvents.values()) {
751
- this.applyStateChangedEvent(entities, event);
752
- }
753
- this.bufferedStateEvents.clear();
754
- const requireEntityRegistry = this.config.requireEntityRegistry;
755
- let missingEntityIds = this.commitSnapshot(entities, connectionArg.connected, !requireEntityRegistry);
756
- if (requireCompleteArg && missingEntityIds.length > 0) {
757
- throw new Error(`Home Assistant snapshot is missing required entities: ${missingEntityIds.join(', ')}`);
758
- }
759
- if (!requireEntityRegistry) {
760
- return true;
761
- }
762
- const entityPlatformsResult = await this.loadEntityPlatforms(connectionArg, generationArg, abortSignalArg, initializationDeadlineArg);
847
+ const servicesResult = await this.runForConnectionGeneration(() => this.api.getServices(connectionArg), generationArg, abortSignalArg, initializationDeadlineArg, 'Home Assistant did not provide its service catalogue before the startup deadline.');
848
+ if (servicesResult.status === 'changed')
849
+ return false;
850
+ const services = validateHomeAssistantServices(servicesResult.value);
851
+ const entityPlatformsResult = await this.loadEntityPlatforms(connectionArg, generationArg, abortSignalArg, initializationDeadlineArg, Object.keys(entities));
763
852
  if (entityPlatformsResult.status === 'changed') {
764
853
  return false;
765
854
  }
766
855
  if (generationArg !== this.connectionGeneration || !this.connectionReady) {
767
856
  return false;
768
857
  }
769
- if (this.bufferedStateEvents.size > 0) {
770
- const refreshedEntities = { ...this.upstreamSnapshot };
771
- for (const event of this.bufferedStateEvents.values()) {
772
- this.applyStateChangedEvent(refreshedEntities, event);
773
- }
774
- this.bufferedStateEvents.clear();
775
- missingEntityIds = this.commitSnapshot(refreshedEntities, connectionArg.connected, false);
776
- if (requireCompleteArg && missingEntityIds.length > 0) {
777
- throw new Error(`Home Assistant snapshot is missing required entities: ${missingEntityIds.join(', ')}`);
778
- }
858
+ for (const event of this.bufferedStateEvents.values()) {
859
+ this.applyStateChangedEvent(entities, event);
860
+ }
861
+ if (Object.keys(entities).length > 10_000)
862
+ throw new Error('Home Assistant entity snapshot exceeds its bounds.');
863
+ this.bufferedStateEvents.clear();
864
+ const missingEntityIds = this.config.requireEntityIds
865
+ ? [...this.config.entityIds].filter((entityId) => !Object.hasOwn(entities, entityId)) : [];
866
+ if (requireCompleteArg && missingEntityIds.length > 0) {
867
+ throw new Error(`Home Assistant snapshot is missing required entities: ${missingEntityIds.join(', ')}`);
779
868
  }
780
869
  this.entityPlatforms = entityPlatformsResult.value;
781
- this.snapshotReady = true;
782
- this.emitChange();
870
+ this.services = services;
871
+ this.commitSnapshot(entities, connectionArg.connected, true);
783
872
  return true;
784
873
  }
785
874
  handleStateChangedEvent(eventArg) {
786
875
  if (this.isStopping()) {
787
876
  return;
788
877
  }
789
- const entityId = eventArg.data.entity_id;
878
+ let entityId;
879
+ try {
880
+ const data = homeAssistantRecord(homeAssistantRecord(eventArg).data);
881
+ if (typeof data.entity_id !== 'string' || !entityIdPattern.test(data.entity_id)) {
882
+ throw new Error('Home Assistant returned an invalid state event target.');
883
+ }
884
+ entityId = data.entity_id;
885
+ if (data.new_state !== null) {
886
+ const entity = validateHomeAssistantEntity(data.new_state);
887
+ if (entity.entity_id !== entityId)
888
+ throw new Error('Home Assistant state event target is inconsistent.');
889
+ }
890
+ }
891
+ catch {
892
+ this.handleDisconnected();
893
+ this.connection?.close();
894
+ return;
895
+ }
790
896
  if (!this.shouldIncludeEntityId(entityId)) {
791
897
  return;
792
898
  }
899
+ if (eventArg.data.new_state && !Object.hasOwn(this.upstreamSnapshot, entityId)
900
+ && Object.keys(this.upstreamSnapshot).length >= 10_000) {
901
+ this.handleDisconnected();
902
+ this.connection?.close();
903
+ return;
904
+ }
793
905
  if (!this.snapshotReady) {
906
+ if (!this.bufferedStateEvents.has(entityId) && this.bufferedStateEvents.size >= 10_000) {
907
+ this.handleDisconnected();
908
+ this.connection?.close();
909
+ return;
910
+ }
794
911
  this.bufferedStateEvents.set(entityId, structuredClone(eventArg));
795
912
  return;
796
913
  }
@@ -845,7 +962,7 @@ export class HomeAssistantClient {
845
962
  clearTimeout(timeout);
846
963
  }
847
964
  }
848
- async loadEntityPlatforms(connectionArg, generationArg, abortSignalArg, initializationDeadlineArg) {
965
+ async loadEntityPlatforms(connectionArg, generationArg, abortSignalArg, initializationDeadlineArg, selectedEntityIdsArg) {
849
966
  const responseResult = await this.runForConnectionGeneration(() => connectionArg.sendMessagePromise({
850
967
  type: 'config/entity_registry/list_for_display',
851
968
  }), generationArg, abortSignalArg, initializationDeadlineArg, `Home Assistant entity registry did not respond within ${this.config.initialSnapshotTimeoutMs} ms.`);
@@ -853,22 +970,29 @@ export class HomeAssistantClient {
853
970
  return responseResult;
854
971
  }
855
972
  const response = responseResult.value;
856
- if (!response || !Array.isArray(response.entities)) {
973
+ if (!response || !Array.isArray(response.entities) || response.entities.length > 10_000) {
857
974
  throw new Error('Home Assistant entity registry returned an invalid response.');
858
975
  }
859
- const requiredEntityIds = new Set(this.config.entityIds || Object.keys(this.snapshot));
976
+ const requiredEntityIds = new Set(this.config.entityIds || selectedEntityIdsArg);
860
977
  const entityPlatforms = {};
861
978
  for (const entry of response.entities) {
979
+ homeAssistantRecord(entry);
980
+ if (typeof entry.ei !== 'string' || !entityIdPattern.test(entry.ei)
981
+ || typeof entry.pl !== 'string' || !entityDomainPattern.test(entry.pl)) {
982
+ throw new Error('Home Assistant entity registry returned an invalid entry.');
983
+ }
862
984
  if (entry
863
985
  && typeof entry.ei === 'string'
864
986
  && typeof entry.pl === 'string'
865
987
  && requiredEntityIds.has(entry.ei)) {
988
+ if (Object.hasOwn(entityPlatforms, entry.ei))
989
+ throw new Error('Home Assistant entity registry returned duplicate entries.');
866
990
  entityPlatforms[entry.ei] = entry.pl;
867
991
  }
868
992
  }
869
993
  const missingEntityIds = [...requiredEntityIds]
870
994
  .filter((entityIdArg) => !entityPlatforms[entityIdArg]);
871
- if (missingEntityIds.length > 0) {
995
+ if (this.config.requireEntityRegistry && missingEntityIds.length > 0) {
872
996
  throw new Error(`Home Assistant entity registry is missing required entities: ${missingEntityIds.join(', ')}`);
873
997
  }
874
998
  return { status: 'completed', value: entityPlatforms };
@@ -963,4 +1087,4 @@ export class HomeAssistantClient {
963
1087
  }
964
1088
  }
965
1089
  }
966
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWFzc2lzdGFudC5jbGFzc2VzLmNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ludGVncmF0aW9ucy9ob21lYXNzaXN0YW50L2hvbWVhc3Npc3RhbnQuY2xhc3Nlcy5jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQVk1QyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUNuRCxNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztBQUMzQyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUM7QUFDckMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLENBQUM7QUFDM0MsTUFBTSxnQ0FBZ0MsR0FBRyxNQUFNLENBQUM7QUFNaEQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxjQUEyQixFQUFTLEVBQUU7SUFDeEQsT0FBTyxjQUFjLENBQUMsTUFBTSxZQUFZLEtBQUs7UUFDM0MsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNO1FBQ3ZCLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0FBQ3pELENBQUMsQ0FBQztBQUVGLE1BQU0sa0JBQWtCLEdBQUcsQ0FDekIsU0FBK0IsRUFDL0IsUUFBZ0IsRUFDaEIsVUFBa0IsRUFDTyxFQUFFO0lBQzNCLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBVSxDQUFDO0lBQ2pDLEtBQUssTUFBTSxLQUFLLElBQUksU0FBUyxFQUFFLENBQUM7UUFDOUIsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25ELElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7WUFDdEMsTUFBTSxJQUFJ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
1090
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaG9tZWFzc2lzdGFudC5jbGFzc2VzLmNsaWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ludGVncmF0aW9ucy9ob21lYXNzaXN0YW50L2hvbWVhc3Npc3RhbnQuY2xhc3Nlcy5jbGllbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQVk1QyxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsMkJBQTJCLEVBQUUsNkJBQTZCLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVsSyxNQUFNLGVBQWUsR0FBRywwQkFBMEIsQ0FBQztBQUNuRCxNQUFNLG1CQUFtQixHQUFHLGNBQWMsQ0FBQztBQUMzQyxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUM7QUFDckMsTUFBTSw2QkFBNkIsR0FBRyxJQUFJLENBQUM7QUFDM0MsTUFBTSxnQ0FBZ0MsR0FBRyxNQUFNLENBQUM7QUFNaEQsTUFBTSxVQUFVLEdBQUcsQ0FBQyxjQUEyQixFQUFTLEVBQUU7SUFDeEQsT0FBTyxjQUFjLENBQUMsTUFBTSxZQUFZLEtBQUs7UUFDM0MsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxNQUFNO1FBQ3ZCLENBQUMsQ0FBQyxJQUFJLEtBQUssQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFDO0FBQ3pELENBQUMsQ0FBQztBQUVGLE1BQU0sa0JBQWtCLEdBQUcsQ0FDekIsU0FBK0IsRUFDL0IsUUFBZ0IsRUFDaEIsVUFBa0IsRUFDTyxFQUFFO0lBQzNCLElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzVCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsSUFBSSxTQUFTLENBQUMsTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDO1FBQzNELE1BQU0sSUFBSSxLQUFLLENBQUMsa0JBQWtCLFFBQVEscUNBQXFDLENB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