@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,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/protocol/interaction/InteractionMessenger.ts"],
4
- "sourcesContent": ["/**\n * @license\n * Copyright 2022-2024 Matter.js Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { MatterController } from \"../../MatterController.js\";\nimport { MatterDevice } from \"../../MatterDevice.js\";\nimport { Message, SessionType } from \"../../codec/MessageCodec.js\";\nimport {\n ImplementationError,\n MatterFlowError,\n NotImplementedError,\n UnexpectedDataError,\n} from \"../../common/MatterError.js\";\nimport { tryCatchAsync } from \"../../common/TryCatchHandler.js\";\nimport { Logger } from \"../../log/Logger.js\";\nimport { ExchangeProvider } from \"../../protocol/ExchangeManager.js\";\nimport {\n ExchangeSendOptions,\n MessageExchange,\n RetransmissionLimitReachedError,\n UnexpectedMessageError,\n} from \"../../protocol/MessageExchange.js\";\nimport { TlvAny } from \"../../tlv/TlvAny.js\";\nimport { TlvSchema, TypeFromSchema } from \"../../tlv/TlvSchema.js\";\nimport { ByteArray } from \"../../util/ByteArray.js\";\nimport {\n DataReportPayload,\n canAttributePayloadBeChunked,\n chunkAttributePayload,\n encodeAttributePayload,\n encodeEventPayload,\n} from \"./AttributeDataEncoder.js\";\nimport {\n TlvAttributeReport,\n TlvDataReport,\n TlvDataReportForSend,\n TlvEventReport,\n TlvInvokeRequest,\n TlvInvokeResponse,\n TlvReadRequest,\n TlvStatusResponse,\n TlvSubscribeRequest,\n TlvSubscribeResponse,\n TlvTimedRequest,\n TlvWriteRequest,\n TlvWriteResponse,\n} from \"./InteractionProtocol.js\";\nimport { INTERACTION_MODEL_REVISION } from \"./InteractionServer.js\";\nimport { StatusCode, StatusResponseError } from \"./StatusCode.js\";\n\nexport enum MessageType {\n StatusResponse = 0x01,\n ReadRequest = 0x02,\n SubscribeRequest = 0x03,\n SubscribeResponse = 0x04,\n ReportData = 0x05,\n WriteRequest = 0x06,\n WriteResponse = 0x07,\n InvokeCommandRequest = 0x08,\n InvokeCommandResponse = 0x09,\n TimedRequest = 0x0a,\n}\n\nexport type ReadRequest = TypeFromSchema<typeof TlvReadRequest>;\nexport type DataReport = TypeFromSchema<typeof TlvDataReport>;\nexport type SubscribeRequest = TypeFromSchema<typeof TlvSubscribeRequest>;\nexport type SubscribeResponse = TypeFromSchema<typeof TlvSubscribeResponse>;\nexport type InvokeRequest = TypeFromSchema<typeof TlvInvokeRequest>;\nexport type InvokeResponse = TypeFromSchema<typeof TlvInvokeResponse>;\nexport type TimedRequest = TypeFromSchema<typeof TlvTimedRequest>;\nexport type WriteRequest = TypeFromSchema<typeof TlvWriteRequest>;\nexport type WriteResponse = TypeFromSchema<typeof TlvWriteResponse>;\n\nconst MAX_SPDU_LENGTH = 1024;\n\nconst logger = Logger.get(\"InteractionMessenger\");\n\nclass InteractionMessenger<ContextT> {\n constructor(protected exchange: MessageExchange<ContextT>) {}\n\n async send(messageType: number, payload: ByteArray, options?: ExchangeSendOptions) {\n return this.exchange.send(messageType, payload, options);\n }\n\n sendStatus(status: StatusCode) {\n return this.send(\n MessageType.StatusResponse,\n TlvStatusResponse.encode({ status, interactionModelRevision: INTERACTION_MODEL_REVISION }),\n );\n }\n\n async waitForSuccess() {\n // If the status is not Success, this would throw an Error.\n await this.nextMessage(MessageType.StatusResponse);\n }\n\n async nextMessage(expectedMessageType?: number) {\n const message = await this.exchange.nextMessage();\n const messageType = message.payloadHeader.messageType;\n this.throwIfErrorStatusMessage(message);\n if (expectedMessageType !== undefined && messageType !== expectedMessageType) {\n throw new UnexpectedDataError(\n `Received unexpected message type: ${messageType}, expected: ${expectedMessageType}`,\n );\n }\n return message;\n }\n\n async close() {\n await this.exchange.close();\n }\n\n protected throwIfErrorStatusMessage(message: Message) {\n const {\n payloadHeader: { messageType },\n payload,\n } = message;\n\n if (messageType !== MessageType.StatusResponse) return;\n const { status } = TlvStatusResponse.decode(payload);\n if (status !== StatusCode.Success) throw new StatusResponseError(`Received error status: ${status}`, status);\n }\n\n getExchangeChannelName() {\n return this.exchange.channel.name;\n }\n}\n\nexport interface InteractionRecipient {\n handleReadRequest(\n exchange: MessageExchange<MatterDevice>,\n request: ReadRequest,\n message: Message,\n ): Promise<DataReport>;\n handleWriteRequest(\n exchange: MessageExchange<MatterDevice>,\n request: WriteRequest,\n message: Message,\n ): Promise<WriteResponse>;\n handleSubscribeRequest(\n exchange: MessageExchange<MatterDevice>,\n request: SubscribeRequest,\n messenger: InteractionServerMessenger,\n message: Message,\n ): Promise<void>;\n handleInvokeRequest(\n exchange: MessageExchange<MatterDevice>,\n request: InvokeRequest,\n message: Message,\n ): Promise<InvokeResponse>;\n handleTimedRequest(exchange: MessageExchange<MatterDevice>, request: TimedRequest, message: Message): void;\n}\n\nexport class InteractionServerMessenger extends InteractionMessenger<MatterDevice> {\n async handleRequest(recipient: InteractionRecipient) {\n let continueExchange = true; // are more messages expected in this \"transaction\"?\n try {\n while (continueExchange) {\n const message = await this.exchange.nextMessage();\n const isGroupSession = message.packetHeader.sessionType === SessionType.Group;\n continueExchange = false;\n switch (message.payloadHeader.messageType) {\n case MessageType.ReadRequest: {\n const readRequest = TlvReadRequest.decode(message.payload);\n await this.sendDataReport(\n await recipient.handleReadRequest(this.exchange, readRequest, message),\n );\n break;\n }\n case MessageType.WriteRequest: {\n const writeRequest = TlvWriteRequest.decode(message.payload);\n const { suppressResponse } = writeRequest;\n const writeResponse = await recipient.handleWriteRequest(this.exchange, writeRequest, message);\n if (!suppressResponse && !isGroupSession) {\n await this.send(MessageType.WriteResponse, TlvWriteResponse.encode(writeResponse));\n }\n break;\n }\n case MessageType.SubscribeRequest: {\n const subscribeRequest = TlvSubscribeRequest.decode(message.payload);\n await recipient.handleSubscribeRequest(this.exchange, subscribeRequest, this, message);\n // response is sent by handler\n break;\n }\n case MessageType.InvokeCommandRequest: {\n const invokeRequest = TlvInvokeRequest.decode(message.payload);\n const { suppressResponse } = invokeRequest;\n const invokeResponse = await recipient.handleInvokeRequest(\n this.exchange,\n invokeRequest,\n message,\n );\n if (!suppressResponse && !isGroupSession) {\n await this.send(\n MessageType.InvokeCommandResponse,\n TlvInvokeResponse.encode(invokeResponse),\n );\n }\n // TODO Also invoke could need continueExchange depending on requirements\n break;\n }\n case MessageType.TimedRequest: {\n const timedRequest = TlvTimedRequest.decode(message.payload);\n recipient.handleTimedRequest(this.exchange, timedRequest, message);\n await this.sendStatus(StatusCode.Success);\n continueExchange = true;\n break;\n }\n default:\n throw new NotImplementedError(`Unsupported message type ${message.payloadHeader.messageType}`);\n }\n }\n } catch (error: any) {\n if (error instanceof StatusResponseError) {\n logger.info(`Sending status response ${error.code} for interaction error: ${error.message}`);\n await this.sendStatus(error.code);\n } else {\n logger.error(error);\n await this.sendStatus(StatusCode.Failure);\n }\n } finally {\n await this.exchange.close();\n }\n }\n\n /**\n * Handle DataReportPayload with the content of a DataReport to send, split them into multiple DataReport\n * messages and send them out based on the size.\n */\n async sendDataReport(dataReportPayload: DataReportPayload) {\n const {\n subscriptionId,\n attributeReportsPayload,\n eventReportsPayload,\n suppressResponse,\n interactionModelRevision,\n } = dataReportPayload;\n const dataReport: TypeFromSchema<typeof TlvDataReportForSend> = {\n subscriptionId,\n suppressResponse,\n interactionModelRevision,\n attributeReports: undefined,\n eventReports: undefined,\n };\n\n if (attributeReportsPayload !== undefined || eventReportsPayload !== undefined) {\n const attributeReportsToSend = [...(attributeReportsPayload ?? [])];\n const eventReportsToSend = [...(eventReportsPayload ?? [])];\n\n dataReport.moreChunkedMessages = true; // Assume we have multiple chunks, also for size calculation\n const emptyDataReportBytes = TlvDataReportForSend.encode(dataReport);\n\n let firstAttributeAddedToReportMessage = false;\n let firstEventAddedToReportMessage = false;\n const sendAndResetReport = async () => {\n await this.sendDataReportMessage(dataReport);\n dataReport.attributeReports = undefined;\n dataReport.eventReports = undefined;\n messageSize = emptyDataReportBytes.length;\n firstAttributeAddedToReportMessage = false;\n firstEventAddedToReportMessage = false;\n };\n\n let messageSize = emptyDataReportBytes.length;\n while (true) {\n if (attributeReportsToSend.length > 0) {\n const attributeReport = attributeReportsToSend.shift();\n if (attributeReport !== undefined) {\n if (!firstAttributeAddedToReportMessage) {\n firstAttributeAddedToReportMessage = true;\n messageSize += 3; // Array element is added now which needs 3 bytes\n }\n const encodedAttribute = encodeAttributePayload(attributeReport);\n const attributeReportBytes = TlvAny.getEncodedByteLength(encodedAttribute);\n if (messageSize + attributeReportBytes > MAX_SPDU_LENGTH) {\n if (canAttributePayloadBeChunked(attributeReport)) {\n // Attribute is a non-empty array: chunk it and add the chunks to the beginning of the queue\n attributeReportsToSend.unshift(...chunkAttributePayload(attributeReport));\n continue;\n }\n await sendAndResetReport();\n }\n messageSize += attributeReportBytes;\n if (dataReport.attributeReports === undefined) dataReport.attributeReports = [];\n dataReport.attributeReports.push(encodedAttribute);\n }\n } else if (eventReportsToSend.length > 0) {\n const eventReport = eventReportsToSend.shift();\n if (eventReport === undefined) {\n // No more chunks to send\n dataReport.moreChunkedMessages = undefined;\n break;\n }\n if (!firstEventAddedToReportMessage) {\n firstEventAddedToReportMessage = true;\n messageSize += 3; // Array element is added now which needs 3 bytes\n }\n const encodedEvent = encodeEventPayload(eventReport);\n const eventReportBytes = TlvAny.getEncodedByteLength(encodedEvent);\n if (messageSize + eventReportBytes > MAX_SPDU_LENGTH) {\n await sendAndResetReport();\n }\n messageSize += eventReportBytes;\n if (dataReport.eventReports === undefined) dataReport.eventReports = [];\n dataReport.eventReports.push(encodedEvent);\n } else {\n // No more chunks to send\n dataReport.moreChunkedMessages = undefined;\n break;\n }\n }\n }\n\n await this.sendDataReportMessage(dataReport);\n }\n\n async sendDataReportMessage(dataReport: TypeFromSchema<typeof TlvDataReportForSend>) {\n const encodedMessage = TlvDataReportForSend.encode(dataReport);\n if (encodedMessage.length > MAX_SPDU_LENGTH) {\n throw new MatterFlowError(\n `DataReport is too long to fit in a single chunk, This should not happen! Data: ${Logger.toJSON(\n dataReport,\n )}`,\n );\n }\n logger.debug(\n `Sending DataReport chunk with ${dataReport.attributeReports?.length ?? 0} attributes and ${\n dataReport.eventReports?.length ?? 0\n } events: ${encodedMessage.length} bytes`,\n );\n\n if (dataReport.suppressResponse) {\n // We do not expect a response other than a Standalone Ack, so if we receive anything else, we throw an error\n await tryCatchAsync(\n async () =>\n await this.exchange.send(MessageType.ReportData, encodedMessage, {\n expectAckOnly: true,\n }),\n UnexpectedMessageError,\n async error => {\n const { receivedMessage } = error;\n this.throwIfErrorStatusMessage(receivedMessage);\n },\n );\n } else {\n await this.exchange.send(MessageType.ReportData, encodedMessage);\n await this.waitForSuccess();\n }\n }\n}\n\nexport class IncomingInteractionClientMessenger extends InteractionMessenger<MatterController> {\n async readDataReport(): Promise<DataReport> {\n let subscriptionId: number | undefined;\n const attributeValues: TypeFromSchema<typeof TlvAttributeReport>[] = [];\n const eventValues: TypeFromSchema<typeof TlvEventReport>[] = [];\n\n while (true) {\n const dataReportMessage = await this.exchange.waitFor(MessageType.ReportData);\n const report = TlvDataReport.decode(dataReportMessage.payload);\n if (subscriptionId === undefined && report.subscriptionId !== undefined) {\n subscriptionId = report.subscriptionId;\n } else if (\n (subscriptionId !== undefined || report.subscriptionId !== undefined) &&\n report.subscriptionId !== subscriptionId\n ) {\n throw new UnexpectedDataError(`Invalid subscription ID ${report.subscriptionId} received`);\n }\n\n if (Array.isArray(report.attributeReports) && report.attributeReports.length > 0) {\n attributeValues.push(...report.attributeReports);\n }\n if (Array.isArray(report.eventReports) && report.eventReports.length > 0) {\n eventValues.push(...report.eventReports);\n }\n if (!report.moreChunkedMessages) {\n report.attributeReports = attributeValues;\n report.eventReports = eventValues;\n return report;\n }\n\n await this.sendStatus(StatusCode.Success);\n }\n }\n}\n\nexport class InteractionClientMessenger extends IncomingInteractionClientMessenger {\n constructor(private readonly exchangeProvider: ExchangeProvider) {\n super(exchangeProvider.initiateExchange());\n }\n\n /** Implements a send method with an automatic reconnection mechanism */\n override async send(messageType: number, payload: ByteArray, options?: ExchangeSendOptions) {\n if (this.exchange.channel.closed) {\n throw new ImplementationError(\"The exchange channel is closed. Please connect the device first.\");\n }\n try {\n return await this.exchange.send(messageType, payload, options);\n } catch (error) {\n // When retransmission failed (most likely due to a lost connection or invalid session),\n // try to reconnect if possible and resend the message once\n if (error instanceof RetransmissionLimitReachedError) {\n await this.exchange.close();\n if (await this.exchangeProvider.reconnectChannel()) {\n this.exchange = this.exchangeProvider.initiateExchange();\n return await this.exchange.send(messageType, payload);\n }\n }\n throw error;\n }\n }\n\n sendReadRequest(readRequest: ReadRequest) {\n return this.request(\n MessageType.ReadRequest,\n TlvReadRequest,\n MessageType.ReportData,\n TlvDataReport,\n readRequest,\n );\n }\n\n async sendSubscribeRequest(subscribeRequest: SubscribeRequest) {\n await this.send(MessageType.SubscribeRequest, TlvSubscribeRequest.encode(subscribeRequest));\n\n const report = await this.readDataReport();\n const { subscriptionId } = report;\n\n if (subscriptionId === undefined) {\n throw new UnexpectedDataError(`Subscription ID not provided in report`);\n }\n\n await this.sendStatus(StatusCode.Success);\n\n const subscribeResponseMessage = await this.nextMessage(MessageType.SubscribeResponse);\n const subscribeResponse = TlvSubscribeResponse.decode(subscribeResponseMessage.payload);\n\n if (subscribeResponse.subscriptionId !== subscriptionId) {\n throw new MatterFlowError(\n `Received subscription ID ${subscribeResponse.subscriptionId} instead of ${subscriptionId}`,\n );\n }\n\n return {\n subscribeResponse,\n report,\n };\n }\n\n async sendInvokeCommand(invokeRequest: InvokeRequest, minimumResponseTimeoutMs?: number) {\n if (invokeRequest.suppressResponse) {\n await this.requestWithSuppressedResponse(\n MessageType.InvokeCommandRequest,\n TlvInvokeRequest,\n invokeRequest,\n minimumResponseTimeoutMs,\n );\n } else {\n return await this.request(\n MessageType.InvokeCommandRequest,\n TlvInvokeRequest,\n MessageType.InvokeCommandResponse,\n TlvInvokeResponse,\n invokeRequest,\n minimumResponseTimeoutMs,\n );\n }\n }\n\n async sendWriteCommand(writeRequest: WriteRequest) {\n if (writeRequest.suppressResponse) {\n await this.requestWithSuppressedResponse(MessageType.WriteRequest, TlvWriteRequest, writeRequest);\n } else {\n return await this.request(\n MessageType.WriteRequest,\n TlvWriteRequest,\n MessageType.WriteResponse,\n TlvWriteResponse,\n writeRequest,\n );\n }\n }\n\n sendTimedRequest(timeoutSeconds: number) {\n return this.request(MessageType.TimedRequest, TlvTimedRequest, MessageType.StatusResponse, TlvStatusResponse, {\n timeout: timeoutSeconds,\n interactionModelRevision: INTERACTION_MODEL_REVISION,\n });\n }\n\n private async requestWithSuppressedResponse<RequestT>(\n requestMessageType: number,\n requestSchema: TlvSchema<RequestT>,\n request: RequestT,\n minimumResponseTimeoutMs?: number,\n ): Promise<void> {\n await this.send(requestMessageType, requestSchema.encode(request), {\n expectAckOnly: true,\n minimumResponseTimeoutMs,\n });\n }\n\n private async request<RequestT, ResponseT>(\n requestMessageType: number,\n requestSchema: TlvSchema<RequestT>,\n responseMessageType: number,\n responseSchema: TlvSchema<ResponseT>,\n request: RequestT,\n minimumResponseTimeoutMs?: number,\n ): Promise<ResponseT> {\n await this.send(requestMessageType, requestSchema.encode(request), {\n expectAckOnly: false,\n minimumResponseTimeoutMs,\n });\n const responseMessage = await this.nextMessage(responseMessageType);\n return responseSchema.decode(responseMessage.payload);\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 { MatterController } from \"../../MatterController.js\";\nimport { MatterDevice } from \"../../MatterDevice.js\";\nimport { Message, SessionType } from \"../../codec/MessageCodec.js\";\nimport {\n ImplementationError,\n MatterFlowError,\n NotImplementedError,\n UnexpectedDataError,\n} from \"../../common/MatterError.js\";\nimport { tryCatchAsync } from \"../../common/TryCatchHandler.js\";\nimport { Logger } from \"../../log/Logger.js\";\nimport { ExchangeProvider } from \"../../protocol/ExchangeManager.js\";\nimport {\n ExchangeSendOptions,\n MessageExchange,\n RetransmissionLimitReachedError,\n UnexpectedMessageError,\n} from \"../../protocol/MessageExchange.js\";\nimport { TlvAny } from \"../../tlv/TlvAny.js\";\nimport { TlvSchema, TypeFromSchema } from \"../../tlv/TlvSchema.js\";\nimport { ByteArray } from \"../../util/ByteArray.js\";\nimport {\n DataReportPayload,\n canAttributePayloadBeChunked,\n chunkAttributePayload,\n encodeAttributePayload,\n encodeEventPayload,\n} from \"./AttributeDataEncoder.js\";\nimport {\n TlvAttributeReport,\n TlvDataReport,\n TlvDataReportForSend,\n TlvEventReport,\n TlvInvokeRequest,\n TlvInvokeResponse,\n TlvReadRequest,\n TlvStatusResponse,\n TlvSubscribeRequest,\n TlvSubscribeResponse,\n TlvTimedRequest,\n TlvWriteRequest,\n TlvWriteResponse,\n} from \"./InteractionProtocol.js\";\nimport { INTERACTION_MODEL_REVISION } from \"./InteractionServer.js\";\nimport { StatusCode, StatusResponseError } from \"./StatusCode.js\";\n\nexport enum MessageType {\n StatusResponse = 0x01,\n ReadRequest = 0x02,\n SubscribeRequest = 0x03,\n SubscribeResponse = 0x04,\n ReportData = 0x05,\n WriteRequest = 0x06,\n WriteResponse = 0x07,\n InvokeCommandRequest = 0x08,\n InvokeCommandResponse = 0x09,\n TimedRequest = 0x0a,\n}\n\nexport type ReadRequest = TypeFromSchema<typeof TlvReadRequest>;\nexport type DataReport = TypeFromSchema<typeof TlvDataReport>;\nexport type SubscribeRequest = TypeFromSchema<typeof TlvSubscribeRequest>;\nexport type SubscribeResponse = TypeFromSchema<typeof TlvSubscribeResponse>;\nexport type InvokeRequest = TypeFromSchema<typeof TlvInvokeRequest>;\nexport type InvokeResponse = TypeFromSchema<typeof TlvInvokeResponse>;\nexport type TimedRequest = TypeFromSchema<typeof TlvTimedRequest>;\nexport type WriteRequest = TypeFromSchema<typeof TlvWriteRequest>;\nexport type WriteResponse = TypeFromSchema<typeof TlvWriteResponse>;\n\nconst MAX_SPDU_LENGTH = 1024;\n\nconst logger = Logger.get(\"InteractionMessenger\");\n\nclass InteractionMessenger<ContextT> {\n constructor(protected exchange: MessageExchange<ContextT>) {}\n\n async send(messageType: number, payload: ByteArray, options?: ExchangeSendOptions) {\n return this.exchange.send(messageType, payload, options);\n }\n\n sendStatus(status: StatusCode) {\n return this.send(\n MessageType.StatusResponse,\n TlvStatusResponse.encode({ status, interactionModelRevision: INTERACTION_MODEL_REVISION }),\n );\n }\n\n async waitForSuccess() {\n // If the status is not Success, this would throw an Error.\n await this.nextMessage(MessageType.StatusResponse);\n }\n\n async nextMessage(expectedMessageType?: number) {\n const message = await this.exchange.nextMessage();\n const messageType = message.payloadHeader.messageType;\n this.throwIfErrorStatusMessage(message);\n if (expectedMessageType !== undefined && messageType !== expectedMessageType) {\n throw new UnexpectedDataError(\n `Received unexpected message type: ${messageType}, expected: ${expectedMessageType}`,\n );\n }\n return message;\n }\n\n async close() {\n await this.exchange.close();\n }\n\n protected throwIfErrorStatusMessage(message: Message) {\n const {\n payloadHeader: { messageType },\n payload,\n } = message;\n\n if (messageType !== MessageType.StatusResponse) return;\n const { status } = TlvStatusResponse.decode(payload);\n if (status !== StatusCode.Success) throw new StatusResponseError(`Received error status: ${status}`, status);\n }\n\n getExchangeChannelName() {\n return this.exchange.channel.name;\n }\n}\n\nexport interface InteractionRecipient {\n handleReadRequest(\n exchange: MessageExchange<MatterDevice>,\n request: ReadRequest,\n message: Message,\n ): Promise<DataReport>;\n handleWriteRequest(\n exchange: MessageExchange<MatterDevice>,\n request: WriteRequest,\n message: Message,\n ): Promise<WriteResponse>;\n handleSubscribeRequest(\n exchange: MessageExchange<MatterDevice>,\n request: SubscribeRequest,\n messenger: InteractionServerMessenger,\n message: Message,\n ): Promise<void>;\n handleInvokeRequest(\n exchange: MessageExchange<MatterDevice>,\n request: InvokeRequest,\n message: Message,\n ): Promise<InvokeResponse>;\n handleTimedRequest(exchange: MessageExchange<MatterDevice>, request: TimedRequest, message: Message): void;\n}\n\nexport class InteractionServerMessenger extends InteractionMessenger<MatterDevice> {\n async handleRequest(recipient: InteractionRecipient) {\n let continueExchange = true; // are more messages expected in this \"transaction\"?\n try {\n while (continueExchange) {\n const message = await this.exchange.nextMessage();\n const isGroupSession = message.packetHeader.sessionType === SessionType.Group;\n continueExchange = false;\n switch (message.payloadHeader.messageType) {\n case MessageType.ReadRequest: {\n const readRequest = TlvReadRequest.decode(message.payload);\n await this.sendDataReport(\n await recipient.handleReadRequest(this.exchange, readRequest, message),\n readRequest.isFabricFiltered,\n );\n break;\n }\n case MessageType.WriteRequest: {\n const writeRequest = TlvWriteRequest.decode(message.payload);\n const { suppressResponse } = writeRequest;\n const writeResponse = await recipient.handleWriteRequest(this.exchange, writeRequest, message);\n if (!suppressResponse && !isGroupSession) {\n await this.send(MessageType.WriteResponse, TlvWriteResponse.encode(writeResponse));\n }\n break;\n }\n case MessageType.SubscribeRequest: {\n const subscribeRequest = TlvSubscribeRequest.decode(message.payload);\n await recipient.handleSubscribeRequest(this.exchange, subscribeRequest, this, message);\n // response is sent by handler\n break;\n }\n case MessageType.InvokeCommandRequest: {\n const invokeRequest = TlvInvokeRequest.decode(message.payload);\n const { suppressResponse } = invokeRequest;\n const invokeResponse = await recipient.handleInvokeRequest(\n this.exchange,\n invokeRequest,\n message,\n );\n if (!suppressResponse && !isGroupSession) {\n await this.send(\n MessageType.InvokeCommandResponse,\n TlvInvokeResponse.encode(invokeResponse),\n );\n }\n // TODO Also invoke could need continueExchange depending on requirements\n break;\n }\n case MessageType.TimedRequest: {\n const timedRequest = TlvTimedRequest.decode(message.payload);\n recipient.handleTimedRequest(this.exchange, timedRequest, message);\n await this.sendStatus(StatusCode.Success);\n continueExchange = true;\n break;\n }\n default:\n throw new NotImplementedError(`Unsupported message type ${message.payloadHeader.messageType}`);\n }\n }\n } catch (error: any) {\n if (error instanceof StatusResponseError) {\n logger.info(`Sending status response ${error.code} for interaction error: ${error.message}`);\n await this.sendStatus(error.code);\n } else {\n logger.error(error);\n await this.sendStatus(StatusCode.Failure);\n }\n } finally {\n await this.exchange.close();\n }\n }\n\n /**\n * Handle DataReportPayload with the content of a DataReport to send, split them into multiple DataReport\n * messages and send them out based on the size.\n */\n async sendDataReport(dataReportPayload: DataReportPayload, forFabricFilteredRead: boolean) {\n const {\n subscriptionId,\n attributeReportsPayload,\n eventReportsPayload,\n suppressResponse,\n interactionModelRevision,\n } = dataReportPayload;\n const dataReport: TypeFromSchema<typeof TlvDataReportForSend> = {\n subscriptionId,\n suppressResponse,\n interactionModelRevision,\n attributeReports: undefined,\n eventReports: undefined,\n };\n\n if (attributeReportsPayload !== undefined || eventReportsPayload !== undefined) {\n const attributeReportsToSend = [...(attributeReportsPayload ?? [])];\n const eventReportsToSend = [...(eventReportsPayload ?? [])];\n\n dataReport.moreChunkedMessages = true; // Assume we have multiple chunks, also for size calculation\n const emptyDataReportBytes = TlvDataReportForSend.encode(dataReport);\n\n let firstAttributeAddedToReportMessage = false;\n let firstEventAddedToReportMessage = false;\n const sendAndResetReport = async () => {\n await this.sendDataReportMessage(dataReport);\n dataReport.attributeReports = undefined;\n dataReport.eventReports = undefined;\n messageSize = emptyDataReportBytes.length;\n firstAttributeAddedToReportMessage = false;\n firstEventAddedToReportMessage = false;\n };\n\n let messageSize = emptyDataReportBytes.length;\n while (true) {\n if (attributeReportsToSend.length > 0) {\n const attributeReport = attributeReportsToSend.shift();\n if (attributeReport !== undefined) {\n if (!firstAttributeAddedToReportMessage) {\n firstAttributeAddedToReportMessage = true;\n messageSize += 3; // Array element is added now which needs 3 bytes\n }\n const allowMissingFieldsForNonFabricFilteredRead =\n !forFabricFilteredRead && attributeReport.hasFabricSensitiveData;\n const encodedAttribute = encodeAttributePayload(attributeReport, {\n allowMissingFieldsForNonFabricFilteredRead,\n });\n const attributeReportBytes = TlvAny.getEncodedByteLength(encodedAttribute);\n if (messageSize + attributeReportBytes > MAX_SPDU_LENGTH) {\n if (canAttributePayloadBeChunked(attributeReport)) {\n // Attribute is a non-empty array: chunk it and add the chunks to the beginning of the queue\n attributeReportsToSend.unshift(...chunkAttributePayload(attributeReport));\n continue;\n }\n await sendAndResetReport();\n }\n messageSize += attributeReportBytes;\n if (dataReport.attributeReports === undefined) dataReport.attributeReports = [];\n dataReport.attributeReports.push(encodedAttribute);\n }\n } else if (eventReportsToSend.length > 0) {\n const eventReport = eventReportsToSend.shift();\n if (eventReport === undefined) {\n // No more chunks to send\n dataReport.moreChunkedMessages = undefined;\n break;\n }\n if (!firstEventAddedToReportMessage) {\n firstEventAddedToReportMessage = true;\n messageSize += 3; // Array element is added now which needs 3 bytes\n }\n const allowMissingFieldsForNonFabricFilteredRead =\n !forFabricFilteredRead && eventReport.hasFabricSensitiveData;\n const encodedEvent = encodeEventPayload(eventReport, {\n allowMissingFieldsForNonFabricFilteredRead,\n });\n const eventReportBytes = TlvAny.getEncodedByteLength(encodedEvent);\n if (messageSize + eventReportBytes > MAX_SPDU_LENGTH) {\n await sendAndResetReport();\n }\n messageSize += eventReportBytes;\n if (dataReport.eventReports === undefined) dataReport.eventReports = [];\n dataReport.eventReports.push(encodedEvent);\n } else {\n // No more chunks to send\n dataReport.moreChunkedMessages = undefined;\n break;\n }\n }\n }\n\n await this.sendDataReportMessage(dataReport);\n }\n\n async sendDataReportMessage(dataReport: TypeFromSchema<typeof TlvDataReportForSend>) {\n const encodedMessage = TlvDataReportForSend.encode(dataReport);\n if (encodedMessage.length > MAX_SPDU_LENGTH) {\n throw new MatterFlowError(\n `DataReport is too long to fit in a single chunk, This should not happen! Data: ${Logger.toJSON(\n dataReport,\n )}`,\n );\n }\n logger.debug(\n `Sending DataReport chunk with ${dataReport.attributeReports?.length ?? 0} attributes and ${\n dataReport.eventReports?.length ?? 0\n } events: ${encodedMessage.length} bytes`,\n );\n\n if (dataReport.suppressResponse) {\n // We do not expect a response other than a Standalone Ack, so if we receive anything else, we throw an error\n await tryCatchAsync(\n async () =>\n await this.exchange.send(MessageType.ReportData, encodedMessage, {\n expectAckOnly: true,\n }),\n UnexpectedMessageError,\n async error => {\n const { receivedMessage } = error;\n this.throwIfErrorStatusMessage(receivedMessage);\n },\n );\n } else {\n await this.exchange.send(MessageType.ReportData, encodedMessage);\n await this.waitForSuccess();\n }\n }\n}\n\nexport class IncomingInteractionClientMessenger extends InteractionMessenger<MatterController> {\n async readDataReport(): Promise<DataReport> {\n let subscriptionId: number | undefined;\n const attributeValues: TypeFromSchema<typeof TlvAttributeReport>[] = [];\n const eventValues: TypeFromSchema<typeof TlvEventReport>[] = [];\n\n while (true) {\n const dataReportMessage = await this.exchange.waitFor(MessageType.ReportData);\n const report = TlvDataReport.decode(dataReportMessage.payload);\n if (subscriptionId === undefined && report.subscriptionId !== undefined) {\n subscriptionId = report.subscriptionId;\n } else if (\n (subscriptionId !== undefined || report.subscriptionId !== undefined) &&\n report.subscriptionId !== subscriptionId\n ) {\n throw new UnexpectedDataError(`Invalid subscription ID ${report.subscriptionId} received`);\n }\n\n if (Array.isArray(report.attributeReports) && report.attributeReports.length > 0) {\n attributeValues.push(...report.attributeReports);\n }\n if (Array.isArray(report.eventReports) && report.eventReports.length > 0) {\n eventValues.push(...report.eventReports);\n }\n if (!report.moreChunkedMessages) {\n report.attributeReports = attributeValues;\n report.eventReports = eventValues;\n return report;\n }\n\n await this.sendStatus(StatusCode.Success);\n }\n }\n}\n\nexport class InteractionClientMessenger extends IncomingInteractionClientMessenger {\n constructor(private readonly exchangeProvider: ExchangeProvider) {\n super(exchangeProvider.initiateExchange());\n }\n\n /** Implements a send method with an automatic reconnection mechanism */\n override async send(messageType: number, payload: ByteArray, options?: ExchangeSendOptions) {\n if (this.exchange.channel.closed) {\n throw new ImplementationError(\"The exchange channel is closed. Please connect the device first.\");\n }\n try {\n return await this.exchange.send(messageType, payload, options);\n } catch (error) {\n // When retransmission failed (most likely due to a lost connection or invalid session),\n // try to reconnect if possible and resend the message once\n if (error instanceof RetransmissionLimitReachedError) {\n await this.exchange.close();\n if (await this.exchangeProvider.reconnectChannel()) {\n this.exchange = this.exchangeProvider.initiateExchange();\n return await this.exchange.send(messageType, payload);\n }\n }\n throw error;\n }\n }\n\n sendReadRequest(readRequest: ReadRequest) {\n return this.request(\n MessageType.ReadRequest,\n TlvReadRequest,\n MessageType.ReportData,\n TlvDataReport,\n readRequest,\n );\n }\n\n async sendSubscribeRequest(subscribeRequest: SubscribeRequest) {\n await this.send(MessageType.SubscribeRequest, TlvSubscribeRequest.encode(subscribeRequest));\n\n const report = await this.readDataReport();\n const { subscriptionId } = report;\n\n if (subscriptionId === undefined) {\n throw new UnexpectedDataError(`Subscription ID not provided in report`);\n }\n\n await this.sendStatus(StatusCode.Success);\n\n const subscribeResponseMessage = await this.nextMessage(MessageType.SubscribeResponse);\n const subscribeResponse = TlvSubscribeResponse.decode(subscribeResponseMessage.payload);\n\n if (subscribeResponse.subscriptionId !== subscriptionId) {\n throw new MatterFlowError(\n `Received subscription ID ${subscribeResponse.subscriptionId} instead of ${subscriptionId}`,\n );\n }\n\n return {\n subscribeResponse,\n report,\n };\n }\n\n async sendInvokeCommand(invokeRequest: InvokeRequest, minimumResponseTimeoutMs?: number) {\n if (invokeRequest.suppressResponse) {\n await this.requestWithSuppressedResponse(\n MessageType.InvokeCommandRequest,\n TlvInvokeRequest,\n invokeRequest,\n minimumResponseTimeoutMs,\n );\n } else {\n return await this.request(\n MessageType.InvokeCommandRequest,\n TlvInvokeRequest,\n MessageType.InvokeCommandResponse,\n TlvInvokeResponse,\n invokeRequest,\n minimumResponseTimeoutMs,\n );\n }\n }\n\n async sendWriteCommand(writeRequest: WriteRequest) {\n if (writeRequest.suppressResponse) {\n await this.requestWithSuppressedResponse(MessageType.WriteRequest, TlvWriteRequest, writeRequest);\n } else {\n return await this.request(\n MessageType.WriteRequest,\n TlvWriteRequest,\n MessageType.WriteResponse,\n TlvWriteResponse,\n writeRequest,\n );\n }\n }\n\n sendTimedRequest(timeoutSeconds: number) {\n return this.request(MessageType.TimedRequest, TlvTimedRequest, MessageType.StatusResponse, TlvStatusResponse, {\n timeout: timeoutSeconds,\n interactionModelRevision: INTERACTION_MODEL_REVISION,\n });\n }\n\n private async requestWithSuppressedResponse<RequestT>(\n requestMessageType: number,\n requestSchema: TlvSchema<RequestT>,\n request: RequestT,\n minimumResponseTimeoutMs?: number,\n ): Promise<void> {\n await this.send(requestMessageType, requestSchema.encode(request), {\n expectAckOnly: true,\n minimumResponseTimeoutMs,\n });\n }\n\n private async request<RequestT, ResponseT>(\n requestMessageType: number,\n requestSchema: TlvSchema<RequestT>,\n responseMessageType: number,\n responseSchema: TlvSchema<ResponseT>,\n request: RequestT,\n minimumResponseTimeoutMs?: number,\n ): Promise<ResponseT> {\n await this.send(requestMessageType, requestSchema.encode(request), {\n expectAckOnly: false,\n minimumResponseTimeoutMs,\n });\n const responseMessage = await this.nextMessage(responseMessageType);\n return responseSchema.decode(responseMessage.payload);\n }\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["MessageType"]
7
7
  }
@@ -6,7 +6,7 @@
6
6
  import { MatterDevice } from "../../MatterDevice.js";
7
7
  import { AnyAttributeServer, AttributeServer } from "../../cluster/server/AttributeServer.js";
8
8
  import { CommandServer } from "../../cluster/server/CommandServer.js";
9
- import { EventServer } from "../../cluster/server/EventServer.js";
9
+ import { AnyEventServer } from "../../cluster/server/EventServer.js";
10
10
  import { Message } from "../../codec/MessageCodec.js";
11
11
  import { AttributeId } from "../../datatype/AttributeId.js";
12
12
  import { ClusterId } from "../../datatype/ClusterId.js";
@@ -17,7 +17,6 @@ import { NodeId } from "../../datatype/NodeId.js";
17
17
  import { EndpointInterface } from "../../endpoint/EndpointInterface.js";
18
18
  import { MessageExchange } from "../../protocol/MessageExchange.js";
19
19
  import { ProtocolHandler } from "../../protocol/ProtocolHandler.js";
20
- import { EventHandler } from "../../protocol/interaction/EventHandler.js";
21
20
  import { TypeFromSchema } from "../../tlv/TlvSchema.js";
22
21
  import { DataReportPayload } from "./AttributeDataEncoder.js";
23
22
  import { InteractionEndpointStructure } from "./InteractionEndpointStructure.js";
@@ -48,6 +47,7 @@ export interface EventPath {
48
47
  endpointId: EndpointNumber;
49
48
  clusterId: ClusterId;
50
49
  eventId: EventId;
50
+ isUrgent?: boolean;
51
51
  }
52
52
  export interface AttributeWithPath {
53
53
  path: AttributePath;
@@ -55,7 +55,7 @@ export interface AttributeWithPath {
55
55
  }
56
56
  export interface EventWithPath {
57
57
  path: EventPath;
58
- event: EventServer<any, any>;
58
+ event: AnyEventServer<any, any>;
59
59
  }
60
60
  export interface CommandWithPath {
61
61
  path: CommandPath;
@@ -73,7 +73,7 @@ export declare function validateReadEventPath(path: TypeFromSchema<typeof TlvEve
73
73
  */
74
74
  export declare class InteractionServer implements ProtocolHandler<MatterDevice>, InteractionRecipient {
75
75
  #private;
76
- constructor({ subscriptionOptions, eventHandler, endpointStructure }: InteractionServer.Configuration);
76
+ constructor({ subscriptionOptions, endpointStructure }: InteractionServer.Configuration);
77
77
  getId(): number;
78
78
  protected get isClosing(): boolean;
79
79
  onNewExchange(exchange: MessageExchange<MatterDevice>): Promise<void>;
@@ -82,7 +82,7 @@ export declare class InteractionServer implements ProtocolHandler<MatterDevice>,
82
82
  version: number;
83
83
  value: any;
84
84
  }>;
85
- protected readEvent(_path: EventPath, eventFilters: TypeFromSchema<typeof TlvEventFilter>[] | undefined, event: EventServer<any, any>, exchange: MessageExchange<MatterDevice>, isFabricFiltered: boolean, message: Message, _endpoint: EndpointInterface): Promise<import("../../protocol/interaction/EventHandler.js").EventStorageData<any>[]>;
85
+ protected readEvent(_path: EventPath, eventFilters: TypeFromSchema<typeof TlvEventFilter>[] | undefined, event: AnyEventServer<any, any>, exchange: MessageExchange<MatterDevice>, isFabricFiltered: boolean, message: Message, _endpoint: EndpointInterface): Promise<import("./EventHandler.js").EventStorageData<any>[]>;
86
86
  handleWriteRequest(exchange: MessageExchange<MatterDevice>, { suppressResponse, timedRequest, writeRequests, interactionModelRevision, moreChunkedMessages }: WriteRequest, message: Message): Promise<WriteResponse>;
87
87
  protected writeAttribute(_path: AttributePath, attribute: AttributeServer<any>, value: any, exchange: MessageExchange<MatterDevice>, message: Message, _endpoint: EndpointInterface, _receivedWithinTimedInteraction?: boolean, isListWrite?: boolean): Promise<void>;
88
88
  handleSubscribeRequest(exchange: MessageExchange<MatterDevice>, { minIntervalFloorSeconds, maxIntervalCeilingSeconds, attributeRequests, dataVersionFilters, eventRequests, eventFilters, keepSubscriptions, isFabricFiltered, interactionModelRevision, }: SubscribeRequest, messenger: InteractionServerMessenger, message: Message): Promise<void>;
@@ -99,7 +99,6 @@ export declare class InteractionServer implements ProtocolHandler<MatterDevice>,
99
99
  export declare namespace InteractionServer {
100
100
  interface Configuration {
101
101
  readonly subscriptionOptions?: SubscriptionOptions;
102
- readonly eventHandler: EventHandler;
103
102
  readonly endpointStructure: InteractionEndpointStructure;
104
103
  }
105
104
  }
@@ -1 +1 @@
1
- {"version":3,"file":"InteractionServer.d.ts","sourceRoot":"","sources":["../../../../src/protocol/interaction/InteractionServer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InteractionServer.d.ts","sourceRoot":"","sources":["../../../../src/protocol/interaction/InteractionServer.ts"],"names":[],"mappings":"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"}
@@ -119,14 +119,12 @@ class InteractionServer {
119
119
  #subscriptionMap = /* @__PURE__ */ new Map();
120
120
  #isClosing = false;
121
121
  #subscriptionConfig;
122
- #eventHandler;
123
- constructor({ subscriptionOptions, eventHandler, endpointStructure }) {
122
+ constructor({ subscriptionOptions, endpointStructure }) {
124
123
  this.#subscriptionConfig = SubscriptionOptions.configurationFor(subscriptionOptions);
125
- this.#eventHandler = eventHandler;
126
124
  this.#endpointStructure = endpointStructure;
127
- this.#endpointStructure.change.on(() => {
125
+ this.#endpointStructure.change.on(async () => {
128
126
  for (const subscription of this.#subscriptionMap.values()) {
129
- subscription.updateSubscription();
127
+ await subscription.updateSubscription();
130
128
  }
131
129
  });
132
130
  }
@@ -202,6 +200,7 @@ class InteractionServer {
202
200
  `Error reading attribute from ${exchange.channel.name}: ${this.#endpointStructure.resolveAttributeName(requestPath)}: unsupported path: Status=${error.code}`
203
201
  );
204
202
  attributeReportsPayload.push({
203
+ hasFabricSensitiveData: false,
205
204
  attributeStatus: { path: requestPath, status: { status: error.code } }
206
205
  });
207
206
  }
@@ -252,6 +251,7 @@ class InteractionServer {
252
251
  );
253
252
  const { schema } = attribute;
254
253
  attributeReportsPayload.push({
254
+ hasFabricSensitiveData: attribute.hasFabricSensitiveData,
255
255
  attributeData: { path, dataVersion: version, payload: value, schema }
256
256
  });
257
257
  } catch (error) {
@@ -261,7 +261,10 @@ class InteractionServer {
261
261
  );
262
262
  if (error instanceof StatusResponseError) {
263
263
  if (isConcreteAttributePath(requestPath)) {
264
- attributeReportsPayload.push({ attributeStatus: { path, status: { status: error.code } } });
264
+ attributeReportsPayload.push({
265
+ hasFabricSensitiveData: false,
266
+ attributeStatus: { path, status: { status: error.code } }
267
+ });
265
268
  }
266
269
  } else {
267
270
  throw error;
@@ -297,6 +300,7 @@ class InteractionServer {
297
300
  `Read event from ${exchange.channel.name}: ${this.#endpointStructure.resolveEventName(requestPath)}: unsupported path: Status=${error.code}`
298
301
  );
299
302
  eventReportsPayload?.push({
303
+ hasFabricSensitiveData: false,
300
304
  eventStatus: { path: requestPath, status: { status: error.code } }
301
305
  });
302
306
  }
@@ -325,6 +329,7 @@ class InteractionServer {
325
329
  const { schema } = event;
326
330
  reportsForPath.push(
327
331
  ...matchingEvents.map(({ eventNumber, priority, epochTimestamp, data }) => ({
332
+ hasFabricSensitiveData: event.hasFabricSensitiveData,
328
333
  eventData: {
329
334
  path,
330
335
  eventNumber,
@@ -342,7 +347,10 @@ class InteractionServer {
342
347
  );
343
348
  if (error instanceof StatusResponseError) {
344
349
  if (isConcreteEventPath(requestPath)) {
345
- eventReportsPayload?.push({ eventStatus: { path, status: { status: error.code } } });
350
+ eventReportsPayload?.push({
351
+ hasFabricSensitiveData: false,
352
+ eventStatus: { path, status: { status: error.code } }
353
+ });
346
354
  }
347
355
  } else {
348
356
  throw error;
@@ -681,42 +689,39 @@ class InteractionServer {
681
689
  }
682
690
  if (this.#nextSubscriptionId === 4294967295) this.#nextSubscriptionId = 0;
683
691
  const subscriptionId = this.#nextSubscriptionId++;
684
- const subscriptionHandler = new SubscriptionHandler(
692
+ const subscriptionHandler = new SubscriptionHandler({
685
693
  subscriptionId,
686
694
  session,
687
- this.#endpointStructure,
695
+ endpointStructure: this.#endpointStructure,
688
696
  attributeRequests,
689
697
  dataVersionFilters,
690
698
  eventRequests,
691
699
  eventFilters,
692
- this.#eventHandler,
693
700
  isFabricFiltered,
694
- minIntervalFloorSeconds,
695
- maxIntervalCeilingSeconds,
696
- () => this.#subscriptionMap.delete(subscriptionId),
697
- this.#subscriptionConfig
698
- );
701
+ minIntervalFloor: minIntervalFloorSeconds,
702
+ maxIntervalCeiling: maxIntervalCeilingSeconds,
703
+ cancelCallback: () => this.#subscriptionMap.delete(subscriptionId),
704
+ subscriptionOptions: this.#subscriptionConfig,
705
+ readAttribute: (path, attribute) => this.readAttribute(
706
+ path,
707
+ attribute,
708
+ exchange,
709
+ isFabricFiltered,
710
+ message,
711
+ this.#endpointStructure.getEndpoint(path.endpointId)
712
+ ),
713
+ readEvent: (path, event, eventFilters2) => this.readEvent(
714
+ path,
715
+ eventFilters2,
716
+ event,
717
+ exchange,
718
+ isFabricFiltered,
719
+ message,
720
+ this.#endpointStructure.getEndpoint(path.endpointId)
721
+ )
722
+ });
699
723
  try {
700
- await subscriptionHandler.sendInitialReport(
701
- messenger,
702
- (path, attribute) => this.readAttribute(
703
- path,
704
- attribute,
705
- exchange,
706
- isFabricFiltered,
707
- message,
708
- this.#endpointStructure.getEndpoint(path.endpointId)
709
- ),
710
- (path, event, eventFilters2) => this.readEvent(
711
- path,
712
- eventFilters2,
713
- event,
714
- exchange,
715
- isFabricFiltered,
716
- message,
717
- this.#endpointStructure.getEndpoint(path.endpointId)
718
- )
719
- );
724
+ await subscriptionHandler.sendInitialReport(messenger);
720
725
  } catch (error) {
721
726
  logger.error(
722
727
  `Subscription ${subscriptionId} for Session ${session.id}: Error while sending initial data reports`,
@@ -731,8 +736,10 @@ class InteractionServer {
731
736
  return;
732
737
  }
733
738
  if (!keepSubscriptions) {
734
- logger.debug(`Clear subscriptions for Session ${session.name} because keepSubscriptions=false`);
735
- await session.clearSubscriptions(true);
739
+ logger.debug(
740
+ `Clear subscriptions for Subscriber node ${session.peerNodeId} because keepSubscriptions=false`
741
+ );
742
+ await session.context.clearSubscriptionsForNode(fabric.fabricIndex, session.peerNodeId, true);
736
743
  }
737
744
  const maxInterval = subscriptionHandler.getMaxInterval();
738
745
  logger.info(