@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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"}
@@ -140,14 +140,12 @@ class InteractionServer {
140
140
  #subscriptionMap = /* @__PURE__ */ new Map();
141
141
  #isClosing = false;
142
142
  #subscriptionConfig;
143
- #eventHandler;
144
- constructor({ subscriptionOptions, eventHandler, endpointStructure }) {
143
+ constructor({ subscriptionOptions, endpointStructure }) {
145
144
  this.#subscriptionConfig = import_SubscriptionOptions.SubscriptionOptions.configurationFor(subscriptionOptions);
146
- this.#eventHandler = eventHandler;
147
145
  this.#endpointStructure = endpointStructure;
148
- this.#endpointStructure.change.on(() => {
146
+ this.#endpointStructure.change.on(async () => {
149
147
  for (const subscription of this.#subscriptionMap.values()) {
150
- subscription.updateSubscription();
148
+ await subscription.updateSubscription();
151
149
  }
152
150
  });
153
151
  }
@@ -223,6 +221,7 @@ class InteractionServer {
223
221
  `Error reading attribute from ${exchange.channel.name}: ${this.#endpointStructure.resolveAttributeName(requestPath)}: unsupported path: Status=${error.code}`
224
222
  );
225
223
  attributeReportsPayload.push({
224
+ hasFabricSensitiveData: false,
226
225
  attributeStatus: { path: requestPath, status: { status: error.code } }
227
226
  });
228
227
  }
@@ -273,6 +272,7 @@ class InteractionServer {
273
272
  );
274
273
  const { schema } = attribute;
275
274
  attributeReportsPayload.push({
275
+ hasFabricSensitiveData: attribute.hasFabricSensitiveData,
276
276
  attributeData: { path, dataVersion: version, payload: value, schema }
277
277
  });
278
278
  } catch (error) {
@@ -282,7 +282,10 @@ class InteractionServer {
282
282
  );
283
283
  if (error instanceof import_StatusCode.StatusResponseError) {
284
284
  if (isConcreteAttributePath(requestPath)) {
285
- attributeReportsPayload.push({ attributeStatus: { path, status: { status: error.code } } });
285
+ attributeReportsPayload.push({
286
+ hasFabricSensitiveData: false,
287
+ attributeStatus: { path, status: { status: error.code } }
288
+ });
286
289
  }
287
290
  } else {
288
291
  throw error;
@@ -318,6 +321,7 @@ class InteractionServer {
318
321
  `Read event from ${exchange.channel.name}: ${this.#endpointStructure.resolveEventName(requestPath)}: unsupported path: Status=${error.code}`
319
322
  );
320
323
  eventReportsPayload?.push({
324
+ hasFabricSensitiveData: false,
321
325
  eventStatus: { path: requestPath, status: { status: error.code } }
322
326
  });
323
327
  }
@@ -346,6 +350,7 @@ class InteractionServer {
346
350
  const { schema } = event;
347
351
  reportsForPath.push(
348
352
  ...matchingEvents.map(({ eventNumber, priority, epochTimestamp, data }) => ({
353
+ hasFabricSensitiveData: event.hasFabricSensitiveData,
349
354
  eventData: {
350
355
  path,
351
356
  eventNumber,
@@ -363,7 +368,10 @@ class InteractionServer {
363
368
  );
364
369
  if (error instanceof import_StatusCode.StatusResponseError) {
365
370
  if (isConcreteEventPath(requestPath)) {
366
- eventReportsPayload?.push({ eventStatus: { path, status: { status: error.code } } });
371
+ eventReportsPayload?.push({
372
+ hasFabricSensitiveData: false,
373
+ eventStatus: { path, status: { status: error.code } }
374
+ });
367
375
  }
368
376
  } else {
369
377
  throw error;
@@ -702,42 +710,39 @@ class InteractionServer {
702
710
  }
703
711
  if (this.#nextSubscriptionId === 4294967295) this.#nextSubscriptionId = 0;
704
712
  const subscriptionId = this.#nextSubscriptionId++;
705
- const subscriptionHandler = new import_SubscriptionHandler.SubscriptionHandler(
713
+ const subscriptionHandler = new import_SubscriptionHandler.SubscriptionHandler({
706
714
  subscriptionId,
707
715
  session,
708
- this.#endpointStructure,
716
+ endpointStructure: this.#endpointStructure,
709
717
  attributeRequests,
710
718
  dataVersionFilters,
711
719
  eventRequests,
712
720
  eventFilters,
713
- this.#eventHandler,
714
721
  isFabricFiltered,
715
- minIntervalFloorSeconds,
716
- maxIntervalCeilingSeconds,
717
- () => this.#subscriptionMap.delete(subscriptionId),
718
- this.#subscriptionConfig
719
- );
722
+ minIntervalFloor: minIntervalFloorSeconds,
723
+ maxIntervalCeiling: maxIntervalCeilingSeconds,
724
+ cancelCallback: () => this.#subscriptionMap.delete(subscriptionId),
725
+ subscriptionOptions: this.#subscriptionConfig,
726
+ readAttribute: (path, attribute) => this.readAttribute(
727
+ path,
728
+ attribute,
729
+ exchange,
730
+ isFabricFiltered,
731
+ message,
732
+ this.#endpointStructure.getEndpoint(path.endpointId)
733
+ ),
734
+ readEvent: (path, event, eventFilters2) => this.readEvent(
735
+ path,
736
+ eventFilters2,
737
+ event,
738
+ exchange,
739
+ isFabricFiltered,
740
+ message,
741
+ this.#endpointStructure.getEndpoint(path.endpointId)
742
+ )
743
+ });
720
744
  try {
721
- await subscriptionHandler.sendInitialReport(
722
- messenger,
723
- (path, attribute) => this.readAttribute(
724
- path,
725
- attribute,
726
- exchange,
727
- isFabricFiltered,
728
- message,
729
- this.#endpointStructure.getEndpoint(path.endpointId)
730
- ),
731
- (path, event, eventFilters2) => this.readEvent(
732
- path,
733
- eventFilters2,
734
- event,
735
- exchange,
736
- isFabricFiltered,
737
- message,
738
- this.#endpointStructure.getEndpoint(path.endpointId)
739
- )
740
- );
745
+ await subscriptionHandler.sendInitialReport(messenger);
741
746
  } catch (error) {
742
747
  logger.error(
743
748
  `Subscription ${subscriptionId} for Session ${session.id}: Error while sending initial data reports`,
@@ -752,8 +757,10 @@ class InteractionServer {
752
757
  return;
753
758
  }
754
759
  if (!keepSubscriptions) {
755
- logger.debug(`Clear subscriptions for Session ${session.name} because keepSubscriptions=false`);
756
- await session.clearSubscriptions(true);
760
+ logger.debug(
761
+ `Clear subscriptions for Subscriber node ${session.peerNodeId} because keepSubscriptions=false`
762
+ );
763
+ await session.context.clearSubscriptionsForNode(fabric.fabricIndex, session.peerNodeId, true);
757
764
  }
758
765
  const maxInterval = subscriptionHandler.getMaxInterval();
759
766
  logger.info(