homebridge-securitysystem 0.0.1-matter

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 (257) hide show
  1. package/.gitattributes +1 -0
  2. package/.github/ISSUE_TEMPLATE/bug_report.yml +46 -0
  3. package/.github/ISSUE_TEMPLATE/feature-request.yml +17 -0
  4. package/.github/ISSUE_TEMPLATE/questions-answers.yml +40 -0
  5. package/.github/demo.jpg +0 -0
  6. package/.github/dependabot.yml +19 -0
  7. package/.github/release.yml +36 -0
  8. package/.github/workflows/build-package.yml +49 -0
  9. package/.github/workflows/bump-version.yml +59 -0
  10. package/.github/workflows/dependency-review.yml +26 -0
  11. package/.github/workflows/publish.yml +155 -0
  12. package/.github/workflows/stale-activity.yml +27 -0
  13. package/AGENTS.md +247 -0
  14. package/CHANGELOG.md +572 -0
  15. package/CODE_OF_CONDUCT.md +128 -0
  16. package/CONTRIBUTING.md +5 -0
  17. package/LICENSE +21 -0
  18. package/README.md +47 -0
  19. package/SECURITY.md +12 -0
  20. package/config.schema.json +934 -0
  21. package/dist/conditions/already-triggered-condition.d.ts +10 -0
  22. package/dist/conditions/already-triggered-condition.js +22 -0
  23. package/dist/conditions/already-triggered-condition.js.map +1 -0
  24. package/dist/conditions/arming-in-progress-condition.d.ts +10 -0
  25. package/dist/conditions/arming-in-progress-condition.js +21 -0
  26. package/dist/conditions/arming-in-progress-condition.js.map +1 -0
  27. package/dist/conditions/arming-lock-condition.d.ts +10 -0
  28. package/dist/conditions/arming-lock-condition.js +43 -0
  29. package/dist/conditions/arming-lock-condition.js.map +1 -0
  30. package/dist/conditions/condition.d.ts +22 -0
  31. package/dist/conditions/condition.js +19 -0
  32. package/dist/conditions/condition.js.map +1 -0
  33. package/dist/conditions/double-knock-condition.d.ts +24 -0
  34. package/dist/conditions/double-knock-condition.js +73 -0
  35. package/dist/conditions/double-knock-condition.js.map +1 -0
  36. package/dist/conditions/not-armed-condition.d.ts +10 -0
  37. package/dist/conditions/not-armed-condition.js +26 -0
  38. package/dist/conditions/not-armed-condition.js.map +1 -0
  39. package/dist/conditions/trigger-already-running-condition.d.ts +10 -0
  40. package/dist/conditions/trigger-already-running-condition.js +21 -0
  41. package/dist/conditions/trigger-already-running-condition.js.map +1 -0
  42. package/dist/constants/default-constant.d.ts +24 -0
  43. package/dist/constants/default-constant.js +27 -0
  44. package/dist/constants/default-constant.js.map +1 -0
  45. package/dist/constants/homekit-constant.d.ts +2 -0
  46. package/dist/constants/homekit-constant.js +3 -0
  47. package/dist/constants/homekit-constant.js.map +1 -0
  48. package/dist/constants/matter-constant.d.ts +21 -0
  49. package/dist/constants/matter-constant.js +61 -0
  50. package/dist/constants/matter-constant.js.map +1 -0
  51. package/dist/handlers/sensor-handler.d.ts +24 -0
  52. package/dist/handlers/sensor-handler.js +63 -0
  53. package/dist/handlers/sensor-handler.js.map +1 -0
  54. package/dist/handlers/state-handler.d.ts +49 -0
  55. package/dist/handlers/state-handler.js +204 -0
  56. package/dist/handlers/state-handler.js.map +1 -0
  57. package/dist/handlers/switch-handler.d.ts +28 -0
  58. package/dist/handlers/switch-handler.js +95 -0
  59. package/dist/handlers/switch-handler.js.map +1 -0
  60. package/dist/handlers/trip-handler.d.ts +44 -0
  61. package/dist/handlers/trip-handler.js +156 -0
  62. package/dist/handlers/trip-handler.js.map +1 -0
  63. package/dist/homekit/homekit-registrar.d.ts +12 -0
  64. package/dist/homekit/homekit-registrar.js +23 -0
  65. package/dist/homekit/homekit-registrar.js.map +1 -0
  66. package/dist/homekit/service-factory.d.ts +12 -0
  67. package/dist/homekit/service-factory.js +24 -0
  68. package/dist/homekit/service-factory.js.map +1 -0
  69. package/dist/index.d.ts +3 -0
  70. package/dist/index.js +7 -0
  71. package/dist/index.js.map +1 -0
  72. package/dist/interfaces/condition-context-interface.d.ts +14 -0
  73. package/dist/interfaces/condition-context-interface.js +2 -0
  74. package/dist/interfaces/condition-context-interface.js.map +1 -0
  75. package/dist/interfaces/hap-types-interface.d.ts +9 -0
  76. package/dist/interfaces/hap-types-interface.js +2 -0
  77. package/dist/interfaces/hap-types-interface.js.map +1 -0
  78. package/dist/interfaces/mqtt-status-payload-interface.d.ts +6 -0
  79. package/dist/interfaces/mqtt-status-payload-interface.js +2 -0
  80. package/dist/interfaces/mqtt-status-payload-interface.js.map +1 -0
  81. package/dist/interfaces/options-interface.d.ts +87 -0
  82. package/dist/interfaces/options-interface.js +2 -0
  83. package/dist/interfaces/options-interface.js.map +1 -0
  84. package/dist/interfaces/persisted-state-interface.d.ts +6 -0
  85. package/dist/interfaces/persisted-state-interface.js +2 -0
  86. package/dist/interfaces/persisted-state-interface.js.map +1 -0
  87. package/dist/interfaces/service-registry-interface.d.ts +10 -0
  88. package/dist/interfaces/service-registry-interface.js +2 -0
  89. package/dist/interfaces/service-registry-interface.js.map +1 -0
  90. package/dist/interfaces/system-state-interface.d.ts +22 -0
  91. package/dist/interfaces/system-state-interface.js +2 -0
  92. package/dist/interfaces/system-state-interface.js.map +1 -0
  93. package/dist/schemas/arming-lock-schema.d.ts +10 -0
  94. package/dist/schemas/arming-lock-schema.js +12 -0
  95. package/dist/schemas/arming-lock-schema.js.map +1 -0
  96. package/dist/schemas/error-schema.d.ts +4 -0
  97. package/dist/schemas/error-schema.js +7 -0
  98. package/dist/schemas/error-schema.js.map +1 -0
  99. package/dist/schemas/mode-request-schema.d.ts +10 -0
  100. package/dist/schemas/mode-request-schema.js +18 -0
  101. package/dist/schemas/mode-request-schema.js.map +1 -0
  102. package/dist/schemas/status-response-schema.d.ts +7 -0
  103. package/dist/schemas/status-response-schema.js +10 -0
  104. package/dist/schemas/status-response-schema.js.map +1 -0
  105. package/dist/schemas/trip-mode-request-schema.d.ts +9 -0
  106. package/dist/schemas/trip-mode-request-schema.js +24 -0
  107. package/dist/schemas/trip-mode-request-schema.js.map +1 -0
  108. package/dist/security-system-platform.d.ts +19 -0
  109. package/dist/security-system-platform.js +56 -0
  110. package/dist/security-system-platform.js.map +1 -0
  111. package/dist/security-system.d.ts +28 -0
  112. package/dist/security-system.js +169 -0
  113. package/dist/security-system.js.map +1 -0
  114. package/dist/services/command-service.d.ts +16 -0
  115. package/dist/services/command-service.js +65 -0
  116. package/dist/services/command-service.js.map +1 -0
  117. package/dist/services/configuration-service.d.ts +24 -0
  118. package/dist/services/configuration-service.js +189 -0
  119. package/dist/services/configuration-service.js.map +1 -0
  120. package/dist/services/event-bus-service.d.ts +12 -0
  121. package/dist/services/event-bus-service.js +17 -0
  122. package/dist/services/event-bus-service.js.map +1 -0
  123. package/dist/services/matter-service.d.ts +69 -0
  124. package/dist/services/matter-service.js +363 -0
  125. package/dist/services/matter-service.js.map +1 -0
  126. package/dist/services/mqtt-service.d.ts +16 -0
  127. package/dist/services/mqtt-service.js +97 -0
  128. package/dist/services/mqtt-service.js.map +1 -0
  129. package/dist/services/server-service.d.ts +28 -0
  130. package/dist/services/server-service.js +275 -0
  131. package/dist/services/server-service.js.map +1 -0
  132. package/dist/services/storage-service.d.ts +14 -0
  133. package/dist/services/storage-service.js +70 -0
  134. package/dist/services/storage-service.js.map +1 -0
  135. package/dist/services/webhook-service.d.ts +16 -0
  136. package/dist/services/webhook-service.js +68 -0
  137. package/dist/services/webhook-service.js.map +1 -0
  138. package/dist/tests/conditions.test.d.ts +1 -0
  139. package/dist/tests/conditions.test.js +175 -0
  140. package/dist/tests/conditions.test.js.map +1 -0
  141. package/dist/tests/matter-service.test.d.ts +1 -0
  142. package/dist/tests/matter-service.test.js +475 -0
  143. package/dist/tests/matter-service.test.js.map +1 -0
  144. package/dist/tests/mqtt-service.test.d.ts +1 -0
  145. package/dist/tests/mqtt-service.test.js +168 -0
  146. package/dist/tests/mqtt-service.test.js.map +1 -0
  147. package/dist/tests/sensor-handler.test.d.ts +1 -0
  148. package/dist/tests/sensor-handler.test.js +87 -0
  149. package/dist/tests/sensor-handler.test.js.map +1 -0
  150. package/dist/tests/server-service.test.d.ts +1 -0
  151. package/dist/tests/server-service.test.js +188 -0
  152. package/dist/tests/server-service.test.js.map +1 -0
  153. package/dist/tests/state-handler.test.d.ts +1 -0
  154. package/dist/tests/state-handler.test.js +276 -0
  155. package/dist/tests/state-handler.test.js.map +1 -0
  156. package/dist/tests/switch-handler.test.d.ts +1 -0
  157. package/dist/tests/switch-handler.test.js +186 -0
  158. package/dist/tests/switch-handler.test.js.map +1 -0
  159. package/dist/tests/trip-handler.test.d.ts +1 -0
  160. package/dist/tests/trip-handler.test.js +179 -0
  161. package/dist/tests/trip-handler.test.js.map +1 -0
  162. package/dist/timers/timer-manager.d.ts +31 -0
  163. package/dist/timers/timer-manager.js +118 -0
  164. package/dist/timers/timer-manager.js.map +1 -0
  165. package/dist/types/event-payload-map-type.d.ts +15 -0
  166. package/dist/types/event-payload-map-type.js +2 -0
  167. package/dist/types/event-payload-map-type.js.map +1 -0
  168. package/dist/types/event-type.d.ts +44 -0
  169. package/dist/types/event-type.js +20 -0
  170. package/dist/types/event-type.js.map +1 -0
  171. package/dist/types/matter-accessory-key-type.d.ts +7 -0
  172. package/dist/types/matter-accessory-key-type.js +2 -0
  173. package/dist/types/matter-accessory-key-type.js.map +1 -0
  174. package/dist/types/mode-type.d.ts +4 -0
  175. package/dist/types/mode-type.js +2 -0
  176. package/dist/types/mode-type.js.map +1 -0
  177. package/dist/types/origin-type.d.ts +9 -0
  178. package/dist/types/origin-type.js +11 -0
  179. package/dist/types/origin-type.js.map +1 -0
  180. package/dist/types/security-state-type.d.ts +11 -0
  181. package/dist/types/security-state-type.js +13 -0
  182. package/dist/types/security-state-type.js.map +1 -0
  183. package/dist/types/sensor-kind-type.d.ts +2 -0
  184. package/dist/types/sensor-kind-type.js +2 -0
  185. package/dist/types/sensor-kind-type.js.map +1 -0
  186. package/dist/types/service-result-type.d.ts +4 -0
  187. package/dist/types/service-result-type.js +2 -0
  188. package/dist/types/service-result-type.js.map +1 -0
  189. package/dist/utils/arming-util.d.ts +19 -0
  190. package/dist/utils/arming-util.js +24 -0
  191. package/dist/utils/arming-util.js.map +1 -0
  192. package/dist/utils/state-util.d.ts +8 -0
  193. package/dist/utils/state-util.js +29 -0
  194. package/dist/utils/state-util.js.map +1 -0
  195. package/docs/MQTT.md +50 -0
  196. package/package.json +64 -0
  197. package/src/@types/homebridge-lib.d.ts +11 -0
  198. package/src/conditions/already-triggered-condition.ts +24 -0
  199. package/src/conditions/arming-in-progress-condition.ts +23 -0
  200. package/src/conditions/arming-lock-condition.ts +50 -0
  201. package/src/conditions/condition.ts +31 -0
  202. package/src/conditions/double-knock-condition.ts +84 -0
  203. package/src/conditions/not-armed-condition.ts +30 -0
  204. package/src/conditions/trigger-already-running-condition.ts +23 -0
  205. package/src/constants/default-constant.ts +28 -0
  206. package/src/constants/homekit-constant.ts +2 -0
  207. package/src/constants/matter-constant.ts +69 -0
  208. package/src/handlers/sensor-handler.ts +78 -0
  209. package/src/handlers/state-handler.ts +257 -0
  210. package/src/handlers/switch-handler.ts +111 -0
  211. package/src/handlers/trip-handler.ts +193 -0
  212. package/src/homekit/homekit-registrar.ts +28 -0
  213. package/src/homekit/service-factory.ts +35 -0
  214. package/src/index.ts +9 -0
  215. package/src/interfaces/condition-context-interface.ts +15 -0
  216. package/src/interfaces/hap-types-interface.ts +11 -0
  217. package/src/interfaces/mqtt-status-payload-interface.ts +6 -0
  218. package/src/interfaces/options-interface.ts +116 -0
  219. package/src/interfaces/persisted-state-interface.ts +7 -0
  220. package/src/interfaces/service-registry-interface.ts +11 -0
  221. package/src/interfaces/system-state-interface.ts +25 -0
  222. package/src/schemas/arming-lock-schema.ts +12 -0
  223. package/src/schemas/error-schema.ts +7 -0
  224. package/src/schemas/mode-request-schema.ts +18 -0
  225. package/src/schemas/status-response-schema.ts +10 -0
  226. package/src/schemas/trip-mode-request-schema.ts +24 -0
  227. package/src/security-system-platform.ts +68 -0
  228. package/src/security-system.ts +199 -0
  229. package/src/services/command-service.ts +76 -0
  230. package/src/services/configuration-service.ts +224 -0
  231. package/src/services/event-bus-service.ts +21 -0
  232. package/src/services/matter-service.ts +446 -0
  233. package/src/services/mqtt-service.ts +123 -0
  234. package/src/services/server-service.ts +327 -0
  235. package/src/services/storage-service.ts +80 -0
  236. package/src/services/webhook-service.ts +77 -0
  237. package/src/tests/conditions.test.ts +212 -0
  238. package/src/tests/matter-service.test.ts +610 -0
  239. package/src/tests/mqtt-service.test.ts +231 -0
  240. package/src/tests/sensor-handler.test.ts +116 -0
  241. package/src/tests/server-service.test.ts +238 -0
  242. package/src/tests/state-handler.test.ts +371 -0
  243. package/src/tests/switch-handler.test.ts +234 -0
  244. package/src/tests/trip-handler.test.ts +244 -0
  245. package/src/timers/timer-manager.ts +141 -0
  246. package/src/types/event-payload-map-type.ts +25 -0
  247. package/src/types/event-type.ts +61 -0
  248. package/src/types/matter-accessory-key-type.ts +33 -0
  249. package/src/types/mode-type.ts +4 -0
  250. package/src/types/origin-type.ts +9 -0
  251. package/src/types/security-state-type.ts +11 -0
  252. package/src/types/sensor-kind-type.ts +2 -0
  253. package/src/types/service-result-type.ts +4 -0
  254. package/src/utils/arming-util.ts +44 -0
  255. package/src/utils/state-util.ts +32 -0
  256. package/tsconfig.json +26 -0
  257. package/vitest.config.ts +8 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditions.test.js","sourceRoot":"","sources":["../../src/tests/conditions.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAIrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AACzE,OAAO,EAAE,yBAAyB,EAAE,MAAM,+CAA+C,CAAC;AAC1F,OAAO,EAAE,yBAAyB,EAAE,MAAM,8CAA8C,CAAC;AACzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,mBAAmB,EAAE,MAAM,wCAAwC,CAAC;AAE7E,gFAAgF;AAEhF,SAAS,SAAS,CAAC,SAAS,GAAyB,EAAE;IACrD,OAAO;QACL,YAAY,EAAE,aAAa,CAAC,IAAI;QAChC,WAAW,EAAE,aAAa,CAAC,IAAI;QAC/B,YAAY,EAAE,aAAa,CAAC,GAAG;QAC/B,qBAAqB,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,IAAI,EAAE,aAAa,CAAC,KAAK,EAAE,aAAa,CAAC,GAAG,CAAC;QACvG,QAAQ,EAAE,KAAK;QACf,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,KAAK;QAChB,4BAA4B,EAAE,CAAC;QAC/B,kBAAkB,EAAE,IAAI;QACxB,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;QACtE,gBAAgB,EAAE,KAAK;QACvB,GAAG,SAAS;KACb,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,SAAS,GAAmC,EAAE;IACjE,OAAO;QACL,WAAW,EAAE,KAAK;QAClB,WAAW,EAAE,KAAK;QAClB,kBAAkB,EAAE,EAAE;QACtB,gBAAgB,EAAE,EAAE;QACpB,sBAAsB,EAAE,IAAI;QAC5B,sBAAsB,EAAE,IAAI;QAC5B,uBAAuB,EAAE,IAAI;QAC7B,gBAAgB,EAAE,KAAK;QACvB,kBAAkB,EAAE,KAAK;QACzB,GAAG,SAAS;KACuB,CAAC;AACxC,CAAC;AAED,SAAS,OAAO;IACd,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;AAC5F,CAAC;AAED,SAAS,OAAO,CAAC,KAAkB,EAAE,OAA8B,EAAE,KAAc,EAAE,MAAM,GAAG,UAAU,CAAC,cAAc;IACrH,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAwC,EAAE,CAAC;AACjG,CAAC;AAED,iFAAiF;AAEjF,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;IACnC,MAAM,IAAI,GAAG,IAAI,mBAAmB,EAAE,CAAC;IAEvC,EAAE,CAAC,mEAAmE,EAAE,GAAG,EAAE;QAC3E,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACnG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChG,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;IACxF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;QACtD,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACpI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,kBAAkB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACnG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,WAAW,EAAE,aAAa,CAAC,GAAG,EAAE,WAAW,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACnI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnG,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,QAAQ,CAAC,mBAAmB,EAAE,GAAG,EAAE;IACjC,MAAM,IAAI,GAAG,IAAI,iBAAiB,EAAE,CAAC;IAErC,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACrC,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9D,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,GAAG,EAAE,CAAC,CAAC;QAC7D,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,MAAM,IAAI,GAAG,IAAI,yBAAyB,EAAE,CAAC;IAE7C,EAAE,CAAC,gDAAgD,EAAE,GAAG,EAAE;QACxD,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAChC,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACvC,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5C,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,MAAM,IAAI,GAAG,IAAI,yBAAyB,EAAE,CAAC;IAE7C,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QAC3D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACnC,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QAC9D,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACzE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAChD,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,YAAY,EAAE,aAAa,CAAC,SAAS,EAAE,CAAC,CAAC;QACnE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,iFAAiF;AAEjF,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,EAAE,CAAC,oDAAoD,EAAE,GAAG,EAAE;QAC5D,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,oBAAoB,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC7E,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;QACvD,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,oBAAoB,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QAChF,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAC,CAAC;QACpG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC1F,MAAM,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;QACnD,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,oBAAoB,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QAChF,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAC,CAAC;QACpG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7D,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;QAC1D,MAAM,IAAI,GAAG,IAAI,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,YAAY,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/E,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,CAAC,CAAC;QACpG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9D,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACzD,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,oBAAoB,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,SAAS,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC;QAChF,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,gBAAgB,EAAE,CAAC,MAAM,CAAC,EAAE,kBAAkB,EAAE,EAAE,EAAE,sBAAsB,EAAE,EAAE,EAAE,CAAC,CAAC;QAChI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1C,MAAM,CAAC,YAAY,CAAC,CAAC,oBAAoB,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,475 @@
1
+ import { describe, it, expect, vi, beforeEach } from 'vitest';
2
+ import { EventBusService } from '../services/event-bus-service.js';
3
+ import { MatterService } from '../services/matter-service.js';
4
+ import { EventType } from '../types/event-type.js';
5
+ import { OriginType } from '../types/origin-type.js';
6
+ import { SecurityState } from '../types/security-state-type.js';
7
+ // ── Mocks ─────────────────────────────────────────────────────────────────────
8
+ class InvalidInState extends Error {
9
+ }
10
+ class ConstraintError extends Error {
11
+ }
12
+ class Failure extends Error {
13
+ }
14
+ function makeMatterMock() {
15
+ return {
16
+ uuid: { generate: vi.fn((seed) => `matter-uuid-${seed}`) },
17
+ deviceTypes: {
18
+ OnOffSwitch: { name: 'OnOffSwitch' },
19
+ MotionSensor: { name: 'MotionSensor' },
20
+ },
21
+ clusterNames: { OnOff: 'onOff', OccupancySensing: 'occupancySensing' },
22
+ status: {
23
+ InvalidInState,
24
+ ConstraintError,
25
+ Failure,
26
+ isMatterProtocolError: (error) => error instanceof InvalidInState || error instanceof ConstraintError || error instanceof Failure,
27
+ },
28
+ registerPlatformAccessories: vi.fn(async (_pluginIdentifier, _platformName, _accessories) => undefined),
29
+ unregisterPlatformAccessories: vi.fn(async (_pluginIdentifier, _platformName, _accessories) => undefined),
30
+ updateAccessoryState: vi.fn(async (_uuid, _cluster, _attributes) => undefined),
31
+ getAccessoryState: vi.fn(async () => undefined),
32
+ };
33
+ }
34
+ // ── Helpers ───────────────────────────────────────────────────────────────────
35
+ function makeLog() {
36
+ return { info: vi.fn(), warn: vi.fn(), error: vi.fn(), debug: vi.fn() };
37
+ }
38
+ function makeState(overrides = {}) {
39
+ return {
40
+ currentState: SecurityState.OFF,
41
+ targetState: SecurityState.OFF,
42
+ defaultState: SecurityState.OFF,
43
+ availableTargetStates: [SecurityState.HOME, SecurityState.AWAY, SecurityState.NIGHT, SecurityState.OFF],
44
+ isArming: false,
45
+ isTripping: false,
46
+ isKnocked: false,
47
+ serverAuthenticationAttempts: 0,
48
+ pausedCurrentState: null,
49
+ armingLocks: { global: false, home: false, away: false, night: false },
50
+ modeAwayExtended: false,
51
+ ...overrides,
52
+ };
53
+ }
54
+ function makeOptions(overrides = {}) {
55
+ return {
56
+ serialNumber: 'SEC-1',
57
+ tripSwitchName: 'Trip',
58
+ tripHomeSwitchName: 'Trip Home',
59
+ tripAwaySwitchName: 'Trip Away',
60
+ tripNightSwitchName: 'Trip Night',
61
+ tripOverrideSwitchName: 'Trip Override',
62
+ modeHomeSwitchName: 'Mode Home',
63
+ modeAwaySwitchName: 'Mode Away',
64
+ modeNightSwitchName: 'Mode Night',
65
+ modeOffSwitchName: 'Mode Off',
66
+ modeAwayExtendedSwitchName: 'Mode Away Extended',
67
+ modePauseSwitchName: 'Mode Pause',
68
+ modeSwitches: false,
69
+ modeOffSwitch: false,
70
+ modePauseSwitch: false,
71
+ modeAwayExtendedSwitch: false,
72
+ tripSwitch: false,
73
+ tripOverrideSwitch: false,
74
+ tripModeSwitches: false,
75
+ tripHomeSwitches: [],
76
+ tripAwaySwitches: [],
77
+ tripNightSwitches: [],
78
+ armingLockSwitch: false,
79
+ armingLockSwitches: false,
80
+ armingMotionSensor: false,
81
+ trippedMotionSensor: false,
82
+ resetSensor: false,
83
+ ...overrides,
84
+ };
85
+ }
86
+ function makeSwitchHandler() {
87
+ return {
88
+ setModeSwitch: vi.fn((_mode, _value) => ({ success: true })),
89
+ setModeOffSwitch: vi.fn((_value) => ({ success: true })),
90
+ setModeAwayExtendedSwitch: vi.fn((_value) => ({ success: true })),
91
+ setModePauseSwitch: vi.fn((_value) => ({ success: true })),
92
+ updateArmingLock: vi.fn((_mode, _value) => ({ success: true })),
93
+ };
94
+ }
95
+ function makeSensorHandler() {
96
+ return {
97
+ getMotionState: vi.fn(() => false),
98
+ };
99
+ }
100
+ function makeTripHandler() {
101
+ return {
102
+ updateTripSwitch: vi.fn((_value, _origin, _stateChanged) => ({ success: true })),
103
+ triggerIfModeSet: vi.fn((_mode, _value) => ({ success: true })),
104
+ };
105
+ }
106
+ function makeService(options, state, switchHandler = makeSwitchHandler(), tripHandler = makeTripHandler(), sensorHandler = makeSensorHandler()) {
107
+ const log = makeLog();
108
+ const matter = makeMatterMock();
109
+ const api = { matter, isMatterEnabled: () => true };
110
+ const service = new MatterService(log, options, api, state, switchHandler, tripHandler, sensorHandler);
111
+ return { log, matter, service, switchHandler, tripHandler, sensorHandler };
112
+ }
113
+ function registeredAccessories(matter) {
114
+ return matter.registerPlatformAccessories.mock.calls[0][2];
115
+ }
116
+ function accessoryByDisplayName(matter, displayName) {
117
+ const accessory = registeredAccessories(matter).find(a => a.displayName === displayName);
118
+ if (!accessory) {
119
+ throw new Error(`No registered accessory with display name ${displayName}`);
120
+ }
121
+ return accessory;
122
+ }
123
+ /** Handlers are always present on switches the plugin registers. */
124
+ function switchOnHandler(accessory) {
125
+ const onOff = accessory.handlers.onOff;
126
+ return onOff.on;
127
+ }
128
+ function switchOffHandler(accessory) {
129
+ const onOff = accessory.handlers.onOff;
130
+ return onOff.off;
131
+ }
132
+ function countSwitchUpdates(matter, uuid, value) {
133
+ return matter.updateAccessoryState.mock.calls.filter(call => call[0] === uuid && call[2].onOff === value).length;
134
+ }
135
+ function makeBus() {
136
+ return new EventBusService();
137
+ }
138
+ // ── Tests ─────────────────────────────────────────────────────────────────────
139
+ describe('MatterService', () => {
140
+ let log;
141
+ beforeEach(() => {
142
+ log = makeLog();
143
+ vi.clearAllMocks();
144
+ });
145
+ it('does nothing when Matter is not enabled, even with accessories configured', async () => {
146
+ const state = makeState();
147
+ const options = makeOptions({ tripSwitch: true });
148
+ const service = new MatterService(log, options, { isMatterEnabled: () => false }, state, makeSwitchHandler(), makeTripHandler(), makeSensorHandler());
149
+ await service.registerAccessories(new Map());
150
+ expect(log.info).toHaveBeenCalledWith('Matter is not enabled on this bridge; skipping Matter accessories.');
151
+ });
152
+ it('registers when Matter is enabled on the bridge', async () => {
153
+ const state = makeState();
154
+ const options = makeOptions({ tripSwitch: true });
155
+ const matter = makeMatterMock();
156
+ const service = new MatterService(log, options, { matter, isMatterEnabled: () => true }, state, makeSwitchHandler(), makeTripHandler(), makeSensorHandler());
157
+ await service.registerAccessories(new Map());
158
+ expect(matter.registerPlatformAccessories).toHaveBeenCalledTimes(1);
159
+ });
160
+ it('registers all configured switches and sensors', async () => {
161
+ const state = makeState();
162
+ const options = makeOptions({
163
+ modeSwitches: true,
164
+ modeOffSwitch: true,
165
+ modeAwayExtendedSwitch: true,
166
+ modePauseSwitch: true,
167
+ tripSwitch: true,
168
+ tripOverrideSwitch: true,
169
+ tripModeSwitches: true,
170
+ armingLockSwitch: true,
171
+ armingLockSwitches: true,
172
+ armingMotionSensor: true,
173
+ trippedMotionSensor: true,
174
+ resetSensor: true,
175
+ tripHomeSwitches: [{ label: 'Kitchen' }],
176
+ });
177
+ const { log, matter, service } = makeService(options, state);
178
+ await service.registerAccessories(new Map());
179
+ expect(log.info).toHaveBeenCalledWith(expect.stringContaining('Matter accessories registered'));
180
+ expect(log.info).toHaveBeenCalledWith(expect.stringContaining('Mode Home'));
181
+ expect(matter.registerPlatformAccessories).toHaveBeenCalledTimes(1);
182
+ const accessories = registeredAccessories(matter);
183
+ const names = accessories.map(a => a.displayName);
184
+ expect(names).toContain('Mode Home');
185
+ expect(names).toContain('Mode Away');
186
+ expect(names).toContain('Mode Night');
187
+ expect(names).toContain('Mode Off');
188
+ expect(names).toContain('Mode Away Extended');
189
+ expect(names).toContain('Mode Pause');
190
+ expect(names).toContain('Trip');
191
+ expect(names).toContain('Trip Override');
192
+ expect(names).toContain('Trip Home');
193
+ expect(names).toContain('Trip Away');
194
+ expect(names).toContain('Trip Night');
195
+ expect(names).toContain('Trip Home Kitchen');
196
+ expect(names).toContain('Arming Lock');
197
+ expect(names).toContain('Arming Lock Home');
198
+ expect(names).toContain('Arming');
199
+ expect(names).toContain('Tripped');
200
+ expect(names).toContain('Triggered Reset');
201
+ const modeHome = accessoryByDisplayName(matter, 'Mode Home');
202
+ expect(modeHome.deviceType).toBe(matter.deviceTypes.OnOffSwitch);
203
+ expect(modeHome.clusters).toEqual({ onOff: { onOff: false } });
204
+ expect(modeHome.handlers?.onOff?.on).toBeDefined();
205
+ const armingSensor = accessoryByDisplayName(matter, 'Arming');
206
+ expect(armingSensor.deviceType).toBe(matter.deviceTypes.MotionSensor);
207
+ expect(armingSensor.clusters).toEqual({
208
+ occupancySensing: { occupancy: { occupied: false }, occupancySensorTypeBitmap: { pir: true } },
209
+ });
210
+ expect(armingSensor.UUID).toMatch(/^matter-uuid-motion-sensor-1$/);
211
+ });
212
+ it('skips accessories disabled in options and disabled modes', async () => {
213
+ const state = makeState({ availableTargetStates: [SecurityState.AWAY, SecurityState.OFF] });
214
+ const options = makeOptions({ tripSwitch: true, tripHomeSwitches: [{ label: 'Kitchen' }] });
215
+ const { matter, service } = makeService(options, state);
216
+ await service.registerAccessories(new Map());
217
+ const names = registeredAccessories(matter).map(a => a.displayName);
218
+ expect(names).toEqual(['Trip']);
219
+ });
220
+ it('does not re-register cached accessories and removes stale ones', async () => {
221
+ const state = makeState();
222
+ const options = makeOptions({ tripSwitch: true });
223
+ const { matter, service } = makeService(options, state);
224
+ const cached = new Map([
225
+ ['matter-uuid-switch-1', { UUID: 'matter-uuid-switch-1' }],
226
+ ['stale-uuid', { UUID: 'stale-uuid' }],
227
+ ]);
228
+ await service.registerAccessories(cached);
229
+ expect(matter.registerPlatformAccessories).not.toHaveBeenCalled();
230
+ expect(matter.unregisterPlatformAccessories).toHaveBeenCalledWith('homebridge-securitysystem', 'security-system', [cached.get('stale-uuid')]);
231
+ });
232
+ it('uses device-type-indexed identities for the uuid and serial number', async () => {
233
+ const state = makeState();
234
+ const options = makeOptions({ modeSwitches: true, trippedMotionSensor: true });
235
+ const { matter, service } = makeService(options, state);
236
+ await service.registerAccessories(new Map());
237
+ const modeHome = accessoryByDisplayName(matter, 'Mode Home');
238
+ expect(modeHome.UUID).toBe('matter-uuid-switch-6');
239
+ expect(modeHome.serialNumber).toBe('switch-6');
240
+ expect(modeHome.context).toEqual({ key: 'mode-home', identity: 'switch-6' });
241
+ const trippedSensor = accessoryByDisplayName(matter, 'Tripped');
242
+ expect(trippedSensor.UUID).toBe('matter-uuid-motion-sensor-2');
243
+ expect(trippedSensor.serialNumber).toBe('motion-sensor-2');
244
+ });
245
+ it('routes mode switch commands to SwitchHandler and blocks with InvalidInState', async () => {
246
+ const state = makeState();
247
+ const options = makeOptions({ modeSwitches: true });
248
+ const switchHandler = makeSwitchHandler();
249
+ switchHandler.setModeSwitch = vi.fn((mode, value) => mode === SecurityState.HOME && value ? { success: true } : { success: false, reason: 'a mode switch can only be turned on' });
250
+ const { log, matter, service } = makeService(options, state, switchHandler, makeTripHandler());
251
+ await service.registerAccessories(new Map());
252
+ const modeHome = accessoryByDisplayName(matter, 'Mode Home');
253
+ const onHandler = switchOnHandler(modeHome);
254
+ const offHandler = switchOffHandler(modeHome);
255
+ expect(() => onHandler()).not.toThrow();
256
+ expect(switchHandler.setModeSwitch).toHaveBeenCalledWith(SecurityState.HOME, true);
257
+ expect(() => offHandler()).toThrow();
258
+ expect(switchHandler.setModeSwitch).toHaveBeenCalledWith(SecurityState.HOME, false);
259
+ expect(log.debug).toHaveBeenCalledWith(expect.stringContaining('Matter command failed (mode-home)'));
260
+ });
261
+ it('routes trip switch commands to TripHandler with the right origin', async () => {
262
+ const state = makeState();
263
+ const options = makeOptions({ tripSwitch: true, tripOverrideSwitch: true, tripModeSwitches: true });
264
+ const tripHandler = makeTripHandler();
265
+ const { matter, service } = makeService(options, state, makeSwitchHandler(), tripHandler);
266
+ await service.registerAccessories(new Map());
267
+ const trip = accessoryByDisplayName(matter, 'Trip');
268
+ switchOnHandler(trip)();
269
+ expect(tripHandler.updateTripSwitch).toHaveBeenCalledWith(true, OriginType.REGULAR_SWITCH, false);
270
+ const tripHome = accessoryByDisplayName(matter, 'Trip Home');
271
+ switchOnHandler(tripHome)();
272
+ expect(tripHandler.triggerIfModeSet).toHaveBeenCalledWith(SecurityState.HOME, true);
273
+ const tripOverride = accessoryByDisplayName(matter, 'Trip Override');
274
+ switchOnHandler(tripOverride)();
275
+ expect(tripHandler.updateTripSwitch).toHaveBeenCalledWith(true, OriginType.OVERRIDE_SWITCH, false);
276
+ });
277
+ it('throws InvalidInState when a trip is blocked by a condition', async () => {
278
+ const state = makeState();
279
+ const options = makeOptions({ tripSwitch: true });
280
+ const tripHandler = makeTripHandler();
281
+ tripHandler.updateTripSwitch = vi.fn(() => ({ success: false, reason: 'system is not armed' }));
282
+ const { matter, service } = makeService(options, state, makeSwitchHandler(), tripHandler);
283
+ await service.registerAccessories(new Map());
284
+ const trip = accessoryByDisplayName(matter, 'Trip');
285
+ expect(() => switchOnHandler(trip)()).toThrowError('system is not armed');
286
+ });
287
+ it('routes arming lock commands to SwitchHandler', async () => {
288
+ const state = makeState();
289
+ const options = makeOptions({ armingLockSwitch: true, armingLockSwitches: true });
290
+ const switchHandler = makeSwitchHandler();
291
+ const { matter, service } = makeService(options, state, switchHandler, makeTripHandler());
292
+ await service.registerAccessories(new Map());
293
+ const globalLock = accessoryByDisplayName(matter, 'Arming Lock');
294
+ switchOnHandler(globalLock)();
295
+ expect(switchHandler.updateArmingLock).toHaveBeenCalledWith('global', true);
296
+ const homeLock = accessoryByDisplayName(matter, 'Arming Lock Home');
297
+ switchOffHandler(homeLock)();
298
+ expect(switchHandler.updateArmingLock).toHaveBeenCalledWith('home', false);
299
+ });
300
+ it('pushes mode switch state on bus events, only when the value changed', async () => {
301
+ const state = makeState({ targetState: SecurityState.HOME });
302
+ const options = makeOptions({ modeSwitches: true, modeOffSwitch: true });
303
+ const { matter, service } = makeService(options, state);
304
+ const bus = makeBus();
305
+ service.attachToBus(bus);
306
+ await service.registerAccessories(new Map());
307
+ // Startup sync: mode-home on, every other mode switch off.
308
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-6', true)).toBe(1);
309
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-6', false)).toBe(0);
310
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-7', false)).toBe(1);
311
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-9', false)).toBe(1);
312
+ bus.emit(EventType.RESET_MODE_SWITCHES, {});
313
+ // Only mode-home changed (on -> off); the others stay untouched.
314
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-6', true)).toBe(1);
315
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-6', false)).toBe(1);
316
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-7', false)).toBe(1);
317
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-9', false)).toBe(1);
318
+ bus.emit(EventType.UPDATE_MODE_SWITCHES, {});
319
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-6', true)).toBe(2);
320
+ // Redundant re-emission pushes nothing new.
321
+ bus.emit(EventType.UPDATE_MODE_SWITCHES, {});
322
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-6', true)).toBe(2);
323
+ });
324
+ it('resets trip switches to off at startup and after a controller trip', async () => {
325
+ const state = makeState();
326
+ const options = makeOptions({ tripSwitch: true, tripModeSwitches: true, tripHomeSwitches: [{ label: 'Kitchen' }] });
327
+ const { matter, service } = makeService(options, state);
328
+ const bus = makeBus();
329
+ service.attachToBus(bus);
330
+ await service.registerAccessories(new Map());
331
+ // Startup sync pushes every trip switch off (Homebridge would auto-update
332
+ // onOff after a trip, so the reset must be able to push it back).
333
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-1', false)).toBe(1);
334
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-16', false)).toBe(1);
335
+ // A controller trip turns the switch on (auto-updated by Homebridge and
336
+ // recorded by the service as if it had happened).
337
+ const trip = accessoryByDisplayName(matter, 'Trip');
338
+ switchOnHandler(trip)();
339
+ // The reset now sees a change and pushes the switch back off.
340
+ bus.emit(EventType.RESET_TRIP_SWITCHES, {});
341
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-1', false)).toBe(2);
342
+ // An unchanged trip switch is not pushed again.
343
+ bus.emit(EventType.RESET_TRIP_SWITCHES, {});
344
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-1', false)).toBe(2);
345
+ });
346
+ it('pushes sensor occupancy state on SENSOR_STATE_CHANGED', async () => {
347
+ const state = makeState();
348
+ const options = makeOptions({ trippedMotionSensor: true, resetSensor: true });
349
+ const { matter, service } = makeService(options, state);
350
+ const bus = makeBus();
351
+ service.attachToBus(bus);
352
+ await service.registerAccessories(new Map());
353
+ bus.emit(EventType.SENSOR_STATE_CHANGED, { sensor: 'tripped', value: true });
354
+ bus.emit(EventType.SENSOR_STATE_CHANGED, { sensor: 'tripped', value: true });
355
+ bus.emit(EventType.SENSOR_STATE_CHANGED, { sensor: 'reset', value: false });
356
+ expect(matter.updateAccessoryState).toHaveBeenCalledWith('matter-uuid-motion-sensor-2', 'occupancySensing', { occupancy: { occupied: true } });
357
+ expect(matter.updateAccessoryState).toHaveBeenCalledWith('matter-uuid-motion-sensor-3', 'occupancySensing', { occupancy: { occupied: false } });
358
+ // A repeated reading of the same value is not pushed again. The startup sync
359
+ // pushed an occupied:false once, so only the single occupied:true push counts.
360
+ const occupiedPushes = matter.updateAccessoryState.mock.calls.filter(call => call[0] === 'matter-uuid-motion-sensor-2'
361
+ && call[2].occupancy?.occupied === true);
362
+ expect(occupiedPushes).toHaveLength(1);
363
+ });
364
+ it('syncs every registered mode switch to the current target state after registration', async () => {
365
+ const state = makeState({ targetState: SecurityState.AWAY });
366
+ const options = makeOptions({ modeSwitches: true });
367
+ const { matter, service } = makeService(options, state);
368
+ await service.registerAccessories(new Map());
369
+ // mode-away (switch-7) on, mode-home (switch-6) off.
370
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-7', true)).toBe(1);
371
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-6', false)).toBe(1);
372
+ });
373
+ it('translates unexpected handler errors into a Matter Failure', async () => {
374
+ const state = makeState();
375
+ const options = makeOptions({ modeSwitches: true });
376
+ const switchHandler = makeSwitchHandler();
377
+ switchHandler.setModeSwitch = vi.fn(() => {
378
+ throw new Error('device exploded');
379
+ });
380
+ const { matter, service } = makeService(options, state, switchHandler, makeTripHandler());
381
+ await service.registerAccessories(new Map());
382
+ const modeHome = accessoryByDisplayName(matter, 'Mode Home');
383
+ let caught;
384
+ try {
385
+ switchOnHandler(modeHome)();
386
+ }
387
+ catch (error) {
388
+ caught = error;
389
+ }
390
+ expect(caught).toBeInstanceOf(Failure);
391
+ expect(caught.message).toBe('device exploded');
392
+ });
393
+ it('keeps already-mapped Matter protocol errors intact', async () => {
394
+ const state = makeState();
395
+ const options = makeOptions({ modeSwitches: true });
396
+ const switchHandler = makeSwitchHandler();
397
+ const blocked = new InvalidInState('still arming');
398
+ switchHandler.setModeSwitch = vi.fn(() => {
399
+ throw blocked;
400
+ });
401
+ const { matter, service } = makeService(options, state, switchHandler, makeTripHandler());
402
+ await service.registerAccessories(new Map());
403
+ const modeHome = accessoryByDisplayName(matter, 'Mode Home');
404
+ let caught;
405
+ try {
406
+ switchOnHandler(modeHome)();
407
+ }
408
+ catch (error) {
409
+ caught = error;
410
+ }
411
+ expect(caught).toBe(blocked);
412
+ });
413
+ it('keeps the controller state honest when a command is refused', async () => {
414
+ const state = makeState();
415
+ const options = makeOptions({ modeSwitches: true });
416
+ const switchHandler = makeSwitchHandler();
417
+ switchHandler.setModeSwitch = vi.fn(() => ({ success: false, reason: 'arming is blocked by an arming lock switch' }));
418
+ const { matter, service } = makeService(options, state, switchHandler, makeTripHandler());
419
+ await service.registerAccessories(new Map());
420
+ const modeHome = accessoryByDisplayName(matter, 'Mode Home');
421
+ expect(() => switchOnHandler(modeHome)()).toThrow();
422
+ // The startup sync pushed the switch off; the refused command must not
423
+ // record it as on, otherwise the switch would appear stuck on.
424
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-6', true)).toBe(0);
425
+ });
426
+ it('syncs arming-lock switches from state at registration', async () => {
427
+ const state = makeState({ armingLocks: { global: true, home: false, away: false, night: false } });
428
+ const options = makeOptions({ armingLockSwitch: true, armingLockSwitches: true });
429
+ const { matter, service } = makeService(options, state);
430
+ await service.registerAccessories(new Map());
431
+ // global lock (switch-12) on, mode locks (switch-13..15) off.
432
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-12', true)).toBe(1);
433
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-12', false)).toBe(0);
434
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-13', false)).toBe(1);
435
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-14', false)).toBe(1);
436
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-15', false)).toBe(1);
437
+ });
438
+ it('pushes the current sensor reading at registration', async () => {
439
+ const state = makeState();
440
+ const options = makeOptions({ trippedMotionSensor: true, resetSensor: true });
441
+ const sensorHandler = makeSensorHandler();
442
+ // Sync loop only asks for configured sensors: tripped first, then reset.
443
+ sensorHandler.getMotionState.mockReturnValueOnce(true)
444
+ .mockReturnValueOnce(false);
445
+ const { matter, service } = makeService(options, state, makeSwitchHandler(), makeTripHandler(), sensorHandler);
446
+ await service.registerAccessories(new Map());
447
+ expect(matter.updateAccessoryState).toHaveBeenCalledWith('matter-uuid-motion-sensor-2', 'occupancySensing', { occupancy: { occupied: true } });
448
+ expect(matter.updateAccessoryState).toHaveBeenCalledWith('matter-uuid-motion-sensor-3', 'occupancySensing', { occupancy: { occupied: false } });
449
+ });
450
+ it('pushes the trip switch on when a trip fires from the server or webhooks', async () => {
451
+ const state = makeState();
452
+ const options = makeOptions({ tripSwitch: true });
453
+ const { matter, service } = makeService(options, state);
454
+ const bus = makeBus();
455
+ service.attachToBus(bus);
456
+ await service.registerAccessories(new Map());
457
+ bus.emit(EventType.TRIGGER_FIRED, { origin: OriginType.EXTERNAL });
458
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-1', true)).toBe(1);
459
+ // Controller-initiated trips are auto-updated by Homebridge; nothing to push.
460
+ bus.emit(EventType.TRIGGER_FIRED, { origin: OriginType.REGULAR_SWITCH });
461
+ expect(countSwitchUpdates(matter, 'matter-uuid-switch-1', true)).toBe(1);
462
+ });
463
+ it('exposes pause and away-extended switches even when modeSwitches is off', async () => {
464
+ const state = makeState();
465
+ const options = makeOptions({ modeSwitches: false, modePauseSwitch: true, modeAwayExtendedSwitch: true });
466
+ const { matter, service } = makeService(options, state);
467
+ await service.registerAccessories(new Map());
468
+ const names = registeredAccessories(matter).map(a => a.displayName);
469
+ expect(names).toContain('Mode Pause');
470
+ expect(names).toContain('Mode Away Extended');
471
+ expect(names).not.toContain('Mode Home');
472
+ expect(names).not.toContain('Mode Off');
473
+ });
474
+ });
475
+ //# sourceMappingURL=matter-service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matter-service.test.js","sourceRoot":"","sources":["../../src/tests/matter-service.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};