@project-chip/matter.js 0.9.2 → 0.9.4

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 (288) hide show
  1. package/dist/cjs/CommissioningServer.d.ts.map +1 -1
  2. package/dist/cjs/CommissioningServer.js +0 -1
  3. package/dist/cjs/CommissioningServer.js.map +2 -2
  4. package/dist/cjs/MatterDevice.d.ts +3 -0
  5. package/dist/cjs/MatterDevice.d.ts.map +1 -1
  6. package/dist/cjs/MatterDevice.js +21 -7
  7. package/dist/cjs/MatterDevice.js.map +2 -2
  8. package/dist/cjs/behavior/AccessControl.js +2 -2
  9. package/dist/cjs/behavior/AccessControl.js.map +2 -2
  10. package/dist/cjs/behavior/definitions/general-commissioning/ServerNodeFailsafeContext.d.ts +1 -0
  11. package/dist/cjs/behavior/definitions/general-commissioning/ServerNodeFailsafeContext.d.ts.map +1 -1
  12. package/dist/cjs/behavior/definitions/general-commissioning/ServerNodeFailsafeContext.js +14 -0
  13. package/dist/cjs/behavior/definitions/general-commissioning/ServerNodeFailsafeContext.js.map +2 -2
  14. package/dist/cjs/behavior/definitions/operational-credentials/OperationalCredentialsServer.d.ts.map +1 -1
  15. package/dist/cjs/behavior/definitions/operational-credentials/OperationalCredentialsServer.js +11 -2
  16. package/dist/cjs/behavior/definitions/operational-credentials/OperationalCredentialsServer.js.map +2 -2
  17. package/dist/cjs/behavior/state/transaction/Transaction.d.ts +18 -18
  18. package/dist/cjs/certificate/CertificateManager.d.ts.map +1 -1
  19. package/dist/cjs/certificate/CertificateManager.js +1 -0
  20. package/dist/cjs/certificate/CertificateManager.js.map +2 -2
  21. package/dist/cjs/certificate/CertificationDeclarationManager.d.ts +1 -1
  22. package/dist/cjs/certificate/CertificationDeclarationManager.d.ts.map +1 -1
  23. package/dist/cjs/certificate/CertificationDeclarationManager.js +3 -2
  24. package/dist/cjs/certificate/CertificationDeclarationManager.js.map +2 -2
  25. package/dist/cjs/cluster/server/AccessControlServer.js.map +1 -1
  26. package/dist/cjs/cluster/server/AttributeServer.d.ts +9 -0
  27. package/dist/cjs/cluster/server/AttributeServer.d.ts.map +1 -1
  28. package/dist/cjs/cluster/server/AttributeServer.js +62 -0
  29. package/dist/cjs/cluster/server/AttributeServer.js.map +3 -3
  30. package/dist/cjs/cluster/server/ClusterServer.d.ts.map +1 -1
  31. package/dist/cjs/cluster/server/ClusterServer.js +8 -1
  32. package/dist/cjs/cluster/server/ClusterServer.js.map +2 -2
  33. package/dist/cjs/cluster/server/ClusterServerTypes.d.ts +3 -3
  34. package/dist/cjs/cluster/server/ClusterServerTypes.d.ts.map +1 -1
  35. package/dist/cjs/cluster/server/ClusterServerTypes.js.map +1 -1
  36. package/dist/cjs/cluster/server/EventServer.d.ts +8 -2
  37. package/dist/cjs/cluster/server/EventServer.d.ts.map +1 -1
  38. package/dist/cjs/cluster/server/EventServer.js +33 -7
  39. package/dist/cjs/cluster/server/EventServer.js.map +2 -2
  40. package/dist/cjs/cluster/server/OperationalCredentialsServer.d.ts.map +1 -1
  41. package/dist/cjs/cluster/server/OperationalCredentialsServer.js +31 -8
  42. package/dist/cjs/cluster/server/OperationalCredentialsServer.js.map +2 -2
  43. package/dist/cjs/common/FailsafeContext.d.ts +1 -0
  44. package/dist/cjs/common/FailsafeContext.d.ts.map +1 -1
  45. package/dist/cjs/common/FailsafeContext.js +16 -2
  46. package/dist/cjs/common/FailsafeContext.js.map +2 -2
  47. package/dist/cjs/crypto/Crypto.d.ts +1 -1
  48. package/dist/cjs/crypto/Crypto.d.ts.map +1 -1
  49. package/dist/cjs/crypto/Crypto.js +2 -2
  50. package/dist/cjs/crypto/Crypto.js.map +2 -2
  51. package/dist/cjs/device/LegacyInteractionServer.d.ts +2 -2
  52. package/dist/cjs/device/LegacyInteractionServer.d.ts.map +1 -1
  53. package/dist/cjs/device/LegacyInteractionServer.js +13 -1
  54. package/dist/cjs/device/LegacyInteractionServer.js.map +2 -2
  55. package/dist/cjs/fabric/Fabric.d.ts +1 -0
  56. package/dist/cjs/fabric/Fabric.d.ts.map +1 -1
  57. package/dist/cjs/fabric/Fabric.js +5 -0
  58. package/dist/cjs/fabric/Fabric.js.map +2 -2
  59. package/dist/cjs/fabric/FabricManager.d.ts +1 -0
  60. package/dist/cjs/fabric/FabricManager.d.ts.map +1 -1
  61. package/dist/cjs/fabric/FabricManager.js +2 -1
  62. package/dist/cjs/fabric/FabricManager.js.map +2 -2
  63. package/dist/cjs/model/models/EventModel.d.ts +1 -0
  64. package/dist/cjs/model/models/EventModel.d.ts.map +1 -1
  65. package/dist/cjs/model/models/EventModel.js +3 -0
  66. package/dist/cjs/model/models/EventModel.js.map +2 -2
  67. package/dist/cjs/model/models/FieldModel.d.ts +1 -0
  68. package/dist/cjs/model/models/FieldModel.d.ts.map +1 -1
  69. package/dist/cjs/model/models/FieldModel.js +3 -0
  70. package/dist/cjs/model/models/FieldModel.js.map +2 -2
  71. package/dist/cjs/node/server/TransactionalInteractionServer.d.ts +2 -2
  72. package/dist/cjs/node/server/TransactionalInteractionServer.d.ts.map +1 -1
  73. package/dist/cjs/node/server/TransactionalInteractionServer.js +0 -2
  74. package/dist/cjs/node/server/TransactionalInteractionServer.js.map +2 -2
  75. package/dist/cjs/protocol/interaction/AttributeDataEncoder.d.ts +6 -3
  76. package/dist/cjs/protocol/interaction/AttributeDataEncoder.d.ts.map +1 -1
  77. package/dist/cjs/protocol/interaction/AttributeDataEncoder.js +14 -8
  78. package/dist/cjs/protocol/interaction/AttributeDataEncoder.js.map +2 -2
  79. package/dist/cjs/protocol/interaction/EventHandler.d.ts.map +1 -1
  80. package/dist/cjs/protocol/interaction/EventHandler.js +1 -3
  81. package/dist/cjs/protocol/interaction/EventHandler.js.map +2 -2
  82. package/dist/cjs/protocol/interaction/InteractionClient.js +1 -1
  83. package/dist/cjs/protocol/interaction/InteractionClient.js.map +2 -2
  84. package/dist/cjs/protocol/interaction/InteractionEndpointStructure.d.ts +3 -3
  85. package/dist/cjs/protocol/interaction/InteractionEndpointStructure.d.ts.map +1 -1
  86. package/dist/cjs/protocol/interaction/InteractionEndpointStructure.js +1 -0
  87. package/dist/cjs/protocol/interaction/InteractionEndpointStructure.js.map +2 -2
  88. package/dist/cjs/protocol/interaction/InteractionMessenger.d.ts +1 -1
  89. package/dist/cjs/protocol/interaction/InteractionMessenger.d.ts.map +1 -1
  90. package/dist/cjs/protocol/interaction/InteractionMessenger.js +11 -4
  91. package/dist/cjs/protocol/interaction/InteractionMessenger.js.map +2 -2
  92. package/dist/cjs/protocol/interaction/InteractionServer.d.ts +5 -6
  93. package/dist/cjs/protocol/interaction/InteractionServer.d.ts.map +1 -1
  94. package/dist/cjs/protocol/interaction/InteractionServer.js +44 -37
  95. package/dist/cjs/protocol/interaction/InteractionServer.js.map +2 -2
  96. package/dist/cjs/protocol/interaction/SubscriptionHandler.d.ts +31 -12
  97. package/dist/cjs/protocol/interaction/SubscriptionHandler.d.ts.map +1 -1
  98. package/dist/cjs/protocol/interaction/SubscriptionHandler.js +161 -69
  99. package/dist/cjs/protocol/interaction/SubscriptionHandler.js.map +3 -3
  100. package/dist/cjs/session/SecureSession.d.ts.map +1 -1
  101. package/dist/cjs/session/SecureSession.js +2 -1
  102. package/dist/cjs/session/SecureSession.js.map +2 -2
  103. package/dist/cjs/session/SessionManager.d.ts +2 -0
  104. package/dist/cjs/session/SessionManager.d.ts.map +1 -1
  105. package/dist/cjs/session/SessionManager.js +7 -0
  106. package/dist/cjs/session/SessionManager.js.map +2 -2
  107. package/dist/cjs/tlv/TlvArray.d.ts +2 -2
  108. package/dist/cjs/tlv/TlvArray.d.ts.map +1 -1
  109. package/dist/cjs/tlv/TlvArray.js +2 -2
  110. package/dist/cjs/tlv/TlvArray.js.map +2 -2
  111. package/dist/cjs/tlv/TlvNullable.d.ts +2 -2
  112. package/dist/cjs/tlv/TlvNullable.d.ts.map +1 -1
  113. package/dist/cjs/tlv/TlvNullable.js +2 -2
  114. package/dist/cjs/tlv/TlvNullable.js.map +2 -2
  115. package/dist/cjs/tlv/TlvObject.d.ts +2 -2
  116. package/dist/cjs/tlv/TlvObject.d.ts.map +1 -1
  117. package/dist/cjs/tlv/TlvObject.js +18 -12
  118. package/dist/cjs/tlv/TlvObject.js.map +2 -2
  119. package/dist/cjs/tlv/TlvSchema.d.ts +14 -2
  120. package/dist/cjs/tlv/TlvSchema.d.ts.map +1 -1
  121. package/dist/cjs/tlv/TlvSchema.js +2 -2
  122. package/dist/cjs/tlv/TlvSchema.js.map +2 -2
  123. package/dist/cjs/tlv/TlvWrapper.d.ts +2 -2
  124. package/dist/cjs/tlv/TlvWrapper.d.ts.map +1 -1
  125. package/dist/cjs/tlv/TlvWrapper.js +2 -2
  126. package/dist/cjs/tlv/TlvWrapper.js.map +2 -2
  127. package/dist/esm/CommissioningServer.d.ts.map +1 -1
  128. package/dist/esm/CommissioningServer.js +0 -1
  129. package/dist/esm/CommissioningServer.js.map +2 -2
  130. package/dist/esm/MatterDevice.d.ts +3 -0
  131. package/dist/esm/MatterDevice.d.ts.map +1 -1
  132. package/dist/esm/MatterDevice.js +21 -7
  133. package/dist/esm/MatterDevice.js.map +2 -2
  134. package/dist/esm/behavior/AccessControl.js +2 -2
  135. package/dist/esm/behavior/AccessControl.js.map +2 -2
  136. package/dist/esm/behavior/definitions/general-commissioning/ServerNodeFailsafeContext.d.ts +1 -0
  137. package/dist/esm/behavior/definitions/general-commissioning/ServerNodeFailsafeContext.d.ts.map +1 -1
  138. package/dist/esm/behavior/definitions/general-commissioning/ServerNodeFailsafeContext.js +15 -1
  139. package/dist/esm/behavior/definitions/general-commissioning/ServerNodeFailsafeContext.js.map +2 -2
  140. package/dist/esm/behavior/definitions/operational-credentials/OperationalCredentialsServer.d.ts.map +1 -1
  141. package/dist/esm/behavior/definitions/operational-credentials/OperationalCredentialsServer.js +11 -2
  142. package/dist/esm/behavior/definitions/operational-credentials/OperationalCredentialsServer.js.map +2 -2
  143. package/dist/esm/behavior/state/transaction/Transaction.d.ts +18 -18
  144. package/dist/esm/certificate/CertificateManager.d.ts.map +1 -1
  145. package/dist/esm/certificate/CertificateManager.js +1 -0
  146. package/dist/esm/certificate/CertificateManager.js.map +2 -2
  147. package/dist/esm/certificate/CertificationDeclarationManager.d.ts +1 -1
  148. package/dist/esm/certificate/CertificationDeclarationManager.d.ts.map +1 -1
  149. package/dist/esm/certificate/CertificationDeclarationManager.js +3 -2
  150. package/dist/esm/certificate/CertificationDeclarationManager.js.map +2 -2
  151. package/dist/esm/cluster/server/AccessControlServer.js.map +1 -1
  152. package/dist/esm/cluster/server/AttributeServer.d.ts +9 -0
  153. package/dist/esm/cluster/server/AttributeServer.d.ts.map +1 -1
  154. package/dist/esm/cluster/server/AttributeServer.js +69 -1
  155. package/dist/esm/cluster/server/AttributeServer.js.map +2 -2
  156. package/dist/esm/cluster/server/ClusterServer.d.ts.map +1 -1
  157. package/dist/esm/cluster/server/ClusterServer.js +9 -2
  158. package/dist/esm/cluster/server/ClusterServer.js.map +2 -2
  159. package/dist/esm/cluster/server/ClusterServerTypes.d.ts +3 -3
  160. package/dist/esm/cluster/server/ClusterServerTypes.d.ts.map +1 -1
  161. package/dist/esm/cluster/server/ClusterServerTypes.js.map +1 -1
  162. package/dist/esm/cluster/server/EventServer.d.ts +8 -2
  163. package/dist/esm/cluster/server/EventServer.d.ts.map +1 -1
  164. package/dist/esm/cluster/server/EventServer.js +33 -7
  165. package/dist/esm/cluster/server/EventServer.js.map +2 -2
  166. package/dist/esm/cluster/server/OperationalCredentialsServer.d.ts.map +1 -1
  167. package/dist/esm/cluster/server/OperationalCredentialsServer.js +31 -8
  168. package/dist/esm/cluster/server/OperationalCredentialsServer.js.map +2 -2
  169. package/dist/esm/common/FailsafeContext.d.ts +1 -0
  170. package/dist/esm/common/FailsafeContext.d.ts.map +1 -1
  171. package/dist/esm/common/FailsafeContext.js +17 -3
  172. package/dist/esm/common/FailsafeContext.js.map +2 -2
  173. package/dist/esm/crypto/Crypto.d.ts +1 -1
  174. package/dist/esm/crypto/Crypto.d.ts.map +1 -1
  175. package/dist/esm/crypto/Crypto.js +2 -2
  176. package/dist/esm/crypto/Crypto.js.map +2 -2
  177. package/dist/esm/device/LegacyInteractionServer.d.ts +2 -2
  178. package/dist/esm/device/LegacyInteractionServer.d.ts.map +1 -1
  179. package/dist/esm/device/LegacyInteractionServer.js +13 -1
  180. package/dist/esm/device/LegacyInteractionServer.js.map +2 -2
  181. package/dist/esm/fabric/Fabric.d.ts +1 -0
  182. package/dist/esm/fabric/Fabric.d.ts.map +1 -1
  183. package/dist/esm/fabric/Fabric.js +5 -0
  184. package/dist/esm/fabric/Fabric.js.map +2 -2
  185. package/dist/esm/fabric/FabricManager.d.ts +1 -0
  186. package/dist/esm/fabric/FabricManager.d.ts.map +1 -1
  187. package/dist/esm/fabric/FabricManager.js +2 -1
  188. package/dist/esm/fabric/FabricManager.js.map +2 -2
  189. package/dist/esm/model/models/EventModel.d.ts +1 -0
  190. package/dist/esm/model/models/EventModel.d.ts.map +1 -1
  191. package/dist/esm/model/models/EventModel.js +3 -0
  192. package/dist/esm/model/models/EventModel.js.map +2 -2
  193. package/dist/esm/model/models/FieldModel.d.ts +1 -0
  194. package/dist/esm/model/models/FieldModel.d.ts.map +1 -1
  195. package/dist/esm/model/models/FieldModel.js +3 -0
  196. package/dist/esm/model/models/FieldModel.js.map +2 -2
  197. package/dist/esm/node/server/TransactionalInteractionServer.d.ts +2 -2
  198. package/dist/esm/node/server/TransactionalInteractionServer.d.ts.map +1 -1
  199. package/dist/esm/node/server/TransactionalInteractionServer.js +0 -2
  200. package/dist/esm/node/server/TransactionalInteractionServer.js.map +2 -2
  201. package/dist/esm/protocol/interaction/AttributeDataEncoder.d.ts +6 -3
  202. package/dist/esm/protocol/interaction/AttributeDataEncoder.d.ts.map +1 -1
  203. package/dist/esm/protocol/interaction/AttributeDataEncoder.js +14 -8
  204. package/dist/esm/protocol/interaction/AttributeDataEncoder.js.map +2 -2
  205. package/dist/esm/protocol/interaction/EventHandler.d.ts.map +1 -1
  206. package/dist/esm/protocol/interaction/EventHandler.js +1 -3
  207. package/dist/esm/protocol/interaction/EventHandler.js.map +2 -2
  208. package/dist/esm/protocol/interaction/InteractionClient.js +1 -1
  209. package/dist/esm/protocol/interaction/InteractionClient.js.map +2 -2
  210. package/dist/esm/protocol/interaction/InteractionEndpointStructure.d.ts +3 -3
  211. package/dist/esm/protocol/interaction/InteractionEndpointStructure.d.ts.map +1 -1
  212. package/dist/esm/protocol/interaction/InteractionEndpointStructure.js +1 -0
  213. package/dist/esm/protocol/interaction/InteractionEndpointStructure.js.map +2 -2
  214. package/dist/esm/protocol/interaction/InteractionMessenger.d.ts +1 -1
  215. package/dist/esm/protocol/interaction/InteractionMessenger.d.ts.map +1 -1
  216. package/dist/esm/protocol/interaction/InteractionMessenger.js +11 -4
  217. package/dist/esm/protocol/interaction/InteractionMessenger.js.map +2 -2
  218. package/dist/esm/protocol/interaction/InteractionServer.d.ts +5 -6
  219. package/dist/esm/protocol/interaction/InteractionServer.d.ts.map +1 -1
  220. package/dist/esm/protocol/interaction/InteractionServer.js +44 -37
  221. package/dist/esm/protocol/interaction/InteractionServer.js.map +2 -2
  222. package/dist/esm/protocol/interaction/SubscriptionHandler.d.ts +31 -12
  223. package/dist/esm/protocol/interaction/SubscriptionHandler.d.ts.map +1 -1
  224. package/dist/esm/protocol/interaction/SubscriptionHandler.js +161 -69
  225. package/dist/esm/protocol/interaction/SubscriptionHandler.js.map +3 -3
  226. package/dist/esm/session/SecureSession.d.ts.map +1 -1
  227. package/dist/esm/session/SecureSession.js +2 -1
  228. package/dist/esm/session/SecureSession.js.map +2 -2
  229. package/dist/esm/session/SessionManager.d.ts +2 -0
  230. package/dist/esm/session/SessionManager.d.ts.map +1 -1
  231. package/dist/esm/session/SessionManager.js +7 -0
  232. package/dist/esm/session/SessionManager.js.map +2 -2
  233. package/dist/esm/tlv/TlvArray.d.ts +2 -2
  234. package/dist/esm/tlv/TlvArray.d.ts.map +1 -1
  235. package/dist/esm/tlv/TlvArray.js +2 -2
  236. package/dist/esm/tlv/TlvArray.js.map +2 -2
  237. package/dist/esm/tlv/TlvNullable.d.ts +2 -2
  238. package/dist/esm/tlv/TlvNullable.d.ts.map +1 -1
  239. package/dist/esm/tlv/TlvNullable.js +2 -2
  240. package/dist/esm/tlv/TlvNullable.js.map +2 -2
  241. package/dist/esm/tlv/TlvObject.d.ts +2 -2
  242. package/dist/esm/tlv/TlvObject.d.ts.map +1 -1
  243. package/dist/esm/tlv/TlvObject.js +19 -13
  244. package/dist/esm/tlv/TlvObject.js.map +2 -2
  245. package/dist/esm/tlv/TlvSchema.d.ts +14 -2
  246. package/dist/esm/tlv/TlvSchema.d.ts.map +1 -1
  247. package/dist/esm/tlv/TlvSchema.js +2 -2
  248. package/dist/esm/tlv/TlvSchema.js.map +2 -2
  249. package/dist/esm/tlv/TlvWrapper.d.ts +2 -2
  250. package/dist/esm/tlv/TlvWrapper.d.ts.map +1 -1
  251. package/dist/esm/tlv/TlvWrapper.js +2 -2
  252. package/dist/esm/tlv/TlvWrapper.js.map +2 -2
  253. package/package.json +3 -3
  254. package/src/CommissioningServer.ts +0 -1
  255. package/src/MatterDevice.ts +34 -7
  256. package/src/behavior/AccessControl.ts +2 -2
  257. package/src/behavior/definitions/general-commissioning/ServerNodeFailsafeContext.ts +21 -1
  258. package/src/behavior/definitions/operational-credentials/OperationalCredentialsServer.ts +13 -0
  259. package/src/certificate/CertificateManager.ts +1 -2
  260. package/src/certificate/CertificationDeclarationManager.ts +2 -2
  261. package/src/cluster/server/AccessControlServer.ts +3 -3
  262. package/src/cluster/server/AttributeServer.ts +79 -1
  263. package/src/cluster/server/ClusterServer.ts +9 -2
  264. package/src/cluster/server/ClusterServerTypes.ts +3 -3
  265. package/src/cluster/server/EventServer.ts +57 -10
  266. package/src/cluster/server/OperationalCredentialsServer.ts +35 -5
  267. package/src/common/FailsafeContext.ts +19 -7
  268. package/src/crypto/Crypto.ts +1 -1
  269. package/src/device/LegacyInteractionServer.ts +15 -4
  270. package/src/fabric/Fabric.ts +6 -0
  271. package/src/fabric/FabricManager.ts +1 -0
  272. package/src/model/models/EventModel.ts +4 -0
  273. package/src/model/models/FieldModel.ts +4 -0
  274. package/src/node/server/TransactionalInteractionServer.ts +2 -4
  275. package/src/protocol/interaction/AttributeDataEncoder.ts +20 -9
  276. package/src/protocol/interaction/EventHandler.ts +1 -3
  277. package/src/protocol/interaction/InteractionClient.ts +1 -1
  278. package/src/protocol/interaction/InteractionEndpointStructure.ts +4 -4
  279. package/src/protocol/interaction/InteractionMessenger.ts +12 -3
  280. package/src/protocol/interaction/InteractionServer.ts +53 -52
  281. package/src/protocol/interaction/SubscriptionHandler.ts +215 -92
  282. package/src/session/SecureSession.ts +2 -1
  283. package/src/session/SessionManager.ts +9 -0
  284. package/src/tlv/TlvArray.ts +3 -3
  285. package/src/tlv/TlvNullable.ts +3 -3
  286. package/src/tlv/TlvObject.ts +20 -14
  287. package/src/tlv/TlvSchema.ts +17 -3
  288. package/src/tlv/TlvWrapper.ts +3 -3
@@ -1 +1 @@
1
- {"version":3,"file":"ClusterServerTypes.d.ts","sourceRoot":"","sources":["../../../../src/cluster/server/ClusterServerTypes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ClusterServerTypes.d.ts","sourceRoot":"","sources":["../../../../src/cluster/server/ClusterServerTypes.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/cluster/server/ClusterServerTypes.ts"],
4
- "sourcesContent": ["/**\n * @license\n * Copyright 2022-2024 Matter.js Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Message } from \"../../codec/MessageCodec.js\";\nimport { AttributeId } from \"../../datatype/AttributeId.js\";\nimport { ClusterId } from \"../../datatype/ClusterId.js\";\nimport { CommandId } from \"../../datatype/CommandId.js\";\nimport { EventId } from \"../../datatype/EventId.js\";\nimport { EndpointInterface } from \"../../endpoint/EndpointInterface.js\";\nimport { Fabric } from \"../../fabric/Fabric.js\";\nimport { MatterDevice } from \"../../MatterDevice.js\";\nimport { EventHandler } from \"../../protocol/interaction/EventHandler.js\";\nimport { BitSchema } from \"../../schema/BitmapSchema.js\";\nimport { Session } from \"../../session/Session.js\";\nimport { Storage } from \"../../storage/Storage.js\";\nimport { SupportedStorageTypes } from \"../../storage/StringifyTools.js\";\nimport { TypeFromSchema } from \"../../tlv/TlvSchema.js\";\nimport { Merge } from \"../../util/Type.js\";\nimport { ClusterClientObj } from \"../client/ClusterClientTypes.js\";\nimport {\n Attribute,\n AttributeJsType,\n Attributes,\n Cluster,\n Command,\n Commands,\n Events,\n EventType,\n FabricScopedAttribute,\n FixedAttribute,\n GlobalAttributes,\n MandatoryAttributeNames,\n MandatoryEventNames,\n OptionalAttribute,\n OptionalAttributeNames,\n OptionalCommand,\n OptionalEventNames,\n OptionalFixedAttribute,\n OptionalWritableAttribute,\n OptionalWritableFabricScopedAttribute,\n RequestType,\n ResponseType,\n WritableAttribute,\n WritableFabricScopedAttribute,\n} from \"../Cluster.js\";\nimport { Scenes } from \"../definitions/ScenesCluster.js\";\nimport { AttributeServer, FabricScopedAttributeServer, FixedAttributeServer } from \"./AttributeServer.js\";\nimport { CommandServer } from \"./CommandServer.js\";\nimport { EventServer } from \"./EventServer.js\";\n\n/** Cluster attributes accessible on the cluster server */\ntype MandatoryAttributeServers<A extends Attributes> = Omit<\n {\n [P in MandatoryAttributeNames<A>]: A[P] extends FabricScopedAttribute<any, any>\n ? FabricScopedAttributeServer<AttributeJsType<A[P]>>\n : A[P] extends WritableFabricScopedAttribute<any, any>\n ? FabricScopedAttributeServer<AttributeJsType<A[P]>>\n : A[P] extends FixedAttribute<any, any>\n ? FixedAttributeServer<AttributeJsType<A[P]>>\n : AttributeServer<AttributeJsType<A[P]>>;\n },\n keyof GlobalAttributes<any>\n>;\ntype OptionalAttributeServers<A extends Attributes> = {\n [P in OptionalAttributeNames<A>]?: A[P] extends OptionalWritableFabricScopedAttribute<any, any>\n ? FabricScopedAttributeServer<AttributeJsType<A[P]>>\n : A[P] extends OptionalFixedAttribute<any, any>\n ? FixedAttributeServer<AttributeJsType<A[P]>>\n : AttributeServer<AttributeJsType<A[P]>>;\n};\nexport type AttributeServers<A extends Attributes> = Merge<MandatoryAttributeServers<A>, OptionalAttributeServers<A>>;\n\n/** Initial values for the cluster attribute */\nexport type AttributeInitialValues<A extends Attributes> = Merge<\n Omit<{ [P in MandatoryAttributeNames<A>]: AttributeJsType<A[P]> }, keyof GlobalAttributes<any>>,\n { [P in OptionalAttributeNames<A>]?: AttributeJsType<A[P]> }\n>;\nexport type AttributeServerValues<A extends Attributes> = Merge<\n { [P in MandatoryAttributeNames<A>]: AttributeJsType<A[P]> },\n { [P in OptionalAttributeNames<A>]?: AttributeJsType<A[P]> }\n>;\n\ntype MandatoryCommandNames<C extends Commands> = {\n [K in keyof C]: C[K] extends OptionalCommand<any, any, any> ? never : K;\n}[keyof C];\ntype OptionalCommandNames<C extends Commands> = {\n [K in keyof C]: C[K] extends OptionalCommand<any, any, any> ? K : never;\n}[keyof C];\ntype AttributeGetters<A extends Attributes> = {\n [P in keyof A as `${string & P}AttributeGetter`]?: (args: {\n attributes: AttributeServers<A>;\n endpoint?: EndpointInterface;\n session?: Session<MatterDevice>;\n isFabricFiltered?: boolean;\n }) => AttributeJsType<A[P]>;\n};\ntype AttributeSetters<A extends Attributes> = {\n [P in keyof A as `${string & P}AttributeSetter`]?: (\n value: AttributeJsType<A[P]>,\n args: { attributes: AttributeServers<A>; endpoint?: EndpointInterface; session?: Session<MatterDevice> },\n ) => boolean;\n};\ntype AttributeValidators<A extends Attributes> = {\n [P in keyof A as `${string & P}AttributeValidator`]?: (\n value: AttributeJsType<A[P]>,\n args: { attributes: AttributeServers<A>; endpoint?: EndpointInterface; session?: Session<MatterDevice> },\n ) => void;\n};\nexport type CommandHandler<\n C extends Command<any, any, any>,\n AS extends AttributeServers<any>,\n ES extends EventServers<any>,\n> =\n C extends Command<infer RequestT, infer ResponseT, any>\n ? (args: {\n request: RequestT;\n attributes: AS;\n events: ES;\n session: Session<MatterDevice>;\n message: Message;\n endpoint: EndpointInterface;\n }) => Promise<ResponseT> | ResponseT\n : never;\ntype CommandHandlers<T extends Commands, AS extends AttributeServers<any>, ES extends EventServers<any>> = Merge<\n { [P in MandatoryCommandNames<T>]: CommandHandler<T[P], AS, ES> },\n { [P in OptionalCommandNames<T>]?: CommandHandler<T[P], AS, ES> }\n>;\n\n/** Handlers to process cluster commands */\ntype AttributeHandlers<A extends Attributes> = Merge<\n AttributeGetters<A>,\n Merge<AttributeSetters<A>, AttributeValidators<A>>\n>;\nexport type ClusterServerHandlers<C extends Cluster<any, any, any, any, any>> = Merge<\n CommandHandlers<C[\"commands\"], AttributeServers<C[\"attributes\"]>, EventServers<C[\"events\"]>>,\n Merge<\n AttributeHandlers<C[\"attributes\"]>,\n {\n initializeClusterServer?: (args: {\n attributes: AttributeServers<C[\"attributes\"]>;\n events: EventServers<C[\"events\"]>;\n endpoint: EndpointInterface;\n }) => void;\n destroyClusterServer?: () => void;\n }\n >\n>;\n\nexport type CommandServers<C extends Commands> = Merge<\n { [P in MandatoryCommandNames<C>]: CommandServer<RequestType<C[P]>, ResponseType<C[P]>> },\n { [P in OptionalCommandNames<C>]?: CommandServer<RequestType<C[P]>, ResponseType<C[P]>> }\n>;\n\ntype OptionalAttributeConf<T extends Attributes> = { [K in OptionalAttributeNames<T>]?: true };\ntype MakeAttributeMandatory<A extends Attribute<any, any>> =\n A extends OptionalWritableFabricScopedAttribute<infer T, any>\n ? WritableFabricScopedAttribute<T, any>\n : A extends OptionalWritableAttribute<infer T, any>\n ? WritableAttribute<T, any>\n : A extends OptionalAttribute<infer T, any>\n ? Attribute<T, any>\n : A;\ntype MakeAttributesMandatory<T extends Attributes, C extends OptionalAttributeConf<T>> = {\n [K in keyof T]: K extends keyof C ? MakeAttributeMandatory<T[K]> : T[K];\n};\n\nconst MakeAttributesMandatory = <T extends Attributes, C extends OptionalAttributeConf<T>>(\n attributes: T,\n conf: C,\n): MakeAttributesMandatory<T, C> => {\n const result = <Attributes>{ ...attributes };\n for (const key in conf) {\n (result as any)[key] = { ...result[key], optional: false };\n }\n return result as MakeAttributesMandatory<T, C>;\n};\ntype UseOptionalAttributes<\n C extends Cluster<any, any, any, any, any>,\n A extends OptionalAttributeConf<C[\"attributes\"]>,\n> = Cluster<\n C[\"features\"],\n C[\"supportedFeatures\"],\n MakeAttributesMandatory<C[\"attributes\"], A>,\n C[\"commands\"],\n C[\"events\"]\n>;\n\n/** Forces the presence of the specified optional attributes, so they can be used in the command handlers */\nexport const UseOptionalAttributes = <\n C extends Cluster<any, any, any, any, any>,\n A extends OptionalAttributeConf<C[\"attributes\"]>,\n>(\n cluster: C,\n conf: A,\n): UseOptionalAttributes<C, A> => ({ ...cluster, attributes: MakeAttributesMandatory(cluster.attributes, conf) });\n\nexport type FabricScopedAttributeNames<A extends Attributes> = {\n [K in keyof A]: A[K] extends FabricScopedAttribute<any, any>\n ? K\n : A[K] extends WritableFabricScopedAttribute<any, any>\n ? K\n : A[K] extends OptionalWritableFabricScopedAttribute<any, any>\n ? K\n : never;\n}[keyof A];\nexport type NonFixedAttributeNames<A extends Attributes> = {\n [K in keyof A]: A[K] extends FixedAttribute<any, any>\n ? never\n : A[K] extends OptionalFixedAttribute<any, any>\n ? never\n : K;\n}[keyof A];\n\ntype GetterTypeFromSpec<A extends Attribute<any, any>> =\n A extends OptionalAttribute<infer T, any> ? T | undefined : AttributeJsType<A>;\ntype ServerAttributeGetters<A extends Attributes> = {\n [P in MandatoryAttributeNames<A> as `get${Capitalize<string & P>}Attribute`]: () => GetterTypeFromSpec<A[P]>;\n} & { [P in OptionalAttributeNames<A> as `get${Capitalize<string & P>}Attribute`]?: () => GetterTypeFromSpec<A[P]> } & {\n [P in FabricScopedAttributeNames<A> as `get${Capitalize<string & P>}Attribute`]: (\n fabric: Fabric,\n ) => GetterTypeFromSpec<A[P]>;\n};\ntype ServerAttributeSetters<A extends Attributes> = {\n [P in NonFixedAttributeNames<A> as `set${Capitalize<string & P>}Attribute`]: (value: AttributeJsType<A[P]>) => void;\n} & {\n [P in FabricScopedAttributeNames<A> as `set${Capitalize<string & P>}Attribute`]: (\n value: AttributeJsType<A[P]>,\n fabric: Fabric,\n ) => void;\n};\ntype ServerAttributeSubscribers<A extends Attributes> = {\n [P in NonFixedAttributeNames<A> as `subscribe${Capitalize<string & P>}Attribute`]: (\n listener: (newValue: AttributeJsType<A[P]>, oldValue: AttributeJsType<A[P]>) => void,\n ) => void;\n} & {\n [P in FabricScopedAttributeNames<A> as `subscribe${Capitalize<string & P>}Attribute`]: (\n listener: (newValue: AttributeJsType<A[P]>, oldValue: AttributeJsType<A[P]>) => void,\n fabric: Fabric,\n ) => void;\n};\n\nexport type EventServers<E extends Events> = Merge<\n { [P in MandatoryEventNames<E>]: EventServer<EventType<E[P]>, any> },\n { [P in OptionalEventNames<E>]?: EventServer<EventType<E[P]>, any> }\n>;\ntype ServerEventTriggers<E extends Events> = {\n [P in MandatoryEventNames<E> as `trigger${Capitalize<string & P>}Event`]: (event: EventType<E[P]>) => void;\n} & { [P in OptionalEventNames<E> as `trigger${Capitalize<string & P>}Event`]?: (event: EventType<E[P]>) => void };\nexport type SupportedEventsList<E extends Events> = Merge<\n { [P in MandatoryEventNames<E>]: true },\n { [P in OptionalEventNames<E>]?: boolean }\n>;\n\nexport type ClusterServerObjForCluster<C extends Cluster<any, any, any, any, any>> = ClusterServerObj<\n C[\"attributes\"],\n C[\"events\"]\n>;\n\nexport interface ClusterDatasource<S extends Storage = any> {\n readonly version: number;\n readonly eventHandler?: EventHandler<S>;\n increaseVersion(): number;\n changed(key: string, value: SupportedStorageTypes): void;\n}\n\nexport namespace ClusterDatasource {\n export type Factory = (endpoint: EndpointInterface, cluster: ClusterServerObj<any, any>) => ClusterDatasource;\n}\n\nexport type ClusterServerObj<A extends Attributes, E extends Events> = {\n /**\n * Cluster ID\n * @readonly\n */\n id: ClusterId;\n\n /**\n * Cluster name\n * @readonly\n */\n readonly name: string;\n\n /**\n * Cluster type\n * @private\n * @readonly\n */\n _type: \"ClusterServer\";\n\n /**\n * Cluster datasource\n * @readonly\n */\n datasource?: ClusterDatasource;\n\n /**\n * Cluster attributes as named object that can be used to programmatically work with available attributes\n * @readonly\n */\n readonly attributes: AttributeServers<A>;\n\n /** Returns if a given Attribute Id is defined and supported by this cluster server. */\n isAttributeSupported: (attributeId: AttributeId) => boolean;\n\n /** Returns if a given Attribute for provided name is defined and supported by this cluster server. */\n isAttributeSupportedByName: (attributeName: string) => boolean;\n\n /** Returns if a given Event is defined and supported by this cluster server. */\n isEventSupported: (eventId: EventId) => boolean;\n\n /** Returns if a given Event for provided name is defined and supported by this cluster server. */\n isEventSupportedByName: (eventName: string) => boolean;\n\n /** Returns if a given Command is defined and supported by this cluster server. */\n isCommandSupported: (commandId: CommandId) => boolean;\n\n /** Returns if a given Command for provided name is defined and supported by this cluster server. */\n isCommandSupportedByName: (commandName: string) => boolean;\n} & ServerAttributeGetters<A> &\n ServerAttributeSetters<A> &\n ServerAttributeSubscribers<A> &\n ServerEventTriggers<E>;\n\n/** Strongly typed interface of a cluster server */\nexport type ClusterServerObjInternal<A extends Attributes, C extends Commands, E extends Events> = ClusterServerObj<\n A,\n E\n> & {\n /**\n * Cluster commands as array\n * @private\n * @readonly\n */\n readonly _commands: CommandServers<C>;\n\n /**\n * Cluster events as named object\n * @private\n * @readonly\n */\n readonly _events: EventServers<E>;\n\n /**\n * Assign this cluster to a specific endpoint. This method also initializes the internal Cluster logics\n * @private\n *\n * @param endpoint Endpoint to assign to\n */\n readonly _assignToEndpoint: (endpoint: EndpointInterface) => void;\n\n /**\n * Get the Scene Extension Fields for this cluster. Used by the Scenes cluster.\n * @private\n */\n readonly _getSceneExtensionFieldSets: () => TypeFromSchema<typeof Scenes.TlvAttributeValuePair>[];\n\n /**\n * Set the Scene Extension Fields for this cluster. Used by the Scenes cluster.\n * @private\n */\n readonly _setSceneExtensionFieldSets: (\n values: TypeFromSchema<typeof Scenes.TlvAttributeValuePair>[],\n transitionTime: number,\n ) => void;\n\n /**\n * Verify if a set of Scene Extension Fields match to the current attribute state for this cluster. Used by the Scenes cluster.\n * @private\n */\n readonly _verifySceneExtensionFieldSets: (values: TypeFromSchema<typeof Scenes.TlvAttributeValuePair>[]) => boolean;\n\n /**\n * Destroy internal cluster logics, timers and such\n * @private\n */\n readonly _close: () => void;\n};\n\nexport function isClusterServer<F extends BitSchema, A extends Attributes, C extends Commands, E extends Events>(\n obj: ClusterClientObj<F, A, C, E> | ClusterServerObj<A, E>,\n): obj is ClusterServerObj<A, E> {\n return obj._type === \"ClusterServer\";\n}\n\nexport function isClusterServerInternal<\n F extends BitSchema,\n A extends Attributes,\n C extends Commands,\n E extends Events,\n>(obj: ClusterClientObj<F, A, C, E> | ClusterServerObj<A, E>): obj is ClusterServerObjInternal<A, C, E> {\n return obj._type === \"ClusterServer\";\n}\n\nexport function asClusterServerInternal<A extends Attributes, E extends Events>(\n obj: ClusterServerObj<A, E>,\n): ClusterServerObjInternal<A, Commands, E> {\n if (!isClusterServerInternal(obj)) {\n throw new Error(\"Object is not a ClusterServerObj instance.\");\n }\n return obj;\n}\n"],
4
+ "sourcesContent": ["/**\n * @license\n * Copyright 2022-2024 Matter.js Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { Message } from \"../../codec/MessageCodec.js\";\nimport { AttributeId } from \"../../datatype/AttributeId.js\";\nimport { ClusterId } from \"../../datatype/ClusterId.js\";\nimport { CommandId } from \"../../datatype/CommandId.js\";\nimport { EventId } from \"../../datatype/EventId.js\";\nimport { EndpointInterface } from \"../../endpoint/EndpointInterface.js\";\nimport { Fabric } from \"../../fabric/Fabric.js\";\nimport { MatterDevice } from \"../../MatterDevice.js\";\nimport { EventHandler } from \"../../protocol/interaction/EventHandler.js\";\nimport { BitSchema } from \"../../schema/BitmapSchema.js\";\nimport { Session } from \"../../session/Session.js\";\nimport { Storage } from \"../../storage/Storage.js\";\nimport { SupportedStorageTypes } from \"../../storage/StringifyTools.js\";\nimport { TypeFromSchema } from \"../../tlv/TlvSchema.js\";\nimport { Merge } from \"../../util/Type.js\";\nimport { ClusterClientObj } from \"../client/ClusterClientTypes.js\";\nimport {\n Attribute,\n AttributeJsType,\n Attributes,\n Cluster,\n Command,\n Commands,\n Events,\n EventType,\n FabricScopedAttribute,\n FixedAttribute,\n GlobalAttributes,\n MandatoryAttributeNames,\n MandatoryEventNames,\n OptionalAttribute,\n OptionalAttributeNames,\n OptionalCommand,\n OptionalEventNames,\n OptionalFixedAttribute,\n OptionalWritableAttribute,\n OptionalWritableFabricScopedAttribute,\n RequestType,\n ResponseType,\n WritableAttribute,\n WritableFabricScopedAttribute,\n} from \"../Cluster.js\";\nimport { Scenes } from \"../definitions/ScenesCluster.js\";\nimport { AttributeServer, FabricScopedAttributeServer, FixedAttributeServer } from \"./AttributeServer.js\";\nimport { CommandServer } from \"./CommandServer.js\";\nimport { AnyEventServer } from \"./EventServer.js\";\n\n/** Cluster attributes accessible on the cluster server */\ntype MandatoryAttributeServers<A extends Attributes> = Omit<\n {\n [P in MandatoryAttributeNames<A>]: A[P] extends FabricScopedAttribute<any, any>\n ? FabricScopedAttributeServer<AttributeJsType<A[P]>>\n : A[P] extends WritableFabricScopedAttribute<any, any>\n ? FabricScopedAttributeServer<AttributeJsType<A[P]>>\n : A[P] extends FixedAttribute<any, any>\n ? FixedAttributeServer<AttributeJsType<A[P]>>\n : AttributeServer<AttributeJsType<A[P]>>;\n },\n keyof GlobalAttributes<any>\n>;\ntype OptionalAttributeServers<A extends Attributes> = {\n [P in OptionalAttributeNames<A>]?: A[P] extends OptionalWritableFabricScopedAttribute<any, any>\n ? FabricScopedAttributeServer<AttributeJsType<A[P]>>\n : A[P] extends OptionalFixedAttribute<any, any>\n ? FixedAttributeServer<AttributeJsType<A[P]>>\n : AttributeServer<AttributeJsType<A[P]>>;\n};\nexport type AttributeServers<A extends Attributes> = Merge<MandatoryAttributeServers<A>, OptionalAttributeServers<A>>;\n\n/** Initial values for the cluster attribute */\nexport type AttributeInitialValues<A extends Attributes> = Merge<\n Omit<{ [P in MandatoryAttributeNames<A>]: AttributeJsType<A[P]> }, keyof GlobalAttributes<any>>,\n { [P in OptionalAttributeNames<A>]?: AttributeJsType<A[P]> }\n>;\nexport type AttributeServerValues<A extends Attributes> = Merge<\n { [P in MandatoryAttributeNames<A>]: AttributeJsType<A[P]> },\n { [P in OptionalAttributeNames<A>]?: AttributeJsType<A[P]> }\n>;\n\ntype MandatoryCommandNames<C extends Commands> = {\n [K in keyof C]: C[K] extends OptionalCommand<any, any, any> ? never : K;\n}[keyof C];\ntype OptionalCommandNames<C extends Commands> = {\n [K in keyof C]: C[K] extends OptionalCommand<any, any, any> ? K : never;\n}[keyof C];\ntype AttributeGetters<A extends Attributes> = {\n [P in keyof A as `${string & P}AttributeGetter`]?: (args: {\n attributes: AttributeServers<A>;\n endpoint?: EndpointInterface;\n session?: Session<MatterDevice>;\n isFabricFiltered?: boolean;\n }) => AttributeJsType<A[P]>;\n};\ntype AttributeSetters<A extends Attributes> = {\n [P in keyof A as `${string & P}AttributeSetter`]?: (\n value: AttributeJsType<A[P]>,\n args: { attributes: AttributeServers<A>; endpoint?: EndpointInterface; session?: Session<MatterDevice> },\n ) => boolean;\n};\ntype AttributeValidators<A extends Attributes> = {\n [P in keyof A as `${string & P}AttributeValidator`]?: (\n value: AttributeJsType<A[P]>,\n args: { attributes: AttributeServers<A>; endpoint?: EndpointInterface; session?: Session<MatterDevice> },\n ) => void;\n};\nexport type CommandHandler<\n C extends Command<any, any, any>,\n AS extends AttributeServers<any>,\n ES extends EventServers<any>,\n> =\n C extends Command<infer RequestT, infer ResponseT, any>\n ? (args: {\n request: RequestT;\n attributes: AS;\n events: ES;\n session: Session<MatterDevice>;\n message: Message;\n endpoint: EndpointInterface;\n }) => Promise<ResponseT> | ResponseT\n : never;\ntype CommandHandlers<T extends Commands, AS extends AttributeServers<any>, ES extends EventServers<any>> = Merge<\n { [P in MandatoryCommandNames<T>]: CommandHandler<T[P], AS, ES> },\n { [P in OptionalCommandNames<T>]?: CommandHandler<T[P], AS, ES> }\n>;\n\n/** Handlers to process cluster commands */\ntype AttributeHandlers<A extends Attributes> = Merge<\n AttributeGetters<A>,\n Merge<AttributeSetters<A>, AttributeValidators<A>>\n>;\nexport type ClusterServerHandlers<C extends Cluster<any, any, any, any, any>> = Merge<\n CommandHandlers<C[\"commands\"], AttributeServers<C[\"attributes\"]>, EventServers<C[\"events\"]>>,\n Merge<\n AttributeHandlers<C[\"attributes\"]>,\n {\n initializeClusterServer?: (args: {\n attributes: AttributeServers<C[\"attributes\"]>;\n events: EventServers<C[\"events\"]>;\n endpoint: EndpointInterface;\n }) => void;\n destroyClusterServer?: () => void;\n }\n >\n>;\n\nexport type CommandServers<C extends Commands> = Merge<\n { [P in MandatoryCommandNames<C>]: CommandServer<RequestType<C[P]>, ResponseType<C[P]>> },\n { [P in OptionalCommandNames<C>]?: CommandServer<RequestType<C[P]>, ResponseType<C[P]>> }\n>;\n\ntype OptionalAttributeConf<T extends Attributes> = { [K in OptionalAttributeNames<T>]?: true };\ntype MakeAttributeMandatory<A extends Attribute<any, any>> =\n A extends OptionalWritableFabricScopedAttribute<infer T, any>\n ? WritableFabricScopedAttribute<T, any>\n : A extends OptionalWritableAttribute<infer T, any>\n ? WritableAttribute<T, any>\n : A extends OptionalAttribute<infer T, any>\n ? Attribute<T, any>\n : A;\ntype MakeAttributesMandatory<T extends Attributes, C extends OptionalAttributeConf<T>> = {\n [K in keyof T]: K extends keyof C ? MakeAttributeMandatory<T[K]> : T[K];\n};\n\nconst MakeAttributesMandatory = <T extends Attributes, C extends OptionalAttributeConf<T>>(\n attributes: T,\n conf: C,\n): MakeAttributesMandatory<T, C> => {\n const result = <Attributes>{ ...attributes };\n for (const key in conf) {\n (result as any)[key] = { ...result[key], optional: false };\n }\n return result as MakeAttributesMandatory<T, C>;\n};\ntype UseOptionalAttributes<\n C extends Cluster<any, any, any, any, any>,\n A extends OptionalAttributeConf<C[\"attributes\"]>,\n> = Cluster<\n C[\"features\"],\n C[\"supportedFeatures\"],\n MakeAttributesMandatory<C[\"attributes\"], A>,\n C[\"commands\"],\n C[\"events\"]\n>;\n\n/** Forces the presence of the specified optional attributes, so they can be used in the command handlers */\nexport const UseOptionalAttributes = <\n C extends Cluster<any, any, any, any, any>,\n A extends OptionalAttributeConf<C[\"attributes\"]>,\n>(\n cluster: C,\n conf: A,\n): UseOptionalAttributes<C, A> => ({ ...cluster, attributes: MakeAttributesMandatory(cluster.attributes, conf) });\n\nexport type FabricScopedAttributeNames<A extends Attributes> = {\n [K in keyof A]: A[K] extends FabricScopedAttribute<any, any>\n ? K\n : A[K] extends WritableFabricScopedAttribute<any, any>\n ? K\n : A[K] extends OptionalWritableFabricScopedAttribute<any, any>\n ? K\n : never;\n}[keyof A];\nexport type NonFixedAttributeNames<A extends Attributes> = {\n [K in keyof A]: A[K] extends FixedAttribute<any, any>\n ? never\n : A[K] extends OptionalFixedAttribute<any, any>\n ? never\n : K;\n}[keyof A];\n\ntype GetterTypeFromSpec<A extends Attribute<any, any>> =\n A extends OptionalAttribute<infer T, any> ? T | undefined : AttributeJsType<A>;\ntype ServerAttributeGetters<A extends Attributes> = {\n [P in MandatoryAttributeNames<A> as `get${Capitalize<string & P>}Attribute`]: () => GetterTypeFromSpec<A[P]>;\n} & { [P in OptionalAttributeNames<A> as `get${Capitalize<string & P>}Attribute`]?: () => GetterTypeFromSpec<A[P]> } & {\n [P in FabricScopedAttributeNames<A> as `get${Capitalize<string & P>}Attribute`]: (\n fabric: Fabric,\n ) => GetterTypeFromSpec<A[P]>;\n};\ntype ServerAttributeSetters<A extends Attributes> = {\n [P in NonFixedAttributeNames<A> as `set${Capitalize<string & P>}Attribute`]: (value: AttributeJsType<A[P]>) => void;\n} & {\n [P in FabricScopedAttributeNames<A> as `set${Capitalize<string & P>}Attribute`]: (\n value: AttributeJsType<A[P]>,\n fabric: Fabric,\n ) => void;\n};\ntype ServerAttributeSubscribers<A extends Attributes> = {\n [P in NonFixedAttributeNames<A> as `subscribe${Capitalize<string & P>}Attribute`]: (\n listener: (newValue: AttributeJsType<A[P]>, oldValue: AttributeJsType<A[P]>) => void,\n ) => void;\n} & {\n [P in FabricScopedAttributeNames<A> as `subscribe${Capitalize<string & P>}Attribute`]: (\n listener: (newValue: AttributeJsType<A[P]>, oldValue: AttributeJsType<A[P]>) => void,\n fabric: Fabric,\n ) => void;\n};\n\nexport type EventServers<E extends Events> = Merge<\n { [P in MandatoryEventNames<E>]: AnyEventServer<EventType<E[P]>, any> },\n { [P in OptionalEventNames<E>]?: AnyEventServer<EventType<E[P]>, any> }\n>;\ntype ServerEventTriggers<E extends Events> = {\n [P in MandatoryEventNames<E> as `trigger${Capitalize<string & P>}Event`]: (event: EventType<E[P]>) => void;\n} & { [P in OptionalEventNames<E> as `trigger${Capitalize<string & P>}Event`]?: (event: EventType<E[P]>) => void };\nexport type SupportedEventsList<E extends Events> = Merge<\n { [P in MandatoryEventNames<E>]: true },\n { [P in OptionalEventNames<E>]?: boolean }\n>;\n\nexport type ClusterServerObjForCluster<C extends Cluster<any, any, any, any, any>> = ClusterServerObj<\n C[\"attributes\"],\n C[\"events\"]\n>;\n\nexport interface ClusterDatasource<S extends Storage = any> {\n readonly version: number;\n readonly eventHandler?: EventHandler<S>;\n increaseVersion(): number;\n changed(key: string, value: SupportedStorageTypes): void;\n}\n\nexport namespace ClusterDatasource {\n export type Factory = (endpoint: EndpointInterface, cluster: ClusterServerObj<any, any>) => ClusterDatasource;\n}\n\nexport type ClusterServerObj<A extends Attributes, E extends Events> = {\n /**\n * Cluster ID\n * @readonly\n */\n id: ClusterId;\n\n /**\n * Cluster name\n * @readonly\n */\n readonly name: string;\n\n /**\n * Cluster type\n * @private\n * @readonly\n */\n _type: \"ClusterServer\";\n\n /**\n * Cluster datasource\n * @readonly\n */\n datasource?: ClusterDatasource;\n\n /**\n * Cluster attributes as named object that can be used to programmatically work with available attributes\n * @readonly\n */\n readonly attributes: AttributeServers<A>;\n\n /** Returns if a given Attribute Id is defined and supported by this cluster server. */\n isAttributeSupported: (attributeId: AttributeId) => boolean;\n\n /** Returns if a given Attribute for provided name is defined and supported by this cluster server. */\n isAttributeSupportedByName: (attributeName: string) => boolean;\n\n /** Returns if a given Event is defined and supported by this cluster server. */\n isEventSupported: (eventId: EventId) => boolean;\n\n /** Returns if a given Event for provided name is defined and supported by this cluster server. */\n isEventSupportedByName: (eventName: string) => boolean;\n\n /** Returns if a given Command is defined and supported by this cluster server. */\n isCommandSupported: (commandId: CommandId) => boolean;\n\n /** Returns if a given Command for provided name is defined and supported by this cluster server. */\n isCommandSupportedByName: (commandName: string) => boolean;\n} & ServerAttributeGetters<A> &\n ServerAttributeSetters<A> &\n ServerAttributeSubscribers<A> &\n ServerEventTriggers<E>;\n\n/** Strongly typed interface of a cluster server */\nexport type ClusterServerObjInternal<A extends Attributes, C extends Commands, E extends Events> = ClusterServerObj<\n A,\n E\n> & {\n /**\n * Cluster commands as array\n * @private\n * @readonly\n */\n readonly _commands: CommandServers<C>;\n\n /**\n * Cluster events as named object\n * @private\n * @readonly\n */\n readonly _events: EventServers<E>;\n\n /**\n * Assign this cluster to a specific endpoint. This method also initializes the internal Cluster logics\n * @private\n *\n * @param endpoint Endpoint to assign to\n */\n readonly _assignToEndpoint: (endpoint: EndpointInterface) => void;\n\n /**\n * Get the Scene Extension Fields for this cluster. Used by the Scenes cluster.\n * @private\n */\n readonly _getSceneExtensionFieldSets: () => TypeFromSchema<typeof Scenes.TlvAttributeValuePair>[];\n\n /**\n * Set the Scene Extension Fields for this cluster. Used by the Scenes cluster.\n * @private\n */\n readonly _setSceneExtensionFieldSets: (\n values: TypeFromSchema<typeof Scenes.TlvAttributeValuePair>[],\n transitionTime: number,\n ) => void;\n\n /**\n * Verify if a set of Scene Extension Fields match to the current attribute state for this cluster. Used by the Scenes cluster.\n * @private\n */\n readonly _verifySceneExtensionFieldSets: (values: TypeFromSchema<typeof Scenes.TlvAttributeValuePair>[]) => boolean;\n\n /**\n * Destroy internal cluster logics, timers and such\n * @private\n */\n readonly _close: () => void;\n};\n\nexport function isClusterServer<F extends BitSchema, A extends Attributes, C extends Commands, E extends Events>(\n obj: ClusterClientObj<F, A, C, E> | ClusterServerObj<A, E>,\n): obj is ClusterServerObj<A, E> {\n return obj._type === \"ClusterServer\";\n}\n\nexport function isClusterServerInternal<\n F extends BitSchema,\n A extends Attributes,\n C extends Commands,\n E extends Events,\n>(obj: ClusterClientObj<F, A, C, E> | ClusterServerObj<A, E>): obj is ClusterServerObjInternal<A, C, E> {\n return obj._type === \"ClusterServer\";\n}\n\nexport function asClusterServerInternal<A extends Attributes, E extends Events>(\n obj: ClusterServerObj<A, E>,\n): ClusterServerObjInternal<A, Commands, E> {\n if (!isClusterServerInternal(obj)) {\n throw new Error(\"Object is not a ClusterServerObj instance.\");\n }\n return obj;\n}\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAyKA,MAAM,0BAA0B,CAC5B,YACA,SACgC;AAChC,QAAM,SAAqB,EAAE,GAAG,WAAW;AAC3C,aAAW,OAAO,MAAM;AACpB,IAAC,OAAe,GAAG,IAAI,EAAE,GAAG,OAAO,GAAG,GAAG,UAAU,MAAM;AAAA,EAC7D;AACA,SAAO;AACX;AAaO,MAAM,wBAAwB,CAIjC,SACA,UAC+B,EAAE,GAAG,SAAS,YAAY,wBAAwB,QAAQ,YAAY,IAAI,EAAE;AAwLxG,SAAS,gBACZ,KAC6B;AAC7B,SAAO,IAAI,UAAU;AACzB;AAEO,SAAS,wBAKd,KAAsG;AACpG,SAAO,IAAI,UAAU;AACzB;AAEO,SAAS,wBACZ,KACwC;AACxC,MAAI,CAAC,wBAAwB,GAAG,GAAG;AAC/B,UAAM,IAAI,MAAM,4CAA4C;AAAA,EAChE;AACA,SAAO;AACX;",
6
6
  "names": []
7
7
  }
@@ -10,10 +10,13 @@ import { EventId } from "../../datatype/EventId.js";
10
10
  import { Endpoint } from "../../device/Endpoint.js";
11
11
  import { EventHandler, EventStorageData } from "../../protocol/interaction/EventHandler.js";
12
12
  import { TlvEventFilter } from "../../protocol/interaction/InteractionProtocol.js";
13
+ import { BitSchema, TypeFromPartialBitSchema } from "../../schema/BitmapSchema.js";
13
14
  import { Session } from "../../session/Session.js";
14
15
  import { Storage, StorageOperationResult } from "../../storage/Storage.js";
15
16
  import { TlvSchema, TypeFromSchema } from "../../tlv/TlvSchema.js";
16
- import { AccessLevel, EventPriority } from "../Cluster.js";
17
+ import { AccessLevel, Attributes, Cluster, Commands, Event, EventPriority, Events } from "../Cluster.js";
18
+ export type AnyEventServer<T, S extends Storage> = EventServer<T, S> | FabricSensitiveEventServer<T, S>;
19
+ export declare function createEventServer<T, F extends BitSchema, SF extends TypeFromPartialBitSchema<F>, A extends Attributes, C extends Commands, E extends Events, S extends Storage>(clusterDef: Cluster<F, SF, A, C, E>, eventDef: Event<T, F>, eventName: string, schema: TlvSchema<T>, priority: EventPriority, readAcl: AccessLevel | undefined): EventServer<T, S>;
17
20
  export declare class EventServer<T, S extends Storage> {
18
21
  #private;
19
22
  readonly id: EventId;
@@ -25,6 +28,7 @@ export declare class EventServer<T, S extends Storage> {
25
28
  private readonly listeners;
26
29
  protected endpoint?: Endpoint;
27
30
  protected eventHandler?: EventHandler;
31
+ hasFabricSensitiveData: boolean;
28
32
  constructor(id: EventId, clusterId: ClusterId, name: string, schema: TlvSchema<T>, priority: EventPriority, readAcl: AccessLevel | undefined);
29
33
  get readAcl(): AccessLevel;
30
34
  assignToEndpoint(endpoint: Endpoint): void;
@@ -34,7 +38,9 @@ export declare class EventServer<T, S extends Storage> {
34
38
  removeListener(listener: (event: EventStorageData<T>) => void): void;
35
39
  get(session: Session<MatterDevice>, isFabricFiltered: boolean, _message?: Message, filters?: TypeFromSchema<typeof TlvEventFilter>[]): EventStorageData<any>[];
36
40
  }
37
- export declare class FabricScopedEventServer<T, S extends Storage> extends EventServer<T, S> {
41
+ export declare class FabricSensitiveEventServer<T, S extends Storage> extends EventServer<T, S> {
42
+ hasFabricSensitiveData: boolean;
43
+ get(session: Session<MatterDevice>, _isFabricFiltered: boolean, message?: Message, filters?: TypeFromSchema<typeof TlvEventFilter>[]): EventStorageData<any>[];
38
44
  triggerEvent(data: T): StorageOperationResult<S, void>;
39
45
  }
40
46
  //# sourceMappingURL=EventServer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"EventServer.d.ts","sourceRoot":"","sources":["../../../../src/cluster/server/EventServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAEtD,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAa,YAAY,EAAE,gBAAgB,EAAE,MAAM,4CAA4C,CAAC;AACvG,OAAO,EAAE,cAAc,EAAE,MAAM,mDAAmD,CAAC;AAEnF,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAE3E,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE3D,qBAAa,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO;;IAQrC,QAAQ,CAAC,EAAE,EAAE,OAAO;IACpB,QAAQ,CAAC,SAAS,EAAE,SAAS;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,aAAa;IAXpC,OAAO,CAAC,SAAS,CAA6B;IAC9C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAqD;IAC/E,SAAS,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC9B,SAAS,CAAC,YAAY,CAAC,EAAE,YAAY,CAAC;gBAIzB,EAAE,EAAE,OAAO,EACX,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EACpB,QAAQ,EAAE,aAAa,EAChC,OAAO,EAAE,WAAW,GAAG,SAAS;IAKpC,IAAI,OAAO,gBAEV;IAED,gBAAgB,CAAC,QAAQ,EAAE,QAAQ;IAMnC,kBAAkB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;IAmBhD,YAAY,CAAC,IAAI,EAAE,CAAC;IAwBpB,WAAW,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,IAAI;IAI1D,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC,CAAC,KAAK,IAAI;IAO7D,GAAG,CACC,OAAO,EAAE,OAAO,CAAC,YAAY,CAAC,EAC9B,gBAAgB,EAAE,OAAO,EACzB,QAAQ,CAAC,EAAE,OAAO,EAClB,OAAO,CAAC,EAAE,cAAc,CAAC,OAAO,cAAc,CAAC,EAAE;CAiBxD;AAGD,qBAAa,uBAAuB,CAAC,CAAC,EAAE,CAAC,SAAS,OAAO,CAAE,SAAQ,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC;IACvE,YAAY,CAAC,IAAI,EAAE,CAAC;CAShC"}
1
+ {"version":3,"file":"EventServer.d.ts","sourceRoot":"","sources":["../../../../src/cluster/server/EventServer.ts"],"names":[],"mappings":"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"}
@@ -19,18 +19,36 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var EventServer_exports = {};
20
20
  __export(EventServer_exports, {
21
21
  EventServer: () => EventServer,
22
- FabricScopedEventServer: () => FabricScopedEventServer
22
+ FabricSensitiveEventServer: () => FabricSensitiveEventServer,
23
+ createEventServer: () => createEventServer
23
24
  });
24
25
  module.exports = __toCommonJS(EventServer_exports);
25
26
  var import_MatterError = require("../../common/MatterError.js");
27
+ var import_FabricIndex = require("../../datatype/FabricIndex.js");
28
+ var import_model = require("../../model/index.js");
26
29
  var import_Time = require("../../time/Time.js");
27
30
  var import_Promises = require("../../util/Promises.js");
31
+ var import_Type = require("../../util/Type.js");
28
32
  var import_Cluster = require("../Cluster.js");
29
33
  /**
30
34
  * @license
31
35
  * Copyright 2022-2024 Matter.js Authors
32
36
  * SPDX-License-Identifier: Apache-2.0
33
37
  */
38
+ function createEventServer(clusterDef, eventDef, eventName, schema, priority, readAcl) {
39
+ let fabricSensitive = false;
40
+ const clusterFromModel = new import_model.MatterModel().get(import_model.ClusterModel, clusterDef.id);
41
+ if (clusterFromModel !== void 0) {
42
+ const eventModel = clusterFromModel.get(import_model.EventModel, eventDef.id);
43
+ if (eventModel !== void 0) {
44
+ fabricSensitive = eventModel.fabricSensitive;
45
+ }
46
+ }
47
+ if (fabricSensitive) {
48
+ return new FabricSensitiveEventServer(eventDef.id, clusterDef.id, eventName, schema, priority, readAcl);
49
+ }
50
+ return new EventServer(eventDef.id, clusterDef.id, eventName, schema, priority, readAcl);
51
+ }
34
52
  class EventServer {
35
53
  constructor(id, clusterId, name, schema, priority, readAcl) {
36
54
  this.id = id;
@@ -40,6 +58,7 @@ class EventServer {
40
58
  this.priority = priority;
41
59
  this.eventList = new Array();
42
60
  this.listeners = new Array();
61
+ this.hasFabricSensitiveData = false;
43
62
  this.#readAcl = readAcl;
44
63
  }
45
64
  #readAcl;
@@ -109,18 +128,25 @@ class EventServer {
109
128
  return this.eventHandler.getEvents(
110
129
  { endpointId: this.endpoint.number, clusterId: this.clusterId, eventId: this.id },
111
130
  filters,
112
- // TODO When not fabricscoped event later then only pass isFabricFiltered through for fabric filtered variant
113
- isFabricFiltered && session.fabric ? session.associatedFabric.fabricIndex : void 0
131
+ // When request is fabric filtered or the event is Fabric sensitive then filter the events for the fabrics
132
+ isFabricFiltered ? session.fabric?.fabricIndex ?? import_FabricIndex.FabricIndex.NO_FABRIC : void 0
114
133
  );
115
134
  }
116
135
  }
117
- class FabricScopedEventServer extends EventServer {
136
+ class FabricSensitiveEventServer extends EventServer {
137
+ constructor() {
138
+ super(...arguments);
139
+ this.hasFabricSensitiveData = true;
140
+ }
141
+ get(session, _isFabricFiltered, message, filters) {
142
+ return super.get(session, true, message, filters);
143
+ }
118
144
  triggerEvent(data) {
119
- if (typeof data !== "object" || data === null) {
120
- throw new import_MatterError.ImplementationError("FabricScoped events need to have an object as data.");
145
+ if (!(0, import_Type.isObject)(data) || data === null) {
146
+ throw new import_MatterError.ImplementationError("FabricSensitive events need to have an object as data.");
121
147
  }
122
148
  if (!("fabricIndex" in data)) {
123
- throw new import_MatterError.InternalError("FabricScoped events requires fabricIndex in data.");
149
+ throw new import_MatterError.InternalError("FabricSensitive events requires fabricIndex in data.");
124
150
  }
125
151
  return super.triggerEvent(data);
126
152
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/cluster/server/EventServer.ts"],
4
- "sourcesContent": ["/**\n * @license\n * Copyright 2022-2024 Matter.js Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { MatterDevice } from \"../../MatterDevice.js\";\nimport { Message } from \"../../codec/MessageCodec.js\";\nimport { ImplementationError, InternalError } from \"../../common/MatterError.js\";\nimport { ClusterId } from \"../../datatype/ClusterId.js\";\nimport { EventId } from \"../../datatype/EventId.js\";\nimport { Endpoint } from \"../../device/Endpoint.js\";\nimport { EventData, EventHandler, EventStorageData } from \"../../protocol/interaction/EventHandler.js\";\nimport { TlvEventFilter } from \"../../protocol/interaction/InteractionProtocol.js\";\nimport { SecureSession } from \"../../session/SecureSession.js\";\nimport { Session } from \"../../session/Session.js\";\nimport { Storage, StorageOperationResult } from \"../../storage/Storage.js\";\nimport { Time } from \"../../time/Time.js\";\nimport { TlvSchema, TypeFromSchema } from \"../../tlv/TlvSchema.js\";\nimport { MaybePromise } from \"../../util/Promises.js\";\nimport { AccessLevel, EventPriority } from \"../Cluster.js\";\n\nexport class EventServer<T, S extends Storage> {\n private eventList = new Array<EventData<T>>();\n private readonly listeners = new Array<(event: EventStorageData<T>) => void>();\n protected endpoint?: Endpoint;\n protected eventHandler?: EventHandler;\n #readAcl: AccessLevel | undefined;\n\n constructor(\n readonly id: EventId,\n readonly clusterId: ClusterId,\n readonly name: string,\n readonly schema: TlvSchema<T>,\n readonly priority: EventPriority,\n readAcl: AccessLevel | undefined,\n ) {\n this.#readAcl = readAcl;\n }\n\n get readAcl() {\n return this.#readAcl ?? AccessLevel.View; // ???\n }\n\n assignToEndpoint(endpoint: Endpoint) {\n this.endpoint = endpoint;\n }\n\n // TODO Try to get rid of that late binding and simply things again\n // potentially with refactoring out MatterDevice and MatterController\n bindToEventHandler(eventHandler: EventHandler<S>) {\n this.eventHandler = eventHandler;\n // Send all stored events to the new listener\n const promises = new Array<PromiseLike<void>>();\n for (const event of this.eventList) {\n const finalEvent = this.eventHandler.pushEvent(event);\n if (finalEvent !== undefined && MaybePromise.is(finalEvent)) {\n promises.push(finalEvent.then(e => this.listeners.forEach(listener => listener(e))));\n } else {\n this.listeners.forEach(listener => listener(finalEvent));\n }\n }\n this.eventList = [];\n if (promises.length > 0) {\n return Promise.all(promises).then(() => Promise.resolve()) as StorageOperationResult<S>;\n }\n return undefined as StorageOperationResult<S>;\n }\n\n triggerEvent(data: T) {\n if (this.endpoint === undefined || this.endpoint.number === undefined) {\n throw new InternalError(\"Endpoint not assigned\");\n }\n const event: EventData<T> = {\n eventId: this.id,\n clusterId: this.clusterId,\n endpointId: this.endpoint.number,\n epochTimestamp: Time.nowMs(),\n priority: this.priority,\n data,\n };\n if (this.eventHandler === undefined) {\n // As long as we have no eventManager, we store the events\n this.eventList.push(event);\n } else {\n const finalEvent = this.eventHandler.pushEvent(event);\n return MaybePromise.then(finalEvent, e => {\n this.listeners.forEach(listener => listener(e));\n }) as StorageOperationResult<S>;\n }\n return undefined as StorageOperationResult<S>;\n }\n\n addListener(listener: (event: EventStorageData<T>) => void) {\n this.listeners.push(listener);\n }\n\n removeListener(listener: (event: EventStorageData<T>) => void) {\n const entryIndex = this.listeners.indexOf(listener);\n if (entryIndex !== -1) {\n this.listeners.splice(entryIndex, 1);\n }\n }\n\n get(\n session: Session<MatterDevice>,\n isFabricFiltered: boolean,\n _message?: Message,\n filters?: TypeFromSchema<typeof TlvEventFilter>[],\n ) {\n if (this.eventHandler === undefined) {\n throw new InternalError(\"EventServer not bound to EventHandler\");\n }\n if (this.endpoint === undefined) {\n throw new InternalError(\"EventServer not bound to Endpoint\");\n }\n return this.eventHandler.getEvents(\n { endpointId: this.endpoint.number, clusterId: this.clusterId, eventId: this.id },\n filters,\n // TODO When not fabricscoped event later then only pass isFabricFiltered through for fabric filtered variant\n isFabricFiltered && (session as SecureSession<any>).fabric\n ? session.associatedFabric.fabricIndex\n : undefined,\n );\n }\n}\n\n// TODO this can be added and used once we generate fabric scoped property in the Event definition\nexport class FabricScopedEventServer<T, S extends Storage> extends EventServer<T, S> {\n override triggerEvent(data: T) {\n if (typeof data !== \"object\" || data === null) {\n throw new ImplementationError(\"FabricScoped events need to have an object as data.\");\n }\n if (!(\"fabricIndex\" in data)) {\n throw new InternalError(\"FabricScoped events requires fabricIndex in data.\");\n }\n return super.triggerEvent(data);\n }\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * @license\n * Copyright 2022-2024 Matter.js Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { MatterDevice } from \"../../MatterDevice.js\";\nimport { Message } from \"../../codec/MessageCodec.js\";\nimport { ImplementationError, InternalError } from \"../../common/MatterError.js\";\nimport { ClusterId } from \"../../datatype/ClusterId.js\";\nimport { EventId } from \"../../datatype/EventId.js\";\nimport { FabricIndex } from \"../../datatype/FabricIndex.js\";\nimport { Endpoint } from \"../../device/Endpoint.js\";\nimport { ClusterModel, EventModel, MatterModel } from \"../../model/index.js\";\nimport { EventData, EventHandler, EventStorageData } from \"../../protocol/interaction/EventHandler.js\";\nimport { TlvEventFilter } from \"../../protocol/interaction/InteractionProtocol.js\";\nimport { BitSchema, TypeFromPartialBitSchema } from \"../../schema/BitmapSchema.js\";\nimport { SecureSession } from \"../../session/SecureSession.js\";\nimport { Session } from \"../../session/Session.js\";\nimport { Storage, StorageOperationResult } from \"../../storage/Storage.js\";\nimport { Time } from \"../../time/Time.js\";\nimport { TlvSchema, TypeFromSchema } from \"../../tlv/TlvSchema.js\";\nimport { MaybePromise } from \"../../util/Promises.js\";\nimport { isObject } from \"../../util/Type.js\";\nimport { AccessLevel, Attributes, Cluster, Commands, Event, EventPriority, Events } from \"../Cluster.js\";\n\nexport type AnyEventServer<T, S extends Storage> = EventServer<T, S> | FabricSensitiveEventServer<T, S>;\n\nexport function createEventServer<\n T,\n F extends BitSchema,\n SF extends TypeFromPartialBitSchema<F>,\n A extends Attributes,\n C extends Commands,\n E extends Events,\n S extends Storage,\n>(\n clusterDef: Cluster<F, SF, A, C, E>,\n eventDef: Event<T, F>,\n eventName: string,\n schema: TlvSchema<T>,\n priority: EventPriority,\n readAcl: AccessLevel | undefined,\n): EventServer<T, S> {\n let fabricSensitive = false;\n const clusterFromModel = new MatterModel().get(ClusterModel, clusterDef.id);\n if (clusterFromModel !== undefined) {\n const eventModel = clusterFromModel.get(EventModel, eventDef.id);\n if (eventModel !== undefined) {\n fabricSensitive = eventModel.fabricSensitive;\n }\n }\n if (fabricSensitive) {\n return new FabricSensitiveEventServer(eventDef.id, clusterDef.id, eventName, schema, priority, readAcl);\n }\n return new EventServer(eventDef.id, clusterDef.id, eventName, schema, priority, readAcl);\n}\n\nexport class EventServer<T, S extends Storage> {\n private eventList = new Array<EventData<T>>();\n private readonly listeners = new Array<(event: EventStorageData<T>) => void>();\n protected endpoint?: Endpoint;\n protected eventHandler?: EventHandler;\n #readAcl: AccessLevel | undefined;\n hasFabricSensitiveData = false;\n\n constructor(\n readonly id: EventId,\n readonly clusterId: ClusterId,\n readonly name: string,\n readonly schema: TlvSchema<T>,\n readonly priority: EventPriority,\n readAcl: AccessLevel | undefined,\n ) {\n this.#readAcl = readAcl;\n }\n\n get readAcl() {\n return this.#readAcl ?? AccessLevel.View; // ???\n }\n\n assignToEndpoint(endpoint: Endpoint) {\n this.endpoint = endpoint;\n }\n\n // TODO Try to get rid of that late binding and simply things again\n // potentially with refactoring out MatterDevice and MatterController\n bindToEventHandler(eventHandler: EventHandler<S>) {\n this.eventHandler = eventHandler;\n // Send all stored events to the new listener\n const promises = new Array<PromiseLike<void>>();\n for (const event of this.eventList) {\n const finalEvent = this.eventHandler.pushEvent(event);\n if (finalEvent !== undefined && MaybePromise.is(finalEvent)) {\n promises.push(finalEvent.then(e => this.listeners.forEach(listener => listener(e))));\n } else {\n this.listeners.forEach(listener => listener(finalEvent));\n }\n }\n this.eventList = [];\n if (promises.length > 0) {\n return Promise.all(promises).then(() => Promise.resolve()) as StorageOperationResult<S>;\n }\n return undefined as StorageOperationResult<S>;\n }\n\n triggerEvent(data: T) {\n if (this.endpoint === undefined || this.endpoint.number === undefined) {\n throw new InternalError(\"Endpoint not assigned\");\n }\n const event: EventData<T> = {\n eventId: this.id,\n clusterId: this.clusterId,\n endpointId: this.endpoint.number,\n epochTimestamp: Time.nowMs(),\n priority: this.priority,\n data,\n };\n if (this.eventHandler === undefined) {\n // As long as we have no eventManager, we store the events\n this.eventList.push(event);\n } else {\n const finalEvent = this.eventHandler.pushEvent(event);\n return MaybePromise.then(finalEvent, e => {\n this.listeners.forEach(listener => listener(e));\n }) as StorageOperationResult<S>;\n }\n return undefined as StorageOperationResult<S>;\n }\n\n addListener(listener: (event: EventStorageData<T>) => void) {\n this.listeners.push(listener);\n }\n\n removeListener(listener: (event: EventStorageData<T>) => void) {\n const entryIndex = this.listeners.indexOf(listener);\n if (entryIndex !== -1) {\n this.listeners.splice(entryIndex, 1);\n }\n }\n\n get(\n session: Session<MatterDevice>,\n isFabricFiltered: boolean,\n _message?: Message,\n filters?: TypeFromSchema<typeof TlvEventFilter>[],\n ) {\n if (this.eventHandler === undefined) {\n throw new InternalError(\"EventServer not bound to EventHandler\");\n }\n if (this.endpoint === undefined) {\n throw new InternalError(\"EventServer not bound to Endpoint\");\n }\n\n return this.eventHandler.getEvents(\n { endpointId: this.endpoint.number, clusterId: this.clusterId, eventId: this.id },\n filters,\n // When request is fabric filtered or the event is Fabric sensitive then filter the events for the fabrics\n isFabricFiltered ? (session as SecureSession<any>).fabric?.fabricIndex ?? FabricIndex.NO_FABRIC : undefined,\n );\n }\n}\n\nexport class FabricSensitiveEventServer<T, S extends Storage> extends EventServer<T, S> {\n override hasFabricSensitiveData = true;\n\n override get(\n session: Session<MatterDevice>,\n _isFabricFiltered: boolean,\n message?: Message,\n filters?: TypeFromSchema<typeof TlvEventFilter>[],\n ) {\n // because the event is fabric sensitive it is always filtered out when another fabric tries to access it\n return super.get(session, true, message, filters);\n }\n\n override triggerEvent(data: T) {\n if (!isObject(data) || data === null) {\n throw new ImplementationError(\"FabricSensitive events need to have an object as data.\");\n }\n if (!(\"fabricIndex\" in data)) {\n throw new InternalError(\"FabricSensitive events requires fabricIndex in data.\");\n }\n return super.triggerEvent(data);\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"OperationalCredentialsServer.d.ts","sourceRoot":"","sources":["../../../../src/cluster/server/OperationalCredentialsServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,2EAA2E,CAAC;AAKhH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAkBrG,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAEzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AA8BhE,eAAO,MAAM,oCAAoC,EAAE,CAC/C,YAAY,EAAE,mBAAmB,CAAC,UAAU,EAC5C,kBAAkB,CAAC,EAAE,kBAAkB,KACtC,qBAAqB,CAAC,OAAO,sBAAsB,CAAC,OAAO,CA4b/D,CAAC"}
1
+ {"version":3,"file":"OperationalCredentialsServer.d.ts","sourceRoot":"","sources":["../../../../src/cluster/server/OperationalCredentialsServer.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,2EAA2E,CAAC;AAKhH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iEAAiE,CAAC;AAmBrG,OAAO,EAAE,sBAAsB,EAAE,MAAM,iDAAiD,CAAC;AAEzF,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AA8BhE,eAAO,MAAM,oCAAoC,EAAE,CAC/C,YAAY,EAAE,mBAAmB,CAAC,UAAU,EAC5C,kBAAkB,CAAC,EAAE,kBAAkB,KACtC,qBAAqB,CAAC,OAAO,sBAAsB,CAAC,OAAO,CAyd/D,CAAC"}
@@ -29,6 +29,7 @@ var import_FailsafeTimer = require("../../common/FailsafeTimer.js");
29
29
  var import_MatterError = require("../../common/MatterError.js");
30
30
  var import_TryCatchHandler = require("../../common/TryCatchHandler.js");
31
31
  var import_ValidationError = require("../../common/ValidationError.js");
32
+ var import_Crypto = require("../../crypto/Crypto.js");
32
33
  var import_FabricIndex = require("../../datatype/FabricIndex.js");
33
34
  var import_Fabric = require("../../fabric/Fabric.js");
34
35
  var import_FabricManager = require("../../fabric/FabricManager.js");
@@ -196,7 +197,7 @@ const OperationalCredentialsClusterHandler = (certificates, productDescription)
196
197
  statusCode: import_OperationalCredentialsCluster.OperationalCredentials.NodeOperationalCertStatus.TableFull,
197
198
  debugText: error.message
198
199
  };
199
- } else if (error instanceof import_CertificateManager.CertificateError || error instanceof import_ValidationError.ValidationError || error instanceof import_MatterError.UnexpectedDataError) {
200
+ } else if (error instanceof import_Crypto.CryptoVerifyError || error instanceof import_CertificateManager.CertificateError || error instanceof import_ValidationError.ValidationError || error instanceof import_MatterError.UnexpectedDataError) {
200
201
  return {
201
202
  statusCode: import_OperationalCredentialsCluster.OperationalCredentials.NodeOperationalCertStatus.InvalidNoc,
202
203
  debugText: error.message
@@ -279,10 +280,26 @@ const OperationalCredentialsClusterHandler = (certificates, productDescription)
279
280
  if (session === void 0 || !session.isSecure) return 0;
280
281
  return session.context.getFabrics().length;
281
282
  },
282
- trustedRootCertificatesAttributeGetter: ({ session, isFabricFiltered }) => {
283
- if (session === void 0 || !session.isSecure) return [];
284
- const fabrics = isFabricFiltered ? [session.associatedFabric] : session.context.getFabrics();
285
- return fabrics.map((fabric) => fabric.rootCert);
283
+ trustedRootCertificatesAttributeGetter: ({ session }) => {
284
+ if (session === void 0 || !session.isSecure) {
285
+ logger.debug(`trustedRootCertificatesAttributeGetter: session not set or not secure ${!!session}`);
286
+ return [];
287
+ }
288
+ if (!session.isSecure)
289
+ throw new import_MatterError.MatterFlowError("addOperationalCert should be called on a secure session.");
290
+ const rootCerts = session.context.getFabrics().map((fabric) => fabric.rootCert);
291
+ const device = session.context;
292
+ if (device.isFailsafeArmed()) {
293
+ const failsafeContext = device.failsafeContext;
294
+ const temporaryRootCert = failsafeContext.rootCert;
295
+ if (temporaryRootCert !== void 0) {
296
+ logger.debug(`Add temporary trusted root certificate to the list.`);
297
+ rootCerts.push(temporaryRootCert);
298
+ } else {
299
+ logger.debug(`No temporary trusted root certificate to be added.`);
300
+ }
301
+ }
302
+ return rootCerts;
286
303
  },
287
304
  currentFabricIndexAttributeGetter: ({ session }) => {
288
305
  if (session === void 0 || !session.isSecure) return import_FabricIndex.FabricIndex.NO_FABRIC;
@@ -338,7 +355,7 @@ const OperationalCredentialsClusterHandler = (certificates, productDescription)
338
355
  };
339
356
  } catch (error) {
340
357
  logger.info("building fabric for update failed", error);
341
- if (error instanceof import_CertificateManager.CertificateError || error instanceof import_ValidationError.ValidationError || error instanceof import_MatterError.UnexpectedDataError) {
358
+ if (error instanceof import_Crypto.CryptoVerifyError || error instanceof import_CertificateManager.CertificateError || error instanceof import_ValidationError.ValidationError || error instanceof import_MatterError.UnexpectedDataError) {
342
359
  return {
343
360
  statusCode: import_OperationalCredentialsCluster.OperationalCredentials.NodeOperationalCertStatus.InvalidNoc,
344
361
  debugText: error.message
@@ -401,7 +418,12 @@ const OperationalCredentialsClusterHandler = (certificates, productDescription)
401
418
  fabricIndex
402
419
  };
403
420
  },
404
- addTrustedRootCertificate: async ({ request: { rootCaCertificate }, session }) => {
421
+ addTrustedRootCertificate: async ({
422
+ request: { rootCaCertificate },
423
+ attributes: { trustedRootCertificates },
424
+ session
425
+ }) => {
426
+ (0, import_SecureSession.assertSecureSession)(session);
405
427
  const failsafeContext = session.context.failsafeContext;
406
428
  if (failsafeContext.hasRootCert) {
407
429
  throw new import_StatusCode.StatusResponseError(
@@ -419,11 +441,12 @@ const OperationalCredentialsClusterHandler = (certificates, productDescription)
419
441
  failsafeContext.setRootCert(rootCaCertificate);
420
442
  } catch (error) {
421
443
  logger.info("setting root certificate failed", error);
422
- if (error instanceof import_CertificateManager.CertificateError || error instanceof import_ValidationError.ValidationError || error instanceof import_MatterError.UnexpectedDataError) {
444
+ if (error instanceof import_Crypto.CryptoVerifyError || error instanceof import_CertificateManager.CertificateError || error instanceof import_ValidationError.ValidationError || error instanceof import_MatterError.UnexpectedDataError) {
423
445
  throw new import_StatusCode.StatusResponseError(error.message, import_StatusCode.StatusCode.InvalidCommand);
424
446
  }
425
447
  throw error;
426
448
  }
449
+ trustedRootCertificates.updated(session);
427
450
  }
428
451
  };
429
452
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/cluster/server/OperationalCredentialsServer.ts"],
4
- "sourcesContent": ["/**\n * @license\n * Copyright 2022-2024 Matter.js Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// TODO: Rename to NodeOperationalCredentialsServer to match with specs\n\nimport { DeviceCertification } from \"../../behavior/definitions/operational-credentials/DeviceCertification.js\";\nimport {\n TlvAttestation,\n TlvCertSigningRequest,\n} from \"../../behavior/definitions/operational-credentials/OperationalCredentialsTypes.js\";\nimport { ProductDescription } from \"../../behavior/system/product-description/ProductDescription.js\";\nimport { CertificateError } from \"../../certificate/CertificateManager.js\";\nimport { MatterFabricInvalidAdminSubjectError } from \"../../common/FailsafeContext.js\";\nimport { MatterFabricConflictError } from \"../../common/FailsafeTimer.js\";\nimport { MatterFlowError, UnexpectedDataError } from \"../../common/MatterError.js\";\nimport { tryCatch } from \"../../common/TryCatchHandler.js\";\nimport { ValidationError } from \"../../common/ValidationError.js\";\nimport { FabricIndex } from \"../../datatype/FabricIndex.js\";\nimport { PublicKeyError } from \"../../fabric/Fabric.js\";\nimport { FabricTableFullError } from \"../../fabric/FabricManager.js\";\nimport { Logger } from \"../../log/Logger.js\";\nimport { StatusCode, StatusResponseError } from \"../../protocol/interaction/StatusCode.js\";\nimport { NoAssociatedFabricError, assertSecureSession } from \"../../session/SecureSession.js\";\nimport { TlvBoolean } from \"../../tlv/TlvBoolean.js\";\nimport { TlvField, TlvObject, TlvOptionalField } from \"../../tlv/TlvObject.js\";\nimport { TlvByteString } from \"../../tlv/TlvString.js\";\nimport { AccessLevel, Command } from \"../Cluster.js\";\nimport { BasicInformation } from \"../definitions/BasicInformationCluster.js\";\nimport { OperationalCredentials } from \"../definitions/OperationalCredentialsCluster.js\";\nimport { AccessControl } from \"../definitions/index.js\";\nimport { ClusterServerHandlers } from \"./ClusterServerTypes.js\";\n\nconst logger = Logger.get(\"OperationalCredentialsServer\");\n\n/**\n * Monkey patching Tlv Structure of attestationRequest and csrRequest commands to prevent data validation of the nonce\n * fields to be handled as ConstraintError because we need to return a special error.\n * We do this to leave the model in fact for other validations and only apply the change for our Schema-aware Tlv parsing.\n */\nOperationalCredentials.Cluster.commands = {\n ...OperationalCredentials.Cluster.commands,\n attestationRequest: Command(\n 0x0,\n TlvObject({ attestationNonce: TlvField(0, TlvByteString) }),\n 0x1,\n OperationalCredentials.TlvAttestationResponse,\n { invokeAcl: AccessLevel.Administer },\n ),\n csrRequest: Command(\n 0x4,\n TlvObject({\n csrNonce: TlvField(0, TlvByteString),\n isForUpdateNoc: TlvOptionalField(1, TlvBoolean),\n }),\n 0x5,\n OperationalCredentials.TlvCsrResponse,\n { invokeAcl: AccessLevel.Administer },\n ),\n};\n\nexport const OperationalCredentialsClusterHandler: (\n certificates: DeviceCertification.Definition,\n productDescription?: ProductDescription,\n) => ClusterServerHandlers<typeof OperationalCredentials.Cluster> = (certificates, productDescription) => {\n let certification: DeviceCertification | undefined = undefined;\n const cert = () => {\n if (certification !== undefined) {\n return certification;\n }\n return (certification = new DeviceCertification(certificates, productDescription));\n };\n\n const assureCertification = async () => {\n if (!cert().construction.ready) {\n return cert().construction;\n }\n };\n\n return {\n attestationRequest: async ({ request: { attestationNonce }, session }) => {\n if (attestationNonce.length !== 32) {\n throw new StatusResponseError(\"Invalid attestation nonce length\", StatusCode.InvalidCommand);\n }\n assertSecureSession(session);\n await assureCertification();\n const elements = TlvAttestation.encode({\n declaration: cert().declaration,\n attestationNonce,\n timestamp: 0,\n });\n return { attestationElements: elements, attestationSignature: cert().sign(session, elements) };\n },\n\n csrRequest: async ({ request: { csrNonce, isForUpdateNoc }, session }) => {\n if (csrNonce.length !== 32) {\n throw new StatusResponseError(\"Invalid CSR nonce length\", StatusCode.InvalidCommand);\n }\n assertSecureSession(session);\n if (isForUpdateNoc && session.isPase) {\n throw new StatusResponseError(\n \"csrRequest for UpdateNoc received on a PASE session.\",\n StatusCode.InvalidCommand,\n );\n }\n const device = session.context;\n device.assertFailSafeArmed(\"csrRequest received while failsafe is not armed.\");\n\n const timedOp = device.failsafeContext;\n if (timedOp.fabricIndex !== undefined) {\n throw new StatusResponseError(\n `csrRequest received after ${timedOp.forUpdateNoc ? \"UpdateNOC\" : \"AddNOC\"} already invoked.`,\n StatusCode.ConstraintError,\n );\n }\n\n await assureCertification();\n\n const certSigningRequest = timedOp.createCertificateSigningRequest(isForUpdateNoc ?? false, session.id);\n const nocsrElements = TlvCertSigningRequest.encode({ certSigningRequest, csrNonce });\n return { nocsrElements, attestationSignature: cert().sign(session, nocsrElements) };\n },\n\n certificateChainRequest: async ({ request: { certificateType } }) => {\n await assureCertification();\n switch (certificateType) {\n case OperationalCredentials.CertificateChainType.DacCertificate:\n return { certificate: cert().certificate };\n case OperationalCredentials.CertificateChainType.PaiCertificate:\n return { certificate: cert().intermediateCertificate };\n default:\n throw new StatusResponseError(\n `Unsupported certificate type: ${certificateType}`,\n StatusCode.InvalidCommand,\n );\n }\n },\n\n addNoc: async ({\n request: { nocValue, icacValue, ipkValue, caseAdminSubject, adminVendorId },\n attributes: { nocs, commissionedFabrics, fabrics, trustedRootCertificates, supportedFabrics },\n session,\n endpoint,\n message,\n }) => {\n if (!session.isSecure)\n throw new MatterFlowError(\"addOperationalCert should be called on a secure session.\");\n\n const device = session.context;\n\n const failsafeContext = device.failsafeContext;\n\n if (failsafeContext.fabricIndex !== undefined) {\n throw new StatusResponseError(\n `addNoc received after ${failsafeContext.forUpdateNoc ? \"UpdateNOC\" : \"AddNOC\"} already invoked.`,\n StatusCode.ConstraintError,\n );\n }\n\n if (!failsafeContext.hasRootCert) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.InvalidNoc,\n debugText: \"Root certificate not found.\",\n };\n }\n\n if (failsafeContext.csrSessionId !== session.id) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.MissingCsr,\n debugText: \"CSR not found in failsafe context.\",\n };\n }\n\n if (failsafeContext.forUpdateNoc) {\n throw new StatusResponseError(\n `addNoc received after csr request was invoked for UpdateNOC.`,\n StatusCode.ConstraintError,\n );\n }\n\n if (device.getFabrics().length === supportedFabrics.getLocal()) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.TableFull,\n debugText: `No more fabrics can be added because limit ${supportedFabrics.getLocal()} reached.`,\n };\n }\n\n let fabric;\n try {\n fabric = await failsafeContext.buildFabric({\n nocValue,\n icacValue,\n adminVendorId,\n ipkValue,\n caseAdminSubject,\n });\n } catch (error) {\n logger.info(\"building fabric failed\", error);\n if (error instanceof MatterFabricConflictError) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.FabricConflict,\n debugText: error.message,\n };\n } else if (error instanceof FabricTableFullError) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.TableFull,\n debugText: error.message,\n };\n } else if (\n error instanceof CertificateError ||\n error instanceof ValidationError ||\n error instanceof UnexpectedDataError\n ) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.InvalidNoc,\n debugText: error.message,\n };\n } else if (error instanceof PublicKeyError) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.InvalidPublicKey,\n debugText: error.message,\n };\n } else if (error instanceof MatterFabricInvalidAdminSubjectError) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.InvalidAdminSubject,\n debugText: error.message,\n };\n }\n throw error;\n }\n await failsafeContext.addFabric(fabric);\n\n assertSecureSession(session);\n if (session.isPase) {\n logger.debug(`Add Fabric with index ${fabric.fabricIndex} to PASE session ${session.name}.`);\n session.addAssociatedFabric(fabric);\n }\n\n // Update connected attributes\n nocs.updated(session);\n commissionedFabrics.updated(session);\n fabrics.updated(session);\n trustedRootCertificates.updated(session);\n\n // The receiver SHALL create and add a new Access Control Entry using the CaseAdminSubject field to grant\n // subsequent Administer access to an Administrator member of the new Fabric.\n const aclServer = endpoint.getClusterServer(AccessControl.Cluster);\n if (aclServer !== undefined) {\n // Set is fabric filtered automatically, so we can set because this is a new fabric\n aclServer.attributes.acl.set(\n [\n {\n fabricIndex: fabric.fabricIndex,\n privilege: AccessControl.AccessControlEntryPrivilege.Administer,\n authMode: AccessControl.AccessControlEntryAuthMode.Case,\n subjects: [caseAdminSubject],\n targets: null, // entire node\n },\n ],\n session,\n message,\n false,\n true,\n );\n }\n\n // TODO The incoming IPKValue SHALL be stored in the Fabric-scoped slot within the Group Key Management cluster\n // (see KeySetWrite), for subsequent use during CASE.\n\n // TODO If the current secure session was established with PASE, the receiver SHALL:\n // a. Augment the secure session context with the FabricIndex generated above, such that subsequent interactions\n // have the proper accessing fabric.\n\n logger.info(`addNoc success, adminVendorId ${adminVendorId}, caseAdminSubject ${caseAdminSubject}`);\n\n return { statusCode: OperationalCredentials.NodeOperationalCertStatus.Ok, fabricIndex: fabric.fabricIndex };\n },\n\n fabricsAttributeGetter: ({ session, isFabricFiltered }) => {\n if (session === undefined || !session.isSecure) return []; // ???\n const fabrics = isFabricFiltered ? [session.associatedFabric] : session.context.getFabrics();\n\n return fabrics.map(fabric => ({\n fabricId: fabric.fabricId,\n label: fabric.label,\n nodeId: fabric.nodeId,\n rootPublicKey: fabric.rootPublicKey,\n vendorId: fabric.rootVendorId,\n fabricIndex: fabric.fabricIndex,\n }));\n },\n\n // Needed because FabricScopedAttributeServer clas requires both getter and setter if custom\n fabricsAttributeSetter: () => {\n throw new MatterFlowError(\"fabrics attribute is read-only.\");\n },\n\n nocsAttributeGetter: ({ session, isFabricFiltered }) => {\n if (session === undefined || !session.isSecure) return []; // ???\n const fabrics = isFabricFiltered ? [session.associatedFabric] : session.context.getFabrics();\n return fabrics.map(fabric => ({\n noc: fabric.operationalCert,\n icac: fabric.intermediateCACert ?? null,\n fabricIndex: fabric.fabricIndex,\n }));\n },\n\n // Needed because FabricScopedAttributeServer clas requires both getter and setter if custom\n nocsAttributeSetter: () => {\n throw new MatterFlowError(\"fabrics attribute is read-only.\");\n },\n\n commissionedFabricsAttributeGetter: ({ session }) => {\n if (session === undefined || !session.isSecure) return 0; // ???\n return session.context.getFabrics().length;\n },\n\n trustedRootCertificatesAttributeGetter: ({ session, isFabricFiltered }) => {\n if (session === undefined || !session.isSecure) return []; // ???\n const fabrics = isFabricFiltered ? [session.associatedFabric] : session.context.getFabrics();\n return fabrics.map(fabric => fabric.rootCert);\n },\n\n currentFabricIndexAttributeGetter: ({ session }) => {\n if (session === undefined || !session.isSecure) return FabricIndex.NO_FABRIC;\n assertSecureSession(session);\n return session.fabric?.fabricIndex ?? FabricIndex.NO_FABRIC;\n },\n\n updateNoc: async ({ request: { nocValue, icacValue }, attributes: { nocs, fabrics }, session }) => {\n assertSecureSession(session);\n\n tryCatch(\n () => session.associatedFabric,\n NoAssociatedFabricError,\n () => {\n throw new StatusResponseError(\"No associated fabric existing\", StatusCode.UnsupportedAccess);\n },\n );\n\n const device = session.context;\n\n const failsafeContext = device.failsafeContext;\n\n if (failsafeContext.fabricIndex !== undefined) {\n throw new StatusResponseError(\n `updateNoc received after ${failsafeContext.forUpdateNoc ? \"UpdateNOC\" : \"AddNOC\"} already invoked.`,\n StatusCode.ConstraintError,\n );\n }\n\n if (failsafeContext.forUpdateNoc) {\n throw new StatusResponseError(\n `addNoc received after csr request was invoked for UpdateNOC.`,\n StatusCode.ConstraintError,\n );\n }\n\n if (failsafeContext.hasRootCert) {\n throw new StatusResponseError(\n \"Trusted root certificate added in this session which is now allowed for UpdateNOC.\",\n StatusCode.ConstraintError,\n );\n }\n\n if (!failsafeContext.forUpdateNoc) {\n throw new StatusResponseError(\"csrRequest not invoked for UpdateNOC.\", StatusCode.ConstraintError);\n }\n\n if (session.associatedFabric.fabricIndex !== failsafeContext.associatedFabric?.fabricIndex) {\n throw new StatusResponseError(\n \"Fabric of this session and the failsafe context do not match.\",\n StatusCode.ConstraintError,\n );\n }\n\n try {\n // Build a new Fabric with the updated NOC and ICAC\n const updateFabric = await failsafeContext.buildUpdatedFabric(nocValue, icacValue);\n\n // update FabricManager and Resumption records but leave current session intact\n await failsafeContext.updateFabric(updateFabric);\n\n // Update connected attributes\n nocs.updated(session);\n fabrics.updated(session);\n\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.Ok,\n fabricIndex: updateFabric.fabricIndex,\n };\n } catch (error) {\n logger.info(\"building fabric for update failed\", error);\n if (\n error instanceof CertificateError ||\n error instanceof ValidationError ||\n error instanceof UnexpectedDataError\n ) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.InvalidNoc,\n debugText: error.message,\n };\n } else if (error instanceof PublicKeyError) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.InvalidPublicKey,\n debugText: error.message,\n };\n }\n throw error;\n }\n },\n\n updateFabricLabel: async ({ request: { label }, attributes: { fabrics }, session }) => {\n assertSecureSession(session, \"updateOperationalCert should be called on a secure session.\");\n\n const fabric = tryCatch(\n () => session.associatedFabric,\n NoAssociatedFabricError,\n () => {\n throw new StatusResponseError(\"No associated fabric existing\", StatusCode.UnsupportedAccess);\n },\n );\n\n const currentFabricIndex = fabric.fabricIndex;\n const device = session.context;\n const conflictingLabelFabric = device\n .getFabrics()\n .find(f => f.label === label && f.fabricIndex !== currentFabricIndex);\n if (conflictingLabelFabric !== undefined) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.LabelConflict,\n debugText: `Label ${label} already used by fabric ${conflictingLabelFabric.fabricIndex}`,\n };\n }\n\n await fabric.setLabel(label);\n\n fabrics.updated(session);\n\n return { statusCode: OperationalCredentials.NodeOperationalCertStatus.Ok, fabricIndex: fabric.fabricIndex };\n },\n\n removeFabric: async ({\n request: { fabricIndex },\n attributes: { nocs, commissionedFabrics, fabrics, trustedRootCertificates },\n session,\n endpoint,\n }) => {\n const device = session.context;\n\n const fabric = device.getFabricByIndex(fabricIndex);\n\n if (fabric === undefined) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.InvalidFabricIndex,\n debugText: `Fabric ${fabricIndex} not found`,\n };\n }\n\n const basicInformationCluster = endpoint.getClusterServer(BasicInformation.Cluster);\n basicInformationCluster?.triggerLeaveEvent?.({ fabricIndex });\n\n assertSecureSession(session);\n\n await fabric.remove(session.id);\n nocs.updated(session);\n commissionedFabrics.updated(session);\n fabrics.updated(session);\n trustedRootCertificates.updated(session);\n\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.Ok,\n fabricIndex,\n };\n },\n\n addTrustedRootCertificate: async ({ request: { rootCaCertificate }, session }) => {\n const failsafeContext = session.context.failsafeContext;\n\n if (failsafeContext.hasRootCert) {\n throw new StatusResponseError(\n \"Trusted root certificate already added in this FailSafe context.\",\n StatusCode.ConstraintError,\n );\n }\n\n if (failsafeContext.fabricIndex !== undefined) {\n throw new StatusResponseError(\n `Can not add trusted root certificates after ${failsafeContext.forUpdateNoc ? \"UpdateNOC\" : \"AddNOC\"}.`,\n StatusCode.ConstraintError,\n );\n }\n\n try {\n failsafeContext.setRootCert(rootCaCertificate);\n } catch (error) {\n logger.info(\"setting root certificate failed\", error);\n if (\n error instanceof CertificateError ||\n error instanceof ValidationError ||\n error instanceof UnexpectedDataError\n ) {\n throw new StatusResponseError(error.message, StatusCode.InvalidCommand);\n }\n throw error;\n }\n },\n };\n};\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * @license\n * Copyright 2022-2024 Matter.js Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\n// TODO: Rename to NodeOperationalCredentialsServer to match with specs\n\nimport { DeviceCertification } from \"../../behavior/definitions/operational-credentials/DeviceCertification.js\";\nimport {\n TlvAttestation,\n TlvCertSigningRequest,\n} from \"../../behavior/definitions/operational-credentials/OperationalCredentialsTypes.js\";\nimport { ProductDescription } from \"../../behavior/system/product-description/ProductDescription.js\";\nimport { CertificateError } from \"../../certificate/CertificateManager.js\";\nimport { MatterFabricInvalidAdminSubjectError } from \"../../common/FailsafeContext.js\";\nimport { MatterFabricConflictError } from \"../../common/FailsafeTimer.js\";\nimport { MatterFlowError, UnexpectedDataError } from \"../../common/MatterError.js\";\nimport { tryCatch } from \"../../common/TryCatchHandler.js\";\nimport { ValidationError } from \"../../common/ValidationError.js\";\nimport { CryptoVerifyError } from \"../../crypto/Crypto.js\";\nimport { FabricIndex } from \"../../datatype/FabricIndex.js\";\nimport { PublicKeyError } from \"../../fabric/Fabric.js\";\nimport { FabricTableFullError } from \"../../fabric/FabricManager.js\";\nimport { Logger } from \"../../log/Logger.js\";\nimport { StatusCode, StatusResponseError } from \"../../protocol/interaction/StatusCode.js\";\nimport { NoAssociatedFabricError, assertSecureSession } from \"../../session/SecureSession.js\";\nimport { TlvBoolean } from \"../../tlv/TlvBoolean.js\";\nimport { TlvField, TlvObject, TlvOptionalField } from \"../../tlv/TlvObject.js\";\nimport { TlvByteString } from \"../../tlv/TlvString.js\";\nimport { AccessLevel, Command } from \"../Cluster.js\";\nimport { BasicInformation } from \"../definitions/BasicInformationCluster.js\";\nimport { OperationalCredentials } from \"../definitions/OperationalCredentialsCluster.js\";\nimport { AccessControl } from \"../definitions/index.js\";\nimport { ClusterServerHandlers } from \"./ClusterServerTypes.js\";\n\nconst logger = Logger.get(\"OperationalCredentialsServer\");\n\n/**\n * Monkey patching Tlv Structure of attestationRequest and csrRequest commands to prevent data validation of the nonce\n * fields to be handled as ConstraintError because we need to return a special error.\n * We do this to leave the model in fact for other validations and only apply the change for our Schema-aware Tlv parsing.\n */\nOperationalCredentials.Cluster.commands = {\n ...OperationalCredentials.Cluster.commands,\n attestationRequest: Command(\n 0x0,\n TlvObject({ attestationNonce: TlvField(0, TlvByteString) }),\n 0x1,\n OperationalCredentials.TlvAttestationResponse,\n { invokeAcl: AccessLevel.Administer },\n ),\n csrRequest: Command(\n 0x4,\n TlvObject({\n csrNonce: TlvField(0, TlvByteString),\n isForUpdateNoc: TlvOptionalField(1, TlvBoolean),\n }),\n 0x5,\n OperationalCredentials.TlvCsrResponse,\n { invokeAcl: AccessLevel.Administer },\n ),\n};\n\nexport const OperationalCredentialsClusterHandler: (\n certificates: DeviceCertification.Definition,\n productDescription?: ProductDescription,\n) => ClusterServerHandlers<typeof OperationalCredentials.Cluster> = (certificates, productDescription) => {\n let certification: DeviceCertification | undefined = undefined;\n const cert = () => {\n if (certification !== undefined) {\n return certification;\n }\n return (certification = new DeviceCertification(certificates, productDescription));\n };\n\n const assureCertification = async () => {\n if (!cert().construction.ready) {\n return cert().construction;\n }\n };\n\n return {\n attestationRequest: async ({ request: { attestationNonce }, session }) => {\n if (attestationNonce.length !== 32) {\n throw new StatusResponseError(\"Invalid attestation nonce length\", StatusCode.InvalidCommand);\n }\n assertSecureSession(session);\n await assureCertification();\n const elements = TlvAttestation.encode({\n declaration: cert().declaration,\n attestationNonce,\n timestamp: 0,\n });\n return { attestationElements: elements, attestationSignature: cert().sign(session, elements) };\n },\n\n csrRequest: async ({ request: { csrNonce, isForUpdateNoc }, session }) => {\n if (csrNonce.length !== 32) {\n throw new StatusResponseError(\"Invalid CSR nonce length\", StatusCode.InvalidCommand);\n }\n assertSecureSession(session);\n if (isForUpdateNoc && session.isPase) {\n throw new StatusResponseError(\n \"csrRequest for UpdateNoc received on a PASE session.\",\n StatusCode.InvalidCommand,\n );\n }\n const device = session.context;\n device.assertFailSafeArmed(\"csrRequest received while failsafe is not armed.\");\n\n const timedOp = device.failsafeContext;\n if (timedOp.fabricIndex !== undefined) {\n throw new StatusResponseError(\n `csrRequest received after ${timedOp.forUpdateNoc ? \"UpdateNOC\" : \"AddNOC\"} already invoked.`,\n StatusCode.ConstraintError,\n );\n }\n\n await assureCertification();\n\n const certSigningRequest = timedOp.createCertificateSigningRequest(isForUpdateNoc ?? false, session.id);\n const nocsrElements = TlvCertSigningRequest.encode({ certSigningRequest, csrNonce });\n return { nocsrElements, attestationSignature: cert().sign(session, nocsrElements) };\n },\n\n certificateChainRequest: async ({ request: { certificateType } }) => {\n await assureCertification();\n switch (certificateType) {\n case OperationalCredentials.CertificateChainType.DacCertificate:\n return { certificate: cert().certificate };\n case OperationalCredentials.CertificateChainType.PaiCertificate:\n return { certificate: cert().intermediateCertificate };\n default:\n throw new StatusResponseError(\n `Unsupported certificate type: ${certificateType}`,\n StatusCode.InvalidCommand,\n );\n }\n },\n\n addNoc: async ({\n request: { nocValue, icacValue, ipkValue, caseAdminSubject, adminVendorId },\n attributes: { nocs, commissionedFabrics, fabrics, trustedRootCertificates, supportedFabrics },\n session,\n endpoint,\n message,\n }) => {\n if (!session.isSecure)\n throw new MatterFlowError(\"addOperationalCert should be called on a secure session.\");\n\n const device = session.context;\n\n const failsafeContext = device.failsafeContext;\n\n if (failsafeContext.fabricIndex !== undefined) {\n throw new StatusResponseError(\n `addNoc received after ${failsafeContext.forUpdateNoc ? \"UpdateNOC\" : \"AddNOC\"} already invoked.`,\n StatusCode.ConstraintError,\n );\n }\n\n if (!failsafeContext.hasRootCert) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.InvalidNoc,\n debugText: \"Root certificate not found.\",\n };\n }\n\n if (failsafeContext.csrSessionId !== session.id) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.MissingCsr,\n debugText: \"CSR not found in failsafe context.\",\n };\n }\n\n if (failsafeContext.forUpdateNoc) {\n throw new StatusResponseError(\n `addNoc received after csr request was invoked for UpdateNOC.`,\n StatusCode.ConstraintError,\n );\n }\n\n if (device.getFabrics().length === supportedFabrics.getLocal()) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.TableFull,\n debugText: `No more fabrics can be added because limit ${supportedFabrics.getLocal()} reached.`,\n };\n }\n\n let fabric;\n try {\n fabric = await failsafeContext.buildFabric({\n nocValue,\n icacValue,\n adminVendorId,\n ipkValue,\n caseAdminSubject,\n });\n } catch (error) {\n logger.info(\"building fabric failed\", error);\n if (error instanceof MatterFabricConflictError) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.FabricConflict,\n debugText: error.message,\n };\n } else if (error instanceof FabricTableFullError) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.TableFull,\n debugText: error.message,\n };\n } else if (\n error instanceof CryptoVerifyError ||\n error instanceof CertificateError ||\n error instanceof ValidationError ||\n error instanceof UnexpectedDataError\n ) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.InvalidNoc,\n debugText: error.message,\n };\n } else if (error instanceof PublicKeyError) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.InvalidPublicKey,\n debugText: error.message,\n };\n } else if (error instanceof MatterFabricInvalidAdminSubjectError) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.InvalidAdminSubject,\n debugText: error.message,\n };\n }\n throw error;\n }\n await failsafeContext.addFabric(fabric);\n\n assertSecureSession(session);\n if (session.isPase) {\n logger.debug(`Add Fabric with index ${fabric.fabricIndex} to PASE session ${session.name}.`);\n session.addAssociatedFabric(fabric);\n }\n\n // Update connected attributes\n nocs.updated(session);\n commissionedFabrics.updated(session);\n fabrics.updated(session);\n trustedRootCertificates.updated(session);\n\n // The receiver SHALL create and add a new Access Control Entry using the CaseAdminSubject field to grant\n // subsequent Administer access to an Administrator member of the new Fabric.\n const aclServer = endpoint.getClusterServer(AccessControl.Cluster);\n if (aclServer !== undefined) {\n // Set is fabric filtered automatically, so we can set because this is a new fabric\n aclServer.attributes.acl.set(\n [\n {\n fabricIndex: fabric.fabricIndex,\n privilege: AccessControl.AccessControlEntryPrivilege.Administer,\n authMode: AccessControl.AccessControlEntryAuthMode.Case,\n subjects: [caseAdminSubject],\n targets: null, // entire node\n },\n ],\n session,\n message,\n false,\n true,\n );\n }\n\n // TODO The incoming IPKValue SHALL be stored in the Fabric-scoped slot within the Group Key Management cluster\n // (see KeySetWrite), for subsequent use during CASE.\n\n // TODO If the current secure session was established with PASE, the receiver SHALL:\n // a. Augment the secure session context with the FabricIndex generated above, such that subsequent interactions\n // have the proper accessing fabric.\n\n logger.info(`addNoc success, adminVendorId ${adminVendorId}, caseAdminSubject ${caseAdminSubject}`);\n\n return { statusCode: OperationalCredentials.NodeOperationalCertStatus.Ok, fabricIndex: fabric.fabricIndex };\n },\n\n fabricsAttributeGetter: ({ session, isFabricFiltered }) => {\n if (session === undefined || !session.isSecure) return []; // ???\n const fabrics = isFabricFiltered ? [session.associatedFabric] : session.context.getFabrics();\n\n return fabrics.map(fabric => ({\n fabricId: fabric.fabricId,\n label: fabric.label,\n nodeId: fabric.nodeId,\n rootPublicKey: fabric.rootPublicKey,\n vendorId: fabric.rootVendorId,\n fabricIndex: fabric.fabricIndex,\n }));\n },\n\n // Needed because FabricScopedAttributeServer clas requires both getter and setter if custom\n fabricsAttributeSetter: () => {\n throw new MatterFlowError(\"fabrics attribute is read-only.\");\n },\n\n nocsAttributeGetter: ({ session, isFabricFiltered }) => {\n if (session === undefined || !session.isSecure) return []; // ???\n const fabrics = isFabricFiltered ? [session.associatedFabric] : session.context.getFabrics();\n return fabrics.map(fabric => ({\n noc: fabric.operationalCert,\n icac: fabric.intermediateCACert ?? null,\n fabricIndex: fabric.fabricIndex,\n }));\n },\n\n // Needed because FabricScopedAttributeServer clas requires both getter and setter if custom\n nocsAttributeSetter: () => {\n throw new MatterFlowError(\"fabrics attribute is read-only.\");\n },\n\n commissionedFabricsAttributeGetter: ({ session }) => {\n if (session === undefined || !session.isSecure) return 0; // ???\n return session.context.getFabrics().length;\n },\n\n trustedRootCertificatesAttributeGetter: ({ session }) => {\n if (session === undefined || !session.isSecure) {\n logger.debug(`trustedRootCertificatesAttributeGetter: session not set or not secure ${!!session}`);\n return [];\n } // ???\n if (!session.isSecure)\n throw new MatterFlowError(\"addOperationalCert should be called on a secure session.\");\n\n const rootCerts = session.context.getFabrics().map(fabric => fabric.rootCert);\n\n const device = session.context;\n if (device.isFailsafeArmed()) {\n const failsafeContext = device.failsafeContext;\n const temporaryRootCert = failsafeContext.rootCert;\n if (temporaryRootCert !== undefined) {\n logger.debug(`Add temporary trusted root certificate to the list.`);\n rootCerts.push(temporaryRootCert);\n } else {\n logger.debug(`No temporary trusted root certificate to be added.`);\n }\n }\n return rootCerts;\n },\n\n currentFabricIndexAttributeGetter: ({ session }) => {\n if (session === undefined || !session.isSecure) return FabricIndex.NO_FABRIC;\n assertSecureSession(session);\n return session.fabric?.fabricIndex ?? FabricIndex.NO_FABRIC;\n },\n\n updateNoc: async ({ request: { nocValue, icacValue }, attributes: { nocs, fabrics }, session }) => {\n assertSecureSession(session);\n\n tryCatch(\n () => session.associatedFabric,\n NoAssociatedFabricError,\n () => {\n throw new StatusResponseError(\"No associated fabric existing\", StatusCode.UnsupportedAccess);\n },\n );\n\n const device = session.context;\n\n const failsafeContext = device.failsafeContext;\n\n if (failsafeContext.fabricIndex !== undefined) {\n throw new StatusResponseError(\n `updateNoc received after ${failsafeContext.forUpdateNoc ? \"UpdateNOC\" : \"AddNOC\"} already invoked.`,\n StatusCode.ConstraintError,\n );\n }\n\n if (failsafeContext.forUpdateNoc) {\n throw new StatusResponseError(\n `addNoc received after csr request was invoked for UpdateNOC.`,\n StatusCode.ConstraintError,\n );\n }\n\n if (failsafeContext.hasRootCert) {\n throw new StatusResponseError(\n \"Trusted root certificate added in this session which is now allowed for UpdateNOC.\",\n StatusCode.ConstraintError,\n );\n }\n\n if (!failsafeContext.forUpdateNoc) {\n throw new StatusResponseError(\"csrRequest not invoked for UpdateNOC.\", StatusCode.ConstraintError);\n }\n\n if (session.associatedFabric.fabricIndex !== failsafeContext.associatedFabric?.fabricIndex) {\n throw new StatusResponseError(\n \"Fabric of this session and the failsafe context do not match.\",\n StatusCode.ConstraintError,\n );\n }\n\n try {\n // Build a new Fabric with the updated NOC and ICAC\n const updateFabric = await failsafeContext.buildUpdatedFabric(nocValue, icacValue);\n\n // update FabricManager and Resumption records but leave current session intact\n await failsafeContext.updateFabric(updateFabric);\n\n // Update connected attributes\n nocs.updated(session);\n fabrics.updated(session);\n\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.Ok,\n fabricIndex: updateFabric.fabricIndex,\n };\n } catch (error) {\n logger.info(\"building fabric for update failed\", error);\n if (\n error instanceof CryptoVerifyError ||\n error instanceof CertificateError ||\n error instanceof ValidationError ||\n error instanceof UnexpectedDataError\n ) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.InvalidNoc,\n debugText: error.message,\n };\n } else if (error instanceof PublicKeyError) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.InvalidPublicKey,\n debugText: error.message,\n };\n }\n throw error;\n }\n },\n\n updateFabricLabel: async ({ request: { label }, attributes: { fabrics }, session }) => {\n assertSecureSession(session, \"updateOperationalCert should be called on a secure session.\");\n\n const fabric = tryCatch(\n () => session.associatedFabric,\n NoAssociatedFabricError,\n () => {\n throw new StatusResponseError(\"No associated fabric existing\", StatusCode.UnsupportedAccess);\n },\n );\n\n const currentFabricIndex = fabric.fabricIndex;\n const device = session.context;\n const conflictingLabelFabric = device\n .getFabrics()\n .find(f => f.label === label && f.fabricIndex !== currentFabricIndex);\n if (conflictingLabelFabric !== undefined) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.LabelConflict,\n debugText: `Label ${label} already used by fabric ${conflictingLabelFabric.fabricIndex}`,\n };\n }\n\n await fabric.setLabel(label);\n\n fabrics.updated(session);\n\n return { statusCode: OperationalCredentials.NodeOperationalCertStatus.Ok, fabricIndex: fabric.fabricIndex };\n },\n\n removeFabric: async ({\n request: { fabricIndex },\n attributes: { nocs, commissionedFabrics, fabrics, trustedRootCertificates },\n session,\n endpoint,\n }) => {\n const device = session.context;\n\n const fabric = device.getFabricByIndex(fabricIndex);\n\n if (fabric === undefined) {\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.InvalidFabricIndex,\n debugText: `Fabric ${fabricIndex} not found`,\n };\n }\n\n const basicInformationCluster = endpoint.getClusterServer(BasicInformation.Cluster);\n basicInformationCluster?.triggerLeaveEvent?.({ fabricIndex });\n\n assertSecureSession(session);\n\n await fabric.remove(session.id);\n nocs.updated(session);\n commissionedFabrics.updated(session);\n fabrics.updated(session);\n trustedRootCertificates.updated(session);\n\n return {\n statusCode: OperationalCredentials.NodeOperationalCertStatus.Ok,\n fabricIndex,\n };\n },\n\n addTrustedRootCertificate: async ({\n request: { rootCaCertificate },\n attributes: { trustedRootCertificates },\n session,\n }) => {\n assertSecureSession(session);\n\n const failsafeContext = session.context.failsafeContext;\n\n if (failsafeContext.hasRootCert) {\n throw new StatusResponseError(\n \"Trusted root certificate already added in this FailSafe context.\",\n StatusCode.ConstraintError,\n );\n }\n\n if (failsafeContext.fabricIndex !== undefined) {\n throw new StatusResponseError(\n `Can not add trusted root certificates after ${failsafeContext.forUpdateNoc ? \"UpdateNOC\" : \"AddNOC\"}.`,\n StatusCode.ConstraintError,\n );\n }\n\n try {\n failsafeContext.setRootCert(rootCaCertificate);\n } catch (error) {\n logger.info(\"setting root certificate failed\", error);\n if (\n error instanceof CryptoVerifyError ||\n error instanceof CertificateError ||\n error instanceof ValidationError ||\n error instanceof UnexpectedDataError\n ) {\n throw new StatusResponseError(error.message, StatusCode.InvalidCommand);\n }\n throw error;\n }\n\n trustedRootCertificates.updated(session);\n },\n };\n};\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }