@smarthome.exchange/integrations 1.0.0 → 2.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 (294) hide show
  1. package/changelog.md +49 -0
  2. package/dist_ts/00_commitinfo_data.js +1 -1
  3. package/dist_ts/core/classes.configstore.d.ts +2 -0
  4. package/dist_ts/core/classes.configstore.js +84 -27
  5. package/dist_ts/core/classes.nativehomeadmission.d.ts +19 -0
  6. package/dist_ts/core/classes.nativehomeadmission.js +84 -0
  7. package/dist_ts/core/classes.nativeintegrationowner.d.ts +79 -0
  8. package/dist_ts/core/classes.nativeintegrationowner.js +269 -0
  9. package/dist_ts/core/index.d.ts +2 -0
  10. package/dist_ts/core/index.js +3 -1
  11. package/dist_ts/core/types.d.ts +14 -0
  12. package/dist_ts/integrations/braviatv/braviatv.classes.client.d.ts +23 -72
  13. package/dist_ts/integrations/braviatv/braviatv.classes.client.js +265 -625
  14. package/dist_ts/integrations/braviatv/braviatv.classes.configflow.d.ts +7 -7
  15. package/dist_ts/integrations/braviatv/braviatv.classes.configflow.js +51 -68
  16. package/dist_ts/integrations/braviatv/braviatv.classes.integration.d.ts +8 -11
  17. package/dist_ts/integrations/braviatv/braviatv.classes.integration.js +186 -135
  18. package/dist_ts/integrations/braviatv/braviatv.discovery.js +12 -11
  19. package/dist_ts/integrations/braviatv/braviatv.mapper.d.ts +6 -14
  20. package/dist_ts/integrations/braviatv/braviatv.mapper.js +37 -131
  21. package/dist_ts/integrations/braviatv/braviatv.types.d.ts +55 -133
  22. package/dist_ts/integrations/braviatv/braviatv.validation.d.ts +7 -0
  23. package/dist_ts/integrations/braviatv/braviatv.validation.js +72 -0
  24. package/dist_ts/integrations/broadlink/broadlink.actions.d.ts +2 -0
  25. package/dist_ts/integrations/broadlink/broadlink.actions.js +36 -0
  26. package/dist_ts/integrations/broadlink/broadlink.classes.client.d.ts +21 -19
  27. package/dist_ts/integrations/broadlink/broadlink.classes.client.js +185 -124
  28. package/dist_ts/integrations/broadlink/broadlink.classes.configflow.d.ts +5 -4
  29. package/dist_ts/integrations/broadlink/broadlink.classes.configflow.js +64 -83
  30. package/dist_ts/integrations/broadlink/broadlink.classes.integration.d.ts +16 -19
  31. package/dist_ts/integrations/broadlink/broadlink.classes.integration.js +114 -59
  32. package/dist_ts/integrations/broadlink/broadlink.mapper.d.ts +3 -2
  33. package/dist_ts/integrations/broadlink/broadlink.mapper.js +2 -1
  34. package/dist_ts/integrations/broadlink/broadlink.selected.mapper.d.ts +10 -0
  35. package/dist_ts/integrations/broadlink/broadlink.selected.mapper.js +41 -0
  36. package/dist_ts/integrations/broadlink/broadlink.types.d.ts +43 -7
  37. package/dist_ts/integrations/broadlink/broadlink.validation.d.ts +7 -0
  38. package/dist_ts/integrations/broadlink/broadlink.validation.js +63 -0
  39. package/dist_ts/integrations/daikin/daikin.classes.client.d.ts +10 -52
  40. package/dist_ts/integrations/daikin/daikin.classes.client.js +55 -614
  41. package/dist_ts/integrations/daikin/daikin.classes.configflow.d.ts +8 -12
  42. package/dist_ts/integrations/daikin/daikin.classes.configflow.js +77 -138
  43. package/dist_ts/integrations/daikin/daikin.classes.integration.d.ts +7 -24
  44. package/dist_ts/integrations/daikin/daikin.classes.integration.js +175 -67
  45. package/dist_ts/integrations/daikin/daikin.discovery.d.ts +11 -24
  46. package/dist_ts/integrations/daikin/daikin.discovery.js +98 -305
  47. package/dist_ts/integrations/daikin/daikin.mapper.d.ts +6 -7
  48. package/dist_ts/integrations/daikin/daikin.mapper.js +95 -155
  49. package/dist_ts/integrations/daikin/daikin.types.d.ts +24 -44
  50. package/dist_ts/integrations/daikin/daikin.types.js +1 -1
  51. package/dist_ts/integrations/daikin/daikin.validation.d.ts +5 -0
  52. package/dist_ts/integrations/daikin/daikin.validation.js +53 -0
  53. package/dist_ts/integrations/denonavr/denonavr.classes.client.d.ts +31 -40
  54. package/dist_ts/integrations/denonavr/denonavr.classes.client.js +149 -404
  55. package/dist_ts/integrations/denonavr/denonavr.classes.configflow.d.ts +7 -2
  56. package/dist_ts/integrations/denonavr/denonavr.classes.configflow.js +44 -36
  57. package/dist_ts/integrations/denonavr/denonavr.classes.integration.d.ts +6 -11
  58. package/dist_ts/integrations/denonavr/denonavr.classes.integration.js +192 -113
  59. package/dist_ts/integrations/denonavr/denonavr.discovery.d.ts +10 -18
  60. package/dist_ts/integrations/denonavr/denonavr.discovery.js +71 -193
  61. package/dist_ts/integrations/denonavr/denonavr.mapper.d.ts +5 -13
  62. package/dist_ts/integrations/denonavr/denonavr.mapper.js +35 -159
  63. package/dist_ts/integrations/denonavr/denonavr.types.d.ts +55 -90
  64. package/dist_ts/integrations/denonavr/denonavr.validation.d.ts +10 -0
  65. package/dist_ts/integrations/denonavr/denonavr.validation.js +86 -0
  66. package/dist_ts/integrations/kodi/kodi.classes.client.d.ts +11 -45
  67. package/dist_ts/integrations/kodi/kodi.classes.client.js +84 -310
  68. package/dist_ts/integrations/kodi/kodi.classes.configflow.d.ts +9 -8
  69. package/dist_ts/integrations/kodi/kodi.classes.configflow.js +53 -48
  70. package/dist_ts/integrations/kodi/kodi.classes.integration.d.ts +11 -11
  71. package/dist_ts/integrations/kodi/kodi.classes.integration.js +114 -171
  72. package/dist_ts/integrations/kodi/kodi.discovery.js +53 -29
  73. package/dist_ts/integrations/kodi/kodi.mapper.d.ts +7 -2
  74. package/dist_ts/integrations/kodi/kodi.mapper.js +48 -10
  75. package/dist_ts/integrations/kodi/kodi.types.d.ts +32 -28
  76. package/dist_ts/integrations/kodi/kodi.validation.d.ts +9 -0
  77. package/dist_ts/integrations/kodi/kodi.validation.js +62 -0
  78. package/dist_ts/integrations/modbus/modbus.classes.client.d.ts +15 -61
  79. package/dist_ts/integrations/modbus/modbus.classes.client.js +117 -776
  80. package/dist_ts/integrations/modbus/modbus.classes.configflow.d.ts +9 -5
  81. package/dist_ts/integrations/modbus/modbus.classes.configflow.js +70 -38
  82. package/dist_ts/integrations/modbus/modbus.classes.integration.d.ts +6 -17
  83. package/dist_ts/integrations/modbus/modbus.classes.integration.js +133 -57
  84. package/dist_ts/integrations/modbus/modbus.discovery.d.ts +5 -8
  85. package/dist_ts/integrations/modbus/modbus.discovery.js +38 -93
  86. package/dist_ts/integrations/modbus/modbus.mapper.d.ts +8 -32
  87. package/dist_ts/integrations/modbus/modbus.mapper.js +71 -431
  88. package/dist_ts/integrations/modbus/modbus.types.d.ts +82 -332
  89. package/dist_ts/integrations/modbus/modbus.validation.d.ts +10 -0
  90. package/dist_ts/integrations/modbus/modbus.validation.js +128 -0
  91. package/dist_ts/integrations/nanoleaf/nanoleaf.classes.client.d.ts +12 -34
  92. package/dist_ts/integrations/nanoleaf/nanoleaf.classes.client.js +143 -231
  93. package/dist_ts/integrations/nanoleaf/nanoleaf.classes.configflow.d.ts +6 -1
  94. package/dist_ts/integrations/nanoleaf/nanoleaf.classes.configflow.js +105 -18
  95. package/dist_ts/integrations/nanoleaf/nanoleaf.classes.integration.d.ts +8 -8
  96. package/dist_ts/integrations/nanoleaf/nanoleaf.classes.integration.js +141 -155
  97. package/dist_ts/integrations/nanoleaf/nanoleaf.credentials.d.ts +9 -0
  98. package/dist_ts/integrations/nanoleaf/nanoleaf.credentials.js +35 -0
  99. package/dist_ts/integrations/nanoleaf/nanoleaf.mapper.d.ts +6 -18
  100. package/dist_ts/integrations/nanoleaf/nanoleaf.mapper.js +45 -220
  101. package/dist_ts/integrations/nanoleaf/nanoleaf.types.d.ts +33 -147
  102. package/dist_ts/integrations/nanoleaf/nanoleaf.validation.d.ts +6 -0
  103. package/dist_ts/integrations/nanoleaf/nanoleaf.validation.js +82 -0
  104. package/dist_ts/integrations/onkyo/onkyo.classes.client.d.ts +15 -20
  105. package/dist_ts/integrations/onkyo/onkyo.classes.client.js +161 -404
  106. package/dist_ts/integrations/onkyo/onkyo.classes.configflow.d.ts +9 -4
  107. package/dist_ts/integrations/onkyo/onkyo.classes.configflow.js +51 -6
  108. package/dist_ts/integrations/onkyo/onkyo.classes.integration.d.ts +22 -6
  109. package/dist_ts/integrations/onkyo/onkyo.classes.integration.js +144 -11
  110. package/dist_ts/integrations/onkyo/onkyo.discovery.d.ts +6 -1
  111. package/dist_ts/integrations/onkyo/onkyo.discovery.js +40 -4
  112. package/dist_ts/integrations/onkyo/onkyo.mapper.d.ts +7 -8
  113. package/dist_ts/integrations/onkyo/onkyo.mapper.js +45 -12
  114. package/dist_ts/integrations/onkyo/onkyo.types.d.ts +58 -8
  115. package/dist_ts/integrations/onkyo/onkyo.types.js +13 -102
  116. package/dist_ts/integrations/onkyo/onkyo.validation.d.ts +16 -0
  117. package/dist_ts/integrations/onkyo/onkyo.validation.js +77 -0
  118. package/dist_ts/integrations/panasonic_viera/panasonic_viera.classes.client.d.ts +25 -25
  119. package/dist_ts/integrations/panasonic_viera/panasonic_viera.classes.client.js +116 -360
  120. package/dist_ts/integrations/panasonic_viera/panasonic_viera.classes.configflow.d.ts +11 -3
  121. package/dist_ts/integrations/panasonic_viera/panasonic_viera.classes.configflow.js +76 -6
  122. package/dist_ts/integrations/panasonic_viera/panasonic_viera.classes.integration.d.ts +26 -4
  123. package/dist_ts/integrations/panasonic_viera/panasonic_viera.classes.integration.js +142 -9
  124. package/dist_ts/integrations/panasonic_viera/panasonic_viera.discovery.d.ts +2 -1
  125. package/dist_ts/integrations/panasonic_viera/panasonic_viera.discovery.js +31 -4
  126. package/dist_ts/integrations/panasonic_viera/panasonic_viera.mapper.d.ts +9 -9
  127. package/dist_ts/integrations/panasonic_viera/panasonic_viera.mapper.js +31 -149
  128. package/dist_ts/integrations/panasonic_viera/panasonic_viera.types.d.ts +51 -11
  129. package/dist_ts/integrations/panasonic_viera/panasonic_viera.types.js +22 -87
  130. package/dist_ts/integrations/panasonic_viera/panasonic_viera.validation.d.ts +6 -0
  131. package/dist_ts/integrations/panasonic_viera/panasonic_viera.validation.js +56 -0
  132. package/dist_ts/integrations/pioneer/pioneer.classes.client.d.ts +31 -16
  133. package/dist_ts/integrations/pioneer/pioneer.classes.client.js +167 -409
  134. package/dist_ts/integrations/pioneer/pioneer.classes.configflow.d.ts +10 -3
  135. package/dist_ts/integrations/pioneer/pioneer.classes.configflow.js +66 -6
  136. package/dist_ts/integrations/pioneer/pioneer.classes.integration.d.ts +13 -5
  137. package/dist_ts/integrations/pioneer/pioneer.classes.integration.js +239 -11
  138. package/dist_ts/integrations/pioneer/pioneer.discovery.d.ts +14 -1
  139. package/dist_ts/integrations/pioneer/pioneer.discovery.js +51 -4
  140. package/dist_ts/integrations/pioneer/pioneer.mapper.d.ts +14 -8
  141. package/dist_ts/integrations/pioneer/pioneer.mapper.js +54 -12
  142. package/dist_ts/integrations/pioneer/pioneer.types.d.ts +79 -12
  143. package/dist_ts/integrations/pioneer/pioneer.types.js +12 -76
  144. package/dist_ts/integrations/pioneer/pioneer.validation.d.ts +10 -0
  145. package/dist_ts/integrations/pioneer/pioneer.validation.js +85 -0
  146. package/dist_ts/integrations/soundtouch/soundtouch.classes.client.d.ts +13 -36
  147. package/dist_ts/integrations/soundtouch/soundtouch.classes.client.js +179 -502
  148. package/dist_ts/integrations/soundtouch/soundtouch.classes.configflow.d.ts +6 -1
  149. package/dist_ts/integrations/soundtouch/soundtouch.classes.configflow.js +50 -40
  150. package/dist_ts/integrations/soundtouch/soundtouch.classes.integration.d.ts +14 -15
  151. package/dist_ts/integrations/soundtouch/soundtouch.classes.integration.js +108 -128
  152. package/dist_ts/integrations/soundtouch/soundtouch.discovery.d.ts +2 -20
  153. package/dist_ts/integrations/soundtouch/soundtouch.discovery.js +23 -113
  154. package/dist_ts/integrations/soundtouch/soundtouch.mapper.d.ts +3 -12
  155. package/dist_ts/integrations/soundtouch/soundtouch.mapper.js +35 -189
  156. package/dist_ts/integrations/soundtouch/soundtouch.types.d.ts +57 -142
  157. package/dist_ts/integrations/soundtouch/soundtouch.types.js +18 -3
  158. package/dist_ts/integrations/soundtouch/soundtouch.validation.d.ts +22 -0
  159. package/dist_ts/integrations/soundtouch/soundtouch.validation.js +65 -0
  160. package/dist_ts/integrations/wiz/index.d.ts +1 -0
  161. package/dist_ts/integrations/wiz/index.js +2 -1
  162. package/dist_ts/integrations/wiz/wiz.classes.client.d.ts +14 -28
  163. package/dist_ts/integrations/wiz/wiz.classes.client.js +93 -229
  164. package/dist_ts/integrations/wiz/wiz.classes.configflow.d.ts +6 -4
  165. package/dist_ts/integrations/wiz/wiz.classes.configflow.js +38 -67
  166. package/dist_ts/integrations/wiz/wiz.classes.integration.d.ts +10 -21
  167. package/dist_ts/integrations/wiz/wiz.classes.integration.js +204 -44
  168. package/dist_ts/integrations/wiz/wiz.discovery.d.ts +10 -31
  169. package/dist_ts/integrations/wiz/wiz.discovery.js +48 -249
  170. package/dist_ts/integrations/wiz/wiz.mapper.d.ts +7 -51
  171. package/dist_ts/integrations/wiz/wiz.mapper.js +82 -668
  172. package/dist_ts/integrations/wiz/wiz.types.d.ts +34 -208
  173. package/dist_ts/integrations/wiz/wiz.validation.d.ts +8 -0
  174. package/dist_ts/integrations/wiz/wiz.validation.js +72 -0
  175. package/dist_ts/integrations/yamaha/index.d.ts +1 -0
  176. package/dist_ts/integrations/yamaha/index.js +2 -1
  177. package/dist_ts/integrations/yamaha/yamaha.classes.client.d.ts +30 -4
  178. package/dist_ts/integrations/yamaha/yamaha.classes.client.js +162 -6
  179. package/dist_ts/integrations/yamaha/yamaha.classes.configflow.d.ts +10 -3
  180. package/dist_ts/integrations/yamaha/yamaha.classes.configflow.js +106 -6
  181. package/dist_ts/integrations/yamaha/yamaha.classes.integration.d.ts +22 -4
  182. package/dist_ts/integrations/yamaha/yamaha.classes.integration.js +243 -8
  183. package/dist_ts/integrations/yamaha/yamaha.discovery.d.ts +13 -1
  184. package/dist_ts/integrations/yamaha/yamaha.discovery.js +57 -4
  185. package/dist_ts/integrations/yamaha/yamaha.mapper.d.ts +16 -8
  186. package/dist_ts/integrations/yamaha/yamaha.mapper.js +58 -12
  187. package/dist_ts/integrations/yamaha/yamaha.types.d.ts +73 -6
  188. package/dist_ts/integrations/yamaha/yamaha.types.js +8 -94
  189. package/dist_ts/integrations/yamaha/yamaha.validation.d.ts +12 -0
  190. package/dist_ts/integrations/yamaha/yamaha.validation.js +89 -0
  191. package/package.json +3 -3
  192. package/readme.md +514 -2
  193. package/ts/00_commitinfo_data.ts +1 -1
  194. package/ts/core/classes.configstore.ts +84 -27
  195. package/ts/core/classes.nativehomeadmission.ts +96 -0
  196. package/ts/core/classes.nativeintegrationowner.ts +297 -0
  197. package/ts/core/index.ts +2 -0
  198. package/ts/core/types.ts +16 -0
  199. package/ts/integrations/braviatv/braviatv.classes.client.ts +245 -709
  200. package/ts/integrations/braviatv/braviatv.classes.configflow.ts +47 -76
  201. package/ts/integrations/braviatv/braviatv.classes.integration.ts +167 -147
  202. package/ts/integrations/braviatv/braviatv.discovery.ts +11 -10
  203. package/ts/integrations/braviatv/braviatv.mapper.ts +39 -142
  204. package/ts/integrations/braviatv/braviatv.types.ts +53 -173
  205. package/ts/integrations/braviatv/braviatv.validation.ts +68 -0
  206. package/ts/integrations/broadlink/broadlink.actions.ts +31 -0
  207. package/ts/integrations/broadlink/broadlink.classes.client.ts +170 -144
  208. package/ts/integrations/broadlink/broadlink.classes.configflow.ts +59 -89
  209. package/ts/integrations/broadlink/broadlink.classes.integration.ts +110 -64
  210. package/ts/integrations/broadlink/broadlink.mapper.ts +5 -4
  211. package/ts/integrations/broadlink/broadlink.selected.mapper.ts +46 -0
  212. package/ts/integrations/broadlink/broadlink.types.ts +48 -8
  213. package/ts/integrations/broadlink/broadlink.validation.ts +66 -0
  214. package/ts/integrations/daikin/daikin.classes.client.ts +52 -661
  215. package/ts/integrations/daikin/daikin.classes.configflow.ts +72 -152
  216. package/ts/integrations/daikin/daikin.classes.integration.ts +166 -71
  217. package/ts/integrations/daikin/daikin.discovery.ts +94 -346
  218. package/ts/integrations/daikin/daikin.mapper.ts +83 -166
  219. package/ts/integrations/daikin/daikin.types.ts +27 -48
  220. package/ts/integrations/daikin/daikin.validation.ts +51 -0
  221. package/ts/integrations/daikin/readme.md +83 -0
  222. package/ts/integrations/denonavr/denonavr.classes.client.ts +132 -421
  223. package/ts/integrations/denonavr/denonavr.classes.configflow.ts +44 -37
  224. package/ts/integrations/denonavr/denonavr.classes.integration.ts +171 -117
  225. package/ts/integrations/denonavr/denonavr.discovery.ts +67 -220
  226. package/ts/integrations/denonavr/denonavr.mapper.ts +36 -182
  227. package/ts/integrations/denonavr/denonavr.types.ts +48 -111
  228. package/ts/integrations/denonavr/denonavr.validation.ts +87 -0
  229. package/ts/integrations/kodi/kodi.classes.client.ts +72 -352
  230. package/ts/integrations/kodi/kodi.classes.configflow.ts +52 -55
  231. package/ts/integrations/kodi/kodi.classes.integration.ts +97 -178
  232. package/ts/integrations/kodi/kodi.discovery.ts +49 -28
  233. package/ts/integrations/kodi/kodi.mapper.ts +52 -10
  234. package/ts/integrations/kodi/kodi.types.ts +33 -58
  235. package/ts/integrations/kodi/kodi.validation.ts +60 -0
  236. package/ts/integrations/modbus/modbus.classes.client.ts +100 -842
  237. package/ts/integrations/modbus/modbus.classes.configflow.ts +70 -41
  238. package/ts/integrations/modbus/modbus.classes.integration.ts +115 -60
  239. package/ts/integrations/modbus/modbus.discovery.ts +38 -106
  240. package/ts/integrations/modbus/modbus.mapper.ts +64 -467
  241. package/ts/integrations/modbus/modbus.types.ts +64 -381
  242. package/ts/integrations/modbus/modbus.validation.ts +119 -0
  243. package/ts/integrations/nanoleaf/nanoleaf.classes.client.ts +115 -249
  244. package/ts/integrations/nanoleaf/nanoleaf.classes.configflow.ts +90 -19
  245. package/ts/integrations/nanoleaf/nanoleaf.classes.integration.ts +130 -181
  246. package/ts/integrations/nanoleaf/nanoleaf.credentials.ts +39 -0
  247. package/ts/integrations/nanoleaf/nanoleaf.mapper.ts +47 -260
  248. package/ts/integrations/nanoleaf/nanoleaf.types.ts +29 -147
  249. package/ts/integrations/nanoleaf/nanoleaf.validation.ts +77 -0
  250. package/ts/integrations/onkyo/onkyo.classes.client.ts +148 -457
  251. package/ts/integrations/onkyo/onkyo.classes.configflow.ts +52 -6
  252. package/ts/integrations/onkyo/onkyo.classes.integration.ts +121 -12
  253. package/ts/integrations/onkyo/onkyo.discovery.ts +41 -3
  254. package/ts/integrations/onkyo/onkyo.mapper.ts +46 -19
  255. package/ts/integrations/onkyo/onkyo.types.ts +55 -110
  256. package/ts/integrations/onkyo/onkyo.validation.ts +85 -0
  257. package/ts/integrations/onkyo/readme.md +126 -0
  258. package/ts/integrations/panasonic_viera/panasonic_viera.classes.client.ts +101 -398
  259. package/ts/integrations/panasonic_viera/panasonic_viera.classes.configflow.ts +69 -5
  260. package/ts/integrations/panasonic_viera/panasonic_viera.classes.integration.ts +141 -9
  261. package/ts/integrations/panasonic_viera/panasonic_viera.discovery.ts +32 -3
  262. package/ts/integrations/panasonic_viera/panasonic_viera.mapper.ts +34 -161
  263. package/ts/integrations/panasonic_viera/panasonic_viera.types.ts +52 -96
  264. package/ts/integrations/panasonic_viera/panasonic_viera.validation.ts +56 -0
  265. package/ts/integrations/pioneer/pioneer.classes.client.ts +132 -428
  266. package/ts/integrations/pioneer/pioneer.classes.configflow.ts +67 -5
  267. package/ts/integrations/pioneer/pioneer.classes.integration.ts +225 -11
  268. package/ts/integrations/pioneer/pioneer.discovery.ts +45 -3
  269. package/ts/integrations/pioneer/pioneer.mapper.ts +57 -13
  270. package/ts/integrations/pioneer/pioneer.types.ts +87 -85
  271. package/ts/integrations/pioneer/pioneer.validation.ts +84 -0
  272. package/ts/integrations/soundtouch/soundtouch.classes.client.ts +152 -571
  273. package/ts/integrations/soundtouch/soundtouch.classes.configflow.ts +47 -42
  274. package/ts/integrations/soundtouch/soundtouch.classes.integration.ts +95 -150
  275. package/ts/integrations/soundtouch/soundtouch.discovery.ts +21 -133
  276. package/ts/integrations/soundtouch/soundtouch.mapper.ts +36 -207
  277. package/ts/integrations/soundtouch/soundtouch.types.ts +50 -195
  278. package/ts/integrations/soundtouch/soundtouch.validation.ts +60 -0
  279. package/ts/integrations/wiz/index.ts +1 -0
  280. package/ts/integrations/wiz/wiz.classes.client.ts +84 -254
  281. package/ts/integrations/wiz/wiz.classes.configflow.ts +39 -70
  282. package/ts/integrations/wiz/wiz.classes.integration.ts +189 -45
  283. package/ts/integrations/wiz/wiz.discovery.ts +48 -291
  284. package/ts/integrations/wiz/wiz.mapper.ts +81 -754
  285. package/ts/integrations/wiz/wiz.types.ts +24 -224
  286. package/ts/integrations/wiz/wiz.validation.ts +73 -0
  287. package/ts/integrations/yamaha/index.ts +1 -0
  288. package/ts/integrations/yamaha/yamaha.classes.client.ts +150 -6
  289. package/ts/integrations/yamaha/yamaha.classes.configflow.ts +100 -5
  290. package/ts/integrations/yamaha/yamaha.classes.integration.ts +236 -8
  291. package/ts/integrations/yamaha/yamaha.discovery.ts +52 -3
  292. package/ts/integrations/yamaha/yamaha.mapper.ts +65 -13
  293. package/ts/integrations/yamaha/yamaha.types.ts +77 -97
  294. package/ts/integrations/yamaha/yamaha.validation.ts +86 -0
@@ -1,8 +1,78 @@
1
- import { SimpleLocalConfigFlow } from '../../core/index.js';
2
- import { panasonicVieraProfile } from './panasonic_viera.types.js';
3
- export class PanasonicVieraConfigFlow extends SimpleLocalConfigFlow {
4
- constructor() {
5
- super(panasonicVieraProfile);
1
+ import { NativeIntegrationOwner } from '../../core/classes.nativeintegrationowner.js';
2
+ import { PanasonicVieraClient } from './panasonic_viera.classes.client.js';
3
+ import { createPanasonicVieraDiscoveryDescriptor } from './panasonic_viera.discovery.js';
4
+ import { normalizePanasonicVieraConfig, panasonicVieraRecord } from './panasonic_viera.validation.js';
5
+ export class PanasonicVieraConfigFlow {
6
+ scope;
7
+ clients = new Set();
8
+ submitting = false;
9
+ constructor(optionsArg = {}, scopeArg) {
10
+ this.scope = scopeArg ?? new NativeIntegrationOwner('panasonic_viera', optionsArg).createFlowScope();
11
+ }
12
+ start(candidateArg, contextArg) {
13
+ return this.scope.run(contextArg, undefined, async (lease) => {
14
+ const match = await createPanasonicVieraDiscoveryDescriptor().getValidators()[0].validate(candidateArg, {});
15
+ lease.assertOpen();
16
+ if (!match.matched || !match.candidate)
17
+ return { kind: 'error', error: match.reason };
18
+ const host = match.candidate.host;
19
+ const context = lease.context;
20
+ return {
21
+ kind: 'form', title: 'Connect selected plaintext Panasonic NRC',
22
+ description: 'Select the exact description URL, UPnP UDN and model for the host-selected home. Only advertised keys are supported; encrypted/PIN TVs are refused.',
23
+ fields: [
24
+ { name: 'descriptionUrl', label: 'Selected HTTP UPnP description URL', type: 'text', required: true },
25
+ { name: 'expectedUdn', label: 'Selected UPnP UUID', type: 'text', required: true },
26
+ { name: 'expectedModelName', label: 'Selected exact model name', type: 'text', required: true },
27
+ { name: 'allowUnencryptedLan', label: 'Acknowledge unauthenticated plaintext LAN', type: 'boolean', required: true },
28
+ { name: 'name', label: 'Name', type: 'text' },
29
+ ],
30
+ submit: (valuesArg) => this.submit(host, valuesArg, context),
31
+ };
32
+ });
33
+ }
34
+ destroy() { return this.scope.close(); }
35
+ retryCleanup() { return this.scope.retryCleanup(); }
36
+ async submit(hostArg, valuesArg, contextArg) {
37
+ // Fence stale form closures even when another submission is in flight.
38
+ this.scope.admit(contextArg);
39
+ if (this.submitting)
40
+ throw new Error('Panasonic Viera config-flow admission is already in progress.');
41
+ this.submitting = true;
42
+ try {
43
+ const values = panasonicVieraRecord(valuesArg, ['homeId', 'descriptionUrl', 'expectedUdn', 'expectedModelName', 'allowUnencryptedLan', 'name', 'timeoutMs', 'maxResponseBytes']);
44
+ if (values.homeId !== undefined && values.homeId !== contextArg.homeId)
45
+ throw new Error('Panasonic Viera form home does not match the selected host home.');
46
+ const config = normalizePanasonicVieraConfig({ ...values, host: hostArg, homeId: contextArg.homeId });
47
+ return await this.scope.run(contextArg, config.homeId, async (lease) => {
48
+ const client = new PanasonicVieraClient(config, { ...lease.context, abortSignal: lease.signal });
49
+ this.clients.add(client);
50
+ let attemptedCleanup = false;
51
+ lease.own(async () => {
52
+ if (attemptedCleanup)
53
+ await client.retryCleanup();
54
+ else {
55
+ attemptedCleanup = true;
56
+ await client.destroy();
57
+ }
58
+ this.clients.delete(client);
59
+ });
60
+ await client.start(lease.signal);
61
+ lease.assertOpen();
62
+ if (client.isClosed)
63
+ throw new Error('Panasonic Viera config-flow admission was cancelled.');
64
+ return { kind: 'done', title: 'Selected Panasonic NRC admitted', config };
65
+ });
66
+ }
67
+ catch (errorArg) {
68
+ // Cleanup rejection retains its original evidence and lease; admission errors are form results.
69
+ if (errorArg instanceof AggregateError)
70
+ throw errorArg;
71
+ return { kind: 'error', error: errorArg instanceof Error ? errorArg.message : 'Panasonic Viera admission failed.' };
72
+ }
73
+ finally {
74
+ this.submitting = false;
75
+ }
6
76
  }
7
77
  }
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuYXNvbmljX3ZpZXJhLmNsYXNzZXMuY29uZmlnZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ludGVncmF0aW9ucy9wYW5hc29uaWNfdmllcmEvcGFuYXNvbmljX3ZpZXJhLmNsYXNzZXMuY29uZmlnZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRSxNQUFNLE9BQU8sd0JBQXlCLFNBQVEscUJBQTRDO0lBQ3hGO1FBQ0UsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDL0IsQ0FBQztDQUNGIn0=
78
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuYXNvbmljX3ZpZXJhLmNsYXNzZXMuY29uZmlnZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ludGVncmF0aW9ucy9wYW5hc29uaWNfdmllcmEvcGFuYXNvbmljX3ZpZXJhLmNsYXNzZXMuY29uZmlnZmxvdy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQW9FLE1BQU0sOENBQThDLENBQUM7QUFHeEosT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFekYsT0FBTyxFQUFFLDZCQUE2QixFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFdEcsTUFBTSxPQUFPLHdCQUF3QjtJQUNsQixLQUFLLENBQXlCO0lBQzlCLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBd0IsQ0FBQztJQUNuRCxVQUFVLEdBQUcsS0FBSyxDQUFDO0lBRTNCLFlBQW1CLFVBQVUsR0FBbUMsRUFBRSxFQUFFLFFBQWlDO1FBQ25HLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxJQUFJLElBQUksc0JBQXNCLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxDQUFDLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDdkcsQ0FBQztJQUVNLEtBQUssQ0FBQyxZQUFpQyxFQUFFLFVBQThCO1FBQzVFLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDM0QsTUFBTSxLQUFLLEdBQUcsTUFBTSx1Q0FBdUMsRUFBRSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDNUcsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ25CLElBQUks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
@@ -1,12 +1,34 @@
1
- import { SimpleLocalIntegration, type IIntegrationRuntime, type IIntegrationSetupContext } from '../../core/index.js';
1
+ import { BaseIntegration } from '../../core/classes.baseintegration.js';
2
+ import { type INativeIntegrationOwnerOptions } from '../../core/classes.nativeintegrationowner.js';
3
+ import type { IIntegrationRuntime, IIntegrationSetupContext } from '../../core/types.js';
2
4
  import { PanasonicVieraConfigFlow } from './panasonic_viera.classes.configflow.js';
3
5
  import type { IPanasonicVieraConfig } from './panasonic_viera.types.js';
4
- export declare class PanasonicVieraIntegration extends SimpleLocalIntegration<IPanasonicVieraConfig> {
6
+ export declare class PanasonicVieraIntegration extends BaseIntegration<IPanasonicVieraConfig> {
5
7
  readonly domain = "panasonic_viera";
6
- readonly discoveryDescriptor: import("../../core/classes.discoverydescriptor.js").DiscoveryDescriptor;
8
+ readonly displayName = "Panasonic Viera";
9
+ readonly status = "control-runtime";
10
+ readonly discoveryDescriptor: import("../../index.js").DiscoveryDescriptor;
7
11
  readonly configFlow: PanasonicVieraConfigFlow;
8
- constructor();
12
+ readonly metadata: {
13
+ source: string;
14
+ upstreamPath: string;
15
+ upstreamDomain: string;
16
+ integrationType: string;
17
+ iotClass: string;
18
+ configFlow: boolean;
19
+ documentation: string;
20
+ runtime: {
21
+ type: string;
22
+ controls: string;
23
+ explicitUnsupported: string[];
24
+ };
25
+ };
26
+ private readonly owner;
27
+ private readonly clients;
28
+ constructor(optionsArg?: INativeIntegrationOwnerOptions);
9
29
  setup(configArg: IPanasonicVieraConfig, contextArg: IIntegrationSetupContext): Promise<IIntegrationRuntime>;
30
+ destroy(): Promise<void>;
31
+ retryCleanup(): Promise<void>;
10
32
  }
11
33
  export declare class HomeAssistantPanasonicVieraIntegration extends PanasonicVieraIntegration {
12
34
  }
@@ -1,20 +1,153 @@
1
- import { SimpleLocalIntegration, SimpleLocalRuntime } from '../../core/index.js';
1
+ import { BaseIntegration } from '../../core/classes.baseintegration.js';
2
+ import { NativeIntegrationOwner } from '../../core/classes.nativeintegrationowner.js';
2
3
  import { PanasonicVieraClient } from './panasonic_viera.classes.client.js';
3
4
  import { PanasonicVieraConfigFlow } from './panasonic_viera.classes.configflow.js';
4
5
  import { createPanasonicVieraDiscoveryDescriptor } from './panasonic_viera.discovery.js';
6
+ import { PanasonicVieraMapper } from './panasonic_viera.mapper.js';
5
7
  import { panasonicVieraDomain, panasonicVieraProfile } from './panasonic_viera.types.js';
6
- export class PanasonicVieraIntegration extends SimpleLocalIntegration {
8
+ import { drainPanasonicVieraCleanup, normalizePanasonicVieraConfig, panasonicVieraRecord } from './panasonic_viera.validation.js';
9
+ export class PanasonicVieraIntegration extends BaseIntegration {
7
10
  domain = panasonicVieraDomain;
11
+ displayName = 'Panasonic Viera';
12
+ status = 'control-runtime';
8
13
  discoveryDescriptor = createPanasonicVieraDiscoveryDescriptor();
9
- configFlow = new PanasonicVieraConfigFlow();
10
- constructor() {
11
- super(panasonicVieraProfile);
14
+ configFlow;
15
+ metadata = panasonicVieraProfile.metadata;
16
+ owner;
17
+ // Failed cleanup stays in this map and on the shared owner's bounded lease.
18
+ clients = new Map();
19
+ constructor(optionsArg = {}) {
20
+ super();
21
+ this.owner = new NativeIntegrationOwner(this.domain, optionsArg);
22
+ this.configFlow = new PanasonicVieraConfigFlow({}, this.owner.createFlowScope());
12
23
  }
13
- async setup(configArg, contextArg) {
14
- void contextArg;
15
- return new SimpleLocalRuntime(panasonicVieraProfile, new PanasonicVieraClient(configArg));
24
+ setup(configArg, contextArg) {
25
+ const config = normalizePanasonicVieraConfig(configArg);
26
+ return this.owner.runSetup(contextArg, config.homeId, async (lease) => {
27
+ const client = new PanasonicVieraClient(config, { ...lease.context, abortSignal: lease.signal });
28
+ this.clients.set(client, undefined);
29
+ let attemptedCleanup = false;
30
+ lease.own(async () => {
31
+ const runtime = this.clients.get(client);
32
+ if (attemptedCleanup)
33
+ await (runtime ? runtime.retryCleanupOwned() : client.retryCleanup());
34
+ else {
35
+ attemptedCleanup = true;
36
+ await (runtime ? runtime.closeOwned() : client.destroy());
37
+ }
38
+ this.clients.delete(client);
39
+ });
40
+ const snapshot = await client.start(lease.signal);
41
+ lease.assertOpen();
42
+ if (client.isClosed)
43
+ throw new Error('Panasonic Viera setup was cancelled.');
44
+ const runtime = new PanasonicVieraRuntime(client, snapshot, lease);
45
+ this.clients.set(client, runtime);
46
+ lease.promoteToRuntime();
47
+ return runtime;
48
+ });
16
49
  }
50
+ destroy() { return this.owner.close(); }
51
+ retryCleanup() { return this.owner.retryCleanup(); }
17
52
  }
18
53
  export class HomeAssistantPanasonicVieraIntegration extends PanasonicVieraIntegration {
19
54
  }
20
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuYXNvbmljX3ZpZXJhLmNsYXNzZXMuaW50ZWdyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9pbnRlZ3JhdGlvbnMvcGFuYXNvbmljX3ZpZXJhL3BhbmFzb25pY192aWVyYS5jbGFzc2VzLmludGVncmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxrQkFBa0IsRUFBMkQsTUFBTSxxQkFBcUIsQ0FBQztBQUMxSSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUNuRixPQUFPLEVBQUUsdUNBQXVDLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUV6RixPQUFPLEVBQUUsb0JBQW9CLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV6RixNQUFNLE9BQU8seUJBQTBCLFNBQVEsc0JBQTZDO0lBQzFFLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQztJQUM5QixtQkFBbUIsR0FBRyx1Q0FBdUMsRUFBRSxDQUFDO0lBQ2hFLFVBQVUsR0FBRyxJQUFJLHdCQUF3QixFQUFFLENBQUM7SUFFNUQ7UUFDRSxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sS0FBSyxDQUFDLEtBQUssQ0FBQyxTQUFnQyxFQUFFLFVBQW9DO1FBQ3ZGLEtBQUssVUFBVSxDQUFDO1FBQ2hCLE9BQU8sSUFBSSxrQkFBa0IsQ0FBQyxxQkFBcUIsRUFBRSxJQUFJLG9CQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQztDQUNGO0FBRUQsTUFBTSxPQUFPLHNDQUF1QyxTQUFRLHlCQUF5QjtDQUFHIn0=
55
+ class PanasonicVieraRuntime {
56
+ client;
57
+ admittedSnapshot;
58
+ lease;
59
+ domain = panasonicVieraDomain;
60
+ deviceId;
61
+ operations = new Set();
62
+ closePromise;
63
+ constructor(client, admittedSnapshot, lease) {
64
+ this.client = client;
65
+ this.admittedSnapshot = admittedSnapshot;
66
+ this.lease = lease;
67
+ this.deviceId = PanasonicVieraMapper.deviceId(admittedSnapshot);
68
+ }
69
+ isHealthy() { return this.client.isHealthy; }
70
+ devices(abortSignalArg) {
71
+ return this.track(async () => PanasonicVieraMapper.toDevices(await this.client.getSnapshot(abortSignalArg)));
72
+ }
73
+ entities() {
74
+ return this.track(async () => PanasonicVieraMapper.toEntities(await this.client.getSnapshot()));
75
+ }
76
+ callService(requestArg) {
77
+ return this.track(() => this.performService(requestArg));
78
+ }
79
+ async performService(requestArg) {
80
+ const request = panasonicVieraRecord(requestArg, ['domain', 'service', 'target', 'data']);
81
+ if (request.domain !== this.domain && request.domain !== 'button' || request.service !== 'press') {
82
+ throw new TypeError('Panasonic Viera supports exact-target button.press only.');
83
+ }
84
+ const target = panasonicVieraRecord(request.target, ['deviceId', 'entityId']);
85
+ if (target.deviceId !== undefined && target.deviceId !== this.deviceId || target.deviceId === undefined && target.entityId === undefined) {
86
+ throw new TypeError('Panasonic Viera requires an exact connected target.');
87
+ }
88
+ const data = request.data === undefined ? {} : panasonicVieraRecord(request.data, ['key']);
89
+ const snapshot = await this.client.getSnapshot();
90
+ let key;
91
+ if (target.entityId !== undefined) {
92
+ const entityKey = snapshot.profile.keys.find((keyArg) => PanasonicVieraMapper.keyEntityId(snapshot, keyArg) === target.entityId);
93
+ if (!entityKey || data.key !== undefined && data.key !== entityKey)
94
+ throw new TypeError('Panasonic Viera button target and key must agree.');
95
+ key = entityKey;
96
+ }
97
+ else
98
+ key = this.admittedKey(snapshot, data.key);
99
+ return { success: true, data: await this.client.sendKey(key) };
100
+ }
101
+ writeFeature(requestArg, abortSignalArg) {
102
+ return this.track(() => this.performWrite(requestArg, abortSignalArg));
103
+ }
104
+ async performWrite(requestArg, abortSignalArg) {
105
+ const request = panasonicVieraRecord(requestArg, ['device', 'feature', 'value']);
106
+ const device = panasonicVieraRecord(request.device, ['id', 'integrationDomain', 'name', 'room', 'protocol', 'manufacturer', 'model', 'online', 'features', 'state', 'metadata']);
107
+ if (device.id !== this.deviceId || device.integrationDomain !== this.domain)
108
+ throw new TypeError('Panasonic Viera feature target belongs to another connection.');
109
+ if (device.metadata !== undefined && panasonicVieraRecord(device.metadata).homeId !== this.admittedSnapshot.homeId) {
110
+ throw new TypeError('Panasonic Viera feature target belongs to another home.');
111
+ }
112
+ const feature = panasonicVieraRecord(request.feature, ['id', 'capability', 'name', 'readable', 'writable', 'unit']);
113
+ if (feature.id !== 'remote_key' || feature.capability !== 'media' || feature.readable !== false || feature.writable !== true || feature.unit !== undefined) {
114
+ throw new TypeError('Panasonic Viera writes require the connected write-only remote_key feature.');
115
+ }
116
+ const snapshot = await this.client.getSnapshot(abortSignalArg);
117
+ return { success: true, data: await this.client.sendKey(this.admittedKey(snapshot, request.value), abortSignalArg) };
118
+ }
119
+ destroy() { return this.lease.close(); }
120
+ /** The lease owns this logical drain, including work beyond an individual protocol call. */
121
+ closeOwned() {
122
+ if (!this.closePromise) {
123
+ const operations = [...this.operations];
124
+ this.closePromise = Promise.resolve().then(() => drainPanasonicVieraCleanup([this.client.destroy()], operations, 'Panasonic Viera runtime cleanup failed.'));
125
+ }
126
+ return this.closePromise;
127
+ }
128
+ retryCleanupOwned() {
129
+ return drainPanasonicVieraCleanup([this.client.retryCleanup()], [...this.operations], 'Panasonic Viera runtime explicit cleanup retry failed.');
130
+ }
131
+ track(executeArg) {
132
+ try {
133
+ this.lease.assertOpen();
134
+ }
135
+ catch (errorArg) {
136
+ return Promise.reject(errorArg);
137
+ }
138
+ if (this.closePromise || this.client.isClosed)
139
+ return Promise.reject(new Error('Panasonic Viera runtime is closed.'));
140
+ if (this.operations.size !== 0)
141
+ return Promise.reject(new Error('Panasonic Viera runtime has an active operation.'));
142
+ const operation = Promise.resolve().then(executeArg).finally(() => this.operations.delete(operation));
143
+ this.operations.add(operation);
144
+ return operation;
145
+ }
146
+ admittedKey(snapshotArg, valueArg) {
147
+ const key = snapshotArg.profile.keys.find((keyArg) => keyArg === valueArg);
148
+ if (!key)
149
+ throw new TypeError('Panasonic Viera key was not admitted for this connection.');
150
+ return key;
151
+ }
152
+ }
153
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuYXNvbmljX3ZpZXJhLmNsYXNzZXMuaW50ZWdyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi90cy9pbnRlZ3JhdGlvbnMvcGFuYXNvbmljX3ZpZXJhL3BhbmFzb25pY192aWVyYS5jbGFzc2VzLmludGVncmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUN4RSxPQUFPLEVBQUUsc0JBQXNCLEVBQStELE1BQU0sOENBQThDLENBQUM7QUFFbkosT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0seUNBQXlDLENBQUM7QUFDbkYsT0FBTyxFQUFFLHVDQUF1QyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekYsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDekYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLDZCQUE2QixFQUFFLG9CQUFvQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFbEksTUFBTSxPQUFPLHlCQUEwQixTQUFRLGVBQXNDO0lBQ25FLE1BQU0sR0FBRyxvQkFBb0IsQ0FBQztJQUM5QixXQUFXLEdBQUcsaUJBQWlCLENBQUM7SUFDaEMsTUFBTSxHQUFHLGlCQUFpQixDQUFDO0lBQzNCLG1CQUFtQixHQUFHLHVDQUF1QyxFQUFFLENBQUM7SUFDaEUsVUFBVSxDQUEyQjtJQUNyQyxRQUFRLEdBQUcscUJBQXFCLENBQUMsUUFBUSxDQUFDO0lBQ3pDLEtBQUssQ0FBeUI7SUFDL0MsNEVBQTRFO0lBQzNELE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBMkQsQ0FBQztJQUU5RixZQUFtQixVQUFVLEdBQW1DLEVBQUU7UUFDaEUsS0FB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
@@ -1 +1,2 @@
1
- export declare const createPanasonicVieraDiscoveryDescriptor: () => import("../../core/classes.discoverydescriptor.js").DiscoveryDescriptor;
1
+ import { DiscoveryDescriptor } from '../../core/classes.discoverydescriptor.js';
2
+ export declare function createPanasonicVieraDiscoveryDescriptor(): DiscoveryDescriptor;
@@ -1,4 +1,31 @@
1
- import { createSimpleLocalDiscoveryDescriptor } from '../../core/index.js';
2
- import { panasonicVieraProfile } from './panasonic_viera.types.js';
3
- export const createPanasonicVieraDiscoveryDescriptor = () => createSimpleLocalDiscoveryDescriptor(panasonicVieraProfile);
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuYXNvbmljX3ZpZXJhLmRpc2NvdmVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ludGVncmF0aW9ucy9wYW5hc29uaWNfdmllcmEvcGFuYXNvbmljX3ZpZXJhLmRpc2NvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsb0NBQW9DLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMzRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVuRSxNQUFNLENBQUMsTUFBTSx1Q0FBdUMsR0FBRyxHQUFHLEVBQUUsQ0FBQyxvQ0FBb0MsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDIn0=
1
+ import { DiscoveryDescriptor } from '../../core/classes.discoverydescriptor.js';
2
+ import { panasonicVieraRecord } from './panasonic_viera.validation.js';
3
+ class PanasonicVieraManualMatcher {
4
+ id = 'panasonic_viera-manual-match';
5
+ source = 'manual';
6
+ async matches(inputArg) {
7
+ try {
8
+ const input = panasonicVieraRecord(inputArg);
9
+ if (input.integrationDomain !== 'panasonic_viera' || typeof input.host !== 'string' || !input.host) {
10
+ return { matched: false, confidence: 'low', reason: 'Select an explicit Panasonic Viera manual endpoint.' };
11
+ }
12
+ const candidate = { source: 'manual', integrationDomain: 'panasonic_viera', host: input.host,
13
+ metadata: input.metadata === undefined ? undefined : panasonicVieraRecord(input.metadata) };
14
+ return { matched: true, confidence: 'low', reason: 'Manual endpoint hint only; setup must verify the selected description and current NRC service.', candidate };
15
+ }
16
+ catch {
17
+ return { matched: false, confidence: 'low', reason: 'Invalid Panasonic Viera manual hint.' };
18
+ }
19
+ }
20
+ }
21
+ class PanasonicVieraCandidateValidator {
22
+ id = 'panasonic_viera-candidate-validator';
23
+ async validate(candidateArg) {
24
+ return new PanasonicVieraManualMatcher().matches(candidateArg);
25
+ }
26
+ }
27
+ export function createPanasonicVieraDiscoveryDescriptor() {
28
+ return new DiscoveryDescriptor({ integrationDomain: 'panasonic_viera', displayName: 'Panasonic Viera' })
29
+ .addMatcher(new PanasonicVieraManualMatcher()).addValidator(new PanasonicVieraCandidateValidator());
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuYXNvbmljX3ZpZXJhLmRpc2NvdmVyeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ludGVncmF0aW9ucy9wYW5hc29uaWNfdmllcmEvcGFuYXNvbmljX3ZpZXJhLmRpc2NvdmVyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUVoRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUV2RSxNQUFNLDJCQUEyQjtJQUNmLEVBQUUsR0FBRyw4QkFBOEIsQ0FBQztJQUNwQyxNQUFNLEdBQUcsUUFBUSxDQUFDO0lBQzNCLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBaUI7UUFDcEMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxLQUFLLEdBQUcsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDN0MsSUFBSSxLQUFLLENBQUMsaUJBQWlCLEtBQUssaUJBQWlCLElBQUksT0FBTyxLQUFLLENBQUMsSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbkcsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUscURBQXFELEVBQUUsQ0FBQztZQUM5RyxDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQXdCLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsS0FBSyxDQUFDLElBQUk7Z0JBQy9HLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUM5RixPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxnR0FBZ0csRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUNuSyxDQUFDO1FBQUMsTUFBTSxDQUFDO1lBQ1AsT0FBTyxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQztRQUMvRixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBRUQsTUFBTSxnQ0FBZ0M7SUFDcEIsRUFBRSxHQUFHLHFDQUFxQyxDQUFDO0lBQ3BELEtBQUssQ0FBQyxRQUFRLENBQUMsWUFBaUM7UUFDckQsT0FBTyxJQUFJLDJCQUEyQixFQUFFLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2pFLENBQUM7Q0FDRjtBQUVELE1BQU0sVUFBVSx1Q0FBdUM7SUFDckQsT0FBTyxJQUFJLG1CQUFtQixDQUFDLEVBQUUsaUJBQWlCLEVBQUUsaUJBQWlCLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLENBQUM7U0FDckcsVUFBVSxDQUFDLElBQUksMkJBQTJCLEVBQUUsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLGdDQUFnQyxFQUFFLENBQUMsQ0FBQztBQUN4RyxDQUFDIn0=
@@ -1,11 +1,11 @@
1
- import type * as shxInterfaces from '@smarthome.exchange/interfaces';
2
- import { type IIntegrationEntity, type ISimpleLocalSnapshot, type ISimpleLocalSnapshotOptions, type TSimpleLocalRawData } from '../../core/index.js';
3
- import type { IPanasonicVieraConfig, TPanasonicVieraRawData } from './panasonic_viera.types.js';
1
+ import type * as plugins from '../../plugins.js';
2
+ import type { IIntegrationEntity, ISimpleLocalSnapshot } from '../../core/index.js';
3
+ import type { IPanasonicVieraOfflineConfig, IPanasonicVieraSnapshot, TPanasonicVieraKey, TPanasonicVieraRawData } from './panasonic_viera.types.js';
4
4
  export declare class PanasonicVieraMapper {
5
- static toSnapshot(optionsArg: Omit<ISimpleLocalSnapshotOptions<IPanasonicVieraConfig>, 'profile'>): ISimpleLocalSnapshot;
6
- static toSnapshotFromRaw(configArg: IPanasonicVieraConfig, rawDataArg: TSimpleLocalRawData | TPanasonicVieraRawData): ISimpleLocalSnapshot;
7
- static toDevices(snapshotArg: ISimpleLocalSnapshot): shxInterfaces.data.IDeviceDefinition[];
8
- static toEntities(snapshotArg: ISimpleLocalSnapshot): IIntegrationEntity[];
9
- static slug(valueArg: unknown): string;
10
- static normalizeRawData(rawDataArg: unknown, configArg: IPanasonicVieraConfig): unknown;
5
+ static deviceId(snapshotArg: Pick<IPanasonicVieraSnapshot, 'homeId' | 'profile'>): string;
6
+ static keyEntityId(snapshotArg: Pick<IPanasonicVieraSnapshot, 'homeId' | 'profile'>, keyArg: TPanasonicVieraKey): string;
7
+ static toDevices(snapshotArg: IPanasonicVieraSnapshot): plugins.shxInterfaces.data.IDeviceDefinition[];
8
+ static toEntities(snapshotArg: IPanasonicVieraSnapshot): IIntegrationEntity<null>[];
9
+ /** Pure conversion of supplied data; unavailable and read-only regardless of the input's claims. */
10
+ static toSnapshotFromRaw(configArg: IPanasonicVieraOfflineConfig, rawDataArg: TPanasonicVieraRawData): ISimpleLocalSnapshot;
11
11
  }
@@ -1,157 +1,39 @@
1
- import { SimpleLocalMapper } from '../../core/index.js';
2
- import { panasonicVieraDefaultName, panasonicVieraDefaultPort, panasonicVieraProfile } from './panasonic_viera.types.js';
1
+ import { SimpleLocalMapper } from '../../core/classes.simplelocalintegration.js';
2
+ import { panasonicVieraDomain } from './panasonic_viera.types.js';
3
3
  export class PanasonicVieraMapper {
4
- static toSnapshot(optionsArg) {
5
- return SimpleLocalMapper.toSnapshot({ ...optionsArg, profile: panasonicVieraProfile, rawData: this.normalizeRawData(optionsArg.rawData, optionsArg.config) });
4
+ static deviceId(snapshotArg) {
5
+ return `panasonic_viera:${encodeURIComponent(snapshotArg.homeId)}:${encodeURIComponent(snapshotArg.profile.identity.udn)}`;
6
6
  }
7
- static toSnapshotFromRaw(configArg, rawDataArg) {
8
- return this.toSnapshot({ config: configArg, rawData: rawDataArg, online: true, source: 'manual' });
7
+ static keyEntityId(snapshotArg, keyArg) {
8
+ return `${this.deviceId(snapshotArg)}:key:${keyArg}`;
9
9
  }
10
10
  static toDevices(snapshotArg) {
11
- return SimpleLocalMapper.toDevices(panasonicVieraProfile, snapshotArg);
11
+ const identity = snapshotArg.profile.identity;
12
+ return [{
13
+ id: this.deviceId(snapshotArg), integrationDomain: panasonicVieraDomain,
14
+ name: snapshotArg.name, manufacturer: identity.manufacturer, model: identity.modelName,
15
+ protocol: 'http', online: true,
16
+ features: [{ id: 'remote_key', capability: 'media', name: 'Remote key', readable: false, writable: snapshotArg.profile.keys.length > 0 }],
17
+ state: [],
18
+ metadata: { homeId: snapshotArg.homeId, udn: identity.udn, family: snapshotArg.profile.family,
19
+ advertisedKeys: [...snapshotArg.profile.keys], observedAt: identity.observedAt,
20
+ lanAuthenticated: false, confirmation: 'soap-response' },
21
+ }];
12
22
  }
13
23
  static toEntities(snapshotArg) {
14
- return SimpleLocalMapper.toEntities(panasonicVieraProfile, snapshotArg);
15
- }
16
- static slug(valueArg) {
17
- return SimpleLocalMapper.slug(valueArg);
18
- }
19
- static normalizeRawData(rawDataArg, configArg) {
20
- const parsedRawData = parseMaybeJson(rawDataArg);
21
- const rawObject = objectValue(parsedRawData);
22
- if (!rawObject || rawObject.device || Array.isArray(rawObject.entities)) {
23
- return parsedRawData;
24
- }
25
- const deviceInfo = objectValue(rawObject.deviceInfo);
26
- if (!deviceInfo && rawObject.volume === undefined && rawObject.muted === undefined) {
27
- return parsedRawData;
28
- }
29
- const host = configArg.host || hostFromUrl(configArg.url);
30
- const port = configArg.port || (host ? panasonicVieraDefaultPort : undefined);
31
- const name = configArg.name || stringValue(deviceInfo?.friendlyName) || stringValue(deviceInfo?.FriendlyName) || panasonicVieraDefaultName;
32
- const manufacturer = stringValue(deviceInfo?.manufacturer) || stringValue(deviceInfo?.Manufacturer) || 'Panasonic';
33
- const model = stringValue(deviceInfo?.modelNumber) || stringValue(deviceInfo?.modelName) || stringValue(deviceInfo?.ModelNumber) || 'Panasonic Viera';
34
- const udn = stringValue(deviceInfo?.UDN) || stringValue(deviceInfo?.udn);
35
- const volume = numberValue(rawObject.volume);
36
- const muted = booleanValue(rawObject.muted);
37
- const entities = [
38
- {
39
- id: 'media_player',
40
- name,
41
- platform: 'media_player',
42
- state: rawObject.state || 'on',
43
- writable: true,
44
- attributes: cleanAttributes({
45
- volumeLevel: volume === undefined ? undefined : volume / 100,
46
- volumePercent: volume,
47
- muted,
48
- tvType: rawObject.tvType,
49
- }),
50
- },
51
- {
52
- id: 'remote',
53
- name: `${name} Remote`,
54
- platform: 'button',
55
- state: false,
56
- writable: true,
57
- attributes: { action: 'press' },
58
- },
59
- ];
60
- if (volume !== undefined) {
61
- entities.push({
62
- id: 'volume',
63
- name: 'Volume',
64
- platform: 'sensor',
65
- state: volume,
66
- unit: '%',
67
- deviceClass: 'volume',
68
- attributes: { source: 'RenderingControl.GetVolume' },
69
- });
70
- }
71
- if (muted !== undefined) {
72
- entities.push({
73
- id: 'muted',
74
- name: 'Muted',
75
- platform: 'binary_sensor',
76
- state: muted,
77
- attributes: { source: 'RenderingControl.GetMute' },
78
- });
79
- }
80
- return {
81
- device: {
82
- id: configArg.uniqueId || configArg.deviceId || udn || (host ? `${host}:${port || panasonicVieraDefaultPort}` : undefined) || panasonicVieraDefaultName,
83
- name,
84
- manufacturer,
85
- model,
86
- serialNumber: udn,
87
- host,
88
- port,
89
- protocol: 'http',
90
- attributes: cleanAttributes({ udn, rawDeviceInfo: deviceInfo }),
91
- },
92
- entities,
93
- online: true,
94
- updatedAt: stringValue(rawObject.fetchedAt) || new Date().toISOString(),
95
- source: 'http',
96
- rawData: parsedRawData,
97
- };
24
+ return snapshotArg.profile.keys.map((keyArg) => ({
25
+ id: this.keyEntityId(snapshotArg, keyArg), uniqueId: this.keyEntityId(snapshotArg, keyArg),
26
+ deviceId: this.deviceId(snapshotArg), integrationDomain: panasonicVieraDomain, platform: 'button',
27
+ name: `${snapshotArg.name} ${keyArg}`, state: null, available: true,
28
+ attributes: { key: keyArg, confirmation: 'soap-response', observedAt: snapshotArg.profile.identity.observedAt },
29
+ }));
30
+ }
31
+ /** Pure conversion of supplied data; unavailable and read-only regardless of the input's claims. */
32
+ static toSnapshotFromRaw(configArg, rawDataArg) {
33
+ const profile = { domain: panasonicVieraDomain, displayName: 'Panasonic Viera offline data', status: 'read-only-runtime',
34
+ platforms: ['sensor'], manufacturer: 'Panasonic', defaultName: 'Panasonic Viera offline data', metadata: {} };
35
+ const snapshot = SimpleLocalMapper.toSnapshot({ profile, config: configArg, rawData: rawDataArg, source: 'manual', online: false });
36
+ return { ...snapshot, online: false, source: 'manual', entities: snapshot.entities.map((entityArg) => ({ ...entityArg, available: false, writable: false })) };
98
37
  }
99
38
  }
100
- const parseMaybeJson = (valueArg) => {
101
- if (typeof valueArg !== 'string') {
102
- return valueArg;
103
- }
104
- try {
105
- return JSON.parse(valueArg);
106
- }
107
- catch {
108
- return valueArg;
109
- }
110
- };
111
- const objectValue = (valueArg) => {
112
- return valueArg && typeof valueArg === 'object' && !Array.isArray(valueArg) ? valueArg : undefined;
113
- };
114
- const stringValue = (valueArg) => {
115
- return typeof valueArg === 'string' && valueArg.trim() ? valueArg.trim() : undefined;
116
- };
117
- const numberValue = (valueArg) => {
118
- if (typeof valueArg === 'number' && Number.isFinite(valueArg)) {
119
- return valueArg;
120
- }
121
- if (typeof valueArg === 'string' && valueArg.trim() && Number.isFinite(Number(valueArg))) {
122
- return Number(valueArg);
123
- }
124
- return undefined;
125
- };
126
- const booleanValue = (valueArg) => {
127
- if (typeof valueArg === 'boolean') {
128
- return valueArg;
129
- }
130
- if (typeof valueArg === 'number') {
131
- return valueArg !== 0;
132
- }
133
- if (typeof valueArg === 'string') {
134
- if (valueArg === '1' || valueArg.toLowerCase() === 'true') {
135
- return true;
136
- }
137
- if (valueArg === '0' || valueArg.toLowerCase() === 'false') {
138
- return false;
139
- }
140
- }
141
- return undefined;
142
- };
143
- const cleanAttributes = (attributesArg) => {
144
- return Object.fromEntries(Object.entries(attributesArg).filter(([, valueArg]) => valueArg !== undefined && valueArg !== null && valueArg !== ''));
145
- };
146
- const hostFromUrl = (urlArg) => {
147
- if (!urlArg) {
148
- return undefined;
149
- }
150
- try {
151
- return new URL(urlArg.includes('://') ? urlArg : `http://${urlArg}`).hostname;
152
- }
153
- catch {
154
- return undefined;
155
- }
156
- };
157
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuYXNvbmljX3ZpZXJhLm1hcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ludGVncmF0aW9ucy9wYW5hc29uaWNfdmllcmEvcGFuYXNvbmljX3ZpZXJhLm1hcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQW1KLE1BQU0scUJBQXFCLENBQUM7QUFFek0sT0FBTyxFQUFFLHlCQUF5QixFQUFFLHlCQUF5QixFQUFFLHFCQUFxQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFFekgsTUFBTSxPQUFPLG9CQUFvQjtJQUN4QixNQUFNLENBQUMsVUFBVSxDQUFDLFVBQStFO1FBQ3RHLE9BQU8saUJBQWlCLENBQUMsVUFBVSxDQUFDLEVBQUUsR0FBRyxVQUFVLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ2hLLENBQUM7SUFFTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsU0FBZ0MsRUFBRSxVQUF3RDtRQUN4SCxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFpQztRQUN2RCxPQUFPLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRU0sTUFBTSxDQUFDLFVBQVUsQ0FBQyxXQUFpQztRQUN4RCxPQUFPLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLENBQUMsQ0FBQztJQUMxRSxDQUFDO0lBRU0s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
39
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuYXNvbmljX3ZpZXJhLm1hcHBlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3RzL2ludGVncmF0aW9ucy9wYW5hc29uaWNfdmllcmEvcGFuYXNvbmljX3ZpZXJhLm1hcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUdqRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUVsRSxNQUFNLE9BQU8sb0JBQW9CO0lBQ3hCLE1BQU0sQ0FBQyxRQUFRLENBQUMsV0FBZ0U7UUFDckYsT0FBTyxtQkFBbUIsa0JBQWtCLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7SUFDN0gsQ0FBQztJQUVNLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBZ0UsRUFBRSxNQUEwQjtRQUNwSCxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxNQUFNLEVBQUUsQ0FBQztJQUN2RCxDQUFDO0lBRU0sTUFBTSxDQUFDLFNBQVMsQ0FBQyxXQUFvQztRQUMxRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQztRQUM5QyxPQUFPLENBQUM7Z0JBQ04sRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsb0JBQW9CO2dCQUN2RSxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLFlBQVksRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLFNBQVM7Z0JBQ3RGLFFBQVEsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLElBQUk7Z0JBQzlCLFFBQVEsRUFBRSxDQUFDLEVBQUUsRUFBRSxFQUFFLFlB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