@matter/protocol 0.11.0-alpha.0-20241005-e3e4e4a7a

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 (853) hide show
  1. package/LICENSE +201 -0
  2. package/dist/cjs/MatterDevice.d.ts +79 -0
  3. package/dist/cjs/MatterDevice.d.ts.map +1 -0
  4. package/dist/cjs/MatterDevice.js +253 -0
  5. package/dist/cjs/MatterDevice.js.map +6 -0
  6. package/dist/cjs/ble/Ble.d.ts +29 -0
  7. package/dist/cjs/ble/Ble.d.ts.map +1 -0
  8. package/dist/cjs/ble/Ble.js +50 -0
  9. package/dist/cjs/ble/Ble.js.map +6 -0
  10. package/dist/cjs/ble/BleConsts.d.ts +32 -0
  11. package/dist/cjs/ble/BleConsts.d.ts.map +1 -0
  12. package/dist/cjs/ble/BleConsts.js +53 -0
  13. package/dist/cjs/ble/BleConsts.js.map +6 -0
  14. package/dist/cjs/ble/BtpSessionHandler.d.ts +87 -0
  15. package/dist/cjs/ble/BtpSessionHandler.d.ts.map +1 -0
  16. package/dist/cjs/ble/BtpSessionHandler.js +432 -0
  17. package/dist/cjs/ble/BtpSessionHandler.js.map +6 -0
  18. package/dist/cjs/ble/index.d.ts +9 -0
  19. package/dist/cjs/ble/index.d.ts.map +1 -0
  20. package/dist/cjs/ble/index.js +26 -0
  21. package/dist/cjs/ble/index.js.map +6 -0
  22. package/dist/cjs/certificate/AttestationCertificateManager.d.ts +28 -0
  23. package/dist/cjs/certificate/AttestationCertificateManager.d.ts.map +1 -0
  24. package/dist/cjs/certificate/AttestationCertificateManager.js +171 -0
  25. package/dist/cjs/certificate/AttestationCertificateManager.js.map +6 -0
  26. package/dist/cjs/certificate/CertificateManager.d.ts +575 -0
  27. package/dist/cjs/certificate/CertificateManager.d.ts.map +1 -0
  28. package/dist/cjs/certificate/CertificateManager.js +810 -0
  29. package/dist/cjs/certificate/CertificateManager.js.map +6 -0
  30. package/dist/cjs/certificate/CertificationDeclarationManager.d.ts +5 -0
  31. package/dist/cjs/certificate/CertificationDeclarationManager.d.ts.map +1 -0
  32. package/dist/cjs/certificate/CertificationDeclarationManager.js +54 -0
  33. package/dist/cjs/certificate/CertificationDeclarationManager.js.map +6 -0
  34. package/dist/cjs/certificate/ChipPAAuthorities.d.ts +14 -0
  35. package/dist/cjs/certificate/ChipPAAuthorities.d.ts.map +1 -0
  36. package/dist/cjs/certificate/ChipPAAuthorities.js +57 -0
  37. package/dist/cjs/certificate/ChipPAAuthorities.js.map +6 -0
  38. package/dist/cjs/certificate/DeviceCertification.d.ts +30 -0
  39. package/dist/cjs/certificate/DeviceCertification.d.ts.map +1 -0
  40. package/dist/cjs/certificate/DeviceCertification.js +103 -0
  41. package/dist/cjs/certificate/DeviceCertification.js.map +6 -0
  42. package/dist/cjs/certificate/RootCertificateManager.d.ts +33 -0
  43. package/dist/cjs/certificate/RootCertificateManager.d.ts.map +1 -0
  44. package/dist/cjs/certificate/RootCertificateManager.js +142 -0
  45. package/dist/cjs/certificate/RootCertificateManager.js.map +6 -0
  46. package/dist/cjs/certificate/index.d.ts +12 -0
  47. package/dist/cjs/certificate/index.d.ts.map +1 -0
  48. package/dist/cjs/certificate/index.js +29 -0
  49. package/dist/cjs/certificate/index.js.map +6 -0
  50. package/dist/cjs/cluster/client/AttributeClient.d.ts +61 -0
  51. package/dist/cjs/cluster/client/AttributeClient.d.ts.map +1 -0
  52. package/dist/cjs/cluster/client/AttributeClient.js +177 -0
  53. package/dist/cjs/cluster/client/AttributeClient.js.map +6 -0
  54. package/dist/cjs/cluster/client/ClusterClient.d.ts +10 -0
  55. package/dist/cjs/cluster/client/ClusterClient.d.ts.map +1 -0
  56. package/dist/cjs/cluster/client/ClusterClient.js +281 -0
  57. package/dist/cjs/cluster/client/ClusterClient.js.map +6 -0
  58. package/dist/cjs/cluster/client/ClusterClientTypes.d.ts +171 -0
  59. package/dist/cjs/cluster/client/ClusterClientTypes.d.ts.map +1 -0
  60. package/dist/cjs/cluster/client/ClusterClientTypes.js +22 -0
  61. package/dist/cjs/cluster/client/ClusterClientTypes.js.map +6 -0
  62. package/dist/cjs/cluster/client/EventClient.d.ts +41 -0
  63. package/dist/cjs/cluster/client/EventClient.d.ts.map +1 -0
  64. package/dist/cjs/cluster/client/EventClient.js +94 -0
  65. package/dist/cjs/cluster/client/EventClient.js.map +6 -0
  66. package/dist/cjs/cluster/client/index.d.ts +10 -0
  67. package/dist/cjs/cluster/client/index.d.ts.map +1 -0
  68. package/dist/cjs/cluster/client/index.js +27 -0
  69. package/dist/cjs/cluster/client/index.js.map +6 -0
  70. package/dist/cjs/cluster/index.d.ts +8 -0
  71. package/dist/cjs/cluster/index.d.ts.map +1 -0
  72. package/dist/cjs/cluster/index.js +25 -0
  73. package/dist/cjs/cluster/index.js.map +6 -0
  74. package/dist/cjs/cluster/server/AttributeServer.d.ts +307 -0
  75. package/dist/cjs/cluster/server/AttributeServer.d.ts.map +1 -0
  76. package/dist/cjs/cluster/server/AttributeServer.js +734 -0
  77. package/dist/cjs/cluster/server/AttributeServer.js.map +6 -0
  78. package/dist/cjs/cluster/server/ClusterDatasource.d.ts +16 -0
  79. package/dist/cjs/cluster/server/ClusterDatasource.d.ts.map +1 -0
  80. package/dist/cjs/cluster/server/ClusterDatasource.js +22 -0
  81. package/dist/cjs/cluster/server/ClusterDatasource.js.map +6 -0
  82. package/dist/cjs/cluster/server/ClusterServer.d.ts +40 -0
  83. package/dist/cjs/cluster/server/ClusterServer.d.ts.map +1 -0
  84. package/dist/cjs/cluster/server/ClusterServer.js +22 -0
  85. package/dist/cjs/cluster/server/ClusterServer.js.map +6 -0
  86. package/dist/cjs/cluster/server/CommandServer.d.ts +34 -0
  87. package/dist/cjs/cluster/server/CommandServer.d.ts.map +1 -0
  88. package/dist/cjs/cluster/server/CommandServer.js +76 -0
  89. package/dist/cjs/cluster/server/CommandServer.js.map +6 -0
  90. package/dist/cjs/cluster/server/EventServer.d.ts +41 -0
  91. package/dist/cjs/cluster/server/EventServer.d.ts.map +1 -0
  92. package/dist/cjs/cluster/server/EventServer.js +149 -0
  93. package/dist/cjs/cluster/server/EventServer.js.map +6 -0
  94. package/dist/cjs/cluster/server/index.d.ts +11 -0
  95. package/dist/cjs/cluster/server/index.d.ts.map +1 -0
  96. package/dist/cjs/cluster/server/index.js +28 -0
  97. package/dist/cjs/cluster/server/index.js.map +6 -0
  98. package/dist/cjs/codec/BtpCodec.d.ts +78 -0
  99. package/dist/cjs/codec/BtpCodec.d.ts.map +1 -0
  100. package/dist/cjs/codec/BtpCodec.js +254 -0
  101. package/dist/cjs/codec/BtpCodec.js.map +6 -0
  102. package/dist/cjs/codec/MessageCodec.d.ts +63 -0
  103. package/dist/cjs/codec/MessageCodec.d.ts.map +1 -0
  104. package/dist/cjs/codec/MessageCodec.js +220 -0
  105. package/dist/cjs/codec/MessageCodec.js.map +6 -0
  106. package/dist/cjs/codec/index.d.ts +9 -0
  107. package/dist/cjs/codec/index.d.ts.map +1 -0
  108. package/dist/cjs/codec/index.js +36 -0
  109. package/dist/cjs/codec/index.js.map +6 -0
  110. package/dist/cjs/common/FailsafeContext.d.ts +79 -0
  111. package/dist/cjs/common/FailsafeContext.d.ts.map +1 -0
  112. package/dist/cjs/common/FailsafeContext.js +237 -0
  113. package/dist/cjs/common/FailsafeContext.js.map +6 -0
  114. package/dist/cjs/common/FailsafeTimer.d.ts +25 -0
  115. package/dist/cjs/common/FailsafeTimer.d.ts.map +1 -0
  116. package/dist/cjs/common/FailsafeTimer.js +91 -0
  117. package/dist/cjs/common/FailsafeTimer.js.map +6 -0
  118. package/dist/cjs/common/InstanceBroadcaster.d.ts +273 -0
  119. package/dist/cjs/common/InstanceBroadcaster.d.ts.map +1 -0
  120. package/dist/cjs/common/InstanceBroadcaster.js +139 -0
  121. package/dist/cjs/common/InstanceBroadcaster.js.map +6 -0
  122. package/dist/cjs/common/OperationalCredentialsTypes.d.ts +21 -0
  123. package/dist/cjs/common/OperationalCredentialsTypes.d.ts.map +1 -0
  124. package/dist/cjs/common/OperationalCredentialsTypes.js +45 -0
  125. package/dist/cjs/common/OperationalCredentialsTypes.js.map +6 -0
  126. package/dist/cjs/common/Scanner.d.ts +121 -0
  127. package/dist/cjs/common/Scanner.d.ts.map +1 -0
  128. package/dist/cjs/common/Scanner.js +51 -0
  129. package/dist/cjs/common/Scanner.js.map +6 -0
  130. package/dist/cjs/common/index.d.ts +12 -0
  131. package/dist/cjs/common/index.d.ts.map +1 -0
  132. package/dist/cjs/common/index.js +29 -0
  133. package/dist/cjs/common/index.js.map +6 -0
  134. package/dist/cjs/endpoint/EndpointInterface.d.ts +37 -0
  135. package/dist/cjs/endpoint/EndpointInterface.d.ts.map +1 -0
  136. package/dist/cjs/endpoint/EndpointInterface.js +22 -0
  137. package/dist/cjs/endpoint/EndpointInterface.js.map +6 -0
  138. package/dist/cjs/endpoint/EndpointStructureLogger.d.ts +31 -0
  139. package/dist/cjs/endpoint/EndpointStructureLogger.d.ts.map +1 -0
  140. package/dist/cjs/endpoint/EndpointStructureLogger.js +236 -0
  141. package/dist/cjs/endpoint/EndpointStructureLogger.js.map +6 -0
  142. package/dist/cjs/endpoint/index.d.ts +8 -0
  143. package/dist/cjs/endpoint/index.d.ts.map +1 -0
  144. package/dist/cjs/endpoint/index.js +25 -0
  145. package/dist/cjs/endpoint/index.js.map +6 -0
  146. package/dist/cjs/fabric/Fabric.d.ts +121 -0
  147. package/dist/cjs/fabric/Fabric.d.ts.map +1 -0
  148. package/dist/cjs/fabric/Fabric.js +427 -0
  149. package/dist/cjs/fabric/Fabric.js.map +6 -0
  150. package/dist/cjs/fabric/FabricManager.d.ts +44 -0
  151. package/dist/cjs/fabric/FabricManager.d.ts.map +1 -0
  152. package/dist/cjs/fabric/FabricManager.js +209 -0
  153. package/dist/cjs/fabric/FabricManager.js.map +6 -0
  154. package/dist/cjs/fabric/index.d.ts +8 -0
  155. package/dist/cjs/fabric/index.d.ts.map +1 -0
  156. package/dist/cjs/fabric/index.js +25 -0
  157. package/dist/cjs/fabric/index.js.map +6 -0
  158. package/dist/cjs/index.d.ts +20 -0
  159. package/dist/cjs/index.d.ts.map +1 -0
  160. package/dist/cjs/index.js +37 -0
  161. package/dist/cjs/index.js.map +6 -0
  162. package/dist/cjs/interaction/AccessControlManager.d.ts +49 -0
  163. package/dist/cjs/interaction/AccessControlManager.d.ts.map +1 -0
  164. package/dist/cjs/interaction/AccessControlManager.js +248 -0
  165. package/dist/cjs/interaction/AccessControlManager.js.map +6 -0
  166. package/dist/cjs/interaction/AttributeDataDecoder.d.ts +52 -0
  167. package/dist/cjs/interaction/AttributeDataDecoder.d.ts.map +1 -0
  168. package/dist/cjs/interaction/AttributeDataDecoder.js +185 -0
  169. package/dist/cjs/interaction/AttributeDataDecoder.js.map +6 -0
  170. package/dist/cjs/interaction/AttributeDataEncoder.d.ts +71 -0
  171. package/dist/cjs/interaction/AttributeDataEncoder.d.ts.map +1 -0
  172. package/dist/cjs/interaction/AttributeDataEncoder.js +190 -0
  173. package/dist/cjs/interaction/AttributeDataEncoder.js.map +6 -0
  174. package/dist/cjs/interaction/EventDataDecoder.d.ts +30 -0
  175. package/dist/cjs/interaction/EventDataDecoder.d.ts.map +1 -0
  176. package/dist/cjs/interaction/EventDataDecoder.js +103 -0
  177. package/dist/cjs/interaction/EventDataDecoder.js.map +6 -0
  178. package/dist/cjs/interaction/EventHandler.d.ts +42 -0
  179. package/dist/cjs/interaction/EventHandler.d.ts.map +1 -0
  180. package/dist/cjs/interaction/EventHandler.js +112 -0
  181. package/dist/cjs/interaction/EventHandler.js.map +6 -0
  182. package/dist/cjs/interaction/InteractionClient.d.ts +294 -0
  183. package/dist/cjs/interaction/InteractionClient.d.ts.map +1 -0
  184. package/dist/cjs/interaction/InteractionClient.js +829 -0
  185. package/dist/cjs/interaction/InteractionClient.js.map +6 -0
  186. package/dist/cjs/interaction/InteractionEndpointStructure.d.ts +59 -0
  187. package/dist/cjs/interaction/InteractionEndpointStructure.d.ts.map +1 -0
  188. package/dist/cjs/interaction/InteractionEndpointStructure.js +341 -0
  189. package/dist/cjs/interaction/InteractionEndpointStructure.js.map +6 -0
  190. package/dist/cjs/interaction/InteractionMessenger.d.ts +315 -0
  191. package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -0
  192. package/dist/cjs/interaction/InteractionMessenger.js +484 -0
  193. package/dist/cjs/interaction/InteractionMessenger.js.map +6 -0
  194. package/dist/cjs/interaction/InteractionServer.d.ts +97 -0
  195. package/dist/cjs/interaction/InteractionServer.d.ts.map +1 -0
  196. package/dist/cjs/interaction/InteractionServer.js +1026 -0
  197. package/dist/cjs/interaction/InteractionServer.js.map +6 -0
  198. package/dist/cjs/interaction/ServerSubscription.d.ts +121 -0
  199. package/dist/cjs/interaction/ServerSubscription.d.ts.map +1 -0
  200. package/dist/cjs/interaction/ServerSubscription.js +672 -0
  201. package/dist/cjs/interaction/ServerSubscription.js.map +6 -0
  202. package/dist/cjs/interaction/Subscription.d.ts +44 -0
  203. package/dist/cjs/interaction/Subscription.d.ts.map +1 -0
  204. package/dist/cjs/interaction/Subscription.js +85 -0
  205. package/dist/cjs/interaction/Subscription.js.map +6 -0
  206. package/dist/cjs/interaction/SubscriptionOptions.d.ts +43 -0
  207. package/dist/cjs/interaction/SubscriptionOptions.d.ts.map +1 -0
  208. package/dist/cjs/interaction/SubscriptionOptions.js +46 -0
  209. package/dist/cjs/interaction/SubscriptionOptions.js.map +6 -0
  210. package/dist/cjs/interaction/index.d.ts +17 -0
  211. package/dist/cjs/interaction/index.d.ts.map +1 -0
  212. package/dist/cjs/interaction/index.js +34 -0
  213. package/dist/cjs/interaction/index.js.map +6 -0
  214. package/dist/cjs/mdns/MdnsBroadcaster.d.ts +34 -0
  215. package/dist/cjs/mdns/MdnsBroadcaster.d.ts.map +1 -0
  216. package/dist/cjs/mdns/MdnsBroadcaster.js +338 -0
  217. package/dist/cjs/mdns/MdnsBroadcaster.js.map +6 -0
  218. package/dist/cjs/mdns/MdnsConsts.d.ts +19 -0
  219. package/dist/cjs/mdns/MdnsConsts.d.ts.map +1 -0
  220. package/dist/cjs/mdns/MdnsConsts.js +52 -0
  221. package/dist/cjs/mdns/MdnsConsts.js.map +6 -0
  222. package/dist/cjs/mdns/MdnsInstanceBroadcaster.d.ts +28 -0
  223. package/dist/cjs/mdns/MdnsInstanceBroadcaster.d.ts.map +1 -0
  224. package/dist/cjs/mdns/MdnsInstanceBroadcaster.js +87 -0
  225. package/dist/cjs/mdns/MdnsInstanceBroadcaster.js.map +6 -0
  226. package/dist/cjs/mdns/MdnsScanner.d.ts +79 -0
  227. package/dist/cjs/mdns/MdnsScanner.d.ts.map +1 -0
  228. package/dist/cjs/mdns/MdnsScanner.js +842 -0
  229. package/dist/cjs/mdns/MdnsScanner.js.map +6 -0
  230. package/dist/cjs/mdns/MdnsServer.d.ts +29 -0
  231. package/dist/cjs/mdns/MdnsServer.d.ts.map +1 -0
  232. package/dist/cjs/mdns/MdnsServer.js +275 -0
  233. package/dist/cjs/mdns/MdnsServer.js.map +6 -0
  234. package/dist/cjs/mdns/MdnsService.d.ts +28 -0
  235. package/dist/cjs/mdns/MdnsService.d.ts.map +1 -0
  236. package/dist/cjs/mdns/MdnsService.js +95 -0
  237. package/dist/cjs/mdns/MdnsService.js.map +6 -0
  238. package/dist/cjs/mdns/index.d.ts +12 -0
  239. package/dist/cjs/mdns/index.d.ts.map +1 -0
  240. package/dist/cjs/mdns/index.js +29 -0
  241. package/dist/cjs/mdns/index.js.map +6 -0
  242. package/dist/cjs/package.json +10 -0
  243. package/dist/cjs/peer/ControllerCommissioner.d.ts +82 -0
  244. package/dist/cjs/peer/ControllerCommissioner.d.ts.map +1 -0
  245. package/dist/cjs/peer/ControllerCommissioner.js +224 -0
  246. package/dist/cjs/peer/ControllerCommissioner.js.map +6 -0
  247. package/dist/cjs/peer/ControllerCommissioningFlow.d.ts +88 -0
  248. package/dist/cjs/peer/ControllerCommissioningFlow.d.ts.map +1 -0
  249. package/dist/cjs/peer/ControllerCommissioningFlow.js +849 -0
  250. package/dist/cjs/peer/ControllerCommissioningFlow.js.map +6 -0
  251. package/dist/cjs/peer/ControllerDiscovery.d.ts +43 -0
  252. package/dist/cjs/peer/ControllerDiscovery.d.ts.map +1 -0
  253. package/dist/cjs/peer/ControllerDiscovery.js +192 -0
  254. package/dist/cjs/peer/ControllerDiscovery.js.map +6 -0
  255. package/dist/cjs/peer/OperationalPeer.d.ts +28 -0
  256. package/dist/cjs/peer/OperationalPeer.d.ts.map +1 -0
  257. package/dist/cjs/peer/OperationalPeer.js +22 -0
  258. package/dist/cjs/peer/OperationalPeer.js.map +6 -0
  259. package/dist/cjs/peer/PeerAddress.d.ts +30 -0
  260. package/dist/cjs/peer/PeerAddress.d.ts.map +1 -0
  261. package/dist/cjs/peer/PeerAddress.js +71 -0
  262. package/dist/cjs/peer/PeerAddress.js.map +6 -0
  263. package/dist/cjs/peer/PeerSet.d.ts +98 -0
  264. package/dist/cjs/peer/PeerSet.d.ts.map +1 -0
  265. package/dist/cjs/peer/PeerSet.js +500 -0
  266. package/dist/cjs/peer/PeerSet.js.map +6 -0
  267. package/dist/cjs/peer/PeerStore.d.ts +17 -0
  268. package/dist/cjs/peer/PeerStore.d.ts.map +1 -0
  269. package/dist/cjs/peer/PeerStore.js +31 -0
  270. package/dist/cjs/peer/PeerStore.js.map +6 -0
  271. package/dist/cjs/peer/index.d.ts +13 -0
  272. package/dist/cjs/peer/index.d.ts.map +1 -0
  273. package/dist/cjs/peer/index.js +30 -0
  274. package/dist/cjs/peer/index.js.map +6 -0
  275. package/dist/cjs/protocol/ChannelManager.d.ts +30 -0
  276. package/dist/cjs/protocol/ChannelManager.d.ts.map +1 -0
  277. package/dist/cjs/protocol/ChannelManager.js +168 -0
  278. package/dist/cjs/protocol/ChannelManager.js.map +6 -0
  279. package/dist/cjs/protocol/DeviceAdvertiser.d.ts +43 -0
  280. package/dist/cjs/protocol/DeviceAdvertiser.d.ts.map +1 -0
  281. package/dist/cjs/protocol/DeviceAdvertiser.js +185 -0
  282. package/dist/cjs/protocol/DeviceAdvertiser.js.map +6 -0
  283. package/dist/cjs/protocol/DeviceCommissioner.d.ts +49 -0
  284. package/dist/cjs/protocol/DeviceCommissioner.d.ts.map +1 -0
  285. package/dist/cjs/protocol/DeviceCommissioner.js +198 -0
  286. package/dist/cjs/protocol/DeviceCommissioner.js.map +6 -0
  287. package/dist/cjs/protocol/ExchangeManager.d.ts +73 -0
  288. package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -0
  289. package/dist/cjs/protocol/ExchangeManager.js +407 -0
  290. package/dist/cjs/protocol/ExchangeManager.js.map +6 -0
  291. package/dist/cjs/protocol/MessageCounter.d.ts +57 -0
  292. package/dist/cjs/protocol/MessageCounter.d.ts.map +1 -0
  293. package/dist/cjs/protocol/MessageCounter.js +104 -0
  294. package/dist/cjs/protocol/MessageCounter.js.map +6 -0
  295. package/dist/cjs/protocol/MessageExchange.d.ts +84 -0
  296. package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -0
  297. package/dist/cjs/protocol/MessageExchange.js +508 -0
  298. package/dist/cjs/protocol/MessageExchange.js.map +6 -0
  299. package/dist/cjs/protocol/MessageReceptionState.d.ts +65 -0
  300. package/dist/cjs/protocol/MessageReceptionState.d.ts.map +1 -0
  301. package/dist/cjs/protocol/MessageReceptionState.js +173 -0
  302. package/dist/cjs/protocol/MessageReceptionState.js.map +6 -0
  303. package/dist/cjs/protocol/ProtocolHandler.d.ts +13 -0
  304. package/dist/cjs/protocol/ProtocolHandler.d.ts.map +1 -0
  305. package/dist/cjs/protocol/ProtocolHandler.js +22 -0
  306. package/dist/cjs/protocol/ProtocolHandler.js.map +6 -0
  307. package/dist/cjs/protocol/index.d.ts +14 -0
  308. package/dist/cjs/protocol/index.d.ts.map +1 -0
  309. package/dist/cjs/protocol/index.js +31 -0
  310. package/dist/cjs/protocol/index.js.map +6 -0
  311. package/dist/cjs/securechannel/SecureChannelMessenger.d.ts +53 -0
  312. package/dist/cjs/securechannel/SecureChannelMessenger.d.ts.map +1 -0
  313. package/dist/cjs/securechannel/SecureChannelMessenger.js +143 -0
  314. package/dist/cjs/securechannel/SecureChannelMessenger.js.map +6 -0
  315. package/dist/cjs/securechannel/SecureChannelProtocol.d.ts +31 -0
  316. package/dist/cjs/securechannel/SecureChannelProtocol.d.ts.map +1 -0
  317. package/dist/cjs/securechannel/SecureChannelProtocol.js +140 -0
  318. package/dist/cjs/securechannel/SecureChannelProtocol.js.map +6 -0
  319. package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.d.ts +23 -0
  320. package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.d.ts.map +1 -0
  321. package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.js +53 -0
  322. package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.js.map +6 -0
  323. package/dist/cjs/securechannel/index.d.ts +9 -0
  324. package/dist/cjs/securechannel/index.d.ts.map +1 -0
  325. package/dist/cjs/securechannel/index.js +26 -0
  326. package/dist/cjs/securechannel/index.js.map +6 -0
  327. package/dist/cjs/session/InsecureSession.d.ts +38 -0
  328. package/dist/cjs/session/InsecureSession.d.ts.map +1 -0
  329. package/dist/cjs/session/InsecureSession.js +95 -0
  330. package/dist/cjs/session/InsecureSession.js.map +6 -0
  331. package/dist/cjs/session/SecureSession.d.ts +81 -0
  332. package/dist/cjs/session/SecureSession.d.ts.map +1 -0
  333. package/dist/cjs/session/SecureSession.js +291 -0
  334. package/dist/cjs/session/SecureSession.js.map +6 -0
  335. package/dist/cjs/session/Session.d.ts +102 -0
  336. package/dist/cjs/session/Session.d.ts.map +1 -0
  337. package/dist/cjs/session/Session.js +141 -0
  338. package/dist/cjs/session/Session.js.map +6 -0
  339. package/dist/cjs/session/SessionManager.d.ts +132 -0
  340. package/dist/cjs/session/SessionManager.d.ts.map +1 -0
  341. package/dist/cjs/session/SessionManager.js +410 -0
  342. package/dist/cjs/session/SessionManager.js.map +6 -0
  343. package/dist/cjs/session/case/CaseClient.d.ts +18 -0
  344. package/dist/cjs/session/case/CaseClient.d.ts.map +1 -0
  345. package/dist/cjs/session/case/CaseClient.js +216 -0
  346. package/dist/cjs/session/case/CaseClient.js.map +6 -0
  347. package/dist/cjs/session/case/CaseMessages.d.ts +82 -0
  348. package/dist/cjs/session/case/CaseMessages.d.ts.map +1 -0
  349. package/dist/cjs/session/case/CaseMessages.js +97 -0
  350. package/dist/cjs/session/case/CaseMessages.js.map +6 -0
  351. package/dist/cjs/session/case/CaseMessenger.d.ts +79 -0
  352. package/dist/cjs/session/case/CaseMessenger.d.ts.map +1 -0
  353. package/dist/cjs/session/case/CaseMessenger.js +74 -0
  354. package/dist/cjs/session/case/CaseMessenger.js.map +6 -0
  355. package/dist/cjs/session/case/CaseServer.d.ts +18 -0
  356. package/dist/cjs/session/case/CaseServer.d.ts.map +1 -0
  357. package/dist/cjs/session/case/CaseServer.js +232 -0
  358. package/dist/cjs/session/case/CaseServer.js.map +6 -0
  359. package/dist/cjs/session/index.d.ts +18 -0
  360. package/dist/cjs/session/index.d.ts.map +1 -0
  361. package/dist/cjs/session/index.js +35 -0
  362. package/dist/cjs/session/index.js.map +6 -0
  363. package/dist/cjs/session/pase/PaseClient.d.ts +18 -0
  364. package/dist/cjs/session/pase/PaseClient.d.ts.map +1 -0
  365. package/dist/cjs/session/pase/PaseClient.js +101 -0
  366. package/dist/cjs/session/pase/PaseClient.js.map +6 -0
  367. package/dist/cjs/session/pase/PaseMessages.d.ts +85 -0
  368. package/dist/cjs/session/pase/PaseMessages.d.ts.map +1 -0
  369. package/dist/cjs/session/pase/PaseMessages.js +88 -0
  370. package/dist/cjs/session/pase/PaseMessages.js.map +6 -0
  371. package/dist/cjs/session/pase/PaseMessenger.d.ts +75 -0
  372. package/dist/cjs/session/pase/PaseMessenger.d.ts.map +1 -0
  373. package/dist/cjs/session/pase/PaseMessenger.js +86 -0
  374. package/dist/cjs/session/pase/PaseMessenger.js.map +6 -0
  375. package/dist/cjs/session/pase/PaseServer.d.ts +29 -0
  376. package/dist/cjs/session/pase/PaseServer.d.ts.map +1 -0
  377. package/dist/cjs/session/pase/PaseServer.js +159 -0
  378. package/dist/cjs/session/pase/PaseServer.js.map +6 -0
  379. package/dist/cjs/tsconfig.tsbuildinfo +1 -0
  380. package/dist/esm/MatterDevice.d.ts +79 -0
  381. package/dist/esm/MatterDevice.d.ts.map +1 -0
  382. package/dist/esm/MatterDevice.js +239 -0
  383. package/dist/esm/MatterDevice.js.map +6 -0
  384. package/dist/esm/ble/Ble.d.ts +29 -0
  385. package/dist/esm/ble/Ble.d.ts.map +1 -0
  386. package/dist/esm/ble/Ble.js +30 -0
  387. package/dist/esm/ble/Ble.js.map +6 -0
  388. package/dist/esm/ble/BleConsts.d.ts +32 -0
  389. package/dist/esm/ble/BleConsts.d.ts.map +1 -0
  390. package/dist/esm/ble/BleConsts.js +33 -0
  391. package/dist/esm/ble/BleConsts.js.map +6 -0
  392. package/dist/esm/ble/BtpSessionHandler.d.ts +87 -0
  393. package/dist/esm/ble/BtpSessionHandler.d.ts.map +1 -0
  394. package/dist/esm/ble/BtpSessionHandler.js +419 -0
  395. package/dist/esm/ble/BtpSessionHandler.js.map +6 -0
  396. package/dist/esm/ble/index.d.ts +9 -0
  397. package/dist/esm/ble/index.d.ts.map +1 -0
  398. package/dist/esm/ble/index.js +9 -0
  399. package/dist/esm/ble/index.js.map +6 -0
  400. package/dist/esm/certificate/AttestationCertificateManager.d.ts +28 -0
  401. package/dist/esm/certificate/AttestationCertificateManager.d.ts.map +1 -0
  402. package/dist/esm/certificate/AttestationCertificateManager.js +155 -0
  403. package/dist/esm/certificate/AttestationCertificateManager.js.map +6 -0
  404. package/dist/esm/certificate/CertificateManager.d.ts +575 -0
  405. package/dist/esm/certificate/CertificateManager.d.ts.map +1 -0
  406. package/dist/esm/certificate/CertificateManager.js +837 -0
  407. package/dist/esm/certificate/CertificateManager.js.map +6 -0
  408. package/dist/esm/certificate/CertificationDeclarationManager.d.ts +5 -0
  409. package/dist/esm/certificate/CertificationDeclarationManager.d.ts.map +1 -0
  410. package/dist/esm/certificate/CertificationDeclarationManager.js +34 -0
  411. package/dist/esm/certificate/CertificationDeclarationManager.js.map +6 -0
  412. package/dist/esm/certificate/ChipPAAuthorities.d.ts +14 -0
  413. package/dist/esm/certificate/ChipPAAuthorities.d.ts.map +1 -0
  414. package/dist/esm/certificate/ChipPAAuthorities.js +37 -0
  415. package/dist/esm/certificate/ChipPAAuthorities.js.map +6 -0
  416. package/dist/esm/certificate/DeviceCertification.d.ts +30 -0
  417. package/dist/esm/certificate/DeviceCertification.d.ts.map +1 -0
  418. package/dist/esm/certificate/DeviceCertification.js +83 -0
  419. package/dist/esm/certificate/DeviceCertification.js.map +6 -0
  420. package/dist/esm/certificate/RootCertificateManager.d.ts +33 -0
  421. package/dist/esm/certificate/RootCertificateManager.d.ts.map +1 -0
  422. package/dist/esm/certificate/RootCertificateManager.js +139 -0
  423. package/dist/esm/certificate/RootCertificateManager.js.map +6 -0
  424. package/dist/esm/certificate/index.d.ts +12 -0
  425. package/dist/esm/certificate/index.d.ts.map +1 -0
  426. package/dist/esm/certificate/index.js +12 -0
  427. package/dist/esm/certificate/index.js.map +6 -0
  428. package/dist/esm/cluster/client/AttributeClient.d.ts +61 -0
  429. package/dist/esm/cluster/client/AttributeClient.d.ts.map +1 -0
  430. package/dist/esm/cluster/client/AttributeClient.js +157 -0
  431. package/dist/esm/cluster/client/AttributeClient.js.map +6 -0
  432. package/dist/esm/cluster/client/ClusterClient.d.ts +10 -0
  433. package/dist/esm/cluster/client/ClusterClient.d.ts.map +1 -0
  434. package/dist/esm/cluster/client/ClusterClient.js +267 -0
  435. package/dist/esm/cluster/client/ClusterClient.js.map +6 -0
  436. package/dist/esm/cluster/client/ClusterClientTypes.d.ts +171 -0
  437. package/dist/esm/cluster/client/ClusterClientTypes.d.ts.map +1 -0
  438. package/dist/esm/cluster/client/ClusterClientTypes.js +6 -0
  439. package/dist/esm/cluster/client/ClusterClientTypes.js.map +6 -0
  440. package/dist/esm/cluster/client/EventClient.d.ts +41 -0
  441. package/dist/esm/cluster/client/EventClient.d.ts.map +1 -0
  442. package/dist/esm/cluster/client/EventClient.js +74 -0
  443. package/dist/esm/cluster/client/EventClient.js.map +6 -0
  444. package/dist/esm/cluster/client/index.d.ts +10 -0
  445. package/dist/esm/cluster/client/index.d.ts.map +1 -0
  446. package/dist/esm/cluster/client/index.js +10 -0
  447. package/dist/esm/cluster/client/index.js.map +6 -0
  448. package/dist/esm/cluster/index.d.ts +8 -0
  449. package/dist/esm/cluster/index.d.ts.map +1 -0
  450. package/dist/esm/cluster/index.js +8 -0
  451. package/dist/esm/cluster/index.js.map +6 -0
  452. package/dist/esm/cluster/server/AttributeServer.d.ts +307 -0
  453. package/dist/esm/cluster/server/AttributeServer.d.ts.map +1 -0
  454. package/dist/esm/cluster/server/AttributeServer.js +718 -0
  455. package/dist/esm/cluster/server/AttributeServer.js.map +6 -0
  456. package/dist/esm/cluster/server/ClusterDatasource.d.ts +16 -0
  457. package/dist/esm/cluster/server/ClusterDatasource.d.ts.map +1 -0
  458. package/dist/esm/cluster/server/ClusterDatasource.js +6 -0
  459. package/dist/esm/cluster/server/ClusterDatasource.js.map +6 -0
  460. package/dist/esm/cluster/server/ClusterServer.d.ts +40 -0
  461. package/dist/esm/cluster/server/ClusterServer.d.ts.map +1 -0
  462. package/dist/esm/cluster/server/ClusterServer.js +6 -0
  463. package/dist/esm/cluster/server/ClusterServer.js.map +6 -0
  464. package/dist/esm/cluster/server/CommandServer.d.ts +34 -0
  465. package/dist/esm/cluster/server/CommandServer.d.ts.map +1 -0
  466. package/dist/esm/cluster/server/CommandServer.js +56 -0
  467. package/dist/esm/cluster/server/CommandServer.js.map +6 -0
  468. package/dist/esm/cluster/server/EventServer.d.ts +41 -0
  469. package/dist/esm/cluster/server/EventServer.d.ts.map +1 -0
  470. package/dist/esm/cluster/server/EventServer.js +137 -0
  471. package/dist/esm/cluster/server/EventServer.js.map +6 -0
  472. package/dist/esm/cluster/server/index.d.ts +11 -0
  473. package/dist/esm/cluster/server/index.d.ts.map +1 -0
  474. package/dist/esm/cluster/server/index.js +11 -0
  475. package/dist/esm/cluster/server/index.js.map +6 -0
  476. package/dist/esm/codec/BtpCodec.d.ts +78 -0
  477. package/dist/esm/codec/BtpCodec.d.ts.map +1 -0
  478. package/dist/esm/codec/BtpCodec.js +234 -0
  479. package/dist/esm/codec/BtpCodec.js.map +6 -0
  480. package/dist/esm/codec/MessageCodec.d.ts +63 -0
  481. package/dist/esm/codec/MessageCodec.d.ts.map +1 -0
  482. package/dist/esm/codec/MessageCodec.js +200 -0
  483. package/dist/esm/codec/MessageCodec.js.map +6 -0
  484. package/dist/esm/codec/index.d.ts +9 -0
  485. package/dist/esm/codec/index.d.ts.map +1 -0
  486. package/dist/esm/codec/index.js +15 -0
  487. package/dist/esm/codec/index.js.map +6 -0
  488. package/dist/esm/common/FailsafeContext.d.ts +79 -0
  489. package/dist/esm/common/FailsafeContext.d.ts.map +1 -0
  490. package/dist/esm/common/FailsafeContext.js +217 -0
  491. package/dist/esm/common/FailsafeContext.js.map +6 -0
  492. package/dist/esm/common/FailsafeTimer.d.ts +25 -0
  493. package/dist/esm/common/FailsafeTimer.d.ts.map +1 -0
  494. package/dist/esm/common/FailsafeTimer.js +71 -0
  495. package/dist/esm/common/FailsafeTimer.js.map +6 -0
  496. package/dist/esm/common/InstanceBroadcaster.d.ts +273 -0
  497. package/dist/esm/common/InstanceBroadcaster.d.ts.map +1 -0
  498. package/dist/esm/common/InstanceBroadcaster.js +119 -0
  499. package/dist/esm/common/InstanceBroadcaster.js.map +6 -0
  500. package/dist/esm/common/OperationalCredentialsTypes.d.ts +21 -0
  501. package/dist/esm/common/OperationalCredentialsTypes.d.ts.map +1 -0
  502. package/dist/esm/common/OperationalCredentialsTypes.js +25 -0
  503. package/dist/esm/common/OperationalCredentialsTypes.js.map +6 -0
  504. package/dist/esm/common/Scanner.d.ts +121 -0
  505. package/dist/esm/common/Scanner.d.ts.map +1 -0
  506. package/dist/esm/common/Scanner.js +31 -0
  507. package/dist/esm/common/Scanner.js.map +6 -0
  508. package/dist/esm/common/index.d.ts +12 -0
  509. package/dist/esm/common/index.d.ts.map +1 -0
  510. package/dist/esm/common/index.js +12 -0
  511. package/dist/esm/common/index.js.map +6 -0
  512. package/dist/esm/endpoint/EndpointInterface.d.ts +37 -0
  513. package/dist/esm/endpoint/EndpointInterface.d.ts.map +1 -0
  514. package/dist/esm/endpoint/EndpointInterface.js +6 -0
  515. package/dist/esm/endpoint/EndpointInterface.js.map +6 -0
  516. package/dist/esm/endpoint/EndpointStructureLogger.d.ts +31 -0
  517. package/dist/esm/endpoint/EndpointStructureLogger.d.ts.map +1 -0
  518. package/dist/esm/endpoint/EndpointStructureLogger.js +216 -0
  519. package/dist/esm/endpoint/EndpointStructureLogger.js.map +6 -0
  520. package/dist/esm/endpoint/index.d.ts +8 -0
  521. package/dist/esm/endpoint/index.d.ts.map +1 -0
  522. package/dist/esm/endpoint/index.js +8 -0
  523. package/dist/esm/endpoint/index.js.map +6 -0
  524. package/dist/esm/fabric/Fabric.d.ts +121 -0
  525. package/dist/esm/fabric/Fabric.d.ts.map +1 -0
  526. package/dist/esm/fabric/Fabric.js +422 -0
  527. package/dist/esm/fabric/Fabric.js.map +6 -0
  528. package/dist/esm/fabric/FabricManager.d.ts +44 -0
  529. package/dist/esm/fabric/FabricManager.d.ts.map +1 -0
  530. package/dist/esm/fabric/FabricManager.js +200 -0
  531. package/dist/esm/fabric/FabricManager.js.map +6 -0
  532. package/dist/esm/fabric/index.d.ts +8 -0
  533. package/dist/esm/fabric/index.d.ts.map +1 -0
  534. package/dist/esm/fabric/index.js +8 -0
  535. package/dist/esm/fabric/index.js.map +6 -0
  536. package/dist/esm/index.d.ts +20 -0
  537. package/dist/esm/index.d.ts.map +1 -0
  538. package/dist/esm/index.js +20 -0
  539. package/dist/esm/index.js.map +6 -0
  540. package/dist/esm/interaction/AccessControlManager.d.ts +49 -0
  541. package/dist/esm/interaction/AccessControlManager.d.ts.map +1 -0
  542. package/dist/esm/interaction/AccessControlManager.js +228 -0
  543. package/dist/esm/interaction/AccessControlManager.js.map +6 -0
  544. package/dist/esm/interaction/AttributeDataDecoder.d.ts +52 -0
  545. package/dist/esm/interaction/AttributeDataDecoder.d.ts.map +1 -0
  546. package/dist/esm/interaction/AttributeDataDecoder.js +171 -0
  547. package/dist/esm/interaction/AttributeDataDecoder.js.map +6 -0
  548. package/dist/esm/interaction/AttributeDataEncoder.d.ts +71 -0
  549. package/dist/esm/interaction/AttributeDataEncoder.d.ts.map +1 -0
  550. package/dist/esm/interaction/AttributeDataEncoder.js +174 -0
  551. package/dist/esm/interaction/AttributeDataEncoder.js.map +6 -0
  552. package/dist/esm/interaction/EventDataDecoder.d.ts +30 -0
  553. package/dist/esm/interaction/EventDataDecoder.d.ts.map +1 -0
  554. package/dist/esm/interaction/EventDataDecoder.js +87 -0
  555. package/dist/esm/interaction/EventDataDecoder.js.map +6 -0
  556. package/dist/esm/interaction/EventHandler.d.ts +42 -0
  557. package/dist/esm/interaction/EventHandler.d.ts.map +1 -0
  558. package/dist/esm/interaction/EventHandler.js +96 -0
  559. package/dist/esm/interaction/EventHandler.js.map +6 -0
  560. package/dist/esm/interaction/InteractionClient.d.ts +294 -0
  561. package/dist/esm/interaction/InteractionClient.d.ts.map +1 -0
  562. package/dist/esm/interaction/InteractionClient.js +827 -0
  563. package/dist/esm/interaction/InteractionClient.js.map +6 -0
  564. package/dist/esm/interaction/InteractionEndpointStructure.d.ts +59 -0
  565. package/dist/esm/interaction/InteractionEndpointStructure.d.ts.map +1 -0
  566. package/dist/esm/interaction/InteractionEndpointStructure.js +343 -0
  567. package/dist/esm/interaction/InteractionEndpointStructure.js.map +6 -0
  568. package/dist/esm/interaction/InteractionMessenger.d.ts +315 -0
  569. package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -0
  570. package/dist/esm/interaction/InteractionMessenger.js +489 -0
  571. package/dist/esm/interaction/InteractionMessenger.js.map +6 -0
  572. package/dist/esm/interaction/InteractionServer.d.ts +97 -0
  573. package/dist/esm/interaction/InteractionServer.d.ts.map +1 -0
  574. package/dist/esm/interaction/InteractionServer.js +1027 -0
  575. package/dist/esm/interaction/InteractionServer.js.map +6 -0
  576. package/dist/esm/interaction/ServerSubscription.d.ts +121 -0
  577. package/dist/esm/interaction/ServerSubscription.d.ts.map +1 -0
  578. package/dist/esm/interaction/ServerSubscription.js +669 -0
  579. package/dist/esm/interaction/ServerSubscription.js.map +6 -0
  580. package/dist/esm/interaction/Subscription.d.ts +44 -0
  581. package/dist/esm/interaction/Subscription.d.ts.map +1 -0
  582. package/dist/esm/interaction/Subscription.js +65 -0
  583. package/dist/esm/interaction/Subscription.js.map +6 -0
  584. package/dist/esm/interaction/SubscriptionOptions.d.ts +43 -0
  585. package/dist/esm/interaction/SubscriptionOptions.d.ts.map +1 -0
  586. package/dist/esm/interaction/SubscriptionOptions.js +26 -0
  587. package/dist/esm/interaction/SubscriptionOptions.js.map +6 -0
  588. package/dist/esm/interaction/index.d.ts +17 -0
  589. package/dist/esm/interaction/index.d.ts.map +1 -0
  590. package/dist/esm/interaction/index.js +17 -0
  591. package/dist/esm/interaction/index.js.map +6 -0
  592. package/dist/esm/mdns/MdnsBroadcaster.d.ts +34 -0
  593. package/dist/esm/mdns/MdnsBroadcaster.d.ts.map +1 -0
  594. package/dist/esm/mdns/MdnsBroadcaster.js +351 -0
  595. package/dist/esm/mdns/MdnsBroadcaster.js.map +6 -0
  596. package/dist/esm/mdns/MdnsConsts.d.ts +19 -0
  597. package/dist/esm/mdns/MdnsConsts.d.ts.map +1 -0
  598. package/dist/esm/mdns/MdnsConsts.js +32 -0
  599. package/dist/esm/mdns/MdnsConsts.js.map +6 -0
  600. package/dist/esm/mdns/MdnsInstanceBroadcaster.d.ts +28 -0
  601. package/dist/esm/mdns/MdnsInstanceBroadcaster.d.ts.map +1 -0
  602. package/dist/esm/mdns/MdnsInstanceBroadcaster.js +67 -0
  603. package/dist/esm/mdns/MdnsInstanceBroadcaster.js.map +6 -0
  604. package/dist/esm/mdns/MdnsScanner.d.ts +79 -0
  605. package/dist/esm/mdns/MdnsScanner.d.ts.map +1 -0
  606. package/dist/esm/mdns/MdnsScanner.js +847 -0
  607. package/dist/esm/mdns/MdnsScanner.js.map +6 -0
  608. package/dist/esm/mdns/MdnsServer.d.ts +29 -0
  609. package/dist/esm/mdns/MdnsServer.d.ts.map +1 -0
  610. package/dist/esm/mdns/MdnsServer.js +266 -0
  611. package/dist/esm/mdns/MdnsServer.js.map +6 -0
  612. package/dist/esm/mdns/MdnsService.d.ts +28 -0
  613. package/dist/esm/mdns/MdnsService.d.ts.map +1 -0
  614. package/dist/esm/mdns/MdnsService.js +83 -0
  615. package/dist/esm/mdns/MdnsService.js.map +6 -0
  616. package/dist/esm/mdns/index.d.ts +12 -0
  617. package/dist/esm/mdns/index.d.ts.map +1 -0
  618. package/dist/esm/mdns/index.js +12 -0
  619. package/dist/esm/mdns/index.js.map +6 -0
  620. package/dist/esm/package.json +10 -0
  621. package/dist/esm/peer/ControllerCommissioner.d.ts +82 -0
  622. package/dist/esm/peer/ControllerCommissioner.d.ts.map +1 -0
  623. package/dist/esm/peer/ControllerCommissioner.js +211 -0
  624. package/dist/esm/peer/ControllerCommissioner.js.map +6 -0
  625. package/dist/esm/peer/ControllerCommissioningFlow.d.ts +88 -0
  626. package/dist/esm/peer/ControllerCommissioningFlow.d.ts.map +1 -0
  627. package/dist/esm/peer/ControllerCommissioningFlow.js +832 -0
  628. package/dist/esm/peer/ControllerCommissioningFlow.js.map +6 -0
  629. package/dist/esm/peer/ControllerDiscovery.d.ts +43 -0
  630. package/dist/esm/peer/ControllerDiscovery.d.ts.map +1 -0
  631. package/dist/esm/peer/ControllerDiscovery.js +172 -0
  632. package/dist/esm/peer/ControllerDiscovery.js.map +6 -0
  633. package/dist/esm/peer/OperationalPeer.d.ts +28 -0
  634. package/dist/esm/peer/OperationalPeer.d.ts.map +1 -0
  635. package/dist/esm/peer/OperationalPeer.js +6 -0
  636. package/dist/esm/peer/OperationalPeer.js.map +6 -0
  637. package/dist/esm/peer/PeerAddress.d.ts +30 -0
  638. package/dist/esm/peer/PeerAddress.d.ts.map +1 -0
  639. package/dist/esm/peer/PeerAddress.js +51 -0
  640. package/dist/esm/peer/PeerAddress.js.map +6 -0
  641. package/dist/esm/peer/PeerSet.d.ts +98 -0
  642. package/dist/esm/peer/PeerSet.d.ts.map +1 -0
  643. package/dist/esm/peer/PeerSet.js +495 -0
  644. package/dist/esm/peer/PeerSet.js.map +6 -0
  645. package/dist/esm/peer/PeerStore.d.ts +17 -0
  646. package/dist/esm/peer/PeerStore.d.ts.map +1 -0
  647. package/dist/esm/peer/PeerStore.js +11 -0
  648. package/dist/esm/peer/PeerStore.js.map +6 -0
  649. package/dist/esm/peer/index.d.ts +13 -0
  650. package/dist/esm/peer/index.d.ts.map +1 -0
  651. package/dist/esm/peer/index.js +13 -0
  652. package/dist/esm/peer/index.js.map +6 -0
  653. package/dist/esm/protocol/ChannelManager.d.ts +30 -0
  654. package/dist/esm/protocol/ChannelManager.d.ts.map +1 -0
  655. package/dist/esm/protocol/ChannelManager.js +148 -0
  656. package/dist/esm/protocol/ChannelManager.js.map +6 -0
  657. package/dist/esm/protocol/DeviceAdvertiser.d.ts +43 -0
  658. package/dist/esm/protocol/DeviceAdvertiser.d.ts.map +1 -0
  659. package/dist/esm/protocol/DeviceAdvertiser.js +173 -0
  660. package/dist/esm/protocol/DeviceAdvertiser.js.map +6 -0
  661. package/dist/esm/protocol/DeviceCommissioner.d.ts +49 -0
  662. package/dist/esm/protocol/DeviceCommissioner.d.ts.map +1 -0
  663. package/dist/esm/protocol/DeviceCommissioner.js +187 -0
  664. package/dist/esm/protocol/DeviceCommissioner.js.map +6 -0
  665. package/dist/esm/protocol/ExchangeManager.d.ts +73 -0
  666. package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -0
  667. package/dist/esm/protocol/ExchangeManager.js +398 -0
  668. package/dist/esm/protocol/ExchangeManager.js.map +6 -0
  669. package/dist/esm/protocol/MessageCounter.d.ts +57 -0
  670. package/dist/esm/protocol/MessageCounter.d.ts.map +1 -0
  671. package/dist/esm/protocol/MessageCounter.js +84 -0
  672. package/dist/esm/protocol/MessageCounter.js.map +6 -0
  673. package/dist/esm/protocol/MessageExchange.d.ts +84 -0
  674. package/dist/esm/protocol/MessageExchange.d.ts.map +1 -0
  675. package/dist/esm/protocol/MessageExchange.js +504 -0
  676. package/dist/esm/protocol/MessageExchange.js.map +6 -0
  677. package/dist/esm/protocol/MessageReceptionState.d.ts +65 -0
  678. package/dist/esm/protocol/MessageReceptionState.d.ts.map +1 -0
  679. package/dist/esm/protocol/MessageReceptionState.js +153 -0
  680. package/dist/esm/protocol/MessageReceptionState.js.map +6 -0
  681. package/dist/esm/protocol/ProtocolHandler.d.ts +13 -0
  682. package/dist/esm/protocol/ProtocolHandler.d.ts.map +1 -0
  683. package/dist/esm/protocol/ProtocolHandler.js +6 -0
  684. package/dist/esm/protocol/ProtocolHandler.js.map +6 -0
  685. package/dist/esm/protocol/index.d.ts +14 -0
  686. package/dist/esm/protocol/index.d.ts.map +1 -0
  687. package/dist/esm/protocol/index.js +14 -0
  688. package/dist/esm/protocol/index.js.map +6 -0
  689. package/dist/esm/securechannel/SecureChannelMessenger.d.ts +53 -0
  690. package/dist/esm/securechannel/SecureChannelMessenger.d.ts.map +1 -0
  691. package/dist/esm/securechannel/SecureChannelMessenger.js +128 -0
  692. package/dist/esm/securechannel/SecureChannelMessenger.js.map +6 -0
  693. package/dist/esm/securechannel/SecureChannelProtocol.d.ts +31 -0
  694. package/dist/esm/securechannel/SecureChannelProtocol.d.ts.map +1 -0
  695. package/dist/esm/securechannel/SecureChannelProtocol.js +127 -0
  696. package/dist/esm/securechannel/SecureChannelProtocol.js.map +6 -0
  697. package/dist/esm/securechannel/SecureChannelStatusMessageSchema.d.ts +23 -0
  698. package/dist/esm/securechannel/SecureChannelStatusMessageSchema.d.ts.map +1 -0
  699. package/dist/esm/securechannel/SecureChannelStatusMessageSchema.js +33 -0
  700. package/dist/esm/securechannel/SecureChannelStatusMessageSchema.js.map +6 -0
  701. package/dist/esm/securechannel/index.d.ts +9 -0
  702. package/dist/esm/securechannel/index.d.ts.map +1 -0
  703. package/dist/esm/securechannel/index.js +9 -0
  704. package/dist/esm/securechannel/index.js.map +6 -0
  705. package/dist/esm/session/InsecureSession.d.ts +38 -0
  706. package/dist/esm/session/InsecureSession.d.ts.map +1 -0
  707. package/dist/esm/session/InsecureSession.js +75 -0
  708. package/dist/esm/session/InsecureSession.js.map +6 -0
  709. package/dist/esm/session/SecureSession.d.ts +81 -0
  710. package/dist/esm/session/SecureSession.d.ts.map +1 -0
  711. package/dist/esm/session/SecureSession.js +281 -0
  712. package/dist/esm/session/SecureSession.js.map +6 -0
  713. package/dist/esm/session/Session.d.ts +102 -0
  714. package/dist/esm/session/Session.d.ts.map +1 -0
  715. package/dist/esm/session/Session.js +121 -0
  716. package/dist/esm/session/Session.js.map +6 -0
  717. package/dist/esm/session/SessionManager.d.ts +132 -0
  718. package/dist/esm/session/SessionManager.d.ts.map +1 -0
  719. package/dist/esm/session/SessionManager.js +411 -0
  720. package/dist/esm/session/SessionManager.js.map +6 -0
  721. package/dist/esm/session/case/CaseClient.d.ts +18 -0
  722. package/dist/esm/session/case/CaseClient.d.ts.map +1 -0
  723. package/dist/esm/session/case/CaseClient.js +208 -0
  724. package/dist/esm/session/case/CaseClient.js.map +6 -0
  725. package/dist/esm/session/case/CaseMessages.d.ts +82 -0
  726. package/dist/esm/session/case/CaseMessages.d.ts.map +1 -0
  727. package/dist/esm/session/case/CaseMessages.js +83 -0
  728. package/dist/esm/session/case/CaseMessages.js.map +6 -0
  729. package/dist/esm/session/case/CaseMessenger.d.ts +79 -0
  730. package/dist/esm/session/case/CaseMessenger.d.ts.map +1 -0
  731. package/dist/esm/session/case/CaseMessenger.js +54 -0
  732. package/dist/esm/session/case/CaseMessenger.js.map +6 -0
  733. package/dist/esm/session/case/CaseServer.d.ts +18 -0
  734. package/dist/esm/session/case/CaseServer.d.ts.map +1 -0
  735. package/dist/esm/session/case/CaseServer.js +224 -0
  736. package/dist/esm/session/case/CaseServer.js.map +6 -0
  737. package/dist/esm/session/index.d.ts +18 -0
  738. package/dist/esm/session/index.d.ts.map +1 -0
  739. package/dist/esm/session/index.js +18 -0
  740. package/dist/esm/session/index.js.map +6 -0
  741. package/dist/esm/session/pase/PaseClient.d.ts +18 -0
  742. package/dist/esm/session/pase/PaseClient.d.ts.map +1 -0
  743. package/dist/esm/session/pase/PaseClient.js +81 -0
  744. package/dist/esm/session/pase/PaseClient.js.map +6 -0
  745. package/dist/esm/session/pase/PaseMessages.d.ts +85 -0
  746. package/dist/esm/session/pase/PaseMessages.d.ts.map +1 -0
  747. package/dist/esm/session/pase/PaseMessages.js +68 -0
  748. package/dist/esm/session/pase/PaseMessages.js.map +6 -0
  749. package/dist/esm/session/pase/PaseMessenger.d.ts +75 -0
  750. package/dist/esm/session/pase/PaseMessenger.d.ts.map +1 -0
  751. package/dist/esm/session/pase/PaseMessenger.js +75 -0
  752. package/dist/esm/session/pase/PaseMessenger.js.map +6 -0
  753. package/dist/esm/session/pase/PaseServer.d.ts +29 -0
  754. package/dist/esm/session/pase/PaseServer.d.ts.map +1 -0
  755. package/dist/esm/session/pase/PaseServer.js +148 -0
  756. package/dist/esm/session/pase/PaseServer.js.map +6 -0
  757. package/dist/esm/tsconfig.tsbuildinfo +1 -0
  758. package/package.json +83 -0
  759. package/src/MatterDevice.ts +319 -0
  760. package/src/ble/Ble.ts +40 -0
  761. package/src/ble/BleConsts.ts +41 -0
  762. package/src/ble/BtpSessionHandler.ts +490 -0
  763. package/src/ble/index.ts +9 -0
  764. package/src/certificate/AttestationCertificateManager.ts +166 -0
  765. package/src/certificate/CertificateManager.ts +1136 -0
  766. package/src/certificate/CertificationDeclarationManager.ts +52 -0
  767. package/src/certificate/ChipPAAuthorities.ts +35 -0
  768. package/src/certificate/DeviceCertification.ts +116 -0
  769. package/src/certificate/RootCertificateManager.ts +179 -0
  770. package/src/certificate/index.ts +12 -0
  771. package/src/cluster/client/AttributeClient.ts +196 -0
  772. package/src/cluster/client/ClusterClient.ts +354 -0
  773. package/src/cluster/client/ClusterClientTypes.ts +257 -0
  774. package/src/cluster/client/EventClient.ts +110 -0
  775. package/src/cluster/client/index.ts +10 -0
  776. package/src/cluster/index.ts +8 -0
  777. package/src/cluster/server/AttributeServer.ts +986 -0
  778. package/src/cluster/server/ClusterDatasource.ts +17 -0
  779. package/src/cluster/server/ClusterServer.ts +46 -0
  780. package/src/cluster/server/CommandServer.ts +89 -0
  781. package/src/cluster/server/EventServer.ts +198 -0
  782. package/src/cluster/server/index.ts +11 -0
  783. package/src/codec/BtpCodec.ts +333 -0
  784. package/src/codec/MessageCodec.ts +276 -0
  785. package/src/codec/index.ts +9 -0
  786. package/src/common/FailsafeContext.ts +330 -0
  787. package/src/common/FailsafeTimer.ts +91 -0
  788. package/src/common/InstanceBroadcaster.ts +220 -0
  789. package/src/common/OperationalCredentialsTypes.ts +24 -0
  790. package/src/common/Scanner.ts +188 -0
  791. package/src/common/index.ts +12 -0
  792. package/src/endpoint/EndpointInterface.ts +41 -0
  793. package/src/endpoint/EndpointStructureLogger.ts +277 -0
  794. package/src/endpoint/index.ts +8 -0
  795. package/src/fabric/Fabric.ts +528 -0
  796. package/src/fabric/FabricManager.ts +231 -0
  797. package/src/fabric/index.ts +8 -0
  798. package/src/index.ts +20 -0
  799. package/src/interaction/AccessControlManager.ts +343 -0
  800. package/src/interaction/AttributeDataDecoder.ts +266 -0
  801. package/src/interaction/AttributeDataEncoder.ts +268 -0
  802. package/src/interaction/EventDataDecoder.ts +133 -0
  803. package/src/interaction/EventHandler.ts +141 -0
  804. package/src/interaction/InteractionClient.ts +1215 -0
  805. package/src/interaction/InteractionEndpointStructure.ts +462 -0
  806. package/src/interaction/InteractionMessenger.ts +592 -0
  807. package/src/interaction/InteractionServer.ts +1428 -0
  808. package/src/interaction/ServerSubscription.ts +908 -0
  809. package/src/interaction/Subscription.ts +89 -0
  810. package/src/interaction/SubscriptionOptions.ts +49 -0
  811. package/src/interaction/index.ts +17 -0
  812. package/src/mdns/MdnsBroadcaster.ts +415 -0
  813. package/src/mdns/MdnsConsts.ts +24 -0
  814. package/src/mdns/MdnsInstanceBroadcaster.ts +88 -0
  815. package/src/mdns/MdnsScanner.ts +1042 -0
  816. package/src/mdns/MdnsServer.ts +322 -0
  817. package/src/mdns/MdnsService.ts +102 -0
  818. package/src/mdns/index.ts +12 -0
  819. package/src/peer/ControllerCommissioner.ts +372 -0
  820. package/src/peer/ControllerCommissioningFlow.ts +1127 -0
  821. package/src/peer/ControllerDiscovery.ts +231 -0
  822. package/src/peer/OperationalPeer.ts +32 -0
  823. package/src/peer/PeerAddress.ts +78 -0
  824. package/src/peer/PeerSet.ts +684 -0
  825. package/src/peer/PeerStore.ts +19 -0
  826. package/src/peer/index.ts +13 -0
  827. package/src/protocol/ChannelManager.ts +168 -0
  828. package/src/protocol/DeviceAdvertiser.ts +208 -0
  829. package/src/protocol/DeviceCommissioner.ts +280 -0
  830. package/src/protocol/ExchangeManager.ts +493 -0
  831. package/src/protocol/MessageCounter.ts +128 -0
  832. package/src/protocol/MessageExchange.ts +662 -0
  833. package/src/protocol/MessageReceptionState.ts +207 -0
  834. package/src/protocol/ProtocolHandler.ts +14 -0
  835. package/src/protocol/index.ts +14 -0
  836. package/src/securechannel/SecureChannelMessenger.ts +166 -0
  837. package/src/securechannel/SecureChannelProtocol.ts +150 -0
  838. package/src/securechannel/SecureChannelStatusMessageSchema.ts +40 -0
  839. package/src/securechannel/index.ts +10 -0
  840. package/src/session/InsecureSession.ts +96 -0
  841. package/src/session/SecureSession.ts +349 -0
  842. package/src/session/Session.ts +188 -0
  843. package/src/session/SessionManager.ts +559 -0
  844. package/src/session/case/CaseClient.ts +235 -0
  845. package/src/session/case/CaseMessages.ts +81 -0
  846. package/src/session/case/CaseMessenger.ts +57 -0
  847. package/src/session/case/CaseServer.ts +269 -0
  848. package/src/session/index.ts +21 -0
  849. package/src/session/pase/PaseClient.ts +100 -0
  850. package/src/session/pase/PaseMessages.ts +72 -0
  851. package/src/session/pase/PaseMessenger.ts +86 -0
  852. package/src/session/pase/PaseServer.ts +187 -0
  853. package/src/tsconfig.json +20 -0
@@ -0,0 +1,1428 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2024 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { Crypto, Diagnostic, InternalError, Logger, MatterFlowError } from "#general";
8
+ import { AttributeModel, ClusterModel, CommandModel, GLOBAL_IDS, MatterModel, Specification } from "#model";
9
+ import { PeerAddress } from "#peer/PeerAddress.js";
10
+ import { SessionManager } from "#session/SessionManager.js";
11
+ import {
12
+ ArraySchema,
13
+ AttributeId,
14
+ ClusterId,
15
+ CommandId,
16
+ DEFAULT_MAX_PATHS_PER_INVOKE,
17
+ EndpointNumber,
18
+ EventId,
19
+ EventNumber,
20
+ INTERACTION_PROTOCOL_ID,
21
+ NodeId,
22
+ StatusCode,
23
+ StatusResponseError,
24
+ TlvAny,
25
+ TlvAttributePath,
26
+ TlvClusterPath,
27
+ TlvCommandPath,
28
+ TlvEventFilter,
29
+ TlvEventPath,
30
+ TlvInvokeResponseData,
31
+ TlvInvokeResponseForSend,
32
+ TlvNoArguments,
33
+ TlvNoResponse,
34
+ TlvSubscribeResponse,
35
+ TypeFromSchema,
36
+ ValidationError,
37
+ } from "#types";
38
+ import { AnyAttributeServer, AttributeServer, FabricScopedAttributeServer } from "../cluster/server/AttributeServer.js";
39
+ import { CommandServer } from "../cluster/server/CommandServer.js";
40
+ import { AnyEventServer } from "../cluster/server/EventServer.js";
41
+ import { Message, SessionType } from "../codec/MessageCodec.js";
42
+ import { EndpointInterface } from "../endpoint/EndpointInterface.js";
43
+ import { MessageExchange } from "../protocol/MessageExchange.js";
44
+ import { ProtocolHandler } from "../protocol/ProtocolHandler.js";
45
+ import { NoAssociatedFabricError, SecureSession, assertSecureSession } from "../session/SecureSession.js";
46
+ import {
47
+ decodeAttributeValueWithSchema,
48
+ decodeListAttributeValueWithSchema,
49
+ expandPathsInAttributeData,
50
+ } from "./AttributeDataDecoder.js";
51
+ import { AttributeReportPayload, DataReportPayload, EventReportPayload } from "./AttributeDataEncoder.js";
52
+ import { InteractionEndpointStructure } from "./InteractionEndpointStructure.js";
53
+ import {
54
+ InteractionRecipient,
55
+ InteractionServerMessenger,
56
+ InvokeRequest,
57
+ MessageType,
58
+ ReadRequest,
59
+ SubscribeRequest,
60
+ TimedRequest,
61
+ WriteRequest,
62
+ WriteResponse,
63
+ } from "./InteractionMessenger.js";
64
+ import { ServerSubscription, ServerSubscriptionContext } from "./ServerSubscription.js";
65
+ import { ServerSubscriptionConfig } from "./SubscriptionOptions.js";
66
+
67
+ const logger = Logger.get("InteractionServer");
68
+
69
+ export interface CommandPath {
70
+ nodeId?: NodeId;
71
+ endpointId: EndpointNumber;
72
+ clusterId: ClusterId;
73
+ commandId: CommandId;
74
+ }
75
+
76
+ export interface AttributePath {
77
+ nodeId?: NodeId;
78
+ endpointId: EndpointNumber;
79
+ clusterId: ClusterId;
80
+ attributeId: AttributeId;
81
+ }
82
+
83
+ export interface EventPath {
84
+ nodeId?: NodeId;
85
+ endpointId: EndpointNumber;
86
+ clusterId: ClusterId;
87
+ eventId: EventId;
88
+ isUrgent?: boolean;
89
+ }
90
+
91
+ export interface AttributeWithPath {
92
+ path: AttributePath;
93
+ attribute: AnyAttributeServer<any>;
94
+ }
95
+
96
+ export interface EventWithPath {
97
+ path: EventPath;
98
+ event: AnyEventServer<any, any>;
99
+ }
100
+
101
+ export interface CommandWithPath {
102
+ path: CommandPath;
103
+ command: CommandServer<any, any>;
104
+ }
105
+
106
+ export function genericElementPathToId(
107
+ endpointId: EndpointNumber | undefined,
108
+ clusterId: ClusterId | undefined,
109
+ elementId: number | undefined,
110
+ ) {
111
+ return `${endpointId}/${clusterId}/${elementId}`;
112
+ }
113
+
114
+ export function commandPathToId({ endpointId, clusterId, commandId }: CommandPath) {
115
+ return genericElementPathToId(endpointId, clusterId, commandId);
116
+ }
117
+
118
+ export function attributePathToId({ endpointId, clusterId, attributeId }: TypeFromSchema<typeof TlvAttributePath>) {
119
+ return genericElementPathToId(endpointId, clusterId, attributeId);
120
+ }
121
+
122
+ export function eventPathToId({ endpointId, clusterId, eventId }: TypeFromSchema<typeof TlvEventPath>) {
123
+ return genericElementPathToId(endpointId, clusterId, eventId);
124
+ }
125
+
126
+ export function clusterPathToId({ nodeId, endpointId, clusterId }: TypeFromSchema<typeof TlvClusterPath>) {
127
+ return `${nodeId}/${endpointId}/${clusterId}`;
128
+ }
129
+
130
+ function isConcreteAttributePath(
131
+ path: TypeFromSchema<typeof TlvAttributePath>,
132
+ ): path is TypeFromSchema<typeof TlvAttributePath> & AttributePath {
133
+ const { endpointId, clusterId, attributeId } = path;
134
+ return endpointId !== undefined && clusterId !== undefined && attributeId !== undefined;
135
+ }
136
+
137
+ export function validateReadAttributesPath(path: TypeFromSchema<typeof TlvAttributePath>, isGroupSession = false) {
138
+ if (isGroupSession) {
139
+ throw new StatusResponseError("Illegal read request with group session", StatusCode.InvalidAction);
140
+ }
141
+ const { clusterId, attributeId } = path;
142
+ if (clusterId === undefined && attributeId !== undefined) {
143
+ if (!GLOBAL_IDS.has(attributeId)) {
144
+ throw new StatusResponseError(
145
+ `Illegal read request for wildcard cluster and non global attribute ${attributeId}`,
146
+ StatusCode.InvalidAction,
147
+ );
148
+ }
149
+ }
150
+ }
151
+
152
+ function validateWriteAttributesPath(path: TypeFromSchema<typeof TlvAttributePath>, isGroupSession = false) {
153
+ const { endpointId, clusterId, attributeId } = path;
154
+ if (clusterId === undefined || attributeId === undefined) {
155
+ throw new StatusResponseError(
156
+ "Illegal write request with wildcard cluster or attribute ID",
157
+ StatusCode.InvalidAction,
158
+ );
159
+ }
160
+ if (isGroupSession && endpointId !== undefined) {
161
+ throw new StatusResponseError("Illegal write request with group ID and endpoint ID", StatusCode.InvalidAction);
162
+ }
163
+ }
164
+
165
+ function isConcreteEventPath(
166
+ path: TypeFromSchema<typeof TlvEventPath>,
167
+ ): path is TypeFromSchema<typeof TlvEventPath> & EventPath {
168
+ const { endpointId, clusterId, eventId } = path;
169
+ return endpointId !== undefined && clusterId !== undefined && eventId !== undefined;
170
+ }
171
+
172
+ export function validateReadEventPath(path: TypeFromSchema<typeof TlvEventPath>, isGroupSession = false) {
173
+ const { clusterId, eventId } = path;
174
+ if (clusterId === undefined && eventId !== undefined) {
175
+ throw new StatusResponseError("Illegal read request with wildcard cluster ID", StatusCode.InvalidAction);
176
+ }
177
+ if (isGroupSession) {
178
+ throw new StatusResponseError("Illegal read request with group session", StatusCode.InvalidAction);
179
+ }
180
+ }
181
+
182
+ function isConcreteCommandPath(
183
+ path: TypeFromSchema<typeof TlvCommandPath>,
184
+ ): path is TypeFromSchema<typeof TlvCommandPath> & CommandPath {
185
+ const { endpointId, clusterId, commandId } = path;
186
+ return endpointId !== undefined && clusterId !== undefined && commandId !== undefined;
187
+ }
188
+
189
+ function validateCommandPath(path: TypeFromSchema<typeof TlvCommandPath>, isGroupSession = false) {
190
+ const { endpointId, clusterId, commandId } = path;
191
+ if (clusterId === undefined || commandId === undefined) {
192
+ throw new StatusResponseError(
193
+ "Illegal write request with wildcard cluster or attribute ID",
194
+ StatusCode.InvalidAction,
195
+ );
196
+ }
197
+ if (isGroupSession && endpointId !== undefined) {
198
+ throw new StatusResponseError("Illegal write request with group ID and endpoint ID", StatusCode.InvalidAction);
199
+ }
200
+ }
201
+
202
+ function getMatterModelCluster(clusterId: ClusterId) {
203
+ return MatterModel.standard.get(ClusterModel, clusterId);
204
+ }
205
+
206
+ function getMatterModelClusterAttribute(clusterId: ClusterId, attributeId: AttributeId) {
207
+ return getMatterModelCluster(clusterId)?.get(AttributeModel, attributeId);
208
+ }
209
+
210
+ function getMatterModelClusterCommand(clusterId: ClusterId, commandId: CommandId) {
211
+ return getMatterModelCluster(clusterId)?.get(CommandModel, commandId);
212
+ }
213
+
214
+ /**
215
+ * Interfaces {@link InteractionServer} with other components.
216
+ */
217
+ export interface InteractionContext {
218
+ readonly sessions: SessionManager;
219
+ readonly structure: InteractionEndpointStructure;
220
+ readonly subscriptionOptions?: Partial<ServerSubscriptionConfig>;
221
+ readonly maxPathsPerInvoke?: number;
222
+ initiateExchange(address: PeerAddress, protocolId: number): MessageExchange;
223
+ }
224
+
225
+ /**
226
+ * Translates interactions from the Matter protocol to Matter.js APIs.
227
+ */
228
+ export class InteractionServer implements ProtocolHandler, InteractionRecipient {
229
+ #context: InteractionContext;
230
+ #nextSubscriptionId = Crypto.getRandomUInt32();
231
+ #isClosing = false;
232
+ readonly #subscriptionConfig: ServerSubscriptionConfig;
233
+ readonly #maxPathsPerInvoke;
234
+
235
+ constructor(context: InteractionContext) {
236
+ this.#context = context;
237
+
238
+ this.#subscriptionConfig = ServerSubscriptionConfig.of(context.subscriptionOptions);
239
+ this.#maxPathsPerInvoke = context.maxPathsPerInvoke ?? DEFAULT_MAX_PATHS_PER_INVOKE;
240
+
241
+ this.#context.structure.change.on(async () => {
242
+ this.#context.sessions.updateAllSubscriptions();
243
+ });
244
+ }
245
+
246
+ getId() {
247
+ return INTERACTION_PROTOCOL_ID;
248
+ }
249
+
250
+ protected get isClosing() {
251
+ return this.#isClosing;
252
+ }
253
+
254
+ get maxPathsPerInvoke() {
255
+ return this.#maxPathsPerInvoke;
256
+ }
257
+
258
+ async onNewExchange(exchange: MessageExchange) {
259
+ // Note - changes here must be copied to TransactionalInteractionServer as it does not call super() to avoid
260
+ // the stack frame
261
+ if (this.#isClosing) return; // We are closing, ignore anything newly incoming
262
+ await new InteractionServerMessenger(exchange).handleRequest(this);
263
+ }
264
+
265
+ async handleReadRequest(
266
+ exchange: MessageExchange,
267
+ {
268
+ attributeRequests,
269
+ dataVersionFilters,
270
+ eventRequests,
271
+ eventFilters,
272
+ isFabricFiltered,
273
+ interactionModelRevision,
274
+ }: ReadRequest,
275
+ message: Message,
276
+ ): Promise<DataReportPayload> {
277
+ logger.debug(
278
+ `Received read request from ${exchange.channel.name}: attributes:${
279
+ attributeRequests?.map(path => this.#endpointStructure.resolveAttributeName(path)).join(", ") ?? "none"
280
+ }, events:${
281
+ eventRequests?.map(path => this.#endpointStructure.resolveEventName(path)).join(", ") ?? "none"
282
+ } isFabricFiltered=${isFabricFiltered}`,
283
+ );
284
+
285
+ if (interactionModelRevision > Specification.INTERACTION_MODEL_REVISION) {
286
+ logger.debug(
287
+ `Interaction model revision of sender ${interactionModelRevision} is higher than supported ${Specification.INTERACTION_MODEL_REVISION}.`,
288
+ );
289
+ }
290
+ if (attributeRequests === undefined && eventRequests === undefined) {
291
+ throw new StatusResponseError(
292
+ "Only Read requests with attributeRequests or eventRequests are supported right now",
293
+ StatusCode.UnsupportedRead,
294
+ );
295
+ }
296
+
297
+ if (message.packetHeader.sessionType !== SessionType.Unicast) {
298
+ throw new StatusResponseError(
299
+ "Subscriptions are only allowed on unicast sessions",
300
+ StatusCode.InvalidAction,
301
+ );
302
+ }
303
+
304
+ const dataVersionFilterMap = new Map<string, number>(
305
+ dataVersionFilters?.map(({ path, dataVersion }) => [clusterPathToId(path), dataVersion]) ?? [],
306
+ );
307
+ if (dataVersionFilterMap.size > 0) {
308
+ logger.debug(
309
+ `DataVersionFilters: ${Array.from(dataVersionFilterMap.entries())
310
+ .map(([path, version]) => `${path}=${version}`)
311
+ .join(", ")}`,
312
+ );
313
+ }
314
+
315
+ const attributeReportsPayload = new Array<AttributeReportPayload>();
316
+ for (const requestPath of attributeRequests ?? []) {
317
+ validateReadAttributesPath(requestPath);
318
+
319
+ const attributes = this.#endpointStructure.getAttributes([requestPath]);
320
+
321
+ // Requested attribute path not found in any cluster server on any endpoint
322
+ if (attributes.length === 0) {
323
+ // TODO Add checks for nodeId -> UnknownNode
324
+ if (isConcreteAttributePath(requestPath)) {
325
+ const { endpointId, clusterId, attributeId } = requestPath;
326
+ // Concrete path, but still unknown for us, so generate the right error status
327
+ try {
328
+ this.#endpointStructure.validateConcreteAttributePath(endpointId, clusterId, attributeId);
329
+ throw new InternalError(
330
+ "validateConcreteAttributePath should throw StatusResponseError but did not.",
331
+ );
332
+ } catch (e) {
333
+ StatusResponseError.accept(e);
334
+ logger.debug(
335
+ `Error reading attribute from ${
336
+ exchange.channel.name
337
+ }: ${this.#endpointStructure.resolveAttributeName(requestPath)}: unsupported path: Status=${
338
+ e.code
339
+ }`,
340
+ );
341
+ attributeReportsPayload.push({
342
+ hasFabricSensitiveData: false,
343
+ attributeStatus: { path: requestPath, status: { status: e.code } },
344
+ });
345
+ }
346
+ }
347
+
348
+ // Wildcard path and we do not know any of the attributes: Ignore the error
349
+ logger.debug(
350
+ `Read from ${exchange.channel.name}: ${this.#endpointStructure.resolveAttributeName(
351
+ requestPath,
352
+ )}: ${this.#endpointStructure.resolveAttributeName(requestPath)}: ignore non-existing attribute`,
353
+ );
354
+ continue;
355
+ }
356
+
357
+ // Process all known attributes for the given path
358
+ for (const { path, attribute } of attributes) {
359
+ const { nodeId, endpointId, clusterId } = path;
360
+
361
+ try {
362
+ // We accept attributes not in the model ans readable, because existence is checked already
363
+ if (getMatterModelClusterAttribute(clusterId, attribute.id)?.readable === false) {
364
+ throw new StatusResponseError(
365
+ `Attribute ${attribute.id} is not readable.`,
366
+ StatusCode.UnsupportedRead,
367
+ );
368
+ }
369
+
370
+ let value, version;
371
+ try {
372
+ ({ value, version } = await this.readAttribute(
373
+ path,
374
+ attribute,
375
+ exchange,
376
+ isFabricFiltered,
377
+ message,
378
+ this.#endpointStructure.getEndpoint(endpointId)!,
379
+ ));
380
+ } catch (e) {
381
+ NoAssociatedFabricError.accept(e);
382
+
383
+ // TODO: Remove when we remove legacy API
384
+ // This is not fully correct but should be sufficient for now
385
+ // This is fixed in the new API already, so this error should never throw
386
+ // Fabric scoped attributes are access errors, fabric sensitive attributes are just filtered
387
+ // Assume for now that in this place we only need to handle fabric sensitive case
388
+ if (endpointId === undefined || clusterId === undefined) {
389
+ throw new MatterFlowError("Should never happen");
390
+ }
391
+ const cluster = this.#endpointStructure.getClusterServer(endpointId, clusterId);
392
+ if (cluster === undefined || cluster.datasource == undefined) {
393
+ throw new MatterFlowError("Should never happen");
394
+ }
395
+ version = cluster.datasource.version;
396
+ value = [];
397
+ }
398
+
399
+ const versionFilterValue =
400
+ endpointId !== undefined && clusterId !== undefined
401
+ ? dataVersionFilterMap.get(clusterPathToId({ nodeId, endpointId, clusterId }))
402
+ : undefined;
403
+ if (versionFilterValue !== undefined && versionFilterValue === version) {
404
+ logger.debug(
405
+ `Read attribute from ${exchange.channel.name}: ${this.#endpointStructure.resolveAttributeName(
406
+ path,
407
+ )}=${Logger.toJSON(value)} (version=${version}) ignored because of dataVersionFilter`,
408
+ );
409
+ continue;
410
+ }
411
+
412
+ logger.debug(
413
+ `Read attribute from ${exchange.channel.name}: ${this.#endpointStructure.resolveAttributeName(
414
+ path,
415
+ )}=${Logger.toJSON(value)} (version=${version})`,
416
+ );
417
+
418
+ const { schema } = attribute;
419
+ attributeReportsPayload.push({
420
+ hasFabricSensitiveData: attribute.hasFabricSensitiveData,
421
+ attributeData: { path, dataVersion: version, payload: value, schema },
422
+ });
423
+ } catch (error) {
424
+ logger.error(
425
+ `Error while reading attribute from ${
426
+ exchange.channel.name
427
+ } to ${this.#endpointStructure.resolveAttributeName(path)}:`,
428
+ error,
429
+ );
430
+
431
+ StatusResponseError.accept(error);
432
+
433
+ // Add StatusResponseErrors, but only when the initial path was concrete, else error are ignored
434
+ if (isConcreteAttributePath(requestPath)) {
435
+ attributeReportsPayload.push({
436
+ hasFabricSensitiveData: false,
437
+ attributeStatus: { path, status: { status: error.code } },
438
+ });
439
+ }
440
+ }
441
+ }
442
+ }
443
+
444
+ let eventReportsPayload: undefined | EventReportPayload[];
445
+ if (eventRequests) {
446
+ eventReportsPayload = [];
447
+ for (const requestPath of eventRequests) {
448
+ validateReadEventPath(requestPath);
449
+
450
+ const events = this.#endpointStructure.getEvents([requestPath]);
451
+
452
+ // Requested event path not found in any cluster server on any endpoint
453
+ if (events.length === 0) {
454
+ if (isConcreteEventPath(requestPath)) {
455
+ const { endpointId, clusterId, eventId } = requestPath;
456
+ try {
457
+ this.#endpointStructure.validateConcreteEventPath(endpointId, clusterId, eventId);
458
+ throw new InternalError(
459
+ "validateConcreteEventPath should throw StatusResponseError but did not.",
460
+ );
461
+ } catch (e) {
462
+ StatusResponseError.accept(e);
463
+
464
+ logger.debug(
465
+ `Read event from ${
466
+ exchange.channel.name
467
+ }: ${this.#endpointStructure.resolveEventName(requestPath)}: unsupported path: Status=${
468
+ e.code
469
+ }`,
470
+ );
471
+ eventReportsPayload?.push({
472
+ hasFabricSensitiveData: false,
473
+ eventStatus: { path: requestPath, status: { status: e.code } },
474
+ });
475
+ }
476
+ }
477
+ // Wildcard path: Just leave out values
478
+ logger.debug(
479
+ `Read event from ${exchange.channel.name}: ${this.#endpointStructure.resolveEventName(
480
+ requestPath,
481
+ )}: ignore non-existing event`,
482
+ );
483
+ continue;
484
+ }
485
+
486
+ const reportsForPath = new Array<EventReportPayload>();
487
+ for (const { path, event } of events) {
488
+ try {
489
+ const { endpointId } = path;
490
+ const matchingEvents = await this.readEvent(
491
+ path,
492
+ eventFilters,
493
+ event,
494
+ exchange,
495
+ isFabricFiltered,
496
+ message,
497
+ this.#endpointStructure.getEndpoint(endpointId)!,
498
+ );
499
+ logger.debug(
500
+ `Read event from ${exchange.channel.name}: ${this.#endpointStructure.resolveEventName(
501
+ path,
502
+ )}=${Logger.toJSON(matchingEvents)}`,
503
+ );
504
+ const { schema } = event;
505
+ reportsForPath.push(
506
+ ...matchingEvents.map(({ eventNumber, priority, epochTimestamp, data }) => ({
507
+ hasFabricSensitiveData: event.hasFabricSensitiveData,
508
+ eventData: {
509
+ path,
510
+ eventNumber,
511
+ priority,
512
+ epochTimestamp,
513
+ payload: data,
514
+ schema,
515
+ },
516
+ })),
517
+ );
518
+ } catch (error) {
519
+ logger.error(
520
+ `Error while reading event from ${
521
+ exchange.channel.name
522
+ } to ${this.#endpointStructure.resolveEventName(path)}:`,
523
+ error,
524
+ );
525
+
526
+ StatusResponseError.accept(error);
527
+
528
+ // Add StatusResponseErrors, but only when the initial path was concrete, else error are ignored
529
+ if (isConcreteEventPath(requestPath)) {
530
+ eventReportsPayload?.push({
531
+ hasFabricSensitiveData: false,
532
+ eventStatus: { path, status: { status: error.code } },
533
+ });
534
+ }
535
+ }
536
+ }
537
+ eventReportsPayload.push(
538
+ ...reportsForPath.sort((a, b) => {
539
+ const eventNumberA = a.eventData?.eventNumber ?? EventNumber(0);
540
+ const eventNumberB = b.eventData?.eventNumber ?? EventNumber(0);
541
+ if (eventNumberA > eventNumberB) {
542
+ return 1;
543
+ } else if (eventNumberA < eventNumberB) {
544
+ return -1;
545
+ } else {
546
+ return 0;
547
+ }
548
+ }),
549
+ );
550
+ }
551
+ }
552
+
553
+ return {
554
+ interactionModelRevision: Specification.INTERACTION_MODEL_REVISION,
555
+ suppressResponse: true,
556
+ attributeReportsPayload,
557
+ eventReportsPayload,
558
+ };
559
+ }
560
+
561
+ protected async readAttribute(
562
+ _path: AttributePath,
563
+ attribute: AnyAttributeServer<any>,
564
+ exchange: MessageExchange,
565
+ isFabricFiltered: boolean,
566
+ message: Message,
567
+ _endpoint: EndpointInterface,
568
+ offline = false,
569
+ ) {
570
+ return attribute.getWithVersion(exchange.session, isFabricFiltered, offline ? undefined : message);
571
+ }
572
+
573
+ protected async readEvent(
574
+ _path: EventPath,
575
+ eventFilters: TypeFromSchema<typeof TlvEventFilter>[] | undefined,
576
+ event: AnyEventServer<any, any>,
577
+ exchange: MessageExchange,
578
+ isFabricFiltered: boolean,
579
+ message: Message,
580
+ _endpoint: EndpointInterface,
581
+ ) {
582
+ return event.get(exchange.session, isFabricFiltered, message, eventFilters);
583
+ }
584
+
585
+ async handleWriteRequest(
586
+ exchange: MessageExchange,
587
+ { suppressResponse, timedRequest, writeRequests, interactionModelRevision, moreChunkedMessages }: WriteRequest,
588
+ message: Message,
589
+ ): Promise<WriteResponse> {
590
+ const sessionType = message.packetHeader.sessionType;
591
+ logger.debug(
592
+ `Received write request from ${exchange.channel.name}: ${writeRequests
593
+ .map(req => this.#endpointStructure.resolveAttributeName(req.path))
594
+ .join(", ")}, suppressResponse=${suppressResponse}, moreChunkedMessages=${moreChunkedMessages}`,
595
+ );
596
+
597
+ if (moreChunkedMessages && suppressResponse) {
598
+ throw new StatusResponseError(
599
+ "MoreChunkedMessages and SuppressResponse cannot be used together in write messages",
600
+ StatusCode.InvalidAction,
601
+ );
602
+ }
603
+
604
+ if (interactionModelRevision > Specification.INTERACTION_MODEL_REVISION) {
605
+ logger.debug(
606
+ `Interaction model revision of sender ${interactionModelRevision} is higher than supported ${Specification.INTERACTION_MODEL_REVISION}.`,
607
+ );
608
+ }
609
+
610
+ const receivedWithinTimedInteraction = exchange.hasActiveTimedInteraction();
611
+
612
+ if (receivedWithinTimedInteraction && moreChunkedMessages) {
613
+ throw new StatusResponseError(
614
+ "Write Request action that is part of a Timed Write Interaction SHALL NOT be chunked.",
615
+ StatusCode.InvalidAction,
616
+ );
617
+ }
618
+
619
+ if (exchange.hasExpiredTimedInteraction()) {
620
+ exchange.clearTimedInteraction(); // ??
621
+ throw new StatusResponseError(`Timed request window expired. Decline write request.`, StatusCode.Timeout);
622
+ }
623
+
624
+ if (timedRequest !== exchange.hasTimedInteraction()) {
625
+ throw new StatusResponseError(
626
+ `timedRequest flag of write interaction (${timedRequest}) mismatch with expected timed interaction (${receivedWithinTimedInteraction}).`,
627
+ StatusCode.TimedRequestMismatch,
628
+ );
629
+ }
630
+
631
+ if (receivedWithinTimedInteraction) {
632
+ logger.debug(
633
+ `Write request from ${exchange.channel.name} successfully received while timed interaction is running.`,
634
+ );
635
+ exchange.clearTimedInteraction();
636
+ if (sessionType !== SessionType.Unicast) {
637
+ throw new StatusResponseError(
638
+ "Write requests are only allowed on unicast sessions when a timed interaction is running.",
639
+ StatusCode.InvalidAction,
640
+ );
641
+ }
642
+ }
643
+
644
+ if (sessionType === SessionType.Group && !suppressResponse) {
645
+ throw new StatusResponseError(
646
+ "Write requests are only allowed as group casts when suppressResponse=true.",
647
+ StatusCode.InvalidAction,
648
+ );
649
+ }
650
+
651
+ const writeData = expandPathsInAttributeData(writeRequests, true);
652
+
653
+ const writeResults = new Array<{
654
+ path: TypeFromSchema<typeof TlvAttributePath>;
655
+ statusCode: StatusCode;
656
+ clusterStatusCode?: number;
657
+ }>();
658
+ const attributeListWrites = new Set<AttributeServer<any>>();
659
+ const clusterDataVersionInfo = new Map<string, number>();
660
+ const inaccessiblePaths = new Set<string>();
661
+
662
+ // TODO Add handling for moreChunkedMessages here when adopting for Matter 1.3
663
+
664
+ for (const writeRequest of writeData) {
665
+ const { path: writePath, dataVersion } = writeRequest;
666
+
667
+ validateWriteAttributesPath(writePath);
668
+
669
+ const attributes = this.#endpointStructure.getAttributes([writePath], true);
670
+
671
+ // No existing attribute matches the given path and is writable
672
+ if (attributes.length === 0) {
673
+ if (isConcreteAttributePath(writePath)) {
674
+ const { endpointId, clusterId, attributeId } = writePath;
675
+
676
+ // was a concrete path
677
+ try {
678
+ this.#endpointStructure.validateConcreteAttributePath(endpointId, clusterId, attributeId);
679
+
680
+ // Ok it is a valid concrete path, so it is not writable
681
+ throw new StatusResponseError(
682
+ `Attribute ${attributeId} is not writable.`,
683
+ StatusCode.UnsupportedWrite,
684
+ );
685
+ } catch (e) {
686
+ StatusResponseError.accept(e);
687
+
688
+ logger.debug(
689
+ `Write from ${exchange.channel.name}: ${this.#endpointStructure.resolveAttributeName(
690
+ writePath,
691
+ )} not allowed: Status=${e.code}`,
692
+ );
693
+ writeResults.push({ path: writePath, statusCode: e.code });
694
+ }
695
+ } else {
696
+ // Wildcard path: Just ignore
697
+ logger.debug(
698
+ `Write from ${exchange.channel.name}: ${this.#endpointStructure.resolveAttributeName(
699
+ writePath,
700
+ )}: ignore non-existing (wildcard) attribute`,
701
+ );
702
+ }
703
+ continue;
704
+ }
705
+
706
+ // Concrete path and found and writable
707
+ if (attributes.length === 1 && isConcreteAttributePath(writePath)) {
708
+ const { endpointId, clusterId } = writePath;
709
+ const { attribute } = attributes[0];
710
+
711
+ if (attribute.requiresTimedInteraction && !receivedWithinTimedInteraction) {
712
+ logger.debug(`This write requires a timed interaction which is not initialized.`);
713
+ writeResults.push({ path: writePath, statusCode: StatusCode.NeedsTimedInteraction });
714
+ continue;
715
+ }
716
+
717
+ if (
718
+ attribute instanceof FabricScopedAttributeServer &&
719
+ (!exchange.session.isSecure || !(exchange.session as SecureSession).fabric)
720
+ ) {
721
+ logger.debug(`This write requires a secure session with a fabric assigned which is missing.`);
722
+ writeResults.push({ path: writePath, statusCode: StatusCode.UnsupportedAccess });
723
+ continue;
724
+ }
725
+
726
+ // Check the provided dataVersion with the dataVersion of the cluster
727
+ // And remember this initial dataVersion for all checks inside this write transaction to allow proper
728
+ // processing of chunked lists
729
+ if (dataVersion !== undefined) {
730
+ const datasource = this.#endpointStructure.getClusterServer(endpointId, clusterId)?.datasource;
731
+ const { nodeId } = writePath;
732
+ const clusterKey = clusterPathToId({ nodeId, endpointId, clusterId });
733
+ const currentDataVersion = clusterDataVersionInfo.get(clusterKey) ?? datasource?.version;
734
+
735
+ if (currentDataVersion !== undefined) {
736
+ if (dataVersion !== currentDataVersion) {
737
+ logger.debug(
738
+ `This write requires a specific data version (${dataVersion}) which do not match the current cluster data version (${currentDataVersion}).`,
739
+ );
740
+ writeResults.push({ path: writePath, statusCode: StatusCode.DataVersionMismatch });
741
+ continue;
742
+ }
743
+ clusterDataVersionInfo.set(clusterKey, currentDataVersion);
744
+ }
745
+ }
746
+ }
747
+
748
+ for (const { path, attribute } of attributes) {
749
+ const { schema, defaultValue } = attribute;
750
+ const pathId = attributePathToId(path);
751
+
752
+ try {
753
+ if (
754
+ !(attribute instanceof AttributeServer) &&
755
+ !(attribute instanceof FabricScopedAttributeServer)
756
+ ) {
757
+ throw new StatusResponseError(
758
+ "Fixed attributes cannot be written",
759
+ StatusCode.UnsupportedWrite,
760
+ );
761
+ }
762
+
763
+ if (inaccessiblePaths.has(pathId)) {
764
+ logger.debug(`This write is not allowed due to previous access denied.`);
765
+ continue;
766
+ }
767
+
768
+ const { endpointId } = path;
769
+ const { listIndex } = writePath;
770
+ const value =
771
+ listIndex === undefined
772
+ ? decodeAttributeValueWithSchema(schema, [writeRequest], defaultValue)
773
+ : decodeListAttributeValueWithSchema(
774
+ schema,
775
+ [writeRequest],
776
+ (
777
+ await this.readAttribute(
778
+ path,
779
+ attribute,
780
+ exchange,
781
+ true,
782
+ message,
783
+ this.#endpointStructure.getEndpoint(endpointId)!,
784
+ )
785
+ ).value ?? defaultValue,
786
+ );
787
+ logger.debug(
788
+ `Handle write request from ${
789
+ exchange.channel.name
790
+ } resolved to: ${this.#endpointStructure.resolveAttributeName(path)}=${Logger.toJSON(
791
+ value,
792
+ )} (listIndex=${listIndex}, for-version=${dataVersion})`,
793
+ );
794
+
795
+ if (attribute.requiresTimedInteraction && !receivedWithinTimedInteraction) {
796
+ logger.debug(`This write requires a timed interaction which is not initialized.`);
797
+ throw new StatusResponseError(
798
+ "This write requires a timed interaction which is not initialized.",
799
+ StatusCode.NeedsTimedInteraction,
800
+ );
801
+ }
802
+
803
+ await this.writeAttribute(
804
+ path,
805
+ attribute,
806
+ value,
807
+ exchange,
808
+ message,
809
+ this.#endpointStructure.getEndpoint(endpointId)!,
810
+ receivedWithinTimedInteraction,
811
+ schema instanceof ArraySchema,
812
+ );
813
+ if (schema instanceof ArraySchema && !attributeListWrites.has(attribute)) {
814
+ attributeListWrites.add(attribute);
815
+ }
816
+ } catch (error: any) {
817
+ if (StatusResponseError.is(error, StatusCode.UnsupportedAccess)) {
818
+ inaccessiblePaths.add(pathId);
819
+ }
820
+ if (attributes.length === 1 && isConcreteAttributePath(writePath)) {
821
+ // For Multi-Attribute-Writes we ignore errors
822
+ logger.error(
823
+ `Error while handling write request from ${
824
+ exchange.channel.name
825
+ } to ${this.#endpointStructure.resolveAttributeName(path)}:`,
826
+ error instanceof StatusResponseError ? error.message : error,
827
+ );
828
+ if (error instanceof StatusResponseError) {
829
+ writeResults.push({ path, statusCode: error.code, clusterStatusCode: error.clusterCode });
830
+ continue;
831
+ }
832
+ writeResults.push({ path, statusCode: StatusCode.ConstraintError });
833
+ continue;
834
+ } else {
835
+ logger.debug(
836
+ `While handling write request from ${
837
+ exchange.channel.name
838
+ } to ${this.#endpointStructure.resolveAttributeName(path)} ignored: ${error.message}`,
839
+ );
840
+
841
+ // TODO - This behavior may be wrong.
842
+ //
843
+ // If a wildcard write fails we should either:
844
+ //
845
+ // 1. Ignore entirely (add nothing to write results), or
846
+ // 2. Add an error response for the concrete attribute that failed.
847
+ //
848
+ // Spec is a little ambiguous. After request path expansion, in core 1.2 8.7.3.2 it states:
849
+ //
850
+ // "If the path indicates attribute data that is not writable, then the path SHALL be
851
+ // discarded"
852
+ //
853
+ // So is this "not writable" -- so it should be #1 -- or is this "writable" but with invalid
854
+ // data? The latter is error case #2 but spec doesn't make clear what the status code would
855
+ // be... We could fall back to CONSTRAINT_ERROR like we do above though
856
+ //
857
+ // Currently what we do is add a success response for every concrete path that fails.
858
+ }
859
+ }
860
+ writeResults.push({ path, statusCode: StatusCode.Success });
861
+ }
862
+ //.filter(({ statusCode }) => statusCode !== StatusCode.Success); // see https://github.com/project-chip/connectedhomeip/issues/26198
863
+ }
864
+
865
+ const errorResults = writeResults.filter(({ statusCode }) => statusCode !== StatusCode.Success);
866
+ logger.debug(
867
+ `Write request from ${exchange.channel.name} done ${
868
+ errorResults.length
869
+ ? `with following errors: ${errorResults
870
+ .map(
871
+ ({ path, statusCode }) =>
872
+ `${this.#endpointStructure.resolveAttributeName(path)}=${Logger.toJSON(statusCode)}`,
873
+ )
874
+ .join(", ")}`
875
+ : "without errors"
876
+ }`,
877
+ );
878
+
879
+ const response = {
880
+ interactionModelRevision: Specification.INTERACTION_MODEL_REVISION,
881
+ writeResponses: writeResults.map(({ path, statusCode, clusterStatusCode }) => ({
882
+ path,
883
+ status: { status: statusCode, clusterStatus: clusterStatusCode },
884
+ })),
885
+ };
886
+
887
+ // Trigger attribute events for delayed list writes
888
+ for (const attribute of attributeListWrites.values()) {
889
+ try {
890
+ attribute.triggerDelayedChangeEvents();
891
+ } catch (error) {
892
+ logger.error(
893
+ `Ignored Error while writing attribute from ${exchange.channel.name} to ${attribute.name}:`,
894
+ error,
895
+ );
896
+ }
897
+ }
898
+
899
+ return response;
900
+ }
901
+
902
+ protected async writeAttribute(
903
+ _path: AttributePath,
904
+ attribute: AttributeServer<any>,
905
+ value: any,
906
+ exchange: MessageExchange,
907
+ message: Message,
908
+ _endpoint: EndpointInterface,
909
+ _receivedWithinTimedInteraction?: boolean,
910
+ isListWrite = false,
911
+ ) {
912
+ attribute.set(value, exchange.session, message, isListWrite);
913
+ }
914
+
915
+ async handleSubscribeRequest(
916
+ exchange: MessageExchange,
917
+ {
918
+ minIntervalFloorSeconds,
919
+ maxIntervalCeilingSeconds,
920
+ attributeRequests,
921
+ dataVersionFilters,
922
+ eventRequests,
923
+ eventFilters,
924
+ keepSubscriptions,
925
+ isFabricFiltered,
926
+ interactionModelRevision,
927
+ }: SubscribeRequest,
928
+ messenger: InteractionServerMessenger,
929
+ message: Message,
930
+ ): Promise<void> {
931
+ logger.debug(
932
+ `Received subscribe request from ${exchange.channel.name} (keepSubscriptions=${keepSubscriptions}, isFabricFiltered=${isFabricFiltered})`,
933
+ );
934
+
935
+ if (interactionModelRevision > Specification.INTERACTION_MODEL_REVISION) {
936
+ logger.debug(
937
+ `Interaction model revision of sender ${interactionModelRevision} is higher than supported ${Specification.INTERACTION_MODEL_REVISION}.`,
938
+ );
939
+ }
940
+
941
+ if (message.packetHeader.sessionType !== SessionType.Unicast) {
942
+ throw new StatusResponseError(
943
+ "Subscriptions are only allowed on unicast sessions",
944
+ StatusCode.InvalidAction,
945
+ );
946
+ }
947
+
948
+ assertSecureSession(exchange.session, "Subscriptions are only implemented on secure sessions");
949
+ const session = exchange.session;
950
+ const fabric = session.fabric;
951
+ if (fabric === undefined)
952
+ throw new StatusResponseError(
953
+ "Subscriptions are only implemented after a fabric has been assigned",
954
+ StatusCode.InvalidAction,
955
+ );
956
+
957
+ if (!keepSubscriptions) {
958
+ logger.debug(
959
+ `Clear subscriptions for Subscriber node ${session.peerNodeId} because keepSubscriptions=false`,
960
+ );
961
+ await this.#context.sessions.clearSubscriptionsForNode(fabric.fabricIndex, session.peerNodeId, true);
962
+ }
963
+
964
+ if (
965
+ (!Array.isArray(attributeRequests) || attributeRequests.length === 0) &&
966
+ (!Array.isArray(eventRequests) || eventRequests.length === 0)
967
+ ) {
968
+ throw new StatusResponseError("No attributes or events requested", StatusCode.InvalidAction);
969
+ }
970
+
971
+ logger.debug(
972
+ `Subscribe to attributes:${
973
+ attributeRequests?.map(path => this.#endpointStructure.resolveAttributeName(path)).join(", ") ?? "none"
974
+ }, events:${
975
+ eventRequests?.map(path => this.#endpointStructure.resolveEventName(path)).join(", ") ?? "none"
976
+ }`,
977
+ );
978
+
979
+ if (dataVersionFilters !== undefined && dataVersionFilters.length > 0) {
980
+ logger.debug(
981
+ `DataVersionFilters: ${dataVersionFilters
982
+ .map(
983
+ ({ path: { nodeId, endpointId, clusterId }, dataVersion }) =>
984
+ `${clusterPathToId({ nodeId, endpointId, clusterId })}=${dataVersion}`,
985
+ )
986
+ .join(", ")}`,
987
+ );
988
+ }
989
+ if (eventFilters !== undefined && eventFilters.length > 0)
990
+ logger.debug(
991
+ `Event filters: ${eventFilters.map(filter => `${filter.nodeId}/${filter.eventMin}`).join(", ")}`,
992
+ );
993
+
994
+ // Validate of the paths before proceeding
995
+ attributeRequests?.forEach(path => validateReadAttributesPath(path));
996
+ eventRequests?.forEach(path => validateReadEventPath(path));
997
+
998
+ if (minIntervalFloorSeconds < 0) {
999
+ throw new StatusResponseError(
1000
+ "minIntervalFloorSeconds should be greater or equal to 0",
1001
+ StatusCode.InvalidAction,
1002
+ );
1003
+ }
1004
+ if (maxIntervalCeilingSeconds < 0) {
1005
+ throw new StatusResponseError(
1006
+ "maxIntervalCeilingSeconds should be greater or equal to 1",
1007
+ StatusCode.InvalidAction,
1008
+ );
1009
+ }
1010
+ if (maxIntervalCeilingSeconds < minIntervalFloorSeconds) {
1011
+ throw new StatusResponseError(
1012
+ "maxIntervalCeilingSeconds should be greater or equal to minIntervalFloorSeconds",
1013
+ StatusCode.InvalidAction,
1014
+ );
1015
+ }
1016
+
1017
+ if (this.#nextSubscriptionId === 0xffffffff) this.#nextSubscriptionId = 0;
1018
+ const subscriptionId = this.#nextSubscriptionId++;
1019
+
1020
+ const context: ServerSubscriptionContext = {
1021
+ session,
1022
+ structure: this.#endpointStructure,
1023
+
1024
+ readAttribute: (path, attribute, offline) =>
1025
+ this.readAttribute(
1026
+ path,
1027
+ attribute,
1028
+ exchange,
1029
+ isFabricFiltered,
1030
+ message,
1031
+ this.#endpointStructure.getEndpoint(path.endpointId)!,
1032
+ offline,
1033
+ ),
1034
+
1035
+ readEvent: (path, event, eventFilters) =>
1036
+ this.readEvent(
1037
+ path,
1038
+ eventFilters,
1039
+ event,
1040
+ exchange,
1041
+ isFabricFiltered,
1042
+ message,
1043
+ this.#endpointStructure.getEndpoint(path.endpointId)!,
1044
+ ),
1045
+
1046
+ initiateExchange: (address: PeerAddress, protocolId) => this.#context.initiateExchange(address, protocolId),
1047
+ };
1048
+
1049
+ const subscription = new ServerSubscription({
1050
+ id: subscriptionId,
1051
+ context,
1052
+ criteria: {
1053
+ attributeRequests,
1054
+ dataVersionFilters,
1055
+ eventRequests,
1056
+ eventFilters,
1057
+ isFabricFiltered,
1058
+ },
1059
+ minIntervalFloor: minIntervalFloorSeconds,
1060
+ maxIntervalCeiling: maxIntervalCeilingSeconds,
1061
+ subscriptionOptions: this.#subscriptionConfig,
1062
+ });
1063
+
1064
+ try {
1065
+ // Send initial data report to prime the subscription with initial data
1066
+ await subscription.sendInitialReport(messenger);
1067
+ } catch (error: any) {
1068
+ logger.error(
1069
+ `Subscription ${subscriptionId} for Session ${session.id}: Error while sending initial data reports`,
1070
+ error,
1071
+ );
1072
+ await subscription.close(); // Cleanup
1073
+ if (error instanceof StatusResponseError) {
1074
+ logger.info(`Sending status response ${error.code} for interaction error: ${error.message}`);
1075
+ await messenger.sendStatus(error.code);
1076
+ }
1077
+ await messenger.close();
1078
+ return; // Make sure to not bubble up the exception
1079
+ }
1080
+
1081
+ const maxInterval = subscription.maxInterval;
1082
+ logger.info(
1083
+ `Successfully created subscription ${subscriptionId} for Session ${
1084
+ session.id
1085
+ }. Updates: ${minIntervalFloorSeconds} - ${maxIntervalCeilingSeconds} => ${maxInterval} seconds (sendInterval = ${subscription.sendInterval} seconds)`,
1086
+ );
1087
+ // Then send the subscription response
1088
+ await messenger.send(
1089
+ MessageType.SubscribeResponse,
1090
+ TlvSubscribeResponse.encode({
1091
+ subscriptionId,
1092
+ maxInterval,
1093
+ interactionModelRevision: Specification.INTERACTION_MODEL_REVISION,
1094
+ }),
1095
+ );
1096
+
1097
+ // When an error occurs while sending the response, the subscription is not yet active and will be cleaned up by GC
1098
+ subscription.activateSendingUpdates();
1099
+ }
1100
+
1101
+ async handleInvokeRequest(
1102
+ exchange: MessageExchange,
1103
+ { invokeRequests, timedRequest, suppressResponse, interactionModelRevision }: InvokeRequest,
1104
+ messenger: InteractionServerMessenger,
1105
+ message: Message,
1106
+ ): Promise<void> {
1107
+ logger.debug(
1108
+ `Received invoke request from ${exchange.channel.name}${invokeRequests.length > 0 ? ` with ${invokeRequests.length} commands` : ""}: ${invokeRequests
1109
+ .map(({ commandPath: { endpointId, clusterId, commandId } }) =>
1110
+ this.#endpointStructure.resolveCommandName({ endpointId, clusterId, commandId }),
1111
+ )
1112
+ .join(", ")}, suppressResponse=${suppressResponse}`,
1113
+ );
1114
+
1115
+ if (interactionModelRevision > Specification.INTERACTION_MODEL_REVISION) {
1116
+ logger.debug(
1117
+ `Interaction model revision of sender ${interactionModelRevision} is higher than supported ${Specification.INTERACTION_MODEL_REVISION}.`,
1118
+ );
1119
+ }
1120
+
1121
+ const receivedWithinTimedInteraction = exchange.hasActiveTimedInteraction();
1122
+ if (exchange.hasExpiredTimedInteraction()) {
1123
+ exchange.clearTimedInteraction(); // ??
1124
+ throw new StatusResponseError(`Timed request window expired. Decline invoke request.`, StatusCode.Timeout);
1125
+ }
1126
+
1127
+ if (timedRequest !== exchange.hasTimedInteraction()) {
1128
+ throw new StatusResponseError(
1129
+ `timedRequest flag of invoke interaction (${timedRequest}) mismatch with expected timed interaction (${receivedWithinTimedInteraction}).`,
1130
+ StatusCode.TimedRequestMismatch,
1131
+ );
1132
+ }
1133
+
1134
+ if (receivedWithinTimedInteraction) {
1135
+ logger.debug(`Invoke request from ${exchange.channel.name} received while timed interaction is running.`);
1136
+ exchange.clearTimedInteraction();
1137
+ if (message.packetHeader.sessionType !== SessionType.Unicast) {
1138
+ throw new StatusResponseError(
1139
+ "Invoke requests are only allowed on unicast sessions when a timed interaction is running.",
1140
+ StatusCode.InvalidAction,
1141
+ );
1142
+ }
1143
+ }
1144
+
1145
+ if (invokeRequests.length > this.#maxPathsPerInvoke) {
1146
+ throw new StatusResponseError(
1147
+ `Only ${this.#maxPathsPerInvoke} invoke requests are supported in one message. This message contains ${invokeRequests.length}`,
1148
+ StatusCode.InvalidAction,
1149
+ );
1150
+ }
1151
+
1152
+ // Validate all commandPaths before proceeding to make sure not to have executed partial commands
1153
+ invokeRequests.forEach(({ commandPath }) => validateCommandPath(commandPath));
1154
+
1155
+ if (invokeRequests.length > 1) {
1156
+ const invokeUniqueSet = new Set<string>();
1157
+ invokeRequests.forEach(({ commandPath }) => {
1158
+ if (!isConcreteCommandPath(commandPath)) {
1159
+ throw new StatusResponseError(
1160
+ "Wildcard paths are not supported in multi-command invoke requests",
1161
+ StatusCode.InvalidAction,
1162
+ );
1163
+ }
1164
+ const commandPathId = commandPathToId(commandPath);
1165
+ if (invokeUniqueSet.has(commandPathId)) {
1166
+ throw new StatusResponseError(
1167
+ `Duplicate command paths (${commandPathId}) are not allowed in multi-command invoke requests`,
1168
+ StatusCode.InvalidAction,
1169
+ );
1170
+ }
1171
+ invokeUniqueSet.add(commandPathId);
1172
+ });
1173
+ }
1174
+
1175
+ const isGroupSession = message.packetHeader.sessionType === SessionType.Group;
1176
+ const invokeResponseMessage: TypeFromSchema<typeof TlvInvokeResponseForSend> = {
1177
+ suppressResponse: false, // Deprecated but must be present
1178
+ interactionModelRevision: Specification.INTERACTION_MODEL_REVISION,
1179
+ invokeResponses: [],
1180
+ moreChunkedMessages: invokeRequests.length > 1, // Assume for now we have multiple responses when having multiple invokes
1181
+ };
1182
+ const emptyInvokeResponseBytes = TlvInvokeResponseForSend.encode(invokeResponseMessage);
1183
+ let messageSize = emptyInvokeResponseBytes.length;
1184
+ let invokeResultsProcessed = 0;
1185
+
1186
+ // To lower potential latency when we would process all invoke messages and just send responses at the end we
1187
+ // assemble response on the fly locally here and send when message becomes too big
1188
+ const processResponseResult = async (
1189
+ invokeResponse: TypeFromSchema<typeof TlvInvokeResponseData>,
1190
+ ): Promise<void> => {
1191
+ invokeResultsProcessed++;
1192
+
1193
+ if (isGroupSession) {
1194
+ // We send no responses at all for group sessions
1195
+ return;
1196
+ }
1197
+ const encodedInvokeResponse = TlvInvokeResponseData.encodeTlv(invokeResponse);
1198
+ const invokeResponseBytes = TlvAny.getEncodedByteLength(encodedInvokeResponse);
1199
+
1200
+ if (
1201
+ messageSize + invokeResponseBytes > exchange.maxPayloadSize ||
1202
+ invokeResultsProcessed === invokeRequests.length
1203
+ ) {
1204
+ let lastMessageProcessed = false;
1205
+ if (messageSize + invokeResponseBytes <= exchange.maxPayloadSize) {
1206
+ // last invoke response and matches in the message
1207
+ invokeResponseMessage.invokeResponses.push(encodedInvokeResponse);
1208
+ lastMessageProcessed = true;
1209
+ }
1210
+ // Send the response when the message is full or when all responses are processed
1211
+ if (invokeResponseMessage.invokeResponses.length > 0) {
1212
+ if (invokeRequests.length > 1) {
1213
+ logger.debug(
1214
+ `Send ${lastMessageProcessed ? "final " : ""}invoke response for ${invokeResponseMessage.invokeResponses} commands`,
1215
+ );
1216
+ }
1217
+ await messenger.send(
1218
+ MessageType.InvokeResponse,
1219
+ TlvInvokeResponseForSend.encode({
1220
+ ...invokeResponseMessage,
1221
+ moreChunkedMessages: invokeResultsProcessed < invokeRequests.length ? true : undefined,
1222
+ }),
1223
+ );
1224
+ invokeResponseMessage.invokeResponses = [];
1225
+ messageSize = emptyInvokeResponseBytes.length;
1226
+ }
1227
+ if (!lastMessageProcessed) {
1228
+ invokeResultsProcessed--; // Correct counter again because we recall the method
1229
+ return processResponseResult(invokeResponse);
1230
+ }
1231
+ } else {
1232
+ invokeResponseMessage.invokeResponses.push(encodedInvokeResponse);
1233
+ messageSize += invokeResponseBytes;
1234
+ }
1235
+ };
1236
+
1237
+ // We could do more fancy parallel command processing, but it makes no sense for now, so lets simply process
1238
+ // invoked commands one by one sequentially
1239
+ for (const { commandPath, commandFields, commandRef } of invokeRequests) {
1240
+ const commands = this.#endpointStructure.getCommands([commandPath]);
1241
+
1242
+ if (commands.length === 0) {
1243
+ if (isConcreteCommandPath(commandPath)) {
1244
+ const { endpointId, clusterId, commandId } = commandPath;
1245
+
1246
+ let result;
1247
+
1248
+ try {
1249
+ this.#endpointStructure.validateConcreteCommandPath(endpointId, clusterId, commandId);
1250
+ throw new InternalError(
1251
+ "validateConcreteCommandPath should throw StatusResponseError but did not.",
1252
+ );
1253
+ } catch (e) {
1254
+ StatusResponseError.accept(e);
1255
+
1256
+ logger.debug(
1257
+ `Invoke from ${exchange.channel.name}: ${this.#endpointStructure.resolveCommandName(
1258
+ commandPath,
1259
+ )} unsupported path: Status=${e.code}`,
1260
+ );
1261
+ result = { status: { commandPath, status: { status: e.code }, commandRef } };
1262
+ }
1263
+
1264
+ await processResponseResult(result);
1265
+ } else {
1266
+ // Wildcard path: Just ignore
1267
+ logger.debug(
1268
+ `Invoke from ${exchange.channel.name}: ${this.#endpointStructure.resolveCommandName(
1269
+ commandPath,
1270
+ )} ignore non-existing command`,
1271
+ );
1272
+ }
1273
+ continue;
1274
+ }
1275
+
1276
+ const isConcretePath = isConcreteCommandPath(commandPath);
1277
+ for (const { command, path } of commands) {
1278
+ const { endpointId, clusterId, commandId } = path;
1279
+ if (endpointId === undefined) {
1280
+ // Should never happen
1281
+ logger.error(
1282
+ `Invoke from ${exchange.channel.name}: ${this.#endpointStructure.resolveCommandName(
1283
+ path,
1284
+ )} invalid path because empty endpoint!`,
1285
+ );
1286
+ if (isConcretePath) {
1287
+ await processResponseResult({
1288
+ status: {
1289
+ commandPath: path,
1290
+ status: { status: StatusCode.UnsupportedEndpoint },
1291
+ commandRef,
1292
+ },
1293
+ });
1294
+ }
1295
+ continue;
1296
+ }
1297
+ const endpoint = this.#endpointStructure.getEndpoint(endpointId);
1298
+ if (endpoint === undefined) {
1299
+ // Should never happen
1300
+ logger.error(
1301
+ `Invoke from ${exchange.channel.name}: ${this.#endpointStructure.resolveCommandName(
1302
+ path,
1303
+ )} invalid path because endpoint not found!`,
1304
+ );
1305
+ if (isConcretePath) {
1306
+ await processResponseResult({
1307
+ status: {
1308
+ commandPath: path,
1309
+ status: { status: StatusCode.UnsupportedEndpoint },
1310
+ commandRef,
1311
+ },
1312
+ });
1313
+ }
1314
+ continue;
1315
+ }
1316
+ if (command.requiresTimedInteraction && !receivedWithinTimedInteraction) {
1317
+ logger.debug(`This invoke requires a timed interaction which is not initialized.`);
1318
+ if (isConcretePath) {
1319
+ await processResponseResult({
1320
+ status: {
1321
+ commandPath: path,
1322
+ status: { status: StatusCode.NeedsTimedInteraction },
1323
+ commandRef,
1324
+ },
1325
+ });
1326
+ }
1327
+ continue;
1328
+ }
1329
+ if (
1330
+ getMatterModelClusterCommand(clusterId, commandId)?.fabricScoped &&
1331
+ (!exchange.session.isSecure || !(exchange.session as SecureSession).fabric)
1332
+ ) {
1333
+ logger.debug(`This invoke requires a secure session with a fabric assigned which is missing.`);
1334
+ if (isConcretePath) {
1335
+ await processResponseResult({
1336
+ status: { commandPath: path, status: { status: StatusCode.UnsupportedAccess }, commandRef },
1337
+ });
1338
+ }
1339
+ continue;
1340
+ }
1341
+
1342
+ let result;
1343
+ try {
1344
+ result = await this.invokeCommand(
1345
+ path,
1346
+ command,
1347
+ exchange,
1348
+ commandFields ?? TlvNoArguments.encodeTlv(commandFields),
1349
+ message,
1350
+ endpoint,
1351
+ receivedWithinTimedInteraction,
1352
+ );
1353
+ } catch (e) {
1354
+ StatusResponseError.accept(e);
1355
+
1356
+ let errorCode = e.code;
1357
+ const errorLogText = `Error ${Diagnostic.hex(errorCode)}${
1358
+ e.clusterCode !== undefined ? `/${Diagnostic.hex(e.clusterCode)}` : ""
1359
+ } while invoking command: ${e.message}`;
1360
+
1361
+ if (e instanceof ValidationError) {
1362
+ logger.info(
1363
+ `Validation-${errorLogText}${e.fieldName !== undefined ? ` in field ${e.fieldName}` : ""}`,
1364
+ );
1365
+ if (errorCode === StatusCode.InvalidAction) {
1366
+ errorCode = StatusCode.InvalidCommand;
1367
+ }
1368
+ } else {
1369
+ logger.info(errorLogText);
1370
+ }
1371
+
1372
+ result = {
1373
+ code: errorCode,
1374
+ clusterCode: e.clusterCode,
1375
+ responseId: command.responseId,
1376
+ response: TlvNoResponse.encodeTlv(),
1377
+ };
1378
+ }
1379
+ const { code, clusterCode, responseId, response } = result;
1380
+ if (response.length === 0) {
1381
+ await processResponseResult({
1382
+ status: { commandPath: path, status: { status: code, clusterStatus: clusterCode }, commandRef },
1383
+ });
1384
+ } else {
1385
+ await processResponseResult({
1386
+ command: {
1387
+ commandPath: { ...path, commandId: responseId },
1388
+ commandFields: response,
1389
+ commandRef,
1390
+ },
1391
+ });
1392
+ }
1393
+ }
1394
+ }
1395
+ }
1396
+
1397
+ protected async invokeCommand(
1398
+ _path: CommandPath,
1399
+ command: CommandServer<any, any>,
1400
+ exchange: MessageExchange,
1401
+ commandFields: any,
1402
+ message: Message,
1403
+ endpoint: EndpointInterface,
1404
+ _receivedWithinTimedInteraction = false,
1405
+ ) {
1406
+ return command.invoke(exchange.session, commandFields, message, endpoint);
1407
+ }
1408
+
1409
+ handleTimedRequest(exchange: MessageExchange, { timeout, interactionModelRevision }: TimedRequest) {
1410
+ logger.debug(`Received timed request (${timeout}ms) from ${exchange.channel.name}`);
1411
+
1412
+ if (interactionModelRevision > Specification.INTERACTION_MODEL_REVISION) {
1413
+ logger.debug(
1414
+ `Interaction model revision of sender ${interactionModelRevision} is higher than supported ${Specification.INTERACTION_MODEL_REVISION}.`,
1415
+ );
1416
+ }
1417
+
1418
+ exchange.startTimedInteraction(timeout);
1419
+ }
1420
+
1421
+ async close() {
1422
+ this.#isClosing = true;
1423
+ }
1424
+
1425
+ get #endpointStructure() {
1426
+ return this.#context.structure;
1427
+ }
1428
+ }