homematic-manager 3.0.0-beta.2 → 3.0.0-beta.21

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 (332) hide show
  1. package/README.md +2 -1
  2. package/data/easymode-time-selectors.json +285 -0
  3. package/data/icons/106_hm-lc-sw1-dr.webp +0 -0
  4. package/data/icons/108_hm-rc-dis-h-x-eu.webp +0 -0
  5. package/data/icons/109_hm-lc-sw1-pl-ct.webp +0 -0
  6. package/data/icons/110_hm-es-pmsw1-dr.webp +0 -0
  7. package/data/icons/112_hmip-wrc2.webp +0 -0
  8. package/data/icons/113_hmip-psm-ch.webp +0 -0
  9. package/data/icons/113_hmip-psm-it.webp +0 -0
  10. package/data/icons/113_hmip-psm-pe.webp +0 -0
  11. package/data/icons/113_hmip-psm-uk.webp +0 -0
  12. package/data/icons/113_hmip-psm.webp +0 -0
  13. package/data/icons/114_hm-lc-dim1t-fm-lf_3.webp +0 -0
  14. package/data/icons/116_hm-rc-4-3_brc-h3.webp +0 -0
  15. package/data/icons/118_hmip-swdo.webp +0 -0
  16. package/data/icons/119_hmip-rc8.webp +0 -0
  17. package/data/icons/120_hmip-etrv.webp +0 -0
  18. package/data/icons/121_hmip-wth.webp +0 -0
  19. package/data/icons/123_oligo.smart.ip.hm.webp +0 -0
  20. package/data/icons/125_hmip-smi.webp +0 -0
  21. package/data/icons/130_hmip-srh.webp +0 -0
  22. package/data/icons/131_hmip-wrc6.webp +0 -0
  23. package/data/icons/132_hmip-smo.webp +0 -0
  24. package/data/icons/133_hmip-asir.webp +0 -0
  25. package/data/icons/134_hmip-fsm.webp +0 -0
  26. package/data/icons/135_hmip-fsm16.webp +0 -0
  27. package/data/icons/136_hmip-miob.webp +0 -0
  28. package/data/icons/137_hmip-fal-c6.webp +0 -0
  29. package/data/icons/138_hmip-fal-c10.webp +0 -0
  30. package/data/icons/140_alpha-ip-rgb.webp +0 -0
  31. package/data/icons/141_alpha-ip-rgba.webp +0 -0
  32. package/data/icons/144_hmip-wgc.webp +0 -0
  33. package/data/icons/145_hmip-froll_hmip-fbl.webp +0 -0
  34. package/data/icons/146_hmip-sth.webp +0 -0
  35. package/data/icons/147_hmip-sthd.webp +0 -0
  36. package/data/icons/148_hmip-stho.webp +0 -0
  37. package/data/icons/149_hmip-sam.webp +0 -0
  38. package/data/icons/151_hmip-pcbs-bat.webp +0 -0
  39. package/data/icons/152_hmip-swdo-i.webp +0 -0
  40. package/data/icons/153_hmip-spi.webp +0 -0
  41. package/data/icons/154_hmip-spdr.webp +0 -0
  42. package/data/icons/155_hmip-whs2.webp +0 -0
  43. package/data/icons/156_hmip-mod-oc8.webp +0 -0
  44. package/data/icons/158_hmip-etrv-uk.webp +0 -0
  45. package/data/icons/159_hmip-mod-rc8.webp +0 -0
  46. package/data/icons/160_hmipw-drs4.webp +0 -0
  47. package/data/icons/161_hmipw-drs8.webp +0 -0
  48. package/data/icons/162_hmipw-drap.webp +0 -0
  49. package/data/icons/163_hmipw-drbl4.webp +0 -0
  50. package/data/icons/164_hmipw-dri16.webp +0 -0
  51. package/data/icons/165_hmipw-fio6.webp +0 -0
  52. package/data/icons/166_hmipw-drd3.webp +0 -0
  53. package/data/icons/167_hmipw-dri32.webp +0 -0
  54. package/data/icons/168_hmip-smi55.webp +0 -0
  55. package/data/icons/169_hmip-swo-pr.webp +0 -0
  56. package/data/icons/170_hmip-swo-pl.webp +0 -0
  57. package/data/icons/171_hmip-swo-b.webp +0 -0
  58. package/data/icons/172_hmip-swd.webp +0 -0
  59. package/data/icons/173_hmip-bsl.webp +0 -0
  60. package/data/icons/174_hmip-slo.webp +0 -0
  61. package/data/icons/175_hmip-group-heating.webp +0 -0
  62. package/data/icons/177_hmip-dbb.webp +0 -0
  63. package/data/icons/178_hmip-etrv-b1.webp +0 -0
  64. package/data/icons/179_hmip-swdm-b2.webp +0 -0
  65. package/data/icons/180_hmip-etrv-b.webp +0 -0
  66. package/data/icons/181_hmip-swdm.webp +0 -0
  67. package/data/icons/182_hmip-fci1.webp +0 -0
  68. package/data/icons/183_hmip-mod-tm.webp +0 -0
  69. package/data/icons/184_hmip-pcbs2.webp +0 -0
  70. package/data/icons/185_hmip-FCI6.webp +0 -0
  71. package/data/icons/186_hmip-mp3p.webp +0 -0
  72. package/data/icons/187_hmip-rcb1.webp +0 -0
  73. package/data/icons/188_hmip-etrv-c.webp +0 -0
  74. package/data/icons/190_hmip-sci.webp +0 -0
  75. package/data/icons/191_hmip-mod-ho.webp +0 -0
  76. package/data/icons/192_hmip-asir-o.webp +0 -0
  77. package/data/icons/193_hmip-wt.webp +0 -0
  78. package/data/icons/194_hmip-wrcd.webp +0 -0
  79. package/data/icons/195_hmipw-smi55.webp +0 -0
  80. package/data/icons/196_hmip-ASIR-2.webp +0 -0
  81. package/data/icons/197_hmip-swdo-pl.webp +0 -0
  82. package/data/icons/198_hmip-falmot-c12.webp +0 -0
  83. package/data/icons/199_hmip-mio16-pcb.webp +0 -0
  84. package/data/icons/200_hmip-wth-b.webp +0 -0
  85. package/data/icons/201_hmip-stv.webp +0 -0
  86. package/data/icons/202_hmip-wrcr.webp +0 -0
  87. package/data/icons/203_hmip-fsi16.webp +0 -0
  88. package/data/icons/204_hmip-drdi3.webp +0 -0
  89. package/data/icons/205_hmip-drsi4.webp +0 -0
  90. package/data/icons/206_hmip-drbli4.webp +0 -0
  91. package/data/icons/207_hmip-srdo.webp +0 -0
  92. package/data/icons/208_hmip-dsd-pcb.webp +0 -0
  93. package/data/icons/209_hmip-etrv-b-uk.webp +0 -0
  94. package/data/icons/210_hmip-ste2-pcb.webp +0 -0
  95. package/data/icons/211_hmip-drg-dali.webp +0 -0
  96. package/data/icons/211_hmip-drsi1.webp +0 -0
  97. package/data/icons/212_hmip-sfd.webp +0 -0
  98. package/data/icons/212_hmipw-scthd.webp +0 -0
  99. package/data/icons/213_hmip-smo230.webp +0 -0
  100. package/data/icons/213_hmip-wua.webp +0 -0
  101. package/data/icons/214_hmip-dld.webp +0 -0
  102. package/data/icons/215_hmip-psm-pe-2.webp +0 -0
  103. package/data/icons/215_hmip-scth230.webp +0 -0
  104. package/data/icons/216_hmip-etrv-e.webp +0 -0
  105. package/data/icons/216_hmip-psm-ch-2.webp +0 -0
  106. package/data/icons/217_hmip-usbsm.webp +0 -0
  107. package/data/icons/218_hmip-dls.webp +0 -0
  108. package/data/icons/219_hmip-fwi.webp +0 -0
  109. package/data/icons/220_hmip-wsc.webp +0 -0
  110. package/data/icons/221_hmip-sti.webp +0 -0
  111. package/data/icons/221_hmip-wkp.webp +0 -0
  112. package/data/icons/222_hmipw-wgd.webp +0 -0
  113. package/data/icons/223_hmip-mod-wd-vk.webp +0 -0
  114. package/data/icons/224_hmip-etrv-cl.webp +0 -0
  115. package/data/icons/225_hmip-rgbw.webp +0 -0
  116. package/data/icons/226_hmip-esi.webp +0 -0
  117. package/data/icons/227_hmip-lsc.webp +0 -0
  118. package/data/icons/228_elv-sh-sw1-bat.webp +0 -0
  119. package/data/icons/229_elv-sh-bm-s.webp +0 -0
  120. package/data/icons/230_hmip-etrv-f.webp +0 -0
  121. package/data/icons/231_elv-sh-cth.webp +0 -0
  122. package/data/icons/232_elv-sh-taco.webp +0 -0
  123. package/data/icons/233_hmip-flc.webp +0 -0
  124. package/data/icons/234_hmip-etrv-3.webp +0 -0
  125. package/data/icons/235_hmip-psmco.webp +0 -0
  126. package/data/icons/236_elv-sh-sb8.webp +0 -0
  127. package/data/icons/237_elv-sh-ctv.webp +0 -0
  128. package/data/icons/238_elv-sh-cap.webp +0 -0
  129. package/data/icons/239_hmip-wgs-f.webp +0 -0
  130. package/data/icons/240_hmip-wgtc-f.webp +0 -0
  131. package/data/icons/241_hmip-wgt-f.webp +0 -0
  132. package/data/icons/242_elv-sh-smsi.webp +0 -0
  133. package/data/icons/243_elv-sh-crc.webp +0 -0
  134. package/data/icons/244_elv-sh-krco.webp +0 -0
  135. package/data/icons/245_hmip-falmot-c8.webp +0 -0
  136. package/data/icons/246_elv-sh-wsm.webp +0 -0
  137. package/data/icons/247_hmip-hap-2.webp +0 -0
  138. package/data/icons/248_hmip-dlp.webp +0 -0
  139. package/data/icons/249_elv-sh-psmci.webp +0 -0
  140. package/data/icons/250_elv-sh-sps25.webp +0 -0
  141. package/data/icons/252_elv-sh-pti2.webp +0 -0
  142. package/data/icons/253_hmip-udi-smi55.webp +0 -0
  143. package/data/icons/254_hmip-udi-pb2.webp +0 -0
  144. package/data/icons/256_ELV-SH-SMS2.webp +0 -0
  145. package/data/icons/257_ELV-SH-FSI.webp +0 -0
  146. package/data/icons/258_hmip-m-td15.webp +0 -0
  147. package/data/icons/259_elv-sh-dusi.webp +0 -0
  148. package/data/icons/260_hmip-wss.webp +0 -0
  149. package/data/icons/54a_lc-ddc1-pcb.webp +0 -0
  150. package/data/icons/72_hm-rc-brc-h.webp +0 -0
  151. package/data/icons/73_hm-atent.webp +0 -0
  152. package/data/icons/79_hm-lc-dim1pwm-cv.webp +0 -0
  153. package/data/icons/84_hm-rc-4-3.webp +0 -0
  154. package/data/icons/85_hm-rc-sec4-3.webp +0 -0
  155. package/data/icons/86_hm-rc-key4-3.webp +0 -0
  156. package/data/icons/CCU3-1-50.webp +0 -0
  157. package/data/icons/CCU3.webp +0 -0
  158. package/data/icons/hm-coupling-dim.webp +0 -0
  159. package/data/icons/hm-coupling-group.webp +0 -0
  160. package/data/icons/hm-coupling-onoff.webp +0 -0
  161. package/data/icons/hm-coupling-rgb-dim.webp +0 -0
  162. package/data/icons/hm-coupling-rgb.webp +0 -0
  163. package/data/icons/hm-coupling-rgbw-dim.webp +0 -0
  164. package/data/icons/hm-coupling-rgbw.webp +0 -0
  165. package/data/icons/hm-coupling-white-dim.webp +0 -0
  166. package/data/icons/hm-coupling-white.webp +0 -0
  167. package/data/icons/hm-hue_gateway.webp +0 -0
  168. package/data/icons/hm-lightify_gateway.webp +0 -0
  169. package/data/icons/hm_resc-win-pcb-sc.webp +0 -0
  170. package/data/icons/unknown_device.webp +0 -0
  171. package/data/manifest.json +7 -1
  172. package/data/master-metadata.json +1997 -33
  173. package/data/profiles/ACCESS_RECEIVER.json +26 -13
  174. package/data/profiles/ACOUSTIC_SIGNAL_VIRTUAL_RECEIVER.json +3270 -76
  175. package/data/profiles/ACTOR_SECURITY.json +90 -10
  176. package/data/profiles/ACTOR_WINDOW.json +580 -43
  177. package/data/profiles/ALARMACTUATOR.json +564 -37
  178. package/data/profiles/ALARM_COND_SWITCH_RECEIVER.json +36 -4
  179. package/data/profiles/ALARM_SWITCH_VIRTUAL_RECEIVER.json +735 -33
  180. package/data/profiles/ARMING.json +115 -5
  181. package/data/profiles/BLIND.json +1038 -49
  182. package/data/profiles/BLIND_VIRTUAL_RECEIVER.json +4624 -124
  183. package/data/profiles/CLIMATECONTROL_FLOOR_PUMP_TRANSCEIVER.json +27 -1
  184. package/data/profiles/DIMMER.json +2233 -71
  185. package/data/profiles/DIMMER_VIRTUAL_RECEIVER.json +5773 -102
  186. package/data/profiles/DIMMER_woLongKeyPress.json +117 -4
  187. package/data/profiles/DOOR_RECEIVER.json +138 -10
  188. package/data/profiles/DUAL_WHITE_BRIGHTNESS.json +305 -11
  189. package/data/profiles/DUAL_WHITE_COLOR.json +730 -23
  190. package/data/profiles/HEATING_KEY_RECEIVER.json +127 -10
  191. package/data/profiles/HMW_BLIND.json +555 -20
  192. package/data/profiles/HMW_DIMMER.json +1337 -47
  193. package/data/profiles/HMW_INPUT_OUTPUT.json +375 -20
  194. package/data/profiles/HMW_SWITCH.json +375 -20
  195. package/data/profiles/JALOUSIE.json +1320 -52
  196. package/data/profiles/KEYMATIC.json +120 -12
  197. package/data/profiles/REMOTECONTROL_RECEIVER.json +10 -2
  198. package/data/profiles/RGBW_AUTOMATIC.json +46 -6
  199. package/data/profiles/RGBW_COLOR.json +14 -4
  200. package/data/profiles/SERVO_VIRTUAL_RECEIVER.json +117 -3
  201. package/data/profiles/SHUTTER_VIRTUAL_RECEIVER.json +4263 -128
  202. package/data/profiles/SIGNAL_CHIME.json +195 -14
  203. package/data/profiles/SIGNAL_CHIMEM.json +195 -14
  204. package/data/profiles/SIGNAL_LED.json +195 -14
  205. package/data/profiles/SIGNAL_LEDM.json +195 -14
  206. package/data/profiles/SIMPLE_SWITCH_RECEIVER.json +113 -9
  207. package/data/profiles/STATUS_INDICATOR.json +1073 -45
  208. package/data/profiles/SWITCH.json +1412 -60
  209. package/data/profiles/SWITCH_PANIC.json +315 -13
  210. package/data/profiles/SWITCH_SENSOR.json +243 -11
  211. package/data/profiles/SWITCH_VIRTUAL_RECEIVER.json +3963 -131
  212. package/data/profiles/UNIVERSAL_ACTOR.json +4319 -90
  213. package/data/profiles/UNIVERSAL_LIGHT_RECEIVER_LSC.json +6094 -196
  214. package/data/profiles/UNIVERSAL_LIGHT_RECEIVER_PWM.json +4920 -101
  215. package/data/profiles/UNIVERSAL_LIGHT_RECEIVER_RGB(W).json +2353 -80
  216. package/data/profiles/UNIVERSAL_LIGHT_RECEIVER_RGBW_DALI.json +6116 -176
  217. package/data/profiles/UNIVERSAL_LIGHT_RECEIVER_TW.json +3844 -104
  218. package/data/profiles/VIRTUAL_DIMMER.json +305 -11
  219. package/data/profiles/VIRTUAL_DUAL_WHITE_COLOR.json +730 -23
  220. package/data/profiles/WATER_SWITCH_VIRTUAL_RECEIVER.json +3903 -128
  221. package/data/profiles/WINDOW_DRIVE_RECEIVER.json +220 -8
  222. package/data/profiles/WINMATIC.json +505 -23
  223. package/dist/cli.js +24 -0
  224. package/dist/occulite.d.ts +86 -0
  225. package/dist/occulite.js +140 -0
  226. package/dist/options.d.ts +37 -6
  227. package/dist/options.js +49 -6
  228. package/dist/server.d.ts +47 -4
  229. package/dist/server.js +237 -27
  230. package/dist/sessions.d.ts +9 -1
  231. package/dist/sessions.js +8 -2
  232. package/dist/testSupport.js +9 -2
  233. package/node_modules/@homematic-manager/backend/dist/api/backend.d.ts +33 -0
  234. package/node_modules/@homematic-manager/backend/dist/api/backend.js +558 -46
  235. package/node_modules/@homematic-manager/backend/dist/cache/names.d.ts +9 -0
  236. package/node_modules/@homematic-manager/backend/dist/cache/names.js +21 -0
  237. package/node_modules/@homematic-manager/backend/dist/config/defaults.js +10 -1
  238. package/node_modules/@homematic-manager/backend/dist/config/store.d.ts +28 -1
  239. package/node_modules/@homematic-manager/backend/dist/config/store.js +59 -3
  240. package/node_modules/@homematic-manager/backend/dist/devices/installMode.js +9 -0
  241. package/node_modules/@homematic-manager/backend/dist/errors.d.ts +18 -0
  242. package/node_modules/@homematic-manager/backend/dist/errors.js +51 -2
  243. package/node_modules/@homematic-manager/backend/dist/images/deviceImages.d.ts +6 -0
  244. package/node_modules/@homematic-manager/backend/dist/images/deviceImages.js +38 -2
  245. package/node_modules/@homematic-manager/backend/dist/index.d.ts +3 -1
  246. package/node_modules/@homematic-manager/backend/dist/index.js +4 -1
  247. package/node_modules/@homematic-manager/backend/dist/interfaces/manager.d.ts +70 -8
  248. package/node_modules/@homematic-manager/backend/dist/interfaces/manager.js +333 -44
  249. package/node_modules/@homematic-manager/backend/dist/meta/client.d.ts +120 -0
  250. package/node_modules/@homematic-manager/backend/dist/meta/client.js +307 -0
  251. package/node_modules/@homematic-manager/backend/dist/meta/credentials.d.ts +38 -0
  252. package/node_modules/@homematic-manager/backend/dist/meta/credentials.js +53 -0
  253. package/node_modules/@homematic-manager/backend/dist/meta/index.d.ts +12 -0
  254. package/node_modules/@homematic-manager/backend/dist/meta/index.js +12 -0
  255. package/node_modules/@homematic-manager/backend/dist/meta/localProvider.d.ts +47 -0
  256. package/node_modules/@homematic-manager/backend/dist/meta/localProvider.js +119 -0
  257. package/node_modules/@homematic-manager/backend/dist/meta/occuliteProvider.d.ts +79 -0
  258. package/node_modules/@homematic-manager/backend/dist/meta/occuliteProvider.js +305 -0
  259. package/node_modules/@homematic-manager/backend/dist/meta/provider.d.ts +68 -0
  260. package/node_modules/@homematic-manager/backend/dist/meta/provider.js +19 -0
  261. package/node_modules/@homematic-manager/backend/dist/meta/regaProvider.d.ts +84 -0
  262. package/node_modules/@homematic-manager/backend/dist/meta/regaProvider.js +403 -0
  263. package/node_modules/@homematic-manager/backend/dist/meta/service.d.ts +137 -0
  264. package/node_modules/@homematic-manager/backend/dist/meta/service.js +412 -0
  265. package/node_modules/@homematic-manager/backend/dist/rega/client.d.ts +11 -0
  266. package/node_modules/@homematic-manager/backend/dist/rega/client.js +13 -0
  267. package/node_modules/@homematic-manager/backend/dist/rega/scripts.d.ts +51 -0
  268. package/node_modules/@homematic-manager/backend/dist/rega/scripts.js +171 -0
  269. package/node_modules/@homematic-manager/backend/dist/rpc/client.d.ts +18 -5
  270. package/node_modules/@homematic-manager/backend/dist/rpc/client.js +11 -5
  271. package/node_modules/@homematic-manager/backend/dist/rpc/log.d.ts +86 -0
  272. package/node_modules/@homematic-manager/backend/dist/rpc/log.js +241 -0
  273. package/node_modules/@homematic-manager/backend/dist/rpc/origin.d.ts +30 -0
  274. package/node_modules/@homematic-manager/backend/dist/rpc/origin.js +35 -0
  275. package/node_modules/@homematic-manager/backend/dist/rpc/server.d.ts +12 -0
  276. package/node_modules/@homematic-manager/backend/dist/rpc/server.js +37 -5
  277. package/node_modules/@homematic-manager/backend/dist/util/net.d.ts +86 -1
  278. package/node_modules/@homematic-manager/backend/dist/util/net.js +223 -9
  279. package/node_modules/@homematic-manager/backend/package.json +1 -1
  280. package/node_modules/@homematic-manager/core/dist/api/types.d.ts +397 -10
  281. package/node_modules/@homematic-manager/core/dist/api/types.js +23 -2
  282. package/node_modules/@homematic-manager/core/dist/data/memory.d.ts +3 -1
  283. package/node_modules/@homematic-manager/core/dist/data/memory.js +3 -0
  284. package/node_modules/@homematic-manager/core/dist/data/types.d.ts +60 -0
  285. package/node_modules/@homematic-manager/core/dist/data/types.js +2 -0
  286. package/node_modules/@homematic-manager/core/dist/devices/index.d.ts +19 -0
  287. package/node_modules/@homematic-manager/core/dist/devices/index.js +53 -0
  288. package/node_modules/@homematic-manager/core/dist/easymodes/engine.d.ts +3 -1
  289. package/node_modules/@homematic-manager/core/dist/easymodes/engine.js +1 -0
  290. package/node_modules/@homematic-manager/core/dist/easymodes/form.d.ts +43 -0
  291. package/node_modules/@homematic-manager/core/dist/easymodes/form.js +84 -0
  292. package/node_modules/@homematic-manager/core/dist/i18n/messages.js +61 -0
  293. package/node_modules/@homematic-manager/core/dist/index.d.ts +3 -0
  294. package/node_modules/@homematic-manager/core/dist/index.js +4 -0
  295. package/node_modules/@homematic-manager/core/dist/interfaces/table.d.ts +23 -2
  296. package/node_modules/@homematic-manager/core/dist/interfaces/table.js +18 -1
  297. package/node_modules/@homematic-manager/core/dist/meta/document.d.ts +71 -0
  298. package/node_modules/@homematic-manager/core/dist/meta/document.js +260 -0
  299. package/node_modules/@homematic-manager/core/dist/meta/follow.d.ts +27 -0
  300. package/node_modules/@homematic-manager/core/dist/meta/follow.js +180 -0
  301. package/node_modules/@homematic-manager/core/dist/meta/index.d.ts +16 -0
  302. package/node_modules/@homematic-manager/core/dist/meta/index.js +16 -0
  303. package/node_modules/@homematic-manager/core/dist/meta/paths.d.ts +96 -0
  304. package/node_modules/@homematic-manager/core/dist/meta/paths.js +182 -0
  305. package/node_modules/@homematic-manager/core/dist/meta/slug.d.ts +22 -0
  306. package/node_modules/@homematic-manager/core/dist/meta/slug.js +59 -0
  307. package/node_modules/@homematic-manager/core/dist/meta/store.d.ts +147 -0
  308. package/node_modules/@homematic-manager/core/dist/meta/store.js +537 -0
  309. package/node_modules/@homematic-manager/core/dist/meta/tree.d.ts +19 -0
  310. package/node_modules/@homematic-manager/core/dist/meta/tree.js +53 -0
  311. package/node_modules/@homematic-manager/core/dist/meta/types.d.ts +143 -0
  312. package/node_modules/@homematic-manager/core/dist/meta/types.js +63 -0
  313. package/node_modules/@homematic-manager/core/dist/meta/view.d.ts +50 -0
  314. package/node_modules/@homematic-manager/core/dist/meta/view.js +103 -0
  315. package/node_modules/@homematic-manager/core/dist/rpc/methods.d.ts +10 -0
  316. package/node_modules/@homematic-manager/core/dist/rpc/methods.js +51 -1
  317. package/node_modules/@homematic-manager/core/dist/rpc/text.d.ts +22 -0
  318. package/node_modules/@homematic-manager/core/dist/rpc/text.js +46 -0
  319. package/node_modules/@homematic-manager/core/dist/rssi/index.d.ts +125 -13
  320. package/node_modules/@homematic-manager/core/dist/rssi/index.js +146 -29
  321. package/node_modules/@homematic-manager/core/dist/serviceMessages/index.d.ts +28 -2
  322. package/node_modules/@homematic-manager/core/dist/serviceMessages/index.js +44 -6
  323. package/node_modules/@homematic-manager/core/package.json +1 -1
  324. package/package.json +3 -3
  325. package/ui/assets/index-D-NsbBVS.css +1 -0
  326. package/ui/assets/index-DNUNMBbb.js +16 -0
  327. package/ui/favicon.ico +0 -0
  328. package/ui/index.html +3 -2
  329. package/node_modules/@homematic-manager/backend/dist/write/log.d.ts +0 -51
  330. package/node_modules/@homematic-manager/backend/dist/write/log.js +0 -151
  331. package/ui/assets/index-lB-HxsKR.js +0 -13
  332. package/ui/assets/index-qbhgN2pA.css +0 -1
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Refs, ids, names and node paths of the metadata store - the small rules the whole format rests on.
3
+ *
4
+ * They are separate from `store.ts` because both the store and the UI need them: the grid has to
5
+ * turn `room/eg/wohnzimmer` into "Wohnzimmer", and a dialog has to know that a node id may not
6
+ * contain a slash before it lets somebody type one.
7
+ */
8
+ import { MAX_ID_LENGTH, MAX_NAME_BYTES, MAX_TREE_DEPTH, MetaError } from './types.js';
9
+ /** Enum ids, node ids and `meta` namespaces share one spelling. */
10
+ const ID_PATTERN = /^[a-z0-9][a-z0-9-]*$/;
11
+ /** Icons are looser: a UI maps the name and ignores one it does not know. */
12
+ const ICON_PATTERN = /^[a-z0-9-]+$/;
13
+ /**
14
+ * `<interface>.<address>` split at the **first** dot, or `undefined`.
15
+ *
16
+ * The interface name never contains a dot; the address may (it does not today, but the rule is the
17
+ * separator, not the shape of what follows it). `BidCos-RF.JEQ0230153:1` is a channel,
18
+ * `BidCos-RF.JEQ0230153` the device it belongs to.
19
+ */
20
+ export function parseRef(ref) {
21
+ const dot = ref.indexOf('.');
22
+ if (dot <= 0 || dot === ref.length - 1) {
23
+ return undefined;
24
+ }
25
+ return { interfaceName: ref.slice(0, dot), address: ref.slice(dot + 1) };
26
+ }
27
+ /** The ref of an address on an interface. The inverse of {@link parseRef}. */
28
+ export function makeRef(interfaceName, address) {
29
+ return `${interfaceName}.${address}`;
30
+ }
31
+ /** Is this a ref the store accepts? */
32
+ export function isValidRef(ref) {
33
+ return parseRef(ref) !== undefined;
34
+ }
35
+ /** Throws `invalid-ref` when it is not. */
36
+ export function requireRef(ref) {
37
+ const parsed = parseRef(ref);
38
+ if (!parsed) {
39
+ throw new MetaError('invalid-ref', `${ref} is not <interface>.<address>`);
40
+ }
41
+ return parsed;
42
+ }
43
+ /** Enum id, node id or `meta` namespace: `[a-z0-9][a-z0-9-]*`, at most 32 characters. */
44
+ export function isValidId(id) {
45
+ return id.length <= MAX_ID_LENGTH && ID_PATTERN.test(id);
46
+ }
47
+ /** Throws `invalid-id` when it is not. */
48
+ export function requireId(id) {
49
+ if (!isValidId(id)) {
50
+ throw new MetaError('invalid-id', `${id} is not a valid id`);
51
+ }
52
+ return id;
53
+ }
54
+ /** Icons are optional and lax; an unknown name is ignored by the UI, not an error. */
55
+ export function isValidIcon(icon) {
56
+ return icon.length <= MAX_ID_LENGTH && ICON_PATTERN.test(icon);
57
+ }
58
+ /**
59
+ * The name as it will be stored: trimmed.
60
+ *
61
+ * Empty after trimming, longer than 255 bytes or carrying a line break is `invalid-name`. The trim
62
+ * is why `" Heizung Bad "` written over `"Heizung Bad"` is not a change and does not bump the
63
+ * revision - the corpus checks exactly that.
64
+ */
65
+ export function normaliseName(name) {
66
+ if (typeof name !== 'string') {
67
+ throw new MetaError('invalid-name', 'a name has to be a string');
68
+ }
69
+ const trimmed = name.trim();
70
+ if (trimmed === '') {
71
+ throw new MetaError('invalid-name', 'a name may not be empty');
72
+ }
73
+ // eslint-disable-next-line no-control-regex -- that is exactly what this rejects
74
+ if (/[\u0000-\u001f\u007f]/.test(trimmed)) {
75
+ throw new MetaError('invalid-name', 'a name may not contain control characters');
76
+ }
77
+ if (byteLength(trimmed) > MAX_NAME_BYTES) {
78
+ throw new MetaError('invalid-name', `a name may not be longer than ${String(MAX_NAME_BYTES)} bytes`);
79
+ }
80
+ return trimmed;
81
+ }
82
+ /**
83
+ * Bytes of UTF-8 in a string.
84
+ *
85
+ * `TextEncoder` rather than `Buffer.byteLength`: this package runs in the browser as well as in
86
+ * Node, and the byte limits of the format are a rule about UTF-8, not about a Node API.
87
+ */
88
+ export function byteLength(value) {
89
+ return new TextEncoder().encode(value).length;
90
+ }
91
+ /**
92
+ * `room/eg/wohnzimmer` → `{enumId: 'room', ids: ['eg', 'wohnzimmer']}`.
93
+ *
94
+ * `room` alone is a valid *query* target (everything in any room) but never a membership target -
95
+ * an object belongs to nodes, not to enums. The caller decides which of the two it wants; this
96
+ * only splits.
97
+ */
98
+ export function parsePath(path) {
99
+ const parts = path.split('/');
100
+ const enumId = parts[0];
101
+ if (enumId === undefined || enumId === '' || !isValidId(enumId)) {
102
+ return undefined;
103
+ }
104
+ const ids = parts.slice(1);
105
+ if (ids.some((id) => !isValidId(id))) {
106
+ return undefined;
107
+ }
108
+ return { enumId, ids };
109
+ }
110
+ /** The path of a node under a parent path. */
111
+ export function childPath(parent, id) {
112
+ return `${parent}/${id}`;
113
+ }
114
+ /**
115
+ * The path without its last segment, or `undefined` when there is nothing to strip.
116
+ *
117
+ * For a root node (`room/eg`) that is the enum id (`room`), which is not a node path - the caller
118
+ * that moves a node treats "the parent is the bare enum id" as "move to the root".
119
+ */
120
+ export function parentPath(path) {
121
+ const index = path.lastIndexOf('/');
122
+ return index <= 0 ? undefined : path.slice(0, index);
123
+ }
124
+ /** Is `path` the node `target` or anything below it? The subtree rule of a membership query. */
125
+ export function pathMatches(path, target) {
126
+ return path === target || path.startsWith(`${target}/`);
127
+ }
128
+ /** The node a path addresses inside one enum's tree, or `undefined`. */
129
+ export function findNode(tree, ids) {
130
+ let nodes = tree;
131
+ let found;
132
+ for (const id of ids) {
133
+ found = nodes.find((node) => node.id === id);
134
+ if (!found) {
135
+ return undefined;
136
+ }
137
+ nodes = found.children ?? [];
138
+ }
139
+ return found;
140
+ }
141
+ /**
142
+ * Every node of one enum, depth first, in display order.
143
+ *
144
+ * This is what turns a tree into the flat things a UI needs: a select with indented entries, the
145
+ * "all rooms" list, and the check that a path exists at all.
146
+ */
147
+ export function flattenEnum(enumId, definition) {
148
+ const flat = [];
149
+ const walk = (nodes, prefix, depth, trail) => {
150
+ for (const node of nodes) {
151
+ const path = childPath(prefix, node.id);
152
+ const names = [...trail, node.name];
153
+ flat.push({ path, node, depth, trail: names });
154
+ walk(node.children ?? [], path, depth + 1, names);
155
+ }
156
+ };
157
+ walk(definition.tree, enumId, 1, []);
158
+ return flat;
159
+ }
160
+ /** Every path of one enum, as a set - the cheap way to check membership targets in bulk. */
161
+ export function enumPaths(enumId, definition) {
162
+ return new Set(flattenEnum(enumId, definition).map((entry) => entry.path));
163
+ }
164
+ /** The deepest level any node of this tree sits at; `0` for an empty tree. */
165
+ export function treeDepth(tree) {
166
+ let deepest = 0;
167
+ const walk = (nodes, depth) => {
168
+ for (const node of nodes) {
169
+ deepest = Math.max(deepest, depth);
170
+ walk(node.children ?? [], depth + 1);
171
+ }
172
+ };
173
+ walk(tree, 1);
174
+ return deepest;
175
+ }
176
+ /** Throws `too-deep` when a tree is deeper than the eight levels the format allows. */
177
+ export function requireDepth(tree) {
178
+ if (treeDepth(tree) > MAX_TREE_DEPTH) {
179
+ throw new MetaError('too-deep', `a tree may not be deeper than ${String(MAX_TREE_DEPTH)} levels`);
180
+ }
181
+ }
182
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1,22 @@
1
+ /**
2
+ * A node id out of a name a user typed.
3
+ *
4
+ * Ids are `[a-z0-9][a-z0-9-]*`, at most 32 characters, and **stable**: renaming a room never
5
+ * changes its id, which is what keeps every object's membership pointing at the same node. So the
6
+ * id is derived once, when the node is created, and never again.
7
+ *
8
+ * The transcription is the one openccu-lite's own CCU import uses (`docs/meta-api.md`,
9
+ * `POST /import/ccu`): umlauts written out, everything else that is not `[a-z0-9]` folded to a
10
+ * hyphen, and a collision resolved with `-2`, `-3`, … so that "Bad" and "Bäd" cannot silently
11
+ * become the same room.
12
+ */
13
+ /** The slug of a name, without the collision check. Empty when nothing survives the fold. */
14
+ export declare function slugOf(name: string): string;
15
+ /**
16
+ * A slug that is free among `taken`, with `-2`, `-3`, … behind it when it is not.
17
+ *
18
+ * A name that folds to nothing at all - an id written only in Cyrillic or in emoji - gets `node`
19
+ * and its number, because an id is a machine key and the *name* is what the user reads.
20
+ */
21
+ export declare function slugId(name: string, taken?: Iterable<string>): string;
22
+ //# sourceMappingURL=slug.d.ts.map
@@ -0,0 +1,59 @@
1
+ /**
2
+ * A node id out of a name a user typed.
3
+ *
4
+ * Ids are `[a-z0-9][a-z0-9-]*`, at most 32 characters, and **stable**: renaming a room never
5
+ * changes its id, which is what keeps every object's membership pointing at the same node. So the
6
+ * id is derived once, when the node is created, and never again.
7
+ *
8
+ * The transcription is the one openccu-lite's own CCU import uses (`docs/meta-api.md`,
9
+ * `POST /import/ccu`): umlauts written out, everything else that is not `[a-z0-9]` folded to a
10
+ * hyphen, and a collision resolved with `-2`, `-3`, … so that "Bad" and "Bäd" cannot silently
11
+ * become the same room.
12
+ */
13
+ import { isValidId } from './paths.js';
14
+ import { MAX_ID_LENGTH } from './types.js';
15
+ const TRANSCRIPTIONS = [
16
+ [/ä/g, 'ae'],
17
+ [/ö/g, 'oe'],
18
+ [/ü/g, 'ue'],
19
+ [/ß/g, 'ss'],
20
+ [/å/g, 'a'],
21
+ [/æ/g, 'ae'],
22
+ [/ø/g, 'oe'],
23
+ ];
24
+ /** The slug of a name, without the collision check. Empty when nothing survives the fold. */
25
+ export function slugOf(name) {
26
+ let slug = name.toLowerCase();
27
+ for (const [pattern, replacement] of TRANSCRIPTIONS) {
28
+ slug = slug.replace(pattern, replacement);
29
+ }
30
+ slug = slug
31
+ // decomposes é to e + a combining accent, which the next step then drops
32
+ .normalize('NFKD')
33
+ .replace(/[̀-ͯ]/g, '')
34
+ .replace(/[^a-z0-9]+/g, '-')
35
+ .replace(/^-+|-+$/g, '')
36
+ .slice(0, MAX_ID_LENGTH);
37
+ return isValidId(slug) ? slug : '';
38
+ }
39
+ /**
40
+ * A slug that is free among `taken`, with `-2`, `-3`, … behind it when it is not.
41
+ *
42
+ * A name that folds to nothing at all - an id written only in Cyrillic or in emoji - gets `node`
43
+ * and its number, because an id is a machine key and the *name* is what the user reads.
44
+ */
45
+ export function slugId(name, taken = []) {
46
+ const used = new Set(taken);
47
+ const base = slugOf(name) === '' ? 'node' : slugOf(name);
48
+ if (!used.has(base)) {
49
+ return base;
50
+ }
51
+ for (let suffix = 2; suffix < 1000; suffix += 1) {
52
+ const candidate = `${base.slice(0, MAX_ID_LENGTH - String(suffix).length - 1)}-${String(suffix)}`;
53
+ if (!used.has(candidate)) {
54
+ return candidate;
55
+ }
56
+ }
57
+ throw new Error(`no free id for ${name}`);
58
+ }
59
+ //# sourceMappingURL=slug.js.map
@@ -0,0 +1,147 @@
1
+ /**
2
+ * The metadata store, in memory: every operation of the metadata API, with its revisions and its
3
+ * change stream.
4
+ *
5
+ * This is the second implementation of openccu-lite's D-16 - `occulited` in Go is the first - and
6
+ * the conformance corpus is what keeps the two honest. It is used twice here: it *is* the `local`
7
+ * provider (a user on Homegear, on a bare rfd or on the desktop gets rooms and functions without
8
+ * any box at all), and it is the model the `occulite` provider keeps of what the box holds, so the
9
+ * UI reads the same shapes whichever provider is on.
10
+ *
11
+ * Three rules run through all of it:
12
+ *
13
+ * - **a write that changes nothing is not a write.** It returns `changed: false` and the revision
14
+ * stays where it was. Setting a name to the name it already has must not bump a revision that
15
+ * every consumer of the change stream is watching.
16
+ * - **all or nothing.** A bulk, an import and a move that rewrites member paths are one revision;
17
+ * a validation error leaves the store exactly as it was.
18
+ * - **every refusal is a code**, never a boolean: the UI shows a message per code and the corpus
19
+ * compares them.
20
+ */
21
+ import { isValidId } from './paths.js';
22
+ import { type MetaDocument, type MetaEnum, type MetaEvent, type MetaImportMode, type MetaNodePatch, type MetaObject, type MetaObjectBody, type MetaObjectPatch } from './types.js';
23
+ /** How many events the change stream keeps for a consumer that reconnects. The API asks for 1000. */
24
+ export declare const DEFAULT_EVENT_HISTORY = 1000;
25
+ /** What every mutation answers with. `changed: false` means the revision did not move. */
26
+ export interface MetaWriteResult {
27
+ readonly revision: number;
28
+ readonly changed: boolean;
29
+ }
30
+ /** What a replay answers with: the events since a revision, or "fetch the snapshot again". */
31
+ export interface MetaReplay {
32
+ readonly revision: number;
33
+ readonly events?: readonly MetaEvent[];
34
+ readonly resync?: true;
35
+ }
36
+ export interface MetaStoreOptions {
37
+ /** The document to start from; an empty store (revision 0, the two default enums) by default. */
38
+ readonly document?: MetaDocument;
39
+ readonly eventHistory?: number;
40
+ /** Called once per event, after the mutation that produced it has been applied. */
41
+ readonly onEvent?: (event: MetaEvent) => void;
42
+ }
43
+ export declare class MetaStore {
44
+ #private;
45
+ constructor(options?: MetaStoreOptions);
46
+ get revision(): number;
47
+ get size(): number;
48
+ /** The whole store, as `/snapshot` serves it and as it is written to disk. */
49
+ document(): MetaDocument;
50
+ /**
51
+ * Replaces everything without producing an import event or a revision of our own.
52
+ *
53
+ * This is how the `occulite` provider takes a snapshot from the box: the box owns the revision,
54
+ * and a consumer that renumbered it would break every `?since=` it sends afterwards.
55
+ */
56
+ load(document: MetaDocument): void;
57
+ /** One object, or `unknown-object`. */
58
+ get(ref: string): MetaObject;
59
+ /** One object, or `undefined` - the read that a UI does for every row of a grid. */
60
+ find(ref: string): MetaObject | undefined;
61
+ /** Every object, keyed by ref. */
62
+ objects(): Readonly<Record<string, MetaObject>>;
63
+ /** Every enum with its tree. */
64
+ enums(): Readonly<Record<string, MetaEnum>>;
65
+ /** One enum, or `unknown-enum`. */
66
+ getEnum(id: string): MetaEnum;
67
+ /**
68
+ * The refs that belong to a node **or anything below it**, sorted.
69
+ *
70
+ * `room/eg` answers with everything on the ground floor, `room` with everything that is in any
71
+ * room at all. That is what the tree buys and why membership is a path and not an id.
72
+ */
73
+ query(target: string, orphaned?: boolean): string[];
74
+ /**
75
+ * The change stream since a revision: the events, or "fetch the snapshot again".
76
+ *
77
+ * A consumer that was away longer than the history, or that asks for something impossible, is
78
+ * told to resync rather than served a gap it cannot see.
79
+ */
80
+ since(revision: number): MetaReplay;
81
+ /** `PATCH /objects/{ref}`: create or update; absent fields are left alone. */
82
+ set(ref: string, patch: MetaObjectPatch): MetaWriteResult;
83
+ /** `PUT /objects/{ref}`: create or replace; missing optional fields go back to their defaults. */
84
+ put(ref: string, body: MetaObjectBody): MetaWriteResult;
85
+ /**
86
+ * `DELETE /objects/{ref}`: forgets an entry for good.
87
+ *
88
+ * Normally unnecessary - `orphaned` is how "gone" is expressed, so that a replaced device keeps
89
+ * its room - but a user may really want to forget one. Deleting what is not there is not an
90
+ * error: it is the state the caller asked for, and a bulk that carries one must not fail.
91
+ */
92
+ delete(ref: string): MetaWriteResult;
93
+ /** `POST /objects:bulk`: any number of writes and deletes as **one** revision. */
94
+ bulk(sets: Readonly<Record<string, MetaObjectPatch>>, deletes?: readonly string[]): MetaWriteResult;
95
+ /**
96
+ * The `orphaned` flag, which only the process that owns the addresses may set.
97
+ *
98
+ * It is a mutation like any other - a consumer has to learn that a device disappeared - and it
99
+ * never touches the assignments: a device that comes back is in its room again.
100
+ */
101
+ setOrphaned(ref: string, orphaned: boolean): MetaWriteResult;
102
+ /** `POST /enums`. */
103
+ createEnum(id: string, name: Readonly<Record<string, string>>): MetaWriteResult;
104
+ /** `PATCH /enums/{enum}`: the display name, nothing else. */
105
+ updateEnum(id: string, name: Readonly<Record<string, string>>): MetaWriteResult;
106
+ /**
107
+ * `DELETE /enums/{enum}`: the enum and every node in it.
108
+ *
109
+ * Refused while anything is a member, unless the caller says `detach` - in which case the
110
+ * paths are removed from every object **in the same revision**, so no consumer ever sees an
111
+ * object pointing at a node that is already gone.
112
+ */
113
+ deleteEnum(id: string, members?: 'refuse' | 'detach'): MetaWriteResult;
114
+ /** `POST /enums/{enum}/nodes`: a node under a parent, or at the root when `parent` is null. */
115
+ createNode(enumId: string, parent: string | null, id: string, name: string, options?: {
116
+ readonly icon?: string;
117
+ readonly position?: number;
118
+ }): MetaWriteResult;
119
+ /**
120
+ * `PATCH /enums/{enum}/nodes/{path}`: rename, re-icon, move, reorder.
121
+ *
122
+ * A move keeps the id, so every member path is rewritten **in the same revision** and consumers
123
+ * see one `node.moved` carrying `from` and `to` rather than a delete and a create that would
124
+ * briefly leave objects pointing nowhere.
125
+ */
126
+ updateNode(path: string, patch: MetaNodePatch): MetaWriteResult;
127
+ /** `DELETE /enums/{enum}/nodes/{path}`: the node and its subtree, with the same `detach` rule. */
128
+ deleteNode(path: string, members?: 'refuse' | 'detach'): MetaWriteResult;
129
+ /**
130
+ * `PUT /import`: a whole document, validated completely and applied as one revision.
131
+ *
132
+ * `replace` swaps the store; `merge` keeps the objects and enums the import does not mention
133
+ * and overwrites the ones it does. Either way the *result* is validated - a merge that would
134
+ * leave an object pointing at a node the import removed is refused, not repaired.
135
+ */
136
+ import(raw: unknown, mode?: MetaImportMode): MetaWriteResult;
137
+ }
138
+ /**
139
+ * `meta` merged per namespace: `null` removes one, any other value replaces it whole.
140
+ *
141
+ * Per namespace and not per key, on purpose: the store does not interpret what is inside a
142
+ * namespace, so it cannot merge it either - only its owner knows what half an update would mean.
143
+ */
144
+ export declare function mergeMeta(current: Readonly<Record<string, unknown>>, patch: Readonly<Record<string, unknown>>): Readonly<Record<string, unknown>>;
145
+ /** Is this a valid enum or node id? Re-exported so a dialog can check before it offers to save. */
146
+ export { isValidId };
147
+ //# sourceMappingURL=store.d.ts.map