@willieee802/zigbee-herdsman 0.48.3 → 0.49.1

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 (1045) hide show
  1. package/.github/ISSUE_TEMPLATE/config.yml +5 -0
  2. package/.github/copilot-instructions.md +689 -0
  3. package/.github/dependabot.yml +22 -0
  4. package/.github/prompts/copilot-instructions-blueprint-generator.prompt.md +294 -0
  5. package/.github/prompts/create-agentsmd.prompt.md +249 -0
  6. package/.github/prompts/create-specification.prompt.md +127 -0
  7. package/.github/prompts/review-and-refactor.prompt.md +15 -0
  8. package/.github/prompts/update-specification.prompt.md +127 -0
  9. package/.github/workflows/ci.yml +70 -0
  10. package/.github/workflows/release-please.yml +18 -0
  11. package/.github/workflows/stale.yml +20 -0
  12. package/.github/workflows/typedoc.yaml +47 -0
  13. package/.release-please-manifest.json +2 -2
  14. package/.vscode/extensions.json +3 -0
  15. package/.vscode/settings.json +11 -0
  16. package/AGENTS.md +441 -0
  17. package/CHANGELOG.md +1283 -0
  18. package/README.md +1 -1
  19. package/biome.json +103 -0
  20. package/dist/adapter/adapter.d.ts.map +1 -1
  21. package/dist/adapter/adapterDiscovery.d.ts.map +1 -0
  22. package/dist/adapter/const.d.ts.map +1 -0
  23. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts.map +1 -1
  24. package/dist/adapter/ember/adapter/emberAdapter.d.ts.map +1 -1
  25. package/dist/adapter/ember/adapter/endpoints.d.ts.map +1 -1
  26. package/dist/adapter/ember/adapter/oneWaitress.d.ts.map +1 -1
  27. package/dist/adapter/ember/adapter/tokensManager.d.ts.map +1 -1
  28. package/dist/adapter/ember/ezsp/ezsp.d.ts.map +1 -1
  29. package/dist/adapter/ember/utils/initters.d.ts.map +1 -1
  30. package/dist/adapter/events.d.ts.map +1 -1
  31. package/dist/adapter/ezsp/adapter/backup.d.ts.map +1 -1
  32. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts.map +1 -1
  33. package/dist/adapter/ezsp/driver/driver.d.ts.map +1 -1
  34. package/dist/adapter/ezsp/driver/index.d.ts.map +1 -1
  35. package/dist/adapter/ezsp/driver/multicast.d.ts.map +1 -1
  36. package/dist/adapter/index.d.ts.map +1 -1
  37. package/dist/adapter/z-stack/adapter/endpoints.d.ts.map +1 -1
  38. package/dist/adapter/z-stack/adapter/manager.d.ts.map +1 -1
  39. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts.map +1 -1
  40. package/dist/adapter/z-stack/models/startup-options.d.ts.map +1 -1
  41. package/dist/adapter/zboss/adapter/zbossAdapter.d.ts.map +1 -0
  42. package/dist/adapter/zboss/driver.d.ts.map +1 -0
  43. package/dist/adapter/zboss/frame.d.ts.map +1 -0
  44. package/dist/adapter/zboss/frame.js +200 -0
  45. package/dist/adapter/zboss/frame.js.map +1 -0
  46. package/dist/adapter/zboss/uart.d.ts.map +1 -0
  47. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts.map +1 -1
  48. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts.map +1 -1
  49. package/dist/adapter/zigate/driver/buffaloZiGate.js +70 -62
  50. package/dist/adapter/zigate/driver/buffaloZiGate.js.map +1 -1
  51. package/dist/adapter/zigate/driver/ziGateObject.d.ts.map +1 -1
  52. package/dist/adapter/zigate/driver/zigate.d.ts.map +1 -1
  53. package/dist/adapter/zoh/adapter/zohAdapter.d.ts.map +1 -0
  54. package/dist/controller/controller.d.ts.map +1 -1
  55. package/dist/controller/controller.js +524 -350
  56. package/dist/controller/controller.js.map +1 -1
  57. package/dist/controller/database.d.ts.map +1 -1
  58. package/dist/controller/events.d.ts.map +1 -1
  59. package/dist/controller/events.js +0 -110
  60. package/dist/controller/events.js.map +1 -1
  61. package/dist/controller/greenPower.d.ts.map +1 -1
  62. package/dist/controller/greenPower.js +330 -121
  63. package/dist/controller/greenPower.js.map +1 -1
  64. package/dist/controller/helpers/index.d.ts.map +1 -1
  65. package/dist/controller/helpers/ota.d.ts.map +1 -0
  66. package/dist/controller/helpers/ota.js +467 -0
  67. package/dist/controller/helpers/ota.js.map +1 -0
  68. package/dist/controller/helpers/request.d.ts.map +1 -1
  69. package/dist/controller/helpers/requestQueue.d.ts.map +1 -1
  70. package/dist/controller/helpers/zclFrameConverter.d.ts.map +1 -1
  71. package/dist/controller/helpers/zclFrameConverter.js +36 -22
  72. package/dist/controller/helpers/zclFrameConverter.js.map +1 -1
  73. package/dist/controller/index.d.ts.map +1 -1
  74. package/dist/controller/model/device.d.ts.map +1 -1
  75. package/dist/controller/model/device.js +1052 -402
  76. package/dist/controller/model/device.js.map +1 -1
  77. package/dist/controller/model/endpoint.d.ts.map +1 -1
  78. package/dist/controller/model/endpoint.js +447 -292
  79. package/dist/controller/model/endpoint.js.map +1 -1
  80. package/dist/controller/model/entity.d.ts.map +1 -1
  81. package/dist/controller/model/group.d.ts.map +1 -1
  82. package/dist/controller/model/group.js +202 -85
  83. package/dist/controller/model/group.js.map +1 -1
  84. package/dist/controller/model/index.d.ts.map +1 -1
  85. package/dist/controller/model/zigbeeEntity.d.ts.map +1 -0
  86. package/dist/controller/touchlink.d.ts.map +1 -1
  87. package/dist/controller/tstype.d.ts.map +1 -1
  88. package/dist/controller/tstype.js +0 -6
  89. package/dist/controller/tstype.js.map +1 -1
  90. package/dist/index.d.ts.map +1 -1
  91. package/dist/utils/timeService.d.ts.map +1 -0
  92. package/dist/utils/timeService.js +127 -0
  93. package/dist/utils/timeService.js.map +1 -0
  94. package/dist/zspec/zcl/buffaloZcl.d.ts.map +1 -1
  95. package/dist/zspec/zcl/buffaloZcl.js +327 -287
  96. package/dist/zspec/zcl/buffaloZcl.js.map +1 -1
  97. package/dist/zspec/zcl/definition/cluster.d.ts.map +1 -1
  98. package/dist/zspec/zcl/definition/cluster.js +6050 -4043
  99. package/dist/zspec/zcl/definition/cluster.js.map +1 -1
  100. package/dist/zspec/zcl/definition/clusters-types.d.ts +8135 -0
  101. package/dist/zspec/zcl/definition/clusters-types.d.ts.map +1 -0
  102. package/dist/zspec/zcl/definition/clusters-types.js +3 -0
  103. package/dist/zspec/zcl/definition/clusters-types.js.map +1 -0
  104. package/dist/zspec/zcl/definition/foundation.d.ts.map +1 -1
  105. package/dist/zspec/zcl/definition/foundation.js +170 -99
  106. package/dist/zspec/zcl/definition/foundation.js.map +1 -1
  107. package/dist/zspec/zcl/definition/tstype.d.ts +190 -31
  108. package/dist/zspec/zcl/definition/tstype.d.ts.map +1 -1
  109. package/dist/zspec/zcl/definition/tstype.js +0 -1
  110. package/dist/zspec/zcl/definition/tstype.js.map +1 -1
  111. package/dist/zspec/zcl/index.d.ts.map +1 -1
  112. package/dist/zspec/zcl/index.js +23 -13
  113. package/dist/zspec/zcl/index.js.map +1 -1
  114. package/dist/zspec/zcl/utils.d.ts.map +1 -1
  115. package/dist/zspec/zcl/utils.js +288 -103
  116. package/dist/zspec/zcl/utils.js.map +1 -1
  117. package/dist/zspec/zcl/zclFrame.d.ts.map +1 -1
  118. package/dist/zspec/zcl/zclFrame.js +121 -97
  119. package/dist/zspec/zcl/zclFrame.js.map +1 -1
  120. package/dist/zspec/zcl/zclHeader.d.ts.map +1 -1
  121. package/dist/zspec/zcl/zclHeader.js +13 -13
  122. package/dist/zspec/zcl/zclHeader.js.map +1 -1
  123. package/examples/join-and-log.js +18 -18
  124. package/package.json +23 -3
  125. package/release-please-config.json +8 -8
  126. package/scripts/check-clusters-changes.ts +328 -0
  127. package/scripts/clusters-changes.log +584 -0
  128. package/scripts/clusters-typegen.ts +608 -0
  129. package/scripts/utils.ts +88 -0
  130. package/scripts/zap-update-clusters-report.json +303 -0
  131. package/scripts/zap-update-clusters.ts +1520 -0
  132. package/scripts/zap-update-types.ts +707 -0
  133. package/scripts/zap-xml-clusters-overrides-data.ts +52 -0
  134. package/scripts/zap-xml-clusters-overrides.ts +400 -0
  135. package/scripts/zap-xml-types.ts +146 -0
  136. package/src/adapter/adapter.ts +210 -0
  137. package/src/adapter/adapterDiscovery.ts +736 -0
  138. package/src/adapter/const.ts +12 -0
  139. package/src/adapter/deconz/adapter/deconzAdapter.ts +888 -0
  140. package/src/adapter/deconz/driver/constants.ts +246 -0
  141. package/src/adapter/deconz/driver/driver.ts +1528 -0
  142. package/src/adapter/deconz/driver/frame.ts +11 -0
  143. package/src/adapter/deconz/driver/frameParser.ts +766 -0
  144. package/src/adapter/deconz/driver/parser.ts +45 -0
  145. package/src/adapter/deconz/driver/writer.ts +22 -0
  146. package/src/adapter/deconz/types.d.ts +13 -0
  147. package/src/adapter/ember/adapter/emberAdapter.ts +2262 -0
  148. package/src/adapter/ember/adapter/endpoints.ts +86 -0
  149. package/src/adapter/ember/adapter/oneWaitress.ts +324 -0
  150. package/src/adapter/ember/adapter/tokensManager.ts +780 -0
  151. package/src/adapter/ember/consts.ts +178 -0
  152. package/src/adapter/ember/enums.ts +1746 -0
  153. package/src/adapter/ember/ezsp/buffalo.ts +1392 -0
  154. package/src/adapter/ember/ezsp/consts.ts +148 -0
  155. package/src/adapter/ember/ezsp/enums.ts +1114 -0
  156. package/src/adapter/ember/ezsp/ezsp.ts +9073 -0
  157. package/src/adapter/ember/ezspError.ts +10 -0
  158. package/src/adapter/ember/types.ts +866 -0
  159. package/src/adapter/ember/uart/ash.ts +1933 -0
  160. package/src/adapter/ember/uart/consts.ts +109 -0
  161. package/src/adapter/ember/uart/enums.ts +192 -0
  162. package/src/adapter/ember/uart/parser.ts +42 -0
  163. package/src/adapter/ember/uart/queues.ts +247 -0
  164. package/src/adapter/ember/uart/writer.ts +50 -0
  165. package/src/adapter/ember/utils/initters.ts +58 -0
  166. package/src/adapter/ember/utils/math.ts +71 -0
  167. package/src/adapter/events.ts +21 -0
  168. package/src/adapter/ezsp/adapter/backup.ts +100 -0
  169. package/src/adapter/ezsp/adapter/ezspAdapter.ts +632 -0
  170. package/src/adapter/ezsp/driver/commands.ts +2497 -0
  171. package/src/adapter/ezsp/driver/consts.ts +11 -0
  172. package/src/adapter/ezsp/driver/driver.ts +1002 -0
  173. package/src/adapter/ezsp/driver/ezsp.ts +802 -0
  174. package/src/adapter/ezsp/driver/frame.ts +101 -0
  175. package/src/adapter/ezsp/driver/index.ts +4 -0
  176. package/src/adapter/ezsp/driver/multicast.ts +78 -0
  177. package/src/adapter/ezsp/driver/parser.ts +81 -0
  178. package/src/adapter/ezsp/driver/types/basic.ts +201 -0
  179. package/src/adapter/ezsp/driver/types/index.ts +239 -0
  180. package/src/adapter/ezsp/driver/types/named.ts +2330 -0
  181. package/src/adapter/ezsp/driver/types/struct.ts +844 -0
  182. package/src/adapter/ezsp/driver/uart.ts +460 -0
  183. package/src/adapter/ezsp/driver/utils/crc16ccitt.ts +44 -0
  184. package/src/adapter/ezsp/driver/utils/index.ts +32 -0
  185. package/src/adapter/ezsp/driver/writer.ts +64 -0
  186. package/src/adapter/index.ts +3 -0
  187. package/src/adapter/serialPort.ts +58 -0
  188. package/src/adapter/tstype.ts +57 -0
  189. package/src/adapter/utils.ts +41 -0
  190. package/src/adapter/z-stack/adapter/adapter-backup.ts +509 -0
  191. package/src/adapter/z-stack/adapter/adapter-nv-memory.ts +457 -0
  192. package/src/adapter/z-stack/adapter/endpoints.ts +60 -0
  193. package/src/adapter/z-stack/adapter/manager.ts +543 -0
  194. package/src/adapter/z-stack/adapter/tstype.ts +6 -0
  195. package/src/adapter/z-stack/adapter/zStackAdapter.ts +1350 -0
  196. package/src/adapter/z-stack/constants/af.ts +27 -0
  197. package/src/adapter/z-stack/constants/common.ts +285 -0
  198. package/src/adapter/z-stack/constants/dbg.ts +23 -0
  199. package/src/adapter/z-stack/constants/index.ts +11 -0
  200. package/src/adapter/z-stack/constants/mac.ts +128 -0
  201. package/src/adapter/z-stack/constants/sapi.ts +25 -0
  202. package/src/adapter/z-stack/constants/sys.ts +72 -0
  203. package/src/adapter/z-stack/constants/util.ts +82 -0
  204. package/src/adapter/z-stack/constants/utils.ts +14 -0
  205. package/src/adapter/z-stack/constants/zdo.ts +103 -0
  206. package/src/adapter/z-stack/models/startup-options.ts +13 -0
  207. package/src/adapter/z-stack/structs/entries/address-manager-entry.ts +44 -0
  208. package/src/adapter/z-stack/structs/entries/address-manager-table.ts +19 -0
  209. package/src/adapter/z-stack/structs/entries/aps-link-key-data-entry.ts +12 -0
  210. package/src/adapter/z-stack/structs/entries/aps-link-key-data-table.ts +21 -0
  211. package/src/adapter/z-stack/structs/entries/aps-tc-link-key-entry.ts +19 -0
  212. package/src/adapter/z-stack/structs/entries/aps-tc-link-key-table.ts +21 -0
  213. package/src/adapter/z-stack/structs/entries/channel-list.ts +8 -0
  214. package/src/adapter/z-stack/structs/entries/has-configured.ts +16 -0
  215. package/src/adapter/z-stack/structs/entries/index.ts +16 -0
  216. package/src/adapter/z-stack/structs/entries/nib.ts +66 -0
  217. package/src/adapter/z-stack/structs/entries/nwk-key-descriptor.ts +15 -0
  218. package/src/adapter/z-stack/structs/entries/nwk-key.ts +13 -0
  219. package/src/adapter/z-stack/structs/entries/nwk-pan-id.ts +8 -0
  220. package/src/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.ts +20 -0
  221. package/src/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.ts +19 -0
  222. package/src/adapter/z-stack/structs/entries/security-manager-entry.ts +33 -0
  223. package/src/adapter/z-stack/structs/entries/security-manager-table.ts +22 -0
  224. package/src/adapter/z-stack/structs/index.ts +4 -0
  225. package/src/adapter/z-stack/structs/serializable-memory-object.ts +14 -0
  226. package/src/adapter/z-stack/structs/struct.ts +367 -0
  227. package/src/adapter/z-stack/structs/table.ts +198 -0
  228. package/src/adapter/z-stack/unpi/constants.ts +33 -0
  229. package/src/adapter/z-stack/unpi/frame.ts +62 -0
  230. package/src/adapter/z-stack/unpi/index.ts +4 -0
  231. package/src/adapter/z-stack/unpi/parser.ts +67 -0
  232. package/src/adapter/z-stack/unpi/writer.ts +37 -0
  233. package/src/adapter/z-stack/utils/channel-list.ts +40 -0
  234. package/src/adapter/z-stack/utils/index.ts +2 -0
  235. package/src/adapter/z-stack/utils/network-options.ts +26 -0
  236. package/src/adapter/z-stack/znp/buffaloZnp.ts +175 -0
  237. package/src/adapter/z-stack/znp/definition.ts +2713 -0
  238. package/src/adapter/z-stack/znp/index.ts +2 -0
  239. package/src/adapter/z-stack/znp/parameterType.ts +22 -0
  240. package/src/adapter/z-stack/znp/tstype.ts +44 -0
  241. package/src/adapter/z-stack/znp/utils.ts +10 -0
  242. package/src/adapter/z-stack/znp/znp.ts +345 -0
  243. package/src/adapter/z-stack/znp/zpiObject.ts +148 -0
  244. package/src/adapter/zboss/adapter/zbossAdapter.ts +535 -0
  245. package/src/adapter/zboss/commands.ts +1184 -0
  246. package/src/adapter/zboss/consts.ts +9 -0
  247. package/src/adapter/zboss/driver.ts +422 -0
  248. package/src/adapter/zboss/enums.ts +360 -0
  249. package/src/adapter/zboss/frame.ts +227 -0
  250. package/src/adapter/zboss/reader.ts +65 -0
  251. package/src/adapter/zboss/types.ts +0 -0
  252. package/src/adapter/zboss/uart.ts +428 -0
  253. package/src/adapter/zboss/utils.ts +58 -0
  254. package/src/adapter/zboss/writer.ts +49 -0
  255. package/src/adapter/zigate/adapter/patchZdoBuffaloBE.ts +25 -0
  256. package/src/adapter/zigate/adapter/zigateAdapter.ts +633 -0
  257. package/src/adapter/zigate/driver/LICENSE +17 -0
  258. package/src/adapter/zigate/driver/buffaloZiGate.ts +210 -0
  259. package/src/adapter/zigate/driver/commandType.ts +418 -0
  260. package/src/adapter/zigate/driver/constants.ts +150 -0
  261. package/src/adapter/zigate/driver/frame.ts +197 -0
  262. package/src/adapter/zigate/driver/messageType.ts +287 -0
  263. package/src/adapter/zigate/driver/parameterType.ts +32 -0
  264. package/src/adapter/zigate/driver/ziGateObject.ts +146 -0
  265. package/src/adapter/zigate/driver/zigate.ts +422 -0
  266. package/src/adapter/zoh/adapter/utils.ts +27 -0
  267. package/src/adapter/zoh/adapter/zohAdapter.ts +931 -0
  268. package/src/buffalo/buffalo.ts +336 -0
  269. package/src/buffalo/index.ts +1 -0
  270. package/src/controller/controller.ts +1159 -0
  271. package/src/controller/database.ts +148 -0
  272. package/src/controller/events.ts +52 -0
  273. package/src/controller/greenPower.ts +613 -0
  274. package/src/controller/helpers/index.ts +1 -0
  275. package/src/controller/helpers/installCodes.ts +107 -0
  276. package/src/controller/helpers/ota.ts +578 -0
  277. package/src/controller/helpers/request.ts +96 -0
  278. package/src/controller/helpers/requestQueue.ts +126 -0
  279. package/src/controller/helpers/zclFrameConverter.ts +64 -0
  280. package/src/controller/helpers/zclTransactionSequenceNumber.ts +15 -0
  281. package/src/controller/index.ts +6 -0
  282. package/src/controller/model/device.ts +1791 -0
  283. package/src/controller/model/endpoint.ts +1235 -0
  284. package/src/controller/model/entity.ts +43 -0
  285. package/src/controller/model/group.ts +446 -0
  286. package/src/controller/model/index.ts +5 -0
  287. package/src/controller/model/konnextConfig.ts +6 -0
  288. package/src/controller/model/zigbeeEntity.ts +30 -0
  289. package/src/controller/touchlink.ts +195 -0
  290. package/src/controller/tstype.ts +374 -0
  291. package/src/index.ts +14 -0
  292. package/src/models/backup-storage-legacy.ts +48 -0
  293. package/src/models/backup-storage-unified.ts +47 -0
  294. package/src/models/backup.ts +37 -0
  295. package/src/models/index.ts +5 -0
  296. package/src/models/network-options.ts +11 -0
  297. package/src/utils/aes.ts +218 -0
  298. package/src/utils/async-mutex.ts +31 -0
  299. package/src/utils/backup.ts +152 -0
  300. package/src/utils/index.ts +5 -0
  301. package/src/utils/logger.ts +20 -0
  302. package/src/utils/patchBigIntSerialization.ts +8 -0
  303. package/src/utils/queue.ts +79 -0
  304. package/src/utils/timeService.ts +139 -0
  305. package/src/utils/utils.ts +19 -0
  306. package/src/utils/wait.ts +5 -0
  307. package/src/utils/waitress.ts +96 -0
  308. package/src/zspec/consts.ts +89 -0
  309. package/src/zspec/enums.ts +22 -0
  310. package/src/zspec/index.ts +3 -0
  311. package/src/zspec/tstypes.ts +18 -0
  312. package/src/zspec/utils.ts +247 -0
  313. package/src/zspec/zcl/buffaloZcl.ts +1073 -0
  314. package/src/zspec/zcl/definition/cluster.ts +7554 -0
  315. package/src/zspec/zcl/definition/clusters-types.ts +8228 -0
  316. package/src/zspec/zcl/definition/consts.ts +24 -0
  317. package/src/zspec/zcl/definition/datatypes.ts +2454 -0
  318. package/src/zspec/zcl/definition/enums.ts +224 -0
  319. package/src/zspec/zcl/definition/foundation.ts +342 -0
  320. package/src/zspec/zcl/definition/manufacturerCode.ts +730 -0
  321. package/src/zspec/zcl/definition/status.ts +69 -0
  322. package/src/zspec/zcl/definition/tstype.ts +432 -0
  323. package/src/zspec/zcl/index.ts +11 -0
  324. package/src/zspec/zcl/utils.ts +504 -0
  325. package/src/zspec/zcl/zclFrame.ts +383 -0
  326. package/src/zspec/zcl/zclHeader.ts +102 -0
  327. package/src/zspec/zcl/zclStatusError.ts +10 -0
  328. package/src/zspec/zdo/buffaloZdo.ts +2336 -0
  329. package/src/zspec/zdo/definition/clusters.ts +722 -0
  330. package/src/zspec/zdo/definition/consts.ts +16 -0
  331. package/src/zspec/zdo/definition/enums.ts +99 -0
  332. package/src/zspec/zdo/definition/status.ts +105 -0
  333. package/src/zspec/zdo/definition/tstypes.ts +1062 -0
  334. package/src/zspec/zdo/index.ts +7 -0
  335. package/src/zspec/zdo/utils.ts +76 -0
  336. package/src/zspec/zdo/zdoStatusError.ts +10 -0
  337. package/test/adapter/adapter.test.ts +1276 -0
  338. package/test/adapter/ember/ash.test.ts +337 -0
  339. package/test/adapter/ember/consts.ts +131 -0
  340. package/test/adapter/ember/emberAdapter.test.ts +3447 -0
  341. package/test/adapter/ember/ezsp.test.ts +389 -0
  342. package/test/adapter/ember/ezspBuffalo.test.ts +93 -0
  343. package/test/adapter/ember/ezspError.test.ts +12 -0
  344. package/test/adapter/ember/math.test.ts +190 -0
  345. package/test/adapter/ezsp/frame.test.ts +30 -0
  346. package/test/adapter/ezsp/uart.test.ts +181 -0
  347. package/test/adapter/z-stack/adapter.test.ts +4260 -0
  348. package/test/adapter/z-stack/constants.test.ts +33 -0
  349. package/test/adapter/z-stack/structs.test.ts +115 -0
  350. package/test/adapter/z-stack/unpi.test.ts +213 -0
  351. package/test/adapter/z-stack/znp.test.ts +1288 -0
  352. package/test/adapter/zboss/fixZdoResponse.test.ts +179 -0
  353. package/test/adapter/zigate/patchZdoBuffaloBE.test.ts +81 -0
  354. package/test/adapter/zigate/zdo.test.ts +187 -0
  355. package/test/adapter/zoh/utils.test.ts +36 -0
  356. package/test/adapter/zoh/zohAdapter.test.ts +1451 -0
  357. package/test/benchOptions.ts +14 -0
  358. package/test/buffalo.test.ts +431 -0
  359. package/test/controller.bench.ts +215 -0
  360. package/test/controller.test.ts +10038 -0
  361. package/test/data/integrity-code-1166-012B-24031511-upgradeMe-RB 249 T.zigbee +0 -0
  362. package/test/data/manuf-tags-tradfri-cv-cct-unified_release_prod_v587757105_33e34452-9267-4665-bc5a-844c8f61f063.ota +0 -0
  363. package/test/data/padded-tretakt_smart_plug_soc-0x1100-2.4.25-prod.ota.ota.signed +0 -0
  364. package/test/data/telink-aes-A60_RGBW_T-0x00B6-0x03483712-MF_DIS.OTA +0 -0
  365. package/test/data/zbminir2_v1.0.8.ota +0 -0
  366. package/test/device-ota.test.ts +3332 -0
  367. package/test/greenpower.test.ts +1409 -0
  368. package/test/mockAdapters.ts +95 -0
  369. package/test/mockDevices.ts +623 -0
  370. package/test/requests.bench.ts +321 -0
  371. package/test/testUtils.ts +20 -0
  372. package/test/timeService.test.ts +214 -0
  373. package/test/tsconfig.json +9 -0
  374. package/test/utils/math.ts +19 -0
  375. package/test/utils.test.ts +352 -0
  376. package/test/vitest.config.mts +28 -0
  377. package/test/vitest.ts +9 -0
  378. package/test/zcl.test.ts +2887 -0
  379. package/test/zspec/utils.test.ts +68 -0
  380. package/test/zspec/zcl/buffalo.test.ts +1316 -0
  381. package/test/zspec/zcl/frame.test.ts +1056 -0
  382. package/test/zspec/zcl/utils.test.ts +650 -0
  383. package/test/zspec/zdo/buffalo.test.ts +1850 -0
  384. package/test/zspec/zdo/utils.test.ts +241 -0
  385. package/tsconfig.json +8 -10
  386. package/.babelrc.js +0 -6
  387. package/.eslintignore +0 -3
  388. package/dist/adapter/adapter.d.ts +0 -64
  389. package/dist/adapter/adapter.js +0 -157
  390. package/dist/adapter/adapter.js.map +0 -1
  391. package/dist/adapter/deconz/adapter/deconzAdapter.d.ts +0 -71
  392. package/dist/adapter/deconz/adapter/deconzAdapter.js +0 -1072
  393. package/dist/adapter/deconz/adapter/deconzAdapter.js.map +0 -1
  394. package/dist/adapter/deconz/adapter/index.d.ts +0 -3
  395. package/dist/adapter/deconz/adapter/index.d.ts.map +0 -1
  396. package/dist/adapter/deconz/adapter/index.js +0 -11
  397. package/dist/adapter/deconz/adapter/index.js.map +0 -1
  398. package/dist/adapter/deconz/driver/constants.d.ts +0 -105
  399. package/dist/adapter/deconz/driver/constants.d.ts.map +0 -1
  400. package/dist/adapter/deconz/driver/constants.js +0 -56
  401. package/dist/adapter/deconz/driver/constants.js.map +0 -1
  402. package/dist/adapter/deconz/driver/driver.d.ts +0 -82
  403. package/dist/adapter/deconz/driver/driver.d.ts.map +0 -1
  404. package/dist/adapter/deconz/driver/driver.js +0 -751
  405. package/dist/adapter/deconz/driver/driver.js.map +0 -1
  406. package/dist/adapter/deconz/driver/frame.d.ts +0 -7
  407. package/dist/adapter/deconz/driver/frame.d.ts.map +0 -1
  408. package/dist/adapter/deconz/driver/frame.js +0 -14
  409. package/dist/adapter/deconz/driver/frame.js.map +0 -1
  410. package/dist/adapter/deconz/driver/frameParser.d.ts +0 -3
  411. package/dist/adapter/deconz/driver/frameParser.d.ts.map +0 -1
  412. package/dist/adapter/deconz/driver/frameParser.js +0 -444
  413. package/dist/adapter/deconz/driver/frameParser.js.map +0 -1
  414. package/dist/adapter/deconz/driver/parser.d.ts +0 -13
  415. package/dist/adapter/deconz/driver/parser.d.ts.map +0 -1
  416. package/dist/adapter/deconz/driver/parser.js +0 -64
  417. package/dist/adapter/deconz/driver/parser.js.map +0 -1
  418. package/dist/adapter/deconz/driver/writer.d.ts +0 -9
  419. package/dist/adapter/deconz/driver/writer.d.ts.map +0 -1
  420. package/dist/adapter/deconz/driver/writer.js +0 -45
  421. package/dist/adapter/deconz/driver/writer.js.map +0 -1
  422. package/dist/adapter/ember/adapter/emberAdapter.d.ts +0 -806
  423. package/dist/adapter/ember/adapter/emberAdapter.js +0 -2942
  424. package/dist/adapter/ember/adapter/emberAdapter.js.map +0 -1
  425. package/dist/adapter/ember/adapter/endpoints.d.ts +0 -27
  426. package/dist/adapter/ember/adapter/endpoints.js +0 -68
  427. package/dist/adapter/ember/adapter/endpoints.js.map +0 -1
  428. package/dist/adapter/ember/adapter/index.d.ts +0 -3
  429. package/dist/adapter/ember/adapter/index.d.ts.map +0 -1
  430. package/dist/adapter/ember/adapter/index.js +0 -6
  431. package/dist/adapter/ember/adapter/index.js.map +0 -1
  432. package/dist/adapter/ember/adapter/oneWaitress.d.ts +0 -108
  433. package/dist/adapter/ember/adapter/oneWaitress.js +0 -241
  434. package/dist/adapter/ember/adapter/oneWaitress.js.map +0 -1
  435. package/dist/adapter/ember/adapter/requestQueue.d.ts +0 -57
  436. package/dist/adapter/ember/adapter/requestQueue.d.ts.map +0 -1
  437. package/dist/adapter/ember/adapter/requestQueue.js +0 -139
  438. package/dist/adapter/ember/adapter/requestQueue.js.map +0 -1
  439. package/dist/adapter/ember/adapter/tokensManager.d.ts +0 -69
  440. package/dist/adapter/ember/adapter/tokensManager.js +0 -688
  441. package/dist/adapter/ember/adapter/tokensManager.js.map +0 -1
  442. package/dist/adapter/ember/consts.d.ts +0 -191
  443. package/dist/adapter/ember/consts.d.ts.map +0 -1
  444. package/dist/adapter/ember/consts.js +0 -246
  445. package/dist/adapter/ember/consts.js.map +0 -1
  446. package/dist/adapter/ember/enums.d.ts +0 -2172
  447. package/dist/adapter/ember/enums.d.ts.map +0 -1
  448. package/dist/adapter/ember/enums.js +0 -2375
  449. package/dist/adapter/ember/enums.js.map +0 -1
  450. package/dist/adapter/ember/ezsp/buffalo.d.ts +0 -156
  451. package/dist/adapter/ember/ezsp/buffalo.d.ts.map +0 -1
  452. package/dist/adapter/ember/ezsp/buffalo.js +0 -1033
  453. package/dist/adapter/ember/ezsp/buffalo.js.map +0 -1
  454. package/dist/adapter/ember/ezsp/consts.d.ts +0 -116
  455. package/dist/adapter/ember/ezsp/consts.d.ts.map +0 -1
  456. package/dist/adapter/ember/ezsp/consts.js +0 -128
  457. package/dist/adapter/ember/ezsp/consts.js.map +0 -1
  458. package/dist/adapter/ember/ezsp/enums.d.ts +0 -879
  459. package/dist/adapter/ember/ezsp/enums.d.ts.map +0 -1
  460. package/dist/adapter/ember/ezsp/enums.js +0 -948
  461. package/dist/adapter/ember/ezsp/enums.js.map +0 -1
  462. package/dist/adapter/ember/ezsp/ezsp.d.ts +0 -2662
  463. package/dist/adapter/ember/ezsp/ezsp.js +0 -6454
  464. package/dist/adapter/ember/ezsp/ezsp.js.map +0 -1
  465. package/dist/adapter/ember/types.d.ts +0 -733
  466. package/dist/adapter/ember/types.d.ts.map +0 -1
  467. package/dist/adapter/ember/types.js +0 -3
  468. package/dist/adapter/ember/types.js.map +0 -1
  469. package/dist/adapter/ember/uart/ash.d.ts +0 -464
  470. package/dist/adapter/ember/uart/ash.d.ts.map +0 -1
  471. package/dist/adapter/ember/uart/ash.js +0 -1633
  472. package/dist/adapter/ember/uart/ash.js.map +0 -1
  473. package/dist/adapter/ember/uart/consts.d.ts +0 -91
  474. package/dist/adapter/ember/uart/consts.d.ts.map +0 -1
  475. package/dist/adapter/ember/uart/consts.js +0 -100
  476. package/dist/adapter/ember/uart/consts.js.map +0 -1
  477. package/dist/adapter/ember/uart/enums.d.ts +0 -191
  478. package/dist/adapter/ember/uart/enums.d.ts.map +0 -1
  479. package/dist/adapter/ember/uart/enums.js +0 -197
  480. package/dist/adapter/ember/uart/enums.js.map +0 -1
  481. package/dist/adapter/ember/uart/parser.d.ts +0 -10
  482. package/dist/adapter/ember/uart/parser.d.ts.map +0 -1
  483. package/dist/adapter/ember/uart/parser.js +0 -37
  484. package/dist/adapter/ember/uart/parser.js.map +0 -1
  485. package/dist/adapter/ember/uart/queues.d.ts +0 -85
  486. package/dist/adapter/ember/uart/queues.d.ts.map +0 -1
  487. package/dist/adapter/ember/uart/queues.js +0 -214
  488. package/dist/adapter/ember/uart/queues.js.map +0 -1
  489. package/dist/adapter/ember/uart/writer.d.ts +0 -15
  490. package/dist/adapter/ember/uart/writer.d.ts.map +0 -1
  491. package/dist/adapter/ember/uart/writer.js +0 -46
  492. package/dist/adapter/ember/uart/writer.js.map +0 -1
  493. package/dist/adapter/ember/utils/initters.d.ts +0 -20
  494. package/dist/adapter/ember/utils/initters.js +0 -58
  495. package/dist/adapter/ember/utils/initters.js.map +0 -1
  496. package/dist/adapter/ember/utils/math.d.ts +0 -51
  497. package/dist/adapter/ember/utils/math.d.ts.map +0 -1
  498. package/dist/adapter/ember/utils/math.js +0 -102
  499. package/dist/adapter/ember/utils/math.js.map +0 -1
  500. package/dist/adapter/ember/zdo.d.ts +0 -925
  501. package/dist/adapter/ember/zdo.d.ts.map +0 -1
  502. package/dist/adapter/ember/zdo.js +0 -723
  503. package/dist/adapter/ember/zdo.js.map +0 -1
  504. package/dist/adapter/events.d.ts +0 -42
  505. package/dist/adapter/events.js +0 -13
  506. package/dist/adapter/events.js.map +0 -1
  507. package/dist/adapter/ezsp/adapter/backup.d.ts +0 -13
  508. package/dist/adapter/ezsp/adapter/backup.js +0 -101
  509. package/dist/adapter/ezsp/adapter/backup.js.map +0 -1
  510. package/dist/adapter/ezsp/adapter/ezspAdapter.d.ts +0 -65
  511. package/dist/adapter/ezsp/adapter/ezspAdapter.js +0 -634
  512. package/dist/adapter/ezsp/adapter/ezspAdapter.js.map +0 -1
  513. package/dist/adapter/ezsp/adapter/index.d.ts +0 -3
  514. package/dist/adapter/ezsp/adapter/index.d.ts.map +0 -1
  515. package/dist/adapter/ezsp/adapter/index.js +0 -11
  516. package/dist/adapter/ezsp/adapter/index.js.map +0 -1
  517. package/dist/adapter/ezsp/driver/commands.d.ts +0 -37
  518. package/dist/adapter/ezsp/driver/commands.d.ts.map +0 -1
  519. package/dist/adapter/ezsp/driver/commands.js +0 -2387
  520. package/dist/adapter/ezsp/driver/commands.js.map +0 -1
  521. package/dist/adapter/ezsp/driver/consts.d.ts +0 -11
  522. package/dist/adapter/ezsp/driver/consts.d.ts.map +0 -1
  523. package/dist/adapter/ezsp/driver/consts.js +0 -14
  524. package/dist/adapter/ezsp/driver/consts.js.map +0 -1
  525. package/dist/adapter/ezsp/driver/driver.d.ts +0 -109
  526. package/dist/adapter/ezsp/driver/driver.js +0 -796
  527. package/dist/adapter/ezsp/driver/driver.js.map +0 -1
  528. package/dist/adapter/ezsp/driver/ezsp.d.ts +0 -106
  529. package/dist/adapter/ezsp/driver/ezsp.d.ts.map +0 -1
  530. package/dist/adapter/ezsp/driver/ezsp.js +0 -664
  531. package/dist/adapter/ezsp/driver/ezsp.js.map +0 -1
  532. package/dist/adapter/ezsp/driver/frame.d.ts +0 -40
  533. package/dist/adapter/ezsp/driver/frame.d.ts.map +0 -1
  534. package/dist/adapter/ezsp/driver/frame.js +0 -101
  535. package/dist/adapter/ezsp/driver/frame.js.map +0 -1
  536. package/dist/adapter/ezsp/driver/index.d.ts +0 -4
  537. package/dist/adapter/ezsp/driver/index.js +0 -9
  538. package/dist/adapter/ezsp/driver/index.js.map +0 -1
  539. package/dist/adapter/ezsp/driver/multicast.d.ts +0 -13
  540. package/dist/adapter/ezsp/driver/multicast.js +0 -74
  541. package/dist/adapter/ezsp/driver/multicast.js.map +0 -1
  542. package/dist/adapter/ezsp/driver/parser.d.ts +0 -12
  543. package/dist/adapter/ezsp/driver/parser.d.ts.map +0 -1
  544. package/dist/adapter/ezsp/driver/parser.js +0 -105
  545. package/dist/adapter/ezsp/driver/parser.js.map +0 -1
  546. package/dist/adapter/ezsp/driver/types/basic.d.ts +0 -63
  547. package/dist/adapter/ezsp/driver/types/basic.d.ts.map +0 -1
  548. package/dist/adapter/ezsp/driver/types/basic.js +0 -209
  549. package/dist/adapter/ezsp/driver/types/basic.js.map +0 -1
  550. package/dist/adapter/ezsp/driver/types/index.d.ts +0 -10
  551. package/dist/adapter/ezsp/driver/types/index.d.ts.map +0 -1
  552. package/dist/adapter/ezsp/driver/types/index.js +0 -139
  553. package/dist/adapter/ezsp/driver/types/index.js.map +0 -1
  554. package/dist/adapter/ezsp/driver/types/named.d.ts +0 -1288
  555. package/dist/adapter/ezsp/driver/types/named.d.ts.map +0 -1
  556. package/dist/adapter/ezsp/driver/types/named.js +0 -2330
  557. package/dist/adapter/ezsp/driver/types/named.js.map +0 -1
  558. package/dist/adapter/ezsp/driver/types/struct.d.ts +0 -271
  559. package/dist/adapter/ezsp/driver/types/struct.d.ts.map +0 -1
  560. package/dist/adapter/ezsp/driver/types/struct.js +0 -804
  561. package/dist/adapter/ezsp/driver/types/struct.js.map +0 -1
  562. package/dist/adapter/ezsp/driver/uart.d.ts +0 -49
  563. package/dist/adapter/ezsp/driver/uart.d.ts.map +0 -1
  564. package/dist/adapter/ezsp/driver/uart.js +0 -383
  565. package/dist/adapter/ezsp/driver/uart.js.map +0 -1
  566. package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts +0 -3
  567. package/dist/adapter/ezsp/driver/utils/crc16ccitt.d.ts.map +0 -1
  568. package/dist/adapter/ezsp/driver/utils/crc16ccitt.js +0 -56
  569. package/dist/adapter/ezsp/driver/utils/crc16ccitt.js.map +0 -1
  570. package/dist/adapter/ezsp/driver/utils/index.d.ts +0 -20
  571. package/dist/adapter/ezsp/driver/utils/index.d.ts.map +0 -1
  572. package/dist/adapter/ezsp/driver/utils/index.js +0 -73
  573. package/dist/adapter/ezsp/driver/utils/index.js.map +0 -1
  574. package/dist/adapter/ezsp/driver/writer.d.ts +0 -14
  575. package/dist/adapter/ezsp/driver/writer.d.ts.map +0 -1
  576. package/dist/adapter/ezsp/driver/writer.js +0 -83
  577. package/dist/adapter/ezsp/driver/writer.js.map +0 -1
  578. package/dist/adapter/index.d.ts +0 -5
  579. package/dist/adapter/index.js +0 -36
  580. package/dist/adapter/index.js.map +0 -1
  581. package/dist/adapter/serialPort.d.ts +0 -14
  582. package/dist/adapter/serialPort.d.ts.map +0 -1
  583. package/dist/adapter/serialPort.js +0 -47
  584. package/dist/adapter/serialPort.js.map +0 -1
  585. package/dist/adapter/serialPortUtils.d.ts +0 -13
  586. package/dist/adapter/serialPortUtils.d.ts.map +0 -1
  587. package/dist/adapter/serialPortUtils.js +0 -19
  588. package/dist/adapter/serialPortUtils.js.map +0 -1
  589. package/dist/adapter/socketPortUtils.d.ts +0 -11
  590. package/dist/adapter/socketPortUtils.d.ts.map +0 -1
  591. package/dist/adapter/socketPortUtils.js +0 -17
  592. package/dist/adapter/socketPortUtils.js.map +0 -1
  593. package/dist/adapter/tstype.d.ts +0 -86
  594. package/dist/adapter/tstype.d.ts.map +0 -1
  595. package/dist/adapter/tstype.js +0 -3
  596. package/dist/adapter/tstype.js.map +0 -1
  597. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts +0 -62
  598. package/dist/adapter/z-stack/adapter/adapter-backup.d.ts.map +0 -1
  599. package/dist/adapter/z-stack/adapter/adapter-backup.js +0 -459
  600. package/dist/adapter/z-stack/adapter/adapter-backup.js.map +0 -1
  601. package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts +0 -151
  602. package/dist/adapter/z-stack/adapter/adapter-nv-memory.d.ts.map +0 -1
  603. package/dist/adapter/z-stack/adapter/adapter-nv-memory.js +0 -259
  604. package/dist/adapter/z-stack/adapter/adapter-nv-memory.js.map +0 -1
  605. package/dist/adapter/z-stack/adapter/endpoints.d.ts +0 -12
  606. package/dist/adapter/z-stack/adapter/endpoints.js +0 -74
  607. package/dist/adapter/z-stack/adapter/endpoints.js.map +0 -1
  608. package/dist/adapter/z-stack/adapter/index.d.ts +0 -3
  609. package/dist/adapter/z-stack/adapter/index.d.ts.map +0 -1
  610. package/dist/adapter/z-stack/adapter/index.js +0 -9
  611. package/dist/adapter/z-stack/adapter/index.js.map +0 -1
  612. package/dist/adapter/z-stack/adapter/manager.d.ts +0 -84
  613. package/dist/adapter/z-stack/adapter/manager.js +0 -474
  614. package/dist/adapter/z-stack/adapter/manager.js.map +0 -1
  615. package/dist/adapter/z-stack/adapter/tstype.d.ts +0 -7
  616. package/dist/adapter/z-stack/adapter/tstype.d.ts.map +0 -1
  617. package/dist/adapter/z-stack/adapter/tstype.js +0 -10
  618. package/dist/adapter/z-stack/adapter/tstype.js.map +0 -1
  619. package/dist/adapter/z-stack/adapter/zStackAdapter.d.ts +0 -86
  620. package/dist/adapter/z-stack/adapter/zStackAdapter.js +0 -912
  621. package/dist/adapter/z-stack/adapter/zStackAdapter.js.map +0 -1
  622. package/dist/adapter/z-stack/constants/af.d.ts +0 -24
  623. package/dist/adapter/z-stack/constants/af.d.ts.map +0 -1
  624. package/dist/adapter/z-stack/constants/af.js +0 -28
  625. package/dist/adapter/z-stack/constants/af.js.map +0 -1
  626. package/dist/adapter/z-stack/constants/common.d.ts +0 -279
  627. package/dist/adapter/z-stack/constants/common.d.ts.map +0 -1
  628. package/dist/adapter/z-stack/constants/common.js +0 -293
  629. package/dist/adapter/z-stack/constants/common.js.map +0 -1
  630. package/dist/adapter/z-stack/constants/dbg.d.ts +0 -23
  631. package/dist/adapter/z-stack/constants/dbg.d.ts.map +0 -1
  632. package/dist/adapter/z-stack/constants/dbg.js +0 -25
  633. package/dist/adapter/z-stack/constants/dbg.js.map +0 -1
  634. package/dist/adapter/z-stack/constants/index.d.ts +0 -11
  635. package/dist/adapter/z-stack/constants/index.d.ts.map +0 -1
  636. package/dist/adapter/z-stack/constants/index.js +0 -48
  637. package/dist/adapter/z-stack/constants/index.js.map +0 -1
  638. package/dist/adapter/z-stack/constants/mac.d.ts +0 -128
  639. package/dist/adapter/z-stack/constants/mac.d.ts.map +0 -1
  640. package/dist/adapter/z-stack/constants/mac.js +0 -130
  641. package/dist/adapter/z-stack/constants/mac.js.map +0 -1
  642. package/dist/adapter/z-stack/constants/sapi.d.ts +0 -25
  643. package/dist/adapter/z-stack/constants/sapi.d.ts.map +0 -1
  644. package/dist/adapter/z-stack/constants/sapi.js +0 -27
  645. package/dist/adapter/z-stack/constants/sapi.js.map +0 -1
  646. package/dist/adapter/z-stack/constants/sys.d.ts +0 -72
  647. package/dist/adapter/z-stack/constants/sys.d.ts.map +0 -1
  648. package/dist/adapter/z-stack/constants/sys.js +0 -74
  649. package/dist/adapter/z-stack/constants/sys.js.map +0 -1
  650. package/dist/adapter/z-stack/constants/util.d.ts +0 -82
  651. package/dist/adapter/z-stack/constants/util.d.ts.map +0 -1
  652. package/dist/adapter/z-stack/constants/util.js +0 -84
  653. package/dist/adapter/z-stack/constants/util.js.map +0 -1
  654. package/dist/adapter/z-stack/constants/utils.d.ts +0 -5
  655. package/dist/adapter/z-stack/constants/utils.d.ts.map +0 -1
  656. package/dist/adapter/z-stack/constants/utils.js +0 -15
  657. package/dist/adapter/z-stack/constants/utils.js.map +0 -1
  658. package/dist/adapter/z-stack/constants/zdo.d.ts +0 -103
  659. package/dist/adapter/z-stack/constants/zdo.d.ts.map +0 -1
  660. package/dist/adapter/z-stack/constants/zdo.js +0 -105
  661. package/dist/adapter/z-stack/constants/zdo.js.map +0 -1
  662. package/dist/adapter/z-stack/models/index.d.ts +0 -2
  663. package/dist/adapter/z-stack/models/index.d.ts.map +0 -1
  664. package/dist/adapter/z-stack/models/index.js +0 -18
  665. package/dist/adapter/z-stack/models/index.js.map +0 -1
  666. package/dist/adapter/z-stack/models/startup-options.d.ts +0 -13
  667. package/dist/adapter/z-stack/models/startup-options.js +0 -3
  668. package/dist/adapter/z-stack/models/startup-options.js.map +0 -1
  669. package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts +0 -24
  670. package/dist/adapter/z-stack/structs/entries/address-manager-entry.d.ts.map +0 -1
  671. package/dist/adapter/z-stack/structs/entries/address-manager-entry.js +0 -46
  672. package/dist/adapter/z-stack/structs/entries/address-manager-entry.js.map +0 -1
  673. package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts +0 -11
  674. package/dist/adapter/z-stack/structs/entries/address-manager-table.d.ts.map +0 -1
  675. package/dist/adapter/z-stack/structs/entries/address-manager-table.js +0 -23
  676. package/dist/adapter/z-stack/structs/entries/address-manager-table.js.map +0 -1
  677. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts +0 -11
  678. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.d.ts.map +0 -1
  679. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js +0 -22
  680. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-entry.js.map +0 -1
  681. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts +0 -11
  682. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.d.ts.map +0 -1
  683. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js +0 -24
  684. package/dist/adapter/z-stack/structs/entries/aps-link-key-data-table.js.map +0 -1
  685. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts +0 -11
  686. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.d.ts.map +0 -1
  687. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js +0 -25
  688. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-entry.js.map +0 -1
  689. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts +0 -11
  690. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.d.ts.map +0 -1
  691. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js +0 -24
  692. package/dist/adapter/z-stack/structs/entries/aps-tc-link-key-table.js.map +0 -1
  693. package/dist/adapter/z-stack/structs/entries/channel-list.d.ts +0 -9
  694. package/dist/adapter/z-stack/structs/entries/channel-list.d.ts.map +0 -1
  695. package/dist/adapter/z-stack/structs/entries/channel-list.js +0 -16
  696. package/dist/adapter/z-stack/structs/entries/channel-list.js.map +0 -1
  697. package/dist/adapter/z-stack/structs/entries/has-configured.d.ts +0 -9
  698. package/dist/adapter/z-stack/structs/entries/has-configured.d.ts.map +0 -1
  699. package/dist/adapter/z-stack/structs/entries/has-configured.js +0 -17
  700. package/dist/adapter/z-stack/structs/entries/has-configured.js.map +0 -1
  701. package/dist/adapter/z-stack/structs/entries/index.d.ts +0 -17
  702. package/dist/adapter/z-stack/structs/entries/index.d.ts.map +0 -1
  703. package/dist/adapter/z-stack/structs/entries/index.js +0 -33
  704. package/dist/adapter/z-stack/structs/entries/index.js.map +0 -1
  705. package/dist/adapter/z-stack/structs/entries/nib.d.ts +0 -11
  706. package/dist/adapter/z-stack/structs/entries/nib.d.ts.map +0 -1
  707. package/dist/adapter/z-stack/structs/entries/nib.js +0 -69
  708. package/dist/adapter/z-stack/structs/entries/nib.js.map +0 -1
  709. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts +0 -11
  710. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.d.ts.map +0 -1
  711. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js +0 -19
  712. package/dist/adapter/z-stack/structs/entries/nwk-key-descriptor.js.map +0 -1
  713. package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts +0 -9
  714. package/dist/adapter/z-stack/structs/entries/nwk-key.d.ts.map +0 -1
  715. package/dist/adapter/z-stack/structs/entries/nwk-key.js +0 -16
  716. package/dist/adapter/z-stack/structs/entries/nwk-key.js.map +0 -1
  717. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts +0 -9
  718. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.d.ts.map +0 -1
  719. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js +0 -16
  720. package/dist/adapter/z-stack/structs/entries/nwk-pan-id.js.map +0 -1
  721. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts +0 -14
  722. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.d.ts.map +0 -1
  723. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js +0 -24
  724. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-entry.js.map +0 -1
  725. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts +0 -11
  726. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.d.ts.map +0 -1
  727. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js +0 -23
  728. package/dist/adapter/z-stack/structs/entries/nwk-sec-material-descriptor-table.js.map +0 -1
  729. package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts +0 -21
  730. package/dist/adapter/z-stack/structs/entries/security-manager-entry.d.ts.map +0 -1
  731. package/dist/adapter/z-stack/structs/entries/security-manager-entry.js +0 -37
  732. package/dist/adapter/z-stack/structs/entries/security-manager-entry.js.map +0 -1
  733. package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts +0 -11
  734. package/dist/adapter/z-stack/structs/entries/security-manager-table.d.ts.map +0 -1
  735. package/dist/adapter/z-stack/structs/entries/security-manager-table.js +0 -25
  736. package/dist/adapter/z-stack/structs/entries/security-manager-table.js.map +0 -1
  737. package/dist/adapter/z-stack/structs/index.d.ts +0 -5
  738. package/dist/adapter/z-stack/structs/index.d.ts.map +0 -1
  739. package/dist/adapter/z-stack/structs/index.js +0 -21
  740. package/dist/adapter/z-stack/structs/index.js.map +0 -1
  741. package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts +0 -14
  742. package/dist/adapter/z-stack/structs/serializable-memory-object.d.ts.map +0 -1
  743. package/dist/adapter/z-stack/structs/serializable-memory-object.js +0 -3
  744. package/dist/adapter/z-stack/structs/serializable-memory-object.js.map +0 -1
  745. package/dist/adapter/z-stack/structs/struct.d.ts +0 -100
  746. package/dist/adapter/z-stack/structs/struct.d.ts.map +0 -1
  747. package/dist/adapter/z-stack/structs/struct.js +0 -297
  748. package/dist/adapter/z-stack/structs/struct.js.map +0 -1
  749. package/dist/adapter/z-stack/structs/table.d.ts +0 -95
  750. package/dist/adapter/z-stack/structs/table.d.ts.map +0 -1
  751. package/dist/adapter/z-stack/structs/table.js +0 -164
  752. package/dist/adapter/z-stack/structs/table.js.map +0 -1
  753. package/dist/adapter/z-stack/unpi/constants.d.ts +0 -29
  754. package/dist/adapter/z-stack/unpi/constants.d.ts.map +0 -1
  755. package/dist/adapter/z-stack/unpi/constants.js +0 -40
  756. package/dist/adapter/z-stack/unpi/constants.js.map +0 -1
  757. package/dist/adapter/z-stack/unpi/frame.d.ts +0 -17
  758. package/dist/adapter/z-stack/unpi/frame.d.ts.map +0 -1
  759. package/dist/adapter/z-stack/unpi/frame.js +0 -55
  760. package/dist/adapter/z-stack/unpi/frame.js.map +0 -1
  761. package/dist/adapter/z-stack/unpi/index.d.ts +0 -6
  762. package/dist/adapter/z-stack/unpi/index.d.ts.map +0 -1
  763. package/dist/adapter/z-stack/unpi/index.js +0 -38
  764. package/dist/adapter/z-stack/unpi/index.js.map +0 -1
  765. package/dist/adapter/z-stack/unpi/parser.d.ts +0 -13
  766. package/dist/adapter/z-stack/unpi/parser.d.ts.map +0 -1
  767. package/dist/adapter/z-stack/unpi/parser.js +0 -86
  768. package/dist/adapter/z-stack/unpi/parser.js.map +0 -1
  769. package/dist/adapter/z-stack/unpi/writer.d.ts +0 -12
  770. package/dist/adapter/z-stack/unpi/writer.d.ts.map +0 -1
  771. package/dist/adapter/z-stack/unpi/writer.js +0 -55
  772. package/dist/adapter/z-stack/unpi/writer.js.map +0 -1
  773. package/dist/adapter/z-stack/utils/channel-list.d.ts +0 -21
  774. package/dist/adapter/z-stack/utils/channel-list.d.ts.map +0 -1
  775. package/dist/adapter/z-stack/utils/channel-list.js +0 -41
  776. package/dist/adapter/z-stack/utils/channel-list.js.map +0 -1
  777. package/dist/adapter/z-stack/utils/index.d.ts +0 -3
  778. package/dist/adapter/z-stack/utils/index.d.ts.map +0 -1
  779. package/dist/adapter/z-stack/utils/index.js +0 -19
  780. package/dist/adapter/z-stack/utils/index.js.map +0 -1
  781. package/dist/adapter/z-stack/utils/network-options.d.ts +0 -9
  782. package/dist/adapter/z-stack/utils/network-options.d.ts.map +0 -1
  783. package/dist/adapter/z-stack/utils/network-options.js +0 -23
  784. package/dist/adapter/z-stack/utils/network-options.js.map +0 -1
  785. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts +0 -14
  786. package/dist/adapter/z-stack/znp/buffaloZnp.d.ts.map +0 -1
  787. package/dist/adapter/z-stack/znp/buffaloZnp.js +0 -243
  788. package/dist/adapter/z-stack/znp/buffaloZnp.js.map +0 -1
  789. package/dist/adapter/z-stack/znp/definition.d.ts +0 -6
  790. package/dist/adapter/z-stack/znp/definition.d.ts.map +0 -1
  791. package/dist/adapter/z-stack/znp/definition.js +0 -3052
  792. package/dist/adapter/z-stack/znp/definition.js.map +0 -1
  793. package/dist/adapter/z-stack/znp/index.d.ts +0 -4
  794. package/dist/adapter/z-stack/znp/index.d.ts.map +0 -1
  795. package/dist/adapter/z-stack/znp/index.js +0 -11
  796. package/dist/adapter/z-stack/znp/index.js.map +0 -1
  797. package/dist/adapter/z-stack/znp/parameterType.d.ts +0 -23
  798. package/dist/adapter/z-stack/znp/parameterType.d.ts.map +0 -1
  799. package/dist/adapter/z-stack/znp/parameterType.js +0 -26
  800. package/dist/adapter/z-stack/znp/parameterType.js.map +0 -1
  801. package/dist/adapter/z-stack/znp/tstype.d.ts +0 -23
  802. package/dist/adapter/z-stack/znp/tstype.d.ts.map +0 -1
  803. package/dist/adapter/z-stack/znp/tstype.js +0 -3
  804. package/dist/adapter/z-stack/znp/tstype.js.map +0 -1
  805. package/dist/adapter/z-stack/znp/znp.d.ts +0 -47
  806. package/dist/adapter/z-stack/znp/znp.d.ts.map +0 -1
  807. package/dist/adapter/z-stack/znp/znp.js +0 -322
  808. package/dist/adapter/z-stack/znp/znp.js.map +0 -1
  809. package/dist/adapter/z-stack/znp/zpiObject.d.ts +0 -20
  810. package/dist/adapter/z-stack/znp/zpiObject.d.ts.map +0 -1
  811. package/dist/adapter/z-stack/znp/zpiObject.js +0 -103
  812. package/dist/adapter/z-stack/znp/zpiObject.js.map +0 -1
  813. package/dist/adapter/zigate/adapter/index.d.ts +0 -3
  814. package/dist/adapter/zigate/adapter/index.d.ts.map +0 -1
  815. package/dist/adapter/zigate/adapter/index.js +0 -11
  816. package/dist/adapter/zigate/adapter/index.js.map +0 -1
  817. package/dist/adapter/zigate/adapter/zigateAdapter.d.ts +0 -72
  818. package/dist/adapter/zigate/adapter/zigateAdapter.js +0 -681
  819. package/dist/adapter/zigate/adapter/zigateAdapter.js.map +0 -1
  820. package/dist/adapter/zigate/driver/buffaloZiGate.d.ts +0 -18
  821. package/dist/adapter/zigate/driver/commandType.d.ts +0 -43
  822. package/dist/adapter/zigate/driver/commandType.d.ts.map +0 -1
  823. package/dist/adapter/zigate/driver/commandType.js +0 -390
  824. package/dist/adapter/zigate/driver/commandType.js.map +0 -1
  825. package/dist/adapter/zigate/driver/constants.d.ts +0 -277
  826. package/dist/adapter/zigate/driver/constants.d.ts.map +0 -1
  827. package/dist/adapter/zigate/driver/constants.js +0 -372
  828. package/dist/adapter/zigate/driver/constants.js.map +0 -1
  829. package/dist/adapter/zigate/driver/frame.d.ts +0 -27
  830. package/dist/adapter/zigate/driver/frame.d.ts.map +0 -1
  831. package/dist/adapter/zigate/driver/frame.js +0 -173
  832. package/dist/adapter/zigate/driver/frame.js.map +0 -1
  833. package/dist/adapter/zigate/driver/messageType.d.ts +0 -13
  834. package/dist/adapter/zigate/driver/messageType.d.ts.map +0 -1
  835. package/dist/adapter/zigate/driver/messageType.js +0 -284
  836. package/dist/adapter/zigate/driver/messageType.js.map +0 -1
  837. package/dist/adapter/zigate/driver/parameterType.d.ts +0 -28
  838. package/dist/adapter/zigate/driver/parameterType.d.ts.map +0 -1
  839. package/dist/adapter/zigate/driver/parameterType.js +0 -33
  840. package/dist/adapter/zigate/driver/parameterType.js.map +0 -1
  841. package/dist/adapter/zigate/driver/ziGateObject.d.ts +0 -24
  842. package/dist/adapter/zigate/driver/ziGateObject.js +0 -111
  843. package/dist/adapter/zigate/driver/ziGateObject.js.map +0 -1
  844. package/dist/adapter/zigate/driver/zigate.d.ts +0 -50
  845. package/dist/adapter/zigate/driver/zigate.js +0 -289
  846. package/dist/adapter/zigate/driver/zigate.js.map +0 -1
  847. package/dist/buffalo/buffalo.d.ts +0 -55
  848. package/dist/buffalo/buffalo.d.ts.map +0 -1
  849. package/dist/buffalo/buffalo.js +0 -230
  850. package/dist/buffalo/buffalo.js.map +0 -1
  851. package/dist/buffalo/index.d.ts +0 -3
  852. package/dist/buffalo/index.d.ts.map +0 -1
  853. package/dist/buffalo/index.js +0 -9
  854. package/dist/buffalo/index.js.map +0 -1
  855. package/dist/controller/controller.d.ts +0 -119
  856. package/dist/controller/database.d.ts +0 -20
  857. package/dist/controller/database.js +0 -94
  858. package/dist/controller/database.js.map +0 -1
  859. package/dist/controller/events.d.ts +0 -59
  860. package/dist/controller/greenPower.d.ts +0 -14
  861. package/dist/controller/helpers/index.d.ts +0 -3
  862. package/dist/controller/helpers/index.js +0 -29
  863. package/dist/controller/helpers/index.js.map +0 -1
  864. package/dist/controller/helpers/request.d.ts +0 -22
  865. package/dist/controller/helpers/request.js +0 -78
  866. package/dist/controller/helpers/request.js.map +0 -1
  867. package/dist/controller/helpers/requestQueue.d.ts +0 -13
  868. package/dist/controller/helpers/requestQueue.js +0 -106
  869. package/dist/controller/helpers/requestQueue.js.map +0 -1
  870. package/dist/controller/helpers/zclFrameConverter.d.ts +0 -9
  871. package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts +0 -6
  872. package/dist/controller/helpers/zclTransactionSequenceNumber.d.ts.map +0 -1
  873. package/dist/controller/helpers/zclTransactionSequenceNumber.js +0 -14
  874. package/dist/controller/helpers/zclTransactionSequenceNumber.js.map +0 -1
  875. package/dist/controller/index.d.ts +0 -6
  876. package/dist/controller/index.js +0 -9
  877. package/dist/controller/index.js.map +0 -1
  878. package/dist/controller/model/device.d.ts +0 -140
  879. package/dist/controller/model/endpoint.d.ts +0 -134
  880. package/dist/controller/model/entity.d.ts +0 -15
  881. package/dist/controller/model/entity.js +0 -27
  882. package/dist/controller/model/entity.js.map +0 -1
  883. package/dist/controller/model/group.d.ts +0 -39
  884. package/dist/controller/model/index.d.ts +0 -6
  885. package/dist/controller/model/index.js +0 -15
  886. package/dist/controller/model/index.js.map +0 -1
  887. package/dist/controller/model/konnextConfig.d.ts +0 -7
  888. package/dist/controller/model/konnextConfig.d.ts.map +0 -1
  889. package/dist/controller/model/konnextConfig.js +0 -3
  890. package/dist/controller/model/konnextConfig.js.map +0 -1
  891. package/dist/controller/touchlink.d.ts +0 -20
  892. package/dist/controller/touchlink.js +0 -157
  893. package/dist/controller/touchlink.js.map +0 -1
  894. package/dist/controller/tstype.d.ts +0 -21
  895. package/dist/index.d.ts +0 -6
  896. package/dist/index.js +0 -37
  897. package/dist/index.js.map +0 -1
  898. package/dist/models/backup-storage-legacy.d.ts +0 -27
  899. package/dist/models/backup-storage-legacy.d.ts.map +0 -1
  900. package/dist/models/backup-storage-legacy.js +0 -3
  901. package/dist/models/backup-storage-legacy.js.map +0 -1
  902. package/dist/models/backup-storage-unified.d.ts +0 -50
  903. package/dist/models/backup-storage-unified.d.ts.map +0 -1
  904. package/dist/models/backup-storage-unified.js +0 -3
  905. package/dist/models/backup-storage-unified.js.map +0 -1
  906. package/dist/models/backup.d.ts +0 -38
  907. package/dist/models/backup.d.ts.map +0 -1
  908. package/dist/models/backup.js +0 -3
  909. package/dist/models/backup.js.map +0 -1
  910. package/dist/models/index.d.ts +0 -5
  911. package/dist/models/index.d.ts.map +0 -1
  912. package/dist/models/index.js +0 -21
  913. package/dist/models/index.js.map +0 -1
  914. package/dist/models/network-options.d.ts +0 -13
  915. package/dist/models/network-options.d.ts.map +0 -1
  916. package/dist/models/network-options.js +0 -3
  917. package/dist/models/network-options.js.map +0 -1
  918. package/dist/utils/aes.d.ts +0 -40
  919. package/dist/utils/aes.d.ts.map +0 -1
  920. package/dist/utils/aes.js +0 -198
  921. package/dist/utils/aes.js.map +0 -1
  922. package/dist/utils/assertString.d.ts +0 -3
  923. package/dist/utils/assertString.d.ts.map +0 -1
  924. package/dist/utils/assertString.js +0 -9
  925. package/dist/utils/assertString.js.map +0 -1
  926. package/dist/utils/backup.d.ts +0 -21
  927. package/dist/utils/backup.d.ts.map +0 -1
  928. package/dist/utils/backup.js +0 -190
  929. package/dist/utils/backup.js.map +0 -1
  930. package/dist/utils/equalsPartial.d.ts +0 -3
  931. package/dist/utils/equalsPartial.d.ts.map +0 -1
  932. package/dist/utils/equalsPartial.js +0 -12
  933. package/dist/utils/equalsPartial.js.map +0 -1
  934. package/dist/utils/index.d.ts +0 -10
  935. package/dist/utils/index.d.ts.map +0 -1
  936. package/dist/utils/index.js +0 -46
  937. package/dist/utils/index.js.map +0 -1
  938. package/dist/utils/isNumberArray.d.ts +0 -3
  939. package/dist/utils/isNumberArray.d.ts.map +0 -1
  940. package/dist/utils/isNumberArray.js +0 -7
  941. package/dist/utils/isNumberArray.js.map +0 -1
  942. package/dist/utils/logger.d.ts +0 -9
  943. package/dist/utils/logger.d.ts.map +0 -1
  944. package/dist/utils/logger.js +0 -14
  945. package/dist/utils/logger.js.map +0 -1
  946. package/dist/utils/queue.d.ts +0 -12
  947. package/dist/utils/queue.d.ts.map +0 -1
  948. package/dist/utils/queue.js +0 -62
  949. package/dist/utils/queue.js.map +0 -1
  950. package/dist/utils/realpathSync.d.ts +0 -3
  951. package/dist/utils/realpathSync.d.ts.map +0 -1
  952. package/dist/utils/realpathSync.js +0 -13
  953. package/dist/utils/realpathSync.js.map +0 -1
  954. package/dist/utils/wait.d.ts +0 -3
  955. package/dist/utils/wait.d.ts.map +0 -1
  956. package/dist/utils/wait.js +0 -9
  957. package/dist/utils/wait.js.map +0 -1
  958. package/dist/utils/waitress.d.ts +0 -22
  959. package/dist/utils/waitress.d.ts.map +0 -1
  960. package/dist/utils/waitress.js +0 -69
  961. package/dist/utils/waitress.js.map +0 -1
  962. package/dist/zspec/consts.d.ts +0 -60
  963. package/dist/zspec/consts.d.ts.map +0 -1
  964. package/dist/zspec/consts.js +0 -64
  965. package/dist/zspec/consts.js.map +0 -1
  966. package/dist/zspec/enums.d.ts +0 -19
  967. package/dist/zspec/enums.d.ts.map +0 -1
  968. package/dist/zspec/enums.js +0 -28
  969. package/dist/zspec/enums.js.map +0 -1
  970. package/dist/zspec/index.d.ts +0 -4
  971. package/dist/zspec/index.d.ts.map +0 -1
  972. package/dist/zspec/index.js +0 -43
  973. package/dist/zspec/index.js.map +0 -1
  974. package/dist/zspec/tstypes.d.ts +0 -19
  975. package/dist/zspec/tstypes.d.ts.map +0 -1
  976. package/dist/zspec/tstypes.js +0 -3
  977. package/dist/zspec/tstypes.js.map +0 -1
  978. package/dist/zspec/utils.d.ts +0 -14
  979. package/dist/zspec/utils.d.ts.map +0 -1
  980. package/dist/zspec/utils.js +0 -29
  981. package/dist/zspec/utils.js.map +0 -1
  982. package/dist/zspec/zcl/buffaloZcl.d.ts +0 -55
  983. package/dist/zspec/zcl/definition/cluster.d.ts +0 -3
  984. package/dist/zspec/zcl/definition/consts.d.ts +0 -9
  985. package/dist/zspec/zcl/definition/consts.d.ts.map +0 -1
  986. package/dist/zspec/zcl/definition/consts.js +0 -27
  987. package/dist/zspec/zcl/definition/consts.js.map +0 -1
  988. package/dist/zspec/zcl/definition/enums.d.ts +0 -177
  989. package/dist/zspec/zcl/definition/enums.d.ts.map +0 -1
  990. package/dist/zspec/zcl/definition/enums.js +0 -187
  991. package/dist/zspec/zcl/definition/enums.js.map +0 -1
  992. package/dist/zspec/zcl/definition/foundation.d.ts +0 -11
  993. package/dist/zspec/zcl/definition/manufacturerCode.d.ts +0 -727
  994. package/dist/zspec/zcl/definition/manufacturerCode.d.ts.map +0 -1
  995. package/dist/zspec/zcl/definition/manufacturerCode.js +0 -733
  996. package/dist/zspec/zcl/definition/manufacturerCode.js.map +0 -1
  997. package/dist/zspec/zcl/definition/status.d.ts +0 -69
  998. package/dist/zspec/zcl/definition/status.d.ts.map +0 -1
  999. package/dist/zspec/zcl/definition/status.js +0 -74
  1000. package/dist/zspec/zcl/definition/status.js.map +0 -1
  1001. package/dist/zspec/zcl/index.d.ts +0 -11
  1002. package/dist/zspec/zcl/utils.d.ts +0 -7
  1003. package/dist/zspec/zcl/zclFrame.d.ts +0 -36
  1004. package/dist/zspec/zcl/zclHeader.d.ts +0 -17
  1005. package/dist/zspec/zcl/zclStatusError.d.ts +0 -6
  1006. package/dist/zspec/zcl/zclStatusError.d.ts.map +0 -1
  1007. package/dist/zspec/zcl/zclStatusError.js +0 -13
  1008. package/dist/zspec/zcl/zclStatusError.js.map +0 -1
  1009. package/dist/zspec/zdo/buffaloZdo.d.ts +0 -438
  1010. package/dist/zspec/zdo/buffaloZdo.d.ts.map +0 -1
  1011. package/dist/zspec/zdo/buffaloZdo.js +0 -1892
  1012. package/dist/zspec/zdo/buffaloZdo.js.map +0 -1
  1013. package/dist/zspec/zdo/definition/clusters.d.ts +0 -624
  1014. package/dist/zspec/zdo/definition/clusters.d.ts.map +0 -1
  1015. package/dist/zspec/zdo/definition/clusters.js +0 -687
  1016. package/dist/zspec/zdo/definition/clusters.js.map +0 -1
  1017. package/dist/zspec/zdo/definition/consts.d.ts +0 -13
  1018. package/dist/zspec/zdo/definition/consts.d.ts.map +0 -1
  1019. package/dist/zspec/zdo/definition/consts.js +0 -16
  1020. package/dist/zspec/zdo/definition/consts.js.map +0 -1
  1021. package/dist/zspec/zdo/definition/enums.d.ts +0 -75
  1022. package/dist/zspec/zdo/definition/enums.d.ts.map +0 -1
  1023. package/dist/zspec/zdo/definition/enums.js +0 -97
  1024. package/dist/zspec/zdo/definition/enums.js.map +0 -1
  1025. package/dist/zspec/zdo/definition/status.d.ts +0 -99
  1026. package/dist/zspec/zdo/definition/status.d.ts.map +0 -1
  1027. package/dist/zspec/zdo/definition/status.js +0 -109
  1028. package/dist/zspec/zdo/definition/status.js.map +0 -1
  1029. package/dist/zspec/zdo/definition/tstypes.d.ts +0 -787
  1030. package/dist/zspec/zdo/definition/tstypes.d.ts.map +0 -1
  1031. package/dist/zspec/zdo/definition/tstypes.js +0 -3
  1032. package/dist/zspec/zdo/definition/tstypes.js.map +0 -1
  1033. package/dist/zspec/zdo/index.d.ts +0 -7
  1034. package/dist/zspec/zdo/index.d.ts.map +0 -1
  1035. package/dist/zspec/zdo/index.js +0 -39
  1036. package/dist/zspec/zdo/index.js.map +0 -1
  1037. package/dist/zspec/zdo/utils.d.ts +0 -25
  1038. package/dist/zspec/zdo/utils.d.ts.map +0 -1
  1039. package/dist/zspec/zdo/utils.js +0 -75
  1040. package/dist/zspec/zdo/utils.js.map +0 -1
  1041. package/dist/zspec/zdo/zdoStatusError.d.ts +0 -6
  1042. package/dist/zspec/zdo/zdoStatusError.d.ts.map +0 -1
  1043. package/dist/zspec/zdo/zdoStatusError.js +0 -13
  1044. package/dist/zspec/zdo/zdoStatusError.js.map +0 -1
  1045. package/typedoc-tsconfig.json +0 -44
@@ -15,40 +15,50 @@ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (
15
15
  }) : function(o, v) {
16
16
  o["default"] = v;
17
17
  });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
25
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
37
  };
28
38
  Object.defineProperty(exports, "__esModule", { value: true });
29
- const entity_1 = __importDefault(require("./entity"));
39
+ exports.Endpoint = void 0;
40
+ const node_assert_1 = __importDefault(require("node:assert"));
41
+ const logger_1 = require("../../utils/logger");
42
+ const ZSpec = __importStar(require("../../zspec"));
43
+ const enums_1 = require("../../zspec/enums");
30
44
  const Zcl = __importStar(require("../../zspec/zcl"));
31
- const zclTransactionSequenceNumber_1 = __importDefault(require("../helpers/zclTransactionSequenceNumber"));
32
- const ZclFrameConverter = __importStar(require("../helpers/zclFrameConverter"));
45
+ const Zdo = __importStar(require("../../zspec/zdo"));
33
46
  const request_1 = __importDefault(require("../helpers/request"));
34
47
  const requestQueue_1 = __importDefault(require("../helpers/requestQueue"));
35
- const group_1 = __importDefault(require("./group"));
48
+ const ZclFrameConverter = __importStar(require("../helpers/zclFrameConverter"));
49
+ const zclTransactionSequenceNumber_1 = __importDefault(require("../helpers/zclTransactionSequenceNumber"));
36
50
  const device_1 = __importDefault(require("./device"));
37
- const debug_1 = __importDefault(require("debug"));
38
- const assert_1 = __importDefault(require("assert"));
39
- const debug = {
40
- info: (0, debug_1.default)("zigbee-herdsman:controller:endpoint"),
41
- error: (0, debug_1.default)("zigbee-herdsman:controller:endpoint"),
42
- };
43
- const logger_1 = require("../../utils/logger");
44
- const enums_1 = require("../../zspec/enums");
45
- const NS = 'zh:controller:endpoint';
46
- class Endpoint extends entity_1.default {
51
+ const entity_1 = __importDefault(require("./entity"));
52
+ const group_1 = __importDefault(require("./group"));
53
+ const zigbeeEntity_1 = require("./zigbeeEntity");
54
+ const NS = "zh:controller:endpoint";
55
+ class Endpoint extends zigbeeEntity_1.ZigbeeEntity {
47
56
  databaseID;
48
57
  deviceID;
49
58
  inputClusters;
50
59
  outputClusters;
51
60
  profileID;
61
+ // biome-ignore lint/style/useNamingConvention: cross-repo impact
52
62
  ID;
53
63
  clusters;
54
64
  deviceIeeeAddress;
@@ -59,41 +69,28 @@ class Endpoint extends entity_1.default {
59
69
  pendingRequests;
60
70
  // Getters/setters
61
71
  get binds() {
62
- return this._binds
63
- .map((entry) => {
64
- let target = null;
65
- if (entry.type === "endpoint") {
66
- const device = device_1.default.byIeeeAddr(this.databaseID, entry.deviceIeeeAddress);
67
- if (device) {
68
- target = device.getEndpoint(entry.endpointID);
69
- }
70
- }
71
- else {
72
- target = group_1.default.byGroupID(entry.groupID, this.databaseID);
73
- }
72
+ const binds = [];
73
+ for (const bind of this._binds) {
74
+ // XXX: properties assumed valid when associated to `type`
75
+ const target =
76
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
77
+ bind.type === "endpoint" ? device_1.default.byIeeeAddr(this.databaseID, bind.deviceIeeeAddress)?.getEndpoint(bind.endpointID) : group_1.default.byGroupID(bind.groupID, this.databaseID);
74
78
  if (target) {
75
- return { target, cluster: this.getCluster(entry.cluster) };
76
- }
77
- else {
78
- return undefined;
79
+ binds.push({ target, cluster: this.getCluster(bind.cluster) });
79
80
  }
80
- }).filter(b => b !== undefined);
81
+ }
82
+ return binds;
81
83
  }
82
84
  get configuredReportings() {
83
- return this._configuredReportings.map((entry) => {
84
- const cluster = Zcl.Utils.getCluster(entry.cluster, entry.manufacturerCode, this.getDevice().customClusters);
85
- let attribute;
86
- if (cluster.hasAttribute(entry.attrId)) {
87
- attribute = cluster.getAttribute(entry.attrId);
88
- }
89
- else {
90
- attribute = {
91
- ID: entry.attrId,
92
- name: undefined,
93
- type: undefined,
94
- manufacturerCode: undefined,
95
- };
96
- }
85
+ const device = this.getDevice();
86
+ return this._configuredReportings.map((entry, index) => {
87
+ const cluster = Zcl.Utils.getCluster(entry.cluster, entry.manufacturerCode, device.customClusters);
88
+ const attribute = cluster.getAttribute(entry.attrId) ?? {
89
+ ID: entry.attrId,
90
+ name: `attr${index}`,
91
+ type: Zcl.DataType.UNKNOWN,
92
+ manufacturerCode: undefined,
93
+ };
97
94
  return {
98
95
  cluster,
99
96
  attribute,
@@ -103,10 +100,10 @@ class Endpoint extends entity_1.default {
103
100
  };
104
101
  });
105
102
  }
106
- constructor(databaseID, ID, profileID, deviceID, inputClusters, outputClusters, deviceNetworkAddress, deviceIeeeAddress, clusters, binds, configuredReportings, meta) {
103
+ constructor(databaseID, id, profileID, deviceID, inputClusters, outputClusters, deviceNetworkAddress, deviceIeeeAddress, clusters, binds, configuredReportings, meta) {
107
104
  super();
108
105
  this.databaseID = databaseID;
109
- this.ID = ID;
106
+ this.ID = id;
110
107
  this.profileID = profileID;
111
108
  this.deviceID = deviceID;
112
109
  this.inputClusters = inputClusters;
@@ -120,10 +117,17 @@ class Endpoint extends entity_1.default {
120
117
  this.pendingRequests = new requestQueue_1.default(this);
121
118
  }
122
119
  /**
123
- * Get device of this endpoint
124
- */
120
+ * Get device of this endpoint
121
+ */
125
122
  getDevice() {
126
- return device_1.default.byIeeeAddr(this.databaseID, this.deviceIeeeAddress);
123
+ const device = device_1.default.byIeeeAddr(this.databaseID, this.deviceIeeeAddress);
124
+ if (!device) {
125
+ logger_1.logger.error(`Tried to get unknown/deleted device ${this.deviceIeeeAddress} from endpoint ${this.ID}.`, NS);
126
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
127
+ logger_1.logger.debug(new Error().stack, NS);
128
+ }
129
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
130
+ return device;
127
131
  }
128
132
  /**
129
133
  * @param {number|string} clusterKey
@@ -157,18 +161,32 @@ class Endpoint extends entity_1.default {
157
161
  return clusterNumbers.map((c) => this.getCluster(c));
158
162
  }
159
163
  /*
160
- * CRUD
161
- */
164
+ * CRUD
165
+ */
162
166
  static fromDatabaseRecord(record, deviceNetworkAddress, deviceIeeeAddress, databaseID) {
163
167
  // Migrate attrs to attributes
164
- for (const entry of Object.values(record.clusters).filter((e) => e.hasOwnProperty("attrs"))) {
165
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
166
- // @ts-ignore
167
- entry.attributes = entry.attrs;
168
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
169
- // @ts-ignore
170
- delete entry.attrs;
168
+ for (const entryKey in record.clusters) {
169
+ const entry = record.clusters[entryKey];
170
+ if (entry.attrs != null) {
171
+ entry.attributes = entry.attrs;
172
+ delete entry.attrs;
173
+ }
174
+ }
175
+ // Migrate cluster renames from https://github.com/Koenkk/zigbee-herdsman/pull/1503 @deprecated 3.0
176
+ /* v8 ignore start */
177
+ if (record.clusters.piRetailTunnel) {
178
+ record.clusters.retailTunnel = record.clusters.piRetailTunnel;
179
+ delete record.clusters.piRetailTunnel;
171
180
  }
181
+ if (record.clusters.tunneling) {
182
+ record.clusters.seTunneling = record.clusters.tunneling;
183
+ delete record.clusters.tunneling;
184
+ }
185
+ if (record.clusters.haMeterIdentification) {
186
+ record.clusters.seMeterIdentification = record.clusters.haMeterIdentification;
187
+ delete record.clusters.haMeterIdentification;
188
+ }
189
+ /* v8 ignore stop */
172
190
  return new Endpoint(databaseID, record.epId, record.profId, record.devId, record.inClusterList, record.outClusterList, deviceNetworkAddress, deviceIeeeAddress, record.clusters, record.binds || [], record.configuredReportings || [], record.meta || {});
173
191
  }
174
192
  toDatabaseRecord() {
@@ -184,130 +202,173 @@ class Endpoint extends entity_1.default {
184
202
  meta: this.meta,
185
203
  };
186
204
  }
187
- static create(databaseID, ID, profileID, deviceID, inputClusters, outputClusters, deviceNetworkAddress, deviceIeeeAddress) {
188
- return new Endpoint(databaseID, ID, profileID, deviceID, inputClusters, outputClusters, deviceNetworkAddress, deviceIeeeAddress, {}, [], [], {});
205
+ static create(databaseID, id, profileID, deviceID, inputClusters, outputClusters, deviceNetworkAddress, deviceIeeeAddress) {
206
+ return new Endpoint(databaseID, id, profileID, deviceID, inputClusters, outputClusters, deviceNetworkAddress, deviceIeeeAddress, {}, [], [], {});
189
207
  }
190
208
  saveClusterAttributeKeyValue(clusterKey, list) {
191
209
  const cluster = this.getCluster(clusterKey);
192
- if (!this.clusters[cluster.name])
210
+ if (!this.clusters[cluster.name]) {
193
211
  this.clusters[cluster.name] = { attributes: {} };
194
- for (const [attribute, value] of Object.entries(list)) {
195
- this.clusters[cluster.name].attributes[attribute] = value;
212
+ }
213
+ for (const attribute in list) {
214
+ this.clusters[cluster.name].attributes[attribute] = list[attribute];
196
215
  }
197
216
  }
198
217
  getClusterAttributeValue(clusterKey, attributeKey) {
199
218
  const cluster = this.getCluster(clusterKey);
200
- const attribute = cluster.getAttribute(attributeKey);
201
219
  if (this.clusters[cluster.name] && this.clusters[cluster.name].attributes) {
202
- return this.clusters[cluster.name].attributes[attribute.name];
220
+ // XXX: used to throw (behavior changed in #1455)
221
+ const attribute = cluster.getAttribute(attributeKey);
222
+ if (attribute) {
223
+ return this.clusters[cluster.name].attributes[attribute.name];
224
+ }
225
+ }
226
+ return undefined;
227
+ }
228
+ saveClusterAttributeReportConfig(clusterId, manufacturerCode, reportConfigs) {
229
+ for (const entry of reportConfigs) {
230
+ if (entry.direction === Zcl.Direction.SERVER_TO_CLIENT) {
231
+ continue;
232
+ }
233
+ const existingConfigIdx = this._configuredReportings.findIndex((r) => r.cluster === clusterId &&
234
+ r.attrId === entry.attrId &&
235
+ (manufacturerCode === undefined || manufacturerCode === r.manufacturerCode));
236
+ if (entry.status === Zcl.Status.SUCCESS) {
237
+ if (existingConfigIdx > -1) {
238
+ this._configuredReportings[existingConfigIdx].minRepIntval = entry.minRepIntval;
239
+ this._configuredReportings[existingConfigIdx].maxRepIntval = entry.maxRepIntval;
240
+ this._configuredReportings[existingConfigIdx].repChange = entry.repChange;
241
+ }
242
+ else {
243
+ this._configuredReportings.push({
244
+ cluster: clusterId,
245
+ attrId: entry.attrId,
246
+ minRepIntval: entry.minRepIntval,
247
+ maxRepIntval: entry.maxRepIntval,
248
+ repChange: entry.repChange,
249
+ manufacturerCode,
250
+ });
251
+ }
252
+ }
253
+ else {
254
+ // UNSUPPORTED_ATTRIBUTE, UNREPORTABLE_ATTRIBUTE, NOT_FOUND
255
+ if (existingConfigIdx > -1) {
256
+ this._configuredReportings.splice(existingConfigIdx, 1);
257
+ }
258
+ }
203
259
  }
204
- return null;
260
+ this.save();
261
+ }
262
+ saveBindings(binds) {
263
+ this._binds = binds;
264
+ this.save();
265
+ }
266
+ clearBindings() {
267
+ this._binds.length = 0;
268
+ this.save();
205
269
  }
206
270
  hasPendingRequests() {
207
271
  return this.pendingRequests.size > 0;
208
272
  }
209
273
  async sendPendingRequests(fastPolling) {
210
- return this.pendingRequests.send(fastPolling);
274
+ return await this.pendingRequests.send(fastPolling);
211
275
  }
212
- async sendRequest(frame, options, func = (d) => {
213
- return entity_1.default.getAdapterByID(this.databaseID).sendZclFrameToEndpoint(this.deviceIeeeAddress, this.deviceNetworkAddress, this.ID, d, options.timeout, options.disableResponse, options.disableRecovery, options.srcEndpoint);
276
+ async sendRequest(frame, options, func = () => {
277
+ return entity_1.default.getAdapterByID(this.databaseID)?.sendZclFrameToEndpoint(this.deviceIeeeAddress, this.deviceNetworkAddress, this.ID, frame, options.timeout, options.disableResponse, options.disableRecovery, options.srcEndpoint, options.profileId);
214
278
  }) {
215
279
  const logPrefix = `Request Queue (${this.deviceIeeeAddress}/${this.ID}): `;
216
280
  const device = this.getDevice();
217
281
  const request = new request_1.default(func, frame, device.pendingRequestTimeout, options.sendPolicy);
218
- if (request.sendPolicy !== 'bulk') {
282
+ if (request.sendPolicy !== "bulk") {
219
283
  // Check if such a request is already in the queue and remove the old one(s) if necessary
220
284
  this.pendingRequests.filter(request);
221
285
  }
222
286
  // send without queueing if sendPolicy is 'immediate' or if the device has no timeout set
223
- if (request.sendPolicy === 'immediate' || !device.pendingRequestTimeout) {
287
+ if (request.sendPolicy === "immediate" || !device.pendingRequestTimeout) {
224
288
  if (device.pendingRequestTimeout > 0) {
225
- logger_1.logger.debug(logPrefix + `send ${frame.command.name} request immediately (sendPolicy=${options.sendPolicy})`, NS);
289
+ logger_1.logger.debug(`${logPrefix}send ${frame.command.name} request immediately (sendPolicy=${options.sendPolicy})`, NS);
226
290
  }
227
- return request.send();
291
+ return await request.send();
228
292
  }
229
293
  // If this is a bulk message, we queue directly.
230
- if (request.sendPolicy === 'bulk') {
231
- logger_1.logger.debug(logPrefix + `queue request (${this.pendingRequests.size})`, NS);
232
- return this.pendingRequests.queue(request);
294
+ if (request.sendPolicy === "bulk") {
295
+ logger_1.logger.debug(`${logPrefix}queue request (${this.pendingRequests.size})`, NS);
296
+ return await this.pendingRequests.queue(request);
233
297
  }
234
298
  try {
235
- logger_1.logger.debug(logPrefix + `send request`, NS);
299
+ logger_1.logger.debug(`${logPrefix}send request`, NS);
236
300
  return await request.send();
237
301
  }
238
302
  catch (error) {
239
303
  // If we got a failed transaction, the device is likely sleeping.
240
304
  // Queue for transmission later.
241
- logger_1.logger.debug(logPrefix + `queue request (transaction failed)`, NS);
242
- return this.pendingRequests.queue(request);
305
+ logger_1.logger.debug(`${logPrefix}queue request (transaction failed) (${error})`, NS);
306
+ return await this.pendingRequests.queue(request);
243
307
  }
244
308
  }
245
309
  /*
246
- * Zigbee functions
247
- */
310
+ * Zigbee functions
311
+ */
248
312
  checkStatus(payload) {
249
- const codes = Array.isArray(payload)
250
- ? payload.map((i) => i.status)
251
- : [payload.statusCode];
313
+ const codes = Array.isArray(payload) ? payload.map((i) => i.status) : [payload.statusCode];
252
314
  const invalid = codes.find((c) => c !== Zcl.Status.SUCCESS);
253
315
  if (invalid)
254
316
  throw new Zcl.StatusError(invalid);
255
317
  }
256
318
  async report(clusterKey, attributes, options) {
257
- const cluster = this.getCluster(clusterKey);
319
+ const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
258
320
  const payload = [];
259
- for (const [nameOrID, value] of Object.entries(attributes)) {
260
- if (cluster.hasAttribute(nameOrID)) {
261
- const attribute = cluster.getAttribute(nameOrID);
262
- payload.push({
263
- attrId: attribute.ID,
264
- attrData: value,
265
- dataType: attribute.type,
266
- });
321
+ // TODO: handle `attr.report !== true`
322
+ for (const nameOrID in attributes) {
323
+ const attribute = cluster.getAttribute(nameOrID);
324
+ if (attribute) {
325
+ payload.push({ attrId: attribute.ID, attrData: attributes[nameOrID], dataType: attribute.type });
267
326
  }
268
- else if (!isNaN(Number(nameOrID))) {
269
- payload.push({
270
- attrId: Number(nameOrID),
271
- attrData: value.value,
272
- dataType: value.type,
273
- });
327
+ else if (!Number.isNaN(Number(nameOrID))) {
328
+ const value = attributes[nameOrID];
329
+ payload.push({ attrId: Number(nameOrID), attrData: value.value, dataType: value.type });
274
330
  }
275
331
  else {
276
332
  throw new Error(`Unknown attribute '${nameOrID}', specify either an existing attribute or a number`);
277
333
  }
278
334
  }
279
- await this.zclCommand(clusterKey, "report", payload, options, attributes);
335
+ await this.zclCommand(cluster, "report", payload, options, attributes);
280
336
  }
281
337
  async write(clusterKey, attributes, options) {
282
- const cluster = this.getCluster(clusterKey);
283
- options = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
284
- options.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet(cluster, Object.keys(attributes), options.manufacturerCode, 'write');
338
+ const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
339
+ const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
340
+ optionsWithDefaults.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet(cluster, Object.keys(attributes), optionsWithDefaults.manufacturerCode, "write");
285
341
  const payload = [];
286
- for (const [nameOrID, value] of Object.entries(attributes)) {
287
- if (cluster.hasAttribute(nameOrID)) {
288
- const attribute = cluster.getAttribute(nameOrID);
289
- payload.push({ attrId: attribute.ID, attrData: value, dataType: attribute.type });
342
+ for (const nameOrID in attributes) {
343
+ const attribute = cluster.getAttribute(nameOrID);
344
+ if (attribute) {
345
+ // TODO: handle `attr.writeOptional !== true`
346
+ const attrData = Zcl.Utils.processAttributeWrite(attribute, attributes[nameOrID]);
347
+ payload.push({ attrId: attribute.ID, attrData, dataType: attribute.type });
290
348
  }
291
- else if (!isNaN(Number(nameOrID))) {
349
+ else if (!Number.isNaN(Number(nameOrID))) {
350
+ const value = attributes[nameOrID];
292
351
  payload.push({ attrId: Number(nameOrID), attrData: value.value, dataType: value.type });
293
352
  }
294
353
  else {
295
354
  throw new Error(`Unknown attribute '${nameOrID}', specify either an existing attribute or a number`);
296
355
  }
297
356
  }
298
- await this.zclCommand(clusterKey, options.writeUndiv ? "writeUndiv" : "write", payload, options, attributes, true);
357
+ await this.zclCommand(cluster, optionsWithDefaults.writeUndiv ? "writeUndiv" : "write", payload, optionsWithDefaults, attributes, true);
299
358
  }
300
359
  async writeResponse(clusterKey, transactionSequenceNumber, attributes, options) {
301
- (0, assert_1.default)(!options || !options.hasOwnProperty('transactionSequenceNumber'), 'Use parameter');
302
- const cluster = this.getCluster(clusterKey);
360
+ (0, node_assert_1.default)(options?.transactionSequenceNumber === undefined, "Use parameter");
361
+ const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
303
362
  const payload = [];
304
- for (const [nameOrID, value] of Object.entries(attributes)) {
305
- if (value.hasOwnProperty('status')) {
306
- if (cluster.hasAttribute(nameOrID)) {
307
- const attribute = cluster.getAttribute(nameOrID);
363
+ for (const nameOrID in attributes) {
364
+ // biome-ignore lint/style/noNonNullAssertion: from loop
365
+ const value = attributes[nameOrID];
366
+ if (value.status !== undefined) {
367
+ const attribute = cluster.getAttribute(nameOrID);
368
+ if (attribute) {
308
369
  payload.push({ attrId: attribute.ID, status: value.status });
309
370
  }
310
- else if (!isNaN(Number(nameOrID))) {
371
+ else if (!Number.isNaN(Number(nameOrID))) {
311
372
  payload.push({ attrId: Number(nameOrID), status: value.status });
312
373
  }
313
374
  else {
@@ -318,62 +379,90 @@ class Endpoint extends entity_1.default {
318
379
  throw new Error(`Missing attribute 'status'`);
319
380
  }
320
381
  }
321
- await this.zclCommand(clusterKey, 'writeRsp', payload, { direction: Zcl.Direction.SERVER_TO_CLIENT, ...options, transactionSequenceNumber }, attributes);
382
+ await this.zclCommand(cluster, "writeRsp", payload, { direction: Zcl.Direction.SERVER_TO_CLIENT, ...options, transactionSequenceNumber }, attributes);
322
383
  }
384
+ // XXX: ideally, the return type should limit to the contents of the `attributes` param
323
385
  async read(clusterKey, attributes, options) {
324
386
  const device = this.getDevice();
325
- const cluster = this.getCluster(clusterKey, device);
326
- options = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
327
- options.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet(cluster, attributes, options.manufacturerCode, 'read');
387
+ const cluster = this.getCluster(clusterKey, device, options?.manufacturerCode);
388
+ const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
389
+ optionsWithDefaults.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet(cluster, attributes, optionsWithDefaults.manufacturerCode, "read");
328
390
  const payload = [];
391
+ // TODO: handle `attr.required !== true` => should not throw
329
392
  for (const attribute of attributes) {
330
- payload.push({ attrId: typeof attribute === 'number' ? attribute : cluster.getAttribute(attribute).ID });
331
- }
332
- const resultFrame = await this.zclCommand(clusterKey, 'read', payload, options, attributes, true);
333
- if (resultFrame) {
334
- return ZclFrameConverter.attributeKeyValue(resultFrame, device.manufacturerID, device.customClusters);
393
+ if (typeof attribute === "number") {
394
+ payload.push({ attrId: attribute });
395
+ }
396
+ else {
397
+ const attr = cluster.getAttribute(attribute);
398
+ if (attr) {
399
+ Zcl.Utils.processAttributePreRead(attr);
400
+ payload.push({ attrId: attr.ID });
401
+ }
402
+ else {
403
+ logger_1.logger.warning(`Ignoring unknown attribute ${attribute} in cluster ${cluster.name}`, NS);
404
+ }
405
+ }
335
406
  }
407
+ // TODO: could be sending empty array payload
408
+ const resultFrame = await this.zclCommand(cluster, "read", payload, optionsWithDefaults, attributes, true);
409
+ return resultFrame
410
+ ? ZclFrameConverter.attributeKeyValue(resultFrame, device.manufacturerID, device.customClusters)
411
+ : {};
336
412
  }
337
413
  async readResponse(clusterKey, transactionSequenceNumber, attributes, options) {
338
- (0, assert_1.default)(!options || !options.hasOwnProperty('transactionSequenceNumber'), 'Use parameter');
339
- const cluster = this.getCluster(clusterKey);
414
+ (0, node_assert_1.default)(options?.transactionSequenceNumber === undefined, "Use parameter");
415
+ const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
340
416
  const payload = [];
341
- for (const [nameOrID, value] of Object.entries(attributes)) {
342
- if (cluster.hasAttribute(nameOrID)) {
343
- const attribute = cluster.getAttribute(nameOrID);
344
- payload.push({
345
- attrId: attribute.ID,
346
- attrData: value,
347
- dataType: attribute.type,
348
- status: 0,
349
- });
417
+ for (const nameOrID in attributes) {
418
+ const attribute = cluster.getAttribute(nameOrID);
419
+ if (attribute) {
420
+ payload.push({ attrId: attribute.ID, attrData: attributes[nameOrID], dataType: attribute.type, status: 0 });
350
421
  }
351
- else if (!isNaN(Number(nameOrID))) {
352
- payload.push({
353
- attrId: Number(nameOrID),
354
- attrData: value.value,
355
- dataType: value.type,
356
- status: 0,
357
- });
422
+ else if (!Number.isNaN(Number(nameOrID))) {
423
+ const value = attributes[nameOrID];
424
+ payload.push({ attrId: Number(nameOrID), attrData: value.value, dataType: value.type, status: 0 });
358
425
  }
359
426
  else {
360
427
  throw new Error(`Unknown attribute '${nameOrID}', specify either an existing attribute or a number`);
361
428
  }
362
429
  }
363
- await this.zclCommand(clusterKey, 'readRsp', payload, { direction: Zcl.Direction.SERVER_TO_CLIENT, ...options, transactionSequenceNumber }, attributes);
430
+ await this.zclCommand(cluster, "readRsp", payload, { direction: Zcl.Direction.SERVER_TO_CLIENT, ...options, transactionSequenceNumber }, attributes);
431
+ }
432
+ async updateSimpleDescriptor() {
433
+ const clusterId = Zdo.ClusterId.SIMPLE_DESCRIPTOR_REQUEST;
434
+ const adapter = entity_1.default.getAdapterByID(this.databaseID);
435
+ if (!adapter) {
436
+ throw new Error(`No adapter found for database ID ${this.databaseID}`);
437
+ }
438
+ const zdoPayload = Zdo.Buffalo.buildRequest(adapter.hasZdoMessageOverhead ?? false, clusterId, this.deviceNetworkAddress, this.ID);
439
+ const response = await adapter.sendZdo(this.deviceIeeeAddress, this.deviceNetworkAddress, clusterId, zdoPayload, false);
440
+ if (!Zdo.Buffalo.checkStatus(response)) {
441
+ throw new Zdo.StatusError(response[0]);
442
+ }
443
+ const simpleDescriptor = response[1];
444
+ this.profileID = simpleDescriptor.profileId;
445
+ this.deviceID = simpleDescriptor.deviceId;
446
+ this.inputClusters = simpleDescriptor.inClusterList;
447
+ this.outputClusters = simpleDescriptor.outClusterList;
448
+ }
449
+ hasBind(clusterId, target) {
450
+ return this.getBindIndex(clusterId, target) !== -1;
451
+ }
452
+ getBindIndex(clusterId, target) {
453
+ return this.binds.findIndex((b) => b.cluster.ID === clusterId && b.target === target);
364
454
  }
365
455
  addBinding(clusterKey, target) {
366
456
  const cluster = this.getCluster(clusterKey);
367
- if (typeof target === 'number') {
457
+ if (typeof target === "number") {
368
458
  target = group_1.default.byGroupID(target, this.databaseID) || group_1.default.create(target, this.databaseID);
369
459
  }
370
- if (!this.binds.find((b) => b.cluster.ID === cluster.ID && b.target === target)) {
460
+ this.addBindingInternal(cluster, target);
461
+ }
462
+ addBindingInternal(cluster, target) {
463
+ if (!this.hasBind(cluster.ID, target)) {
371
464
  if (target instanceof group_1.default) {
372
- this._binds.push({
373
- cluster: cluster.ID,
374
- groupID: target.groupID,
375
- type: "group",
376
- });
465
+ this._binds.push({ cluster: cluster.ID, groupID: target.groupID, type: "group" });
377
466
  }
378
467
  else {
379
468
  this._binds.push({
@@ -388,78 +477,112 @@ class Endpoint extends entity_1.default {
388
477
  }
389
478
  async bind(clusterKey, target) {
390
479
  const cluster = this.getCluster(clusterKey);
391
- const type = target instanceof Endpoint ? 'endpoint' : 'group';
392
- if (typeof target === 'number') {
480
+ if (typeof target === "number") {
393
481
  target = group_1.default.byGroupID(target, this.databaseID) || group_1.default.create(target, this.databaseID);
394
482
  }
395
483
  const destinationAddress = target instanceof Endpoint ? target.deviceIeeeAddress : target.groupID;
396
- const log = `Bind ${this.deviceIeeeAddress}/${this.ID} ${cluster.name} from ` +
397
- `'${target instanceof Endpoint ? `${destinationAddress}/${target.ID}` : destinationAddress}'`;
484
+ const log = `Bind ${this.deviceIeeeAddress}/${this.ID} ${cluster.name} from '${target instanceof Endpoint ? `${destinationAddress}/${target.ID}` : destinationAddress}'`;
398
485
  logger_1.logger.debug(log, NS);
399
486
  try {
400
- await entity_1.default.getAdapterByID(this.databaseID).bind(this.deviceNetworkAddress, this.deviceIeeeAddress, this.ID, cluster.ID, destinationAddress, type, target instanceof Endpoint ? target.ID : null);
401
- this.addBinding(clusterKey, target);
487
+ const zdoClusterId = Zdo.ClusterId.BIND_REQUEST;
488
+ const zdoPayload = Zdo.Buffalo.buildRequest(entity_1.default.getAdapterByID(this.databaseID)?.hasZdoMessageOverhead ?? false, zdoClusterId, this.deviceIeeeAddress, this.ID, cluster.ID, target instanceof Endpoint ? Zdo.UNICAST_BINDING : Zdo.MULTICAST_BINDING, target instanceof Endpoint ? target.deviceIeeeAddress : ZSpec.BLANK_EUI64, target instanceof group_1.default ? target.groupID : 0, target instanceof Endpoint ? target.ID : 0xff);
489
+ const adapter = entity_1.default.getAdapterByID(this.databaseID);
490
+ if (!adapter) {
491
+ throw new Error(`No adapter found for database ID ${this.databaseID}`);
492
+ }
493
+ const response = await adapter.sendZdo(this.deviceIeeeAddress, this.deviceNetworkAddress, zdoClusterId, zdoPayload, false);
494
+ if (!Zdo.Buffalo.checkStatus(response)) {
495
+ throw new Zdo.StatusError(response[0]);
496
+ }
497
+ this.addBindingInternal(cluster, target);
402
498
  }
403
499
  catch (error) {
404
- error.message = `${log} failed (${error.message})`;
405
- logger_1.logger.debug(error, NS);
500
+ const err = error;
501
+ err.message = `${log} failed (${err.message})`;
502
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
503
+ logger_1.logger.debug(err.stack, NS);
406
504
  throw error;
407
505
  }
408
506
  }
409
507
  save() {
410
508
  this.getDevice().save();
411
509
  }
412
- async unbind(clusterKey, target) {
510
+ async unbind(clusterKey, target, force = false) {
511
+ // When force is true the unbind is done even when the bind is not in the bind list, additionally when the target is a number
512
+ // it will not check if the group exists.
413
513
  const cluster = this.getCluster(clusterKey);
414
- const type = target instanceof Endpoint ? 'endpoint' : 'group';
415
- const destinationAddress = target instanceof Endpoint
416
- ? target.deviceIeeeAddress
417
- : target instanceof group_1.default
418
- ? target.groupID
419
- : target;
420
- const log = `Unbind ${this.deviceIeeeAddress}/${this.ID} ${cluster.name} from ` +
421
- `'${target instanceof Endpoint ? `${destinationAddress}/${target.ID}` : destinationAddress}'`;
514
+ const action = `Unbind ${this.deviceIeeeAddress}/${this.ID} ${cluster.name}`;
515
+ if (typeof target === "number") {
516
+ const groupTarget = group_1.default.byGroupID(target, this.databaseID);
517
+ if (groupTarget) {
518
+ target = groupTarget;
519
+ }
520
+ else if (!force) {
521
+ throw new Error(`${action} invalid target '${target}' (no group with this ID exists).`);
522
+ }
523
+ }
524
+ const destinationAddress = target instanceof Endpoint ? target.deviceIeeeAddress : target instanceof group_1.default ? target.groupID : target;
525
+ const log = `${action} from '${target instanceof Endpoint ? `${destinationAddress}/${target.ID}` : destinationAddress}'`;
526
+ const index = target instanceof Endpoint || target instanceof group_1.default ? this.getBindIndex(cluster.ID, target) : -1;
527
+ if (index === -1 && !force) {
528
+ logger_1.logger.debug(`${log} no bind present, skipping.`, NS);
529
+ return;
530
+ }
422
531
  logger_1.logger.debug(log, NS);
423
532
  try {
424
- await entity_1.default.getAdapterByID(this.databaseID).unbind(this.deviceNetworkAddress, this.deviceIeeeAddress, this.ID, cluster.ID, destinationAddress, type, target instanceof Endpoint ? target.ID : null);
425
- if (typeof target === "number" &&
426
- group_1.default.byGroupID(target, this.databaseID)) {
427
- target = group_1.default.byGroupID(target, this.databaseID);
533
+ const zdoClusterId = Zdo.ClusterId.UNBIND_REQUEST;
534
+ const adapter = entity_1.default.getAdapterByID(this.databaseID);
535
+ if (!adapter) {
536
+ throw new Error(`No adapter found for database ID ${this.databaseID}`);
537
+ }
538
+ const zdoPayload = Zdo.Buffalo.buildRequest(adapter.hasZdoMessageOverhead, zdoClusterId, this.deviceIeeeAddress, this.ID, cluster.ID, target instanceof Endpoint ? Zdo.UNICAST_BINDING : Zdo.MULTICAST_BINDING, target instanceof Endpoint ? target.deviceIeeeAddress : ZSpec.BLANK_EUI64, target instanceof group_1.default ? target.groupID : typeof target === "number" ? target : 0, target instanceof Endpoint ? target.ID : 0xff);
539
+ const response = await adapter.sendZdo(this.deviceIeeeAddress, this.deviceNetworkAddress, zdoClusterId, zdoPayload, false);
540
+ if (!Zdo.Buffalo.checkStatus(response)) {
541
+ if (response[0] === Zdo.Status.NO_ENTRY) {
542
+ logger_1.logger.debug(`${log} no entry on device, removing entry from database.`, NS);
543
+ }
544
+ else {
545
+ throw new Zdo.StatusError(response[0]);
546
+ }
428
547
  }
429
- const index = this.binds.findIndex((b) => b.cluster.ID === cluster.ID && b.target === target);
430
548
  if (index !== -1) {
431
549
  this._binds.splice(index, 1);
432
550
  this.save();
433
551
  }
434
552
  }
435
553
  catch (error) {
436
- error.message = `${log} failed (${error.message})`;
437
- logger_1.logger.debug(error, NS);
554
+ const err = error;
555
+ err.message = `${log} failed (${err.message})`;
556
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
557
+ logger_1.logger.debug(err.stack, NS);
438
558
  throw error;
439
559
  }
440
560
  }
441
561
  async defaultResponse(commandID, status, clusterID, transactionSequenceNumber, options) {
442
- (0, assert_1.default)(!options || !options.hasOwnProperty('transactionSequenceNumber'), 'Use parameter');
562
+ (0, node_assert_1.default)(options?.transactionSequenceNumber === undefined, "Use parameter");
443
563
  const payload = { cmdId: commandID, statusCode: status };
444
- await this.zclCommand(clusterID, 'defaultRsp', payload, { direction: Zcl.Direction.SERVER_TO_CLIENT, ...options, transactionSequenceNumber });
564
+ await this.zclCommand(clusterID, "defaultRsp", payload, { direction: Zcl.Direction.SERVER_TO_CLIENT, ...options, transactionSequenceNumber });
445
565
  }
446
566
  async configureReporting(clusterKey, items, options) {
447
- const cluster = this.getCluster(clusterKey);
448
- options = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
449
- options.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet(cluster, items, options.manufacturerCode, 'configureReporting');
567
+ const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
568
+ const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
569
+ optionsWithDefaults.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet(cluster, items, optionsWithDefaults.manufacturerCode, "configureReporting");
450
570
  const payload = items.map((item) => {
451
- let dataType, attrId;
571
+ let dataType;
572
+ let attrId;
452
573
  if (typeof item.attribute === "object") {
453
574
  dataType = item.attribute.type;
454
575
  attrId = item.attribute.ID;
455
576
  }
456
577
  else {
457
- /* istanbul ignore else */
458
- if (cluster.hasAttribute(item.attribute)) {
459
- const attribute = cluster.getAttribute(item.attribute);
578
+ const attribute = cluster.getAttribute(item.attribute);
579
+ if (attribute) {
460
580
  dataType = attribute.type;
461
581
  attrId = attribute.ID;
462
582
  }
583
+ else {
584
+ throw new Error(`Invalid attribute '${item.attribute}' for cluster '${clusterKey}'`);
585
+ }
463
586
  }
464
587
  return {
465
588
  direction: Zcl.Direction.CLIENT_TO_SERVER,
@@ -470,99 +593,130 @@ class Endpoint extends entity_1.default {
470
593
  repChange: item.reportableChange,
471
594
  };
472
595
  });
473
- await this.zclCommand(clusterKey, 'configReport', payload, options, items, true);
596
+ await this.zclCommand(cluster, "configReport", payload, optionsWithDefaults, items, true);
474
597
  for (const e of payload) {
475
- this._configuredReportings = this._configuredReportings.filter((c) => !(c.attrId === e.attrId && c.cluster === cluster.ID &&
476
- (!('manufacturerCode' in c) || c.manufacturerCode === options.manufacturerCode)));
598
+ this._configuredReportings = this._configuredReportings.filter((c) => !(c.attrId === e.attrId &&
599
+ c.cluster === cluster.ID &&
600
+ (!("manufacturerCode" in c) || c.manufacturerCode === optionsWithDefaults.manufacturerCode)));
477
601
  }
478
602
  for (const entry of payload) {
479
- if (entry.maxRepIntval !== 0xFFFF) {
603
+ if (entry.maxRepIntval !== 0xffff) {
480
604
  this._configuredReportings.push({
481
- cluster: cluster.ID, attrId: entry.attrId, minRepIntval: entry.minRepIntval,
482
- maxRepIntval: entry.maxRepIntval, repChange: entry.repChange,
483
- manufacturerCode: options.manufacturerCode,
605
+ cluster: cluster.ID,
606
+ attrId: entry.attrId,
607
+ minRepIntval: entry.minRepIntval,
608
+ maxRepIntval: entry.maxRepIntval,
609
+ // expects items[].attribute to always point to a number DataType
610
+ repChange: entry.repChange,
611
+ manufacturerCode: optionsWithDefaults.manufacturerCode,
484
612
  });
485
613
  }
486
614
  }
487
615
  this.save();
488
616
  }
617
+ async readReportingConfig(clusterKey, items, options) {
618
+ const cluster = this.getCluster(clusterKey, undefined, options?.manufacturerCode);
619
+ const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
620
+ optionsWithDefaults.manufacturerCode = this.ensureManufacturerCodeIsUniqueAndGet(cluster, items, optionsWithDefaults.manufacturerCode, "readReportingConfig");
621
+ const payload = [];
622
+ for (const item of items) {
623
+ if (typeof item.attribute === "object") {
624
+ payload.push({ direction: item.direction ?? Zcl.Direction.CLIENT_TO_SERVER, attrId: item.attribute.ID });
625
+ }
626
+ else {
627
+ const attribute = cluster.getAttribute(item.attribute);
628
+ if (attribute) {
629
+ payload.push({ direction: item.direction ?? Zcl.Direction.CLIENT_TO_SERVER, attrId: attribute.ID });
630
+ }
631
+ else {
632
+ logger_1.logger.warning(`Ignoring unknown attribute ${item.attribute} in cluster ${cluster.name}`, NS);
633
+ }
634
+ }
635
+ }
636
+ // TODO: could be sending empty array payload
637
+ // don't check status otherwise whole command fails (we want to cherry-pick here)
638
+ const response = await this.zclCommand(cluster, "readReportConfig", payload, optionsWithDefaults, items, false);
639
+ if (response) {
640
+ this.saveClusterAttributeReportConfig(response.cluster.ID, optionsWithDefaults.manufacturerCode, response.payload);
641
+ return response.payload;
642
+ }
643
+ throw new Error("No response received");
644
+ }
489
645
  async writeStructured(clusterKey, payload, options) {
490
- await this.zclCommand(clusterKey, 'writeStructured', payload, options);
646
+ await this.zclCommand(clusterKey, "writeStructured", payload, options);
491
647
  // TODO: support `writeStructuredResponse`
492
648
  }
493
649
  async command(clusterKey, commandKey, payload, options) {
494
- const frame = await this.zclCommand(clusterKey, commandKey, payload, options, null, false, Zcl.FrameType.SPECIFIC);
650
+ const frame = await this.zclCommand(clusterKey, commandKey, payload, options, undefined, false, Zcl.FrameType.SPECIFIC);
495
651
  if (frame) {
496
652
  return frame.payload;
497
653
  }
498
654
  }
499
655
  async commandResponse(clusterKey, commandKey, payload, options, transactionSequenceNumber) {
500
- (0, assert_1.default)(!options || !options.hasOwnProperty('transactionSequenceNumber'), 'Use parameter');
656
+ (0, node_assert_1.default)(options?.transactionSequenceNumber === undefined, "Use parameter");
501
657
  const device = this.getDevice();
502
- const cluster = this.getCluster(clusterKey, device);
658
+ const cluster = this.getCluster(clusterKey, device, options?.manufacturerCode);
503
659
  const command = cluster.getCommandResponse(commandKey);
504
- transactionSequenceNumber = transactionSequenceNumber || zclTransactionSequenceNumber_1.default.next();
505
- options = this.getOptionsWithDefaults(options, true, Zcl.Direction.SERVER_TO_CLIENT, cluster.manufacturerCode);
506
- const frame = Zcl.Frame.create(Zcl.FrameType.SPECIFIC, options.direction, options.disableDefaultResponse, options.manufacturerCode, transactionSequenceNumber, command.name, cluster.name, payload, device.customClusters, options.reservedBits);
507
- const log = `CommandResponse ${this.deviceIeeeAddress}/${this.ID} ` +
508
- `${cluster.name}.${command.name}(${JSON.stringify(payload)}, ${JSON.stringify(options)})`;
509
- logger_1.logger.debug(log, NS);
660
+ transactionSequenceNumber = transactionSequenceNumber ?? zclTransactionSequenceNumber_1.default.next();
661
+ const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.SERVER_TO_CLIENT, cluster.manufacturerCode);
662
+ const frame = Zcl.Frame.create(Zcl.FrameType.SPECIFIC, optionsWithDefaults.direction, optionsWithDefaults.disableDefaultResponse, optionsWithDefaults.manufacturerCode, transactionSequenceNumber, command, cluster, payload, device.customClusters, optionsWithDefaults.reservedBits);
663
+ const createLogMessage = () => `CommandResponse ${this.deviceIeeeAddress}/${this.ID} ` +
664
+ `${cluster.name}.${command.name}(${JSON.stringify(payload)}, ${JSON.stringify(optionsWithDefaults)})`;
665
+ logger_1.logger.debug(createLogMessage, NS);
510
666
  try {
511
- await this.sendRequest(frame, options, async (f) => {
512
- // Broadcast Green Power responses
513
- if (this.ID === 242) {
514
- await entity_1.default.getAdapterByID(this.databaseID).sendZclFrameToAll(242, f, 242, enums_1.BroadcastAddress.RX_ON_WHEN_IDLE);
515
- }
516
- else {
517
- await entity_1.default.getAdapterByID(this.databaseID).sendZclFrameToEndpoint(this.deviceIeeeAddress, this.deviceNetworkAddress, this.ID, f, options.timeout, options.disableResponse, options.disableRecovery, options.srcEndpoint);
518
- }
519
- });
667
+ // Broadcast Green Power responses
668
+ if (this.ID === 242) {
669
+ await this.sendRequest(frame, optionsWithDefaults, async () => {
670
+ await entity_1.default.getAdapterByID(this.databaseID)?.sendZclFrameToAll(242, frame, 242, enums_1.BroadcastAddress.RX_ON_WHEN_IDLE);
671
+ });
672
+ }
673
+ else {
674
+ await this.sendRequest(frame, optionsWithDefaults);
675
+ }
520
676
  }
521
677
  catch (error) {
522
- error.message = `${log} failed (${error.message})`;
523
- logger_1.logger.debug(error, NS);
678
+ const err = error;
679
+ err.message = `${createLogMessage()} failed (${err.message})`;
680
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
681
+ logger_1.logger.debug(err.stack, NS);
524
682
  throw error;
525
683
  }
526
684
  }
527
- waitForCommand(clusterKey, commandKey, transactionSequenceNumber, timeout) {
528
- const device = this.getDevice();
529
- const cluster = this.getCluster(clusterKey, device);
530
- const command = cluster.getCommand(commandKey);
531
- const waiter = entity_1.default.getAdapterByID(this.databaseID).waitFor(this.deviceNetworkAddress, this.ID, Zcl.FrameType.SPECIFIC, Zcl.Direction.CLIENT_TO_SERVER, transactionSequenceNumber, cluster.ID, command.ID, timeout);
532
- const promise = new Promise((resolve, reject) => {
533
- waiter.promise.then((payload) => {
534
- const frame = Zcl.Frame.fromBuffer(payload.clusterID, payload.header, payload.data, device.customClusters);
535
- resolve({ header: frame.header, payload: frame.payload });
536
- }, (error) => reject(error));
537
- });
538
- return { promise, cancel: waiter.cancel };
539
- }
540
685
  getOptionsWithDefaults(options, disableDefaultResponse, direction, manufacturerCode) {
541
- const providedOptions = options || {};
542
686
  return {
543
687
  timeout: 10000,
544
688
  disableResponse: false,
545
689
  disableRecovery: false,
546
690
  disableDefaultResponse,
547
691
  direction,
548
- srcEndpoint: null,
692
+ srcEndpoint: undefined,
549
693
  reservedBits: 0,
550
- manufacturerCode: manufacturerCode ?? null,
551
- transactionSequenceNumber: null,
694
+ manufacturerCode,
695
+ transactionSequenceNumber: undefined,
552
696
  writeUndiv: false,
553
- ...providedOptions
697
+ ...(options || {}),
554
698
  };
555
699
  }
556
- ensureManufacturerCodeIsUniqueAndGet(cluster, attributes, fallbackManufacturerCode, caller) {
557
- const manufacturerCodes = new Set(attributes.map((nameOrID) => {
700
+ ensureManufacturerCodeIsUniqueAndGet(cluster, attributes, fallbackManufacturerCode, // XXX: problematic undefined for a "fallback"?
701
+ caller) {
702
+ let firstManufacturerCode;
703
+ let codeSet = false;
704
+ for (const nameOrID of attributes) {
558
705
  let attributeID;
559
- if (typeof nameOrID == 'object') {
706
+ if (typeof nameOrID === "object") {
560
707
  // ConfigureReportingItem
561
- if (typeof nameOrID.attribute !== 'object') {
708
+ if (typeof nameOrID.attribute !== "object") {
562
709
  attributeID = nameOrID.attribute;
563
710
  }
564
711
  else {
565
- return fallbackManufacturerCode;
712
+ if (!codeSet) {
713
+ firstManufacturerCode = fallbackManufacturerCode;
714
+ codeSet = true;
715
+ }
716
+ else if (firstManufacturerCode !== fallbackManufacturerCode) {
717
+ throw new Error(`Cannot have attributes with different manufacturerCode in single '${caller}' call`);
718
+ }
719
+ continue;
566
720
  }
567
721
  }
568
722
  else {
@@ -570,50 +724,45 @@ class Endpoint extends entity_1.default {
570
724
  attributeID = nameOrID;
571
725
  }
572
726
  // we fall back to caller|cluster provided manufacturerCode
573
- if (cluster.hasAttribute(attributeID)) {
574
- const attribute = cluster.getAttribute(attributeID);
575
- return (attribute.manufacturerCode === undefined) ?
576
- fallbackManufacturerCode :
577
- attribute.manufacturerCode;
727
+ const attribute = cluster.getAttribute(attributeID);
728
+ const manufacturerCode = attribute
729
+ ? attribute.manufacturerCode === undefined
730
+ ? fallbackManufacturerCode
731
+ : attribute.manufacturerCode
732
+ : fallbackManufacturerCode;
733
+ if (!codeSet) {
734
+ firstManufacturerCode = manufacturerCode;
735
+ codeSet = true;
578
736
  }
579
- else {
580
- // unknown attribute, we should not fail on this here
581
- return fallbackManufacturerCode;
737
+ else if (firstManufacturerCode !== manufacturerCode) {
738
+ throw new Error(`Cannot have attributes with different manufacturerCode in single '${caller}' call`);
582
739
  }
583
- }));
584
- if (manufacturerCodes.size == 1) {
585
- return manufacturerCodes.values().next().value;
586
- }
587
- else {
588
- throw new Error(`Cannot have attributes with different manufacturerCode in single '${caller}' call`);
589
740
  }
741
+ return firstManufacturerCode;
590
742
  }
591
743
  async addToGroup(group) {
592
- await this.command("genGroups", "add", {
593
- groupid: group.groupID,
594
- groupname: "",
595
- });
744
+ await this.zclCommand("genGroups", "add", { groupid: group.groupID, groupname: "" }, undefined, undefined, true, Zcl.FrameType.SPECIFIC);
596
745
  group.addMember(this);
597
746
  }
598
- getCluster(clusterKey, device = undefined) {
599
- device = device ?? this.getDevice();
600
- return Zcl.Utils.getCluster(clusterKey, device.manufacturerID, device.customClusters);
747
+ getCluster(clusterKey, device = undefined, manufacturerCode = undefined) {
748
+ if (!device) {
749
+ device = this.getDevice();
750
+ }
751
+ return Zcl.Utils.getCluster(clusterKey, manufacturerCode ?? device.manufacturerID, device.customClusters);
601
752
  }
602
753
  /**
603
- * Remove endpoint from a group, accepts both a Group and number as parameter.
604
- * The number parameter type should only be used when removing from a group which is not known
605
- * to zigbee-herdsman.
606
- */
754
+ * Remove endpoint from a group, accepts both a Group and number as parameter.
755
+ * The number parameter type should only be used when removing from a group which is not known
756
+ * to zigbee-herdsman.
757
+ */
607
758
  async removeFromGroup(group) {
608
- await this.command("genGroups", "remove", {
609
- groupid: group instanceof group_1.default ? group.groupID : group,
610
- });
759
+ await this.zclCommand("genGroups", "remove", { groupid: group instanceof group_1.default ? group.groupID : group }, undefined, undefined, true, Zcl.FrameType.SPECIFIC);
611
760
  if (group instanceof group_1.default) {
612
761
  group.removeMember(this);
613
762
  }
614
763
  }
615
764
  async removeFromAllGroups() {
616
- await this.command("genGroups", "removeAll", {}, { disableDefaultResponse: true });
765
+ await this.zclCommand("genGroups", "removeAll", {}, { disableDefaultResponse: true }, undefined, false, Zcl.FrameType.SPECIFIC);
617
766
  this.removeFromAllGroupsDatabase();
618
767
  }
619
768
  removeFromAllGroupsDatabase() {
@@ -625,43 +774,49 @@ class Endpoint extends entity_1.default {
625
774
  }
626
775
  async zclCommand(clusterKey, commandKey, payload, options, logPayload, checkStatus = false, frameType = Zcl.FrameType.GLOBAL) {
627
776
  const device = this.getDevice();
628
- const cluster = this.getCluster(clusterKey, device);
629
- const command = (frameType == Zcl.FrameType.GLOBAL) ? Zcl.Utils.getGlobalCommand(commandKey) : cluster.getCommand(commandKey);
630
- const hasResponse = (frameType == Zcl.FrameType.GLOBAL) ? true : command.hasOwnProperty('response');
631
- options = this.getOptionsWithDefaults(options, hasResponse, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
632
- const frame = Zcl.Frame.create(frameType, options.direction, options.disableDefaultResponse, options.manufacturerCode, options.transactionSequenceNumber ?? zclTransactionSequenceNumber_1.default.next(), command.name, cluster.name, payload, device.customClusters, options.reservedBits);
633
- const log = `ZCL command ${this.deviceIeeeAddress}/${this.ID} ` +
634
- `${cluster.name}.${command.name}(${JSON.stringify((logPayload) ? logPayload : payload)}, ${JSON.stringify(options)})`;
635
- logger_1.logger.debug(log, NS);
777
+ const cluster = typeof clusterKey === "object" ? clusterKey : this.getCluster(clusterKey, device, options?.manufacturerCode);
778
+ const command = typeof commandKey === "object"
779
+ ? commandKey
780
+ : frameType === Zcl.FrameType.GLOBAL
781
+ ? Zcl.Utils.getGlobalCommand(commandKey)
782
+ : cluster.getCommand(commandKey);
783
+ const hasResponse = frameType === Zcl.FrameType.GLOBAL ? true : command.response !== undefined;
784
+ const optionsWithDefaults = this.getOptionsWithDefaults(options, hasResponse, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
785
+ const frame = Zcl.Frame.create(frameType, optionsWithDefaults.direction, optionsWithDefaults.disableDefaultResponse, optionsWithDefaults.manufacturerCode, optionsWithDefaults.transactionSequenceNumber ?? zclTransactionSequenceNumber_1.default.next(), command, cluster, payload, device.customClusters, optionsWithDefaults.reservedBits);
786
+ const createLogMessage = () => `ZCL command ${this.deviceIeeeAddress}/${this.ID} ` +
787
+ `${cluster.name}.${command.name}(${JSON.stringify(logPayload ? logPayload : payload)}, ${JSON.stringify(optionsWithDefaults)})`;
788
+ logger_1.logger.debug(createLogMessage, NS);
636
789
  try {
637
- const result = await this.sendRequest(frame, options);
790
+ const result = await this.sendRequest(frame, optionsWithDefaults);
638
791
  if (result) {
639
792
  const resultFrame = Zcl.Frame.fromBuffer(result.clusterID, result.header, result.data, device.customClusters);
640
- if (result && checkStatus && !options.disableResponse) {
793
+ if (checkStatus && !optionsWithDefaults.disableResponse) {
641
794
  this.checkStatus(resultFrame.payload);
642
795
  }
643
796
  return resultFrame;
644
797
  }
645
798
  }
646
799
  catch (error) {
647
- error.message = `${log} failed (${error.message})`;
648
- logger_1.logger.debug(error, NS);
800
+ const err = error;
801
+ err.message = `${createLogMessage()} failed (${err.message})`;
802
+ // biome-ignore lint/style/noNonNullAssertion: ignored using `--suppress`
803
+ logger_1.logger.debug(err.stack, NS);
649
804
  throw error;
650
805
  }
651
806
  }
652
807
  async zclCommandBroadcast(endpoint, destination, clusterKey, commandKey, payload, options) {
653
808
  const device = this.getDevice();
654
- const cluster = this.getCluster(clusterKey, device);
809
+ const cluster = this.getCluster(clusterKey, device, options?.manufacturerCode);
655
810
  const command = cluster.getCommand(commandKey);
656
- options = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
657
- const sourceEndpoint = options.srcEndpoint ?? this.ID;
658
- const frame = Zcl.Frame.create(Zcl.FrameType.SPECIFIC, options.direction, true, options.manufacturerCode, options.transactionSequenceNumber ?? zclTransactionSequenceNumber_1.default.next(), command.name, cluster.name, payload, device.customClusters, options.reservedBits);
659
- const log = `ZCL command broadcast ${this.deviceIeeeAddress}/${sourceEndpoint} to ${destination}/${endpoint} ` +
660
- `${cluster.name}.${command.name}(${JSON.stringify({ payload, options })})`;
661
- logger_1.logger.debug(log, NS);
811
+ const optionsWithDefaults = this.getOptionsWithDefaults(options, true, Zcl.Direction.CLIENT_TO_SERVER, cluster.manufacturerCode);
812
+ const sourceEndpoint = optionsWithDefaults.srcEndpoint ?? this.ID;
813
+ const frame = Zcl.Frame.create(Zcl.FrameType.SPECIFIC, optionsWithDefaults.direction, true, optionsWithDefaults.manufacturerCode, optionsWithDefaults.transactionSequenceNumber ?? zclTransactionSequenceNumber_1.default.next(), command, cluster, payload, device.customClusters, optionsWithDefaults.reservedBits);
814
+ logger_1.logger.debug(() => `ZCL command broadcast ${this.deviceIeeeAddress}/${sourceEndpoint} to ${destination}/${endpoint} ` +
815
+ `${cluster.name}.${command.name}(${JSON.stringify({ payload, optionsWithDefaults })})`, NS);
662
816
  // if endpoint===0xFF ("broadcast endpoint"), deliver to all endpoints supporting cluster, should be avoided whenever possible
663
- await entity_1.default.getAdapterByID(this.databaseID).sendZclFrameToAll(endpoint, frame, sourceEndpoint, destination);
817
+ await entity_1.default.getAdapterByID(this.databaseID)?.sendZclFrameToAll(endpoint, frame, sourceEndpoint, destination);
664
818
  }
665
819
  }
820
+ exports.Endpoint = Endpoint;
666
821
  exports.default = Endpoint;
667
822
  //# sourceMappingURL=endpoint.js.map