@matter/protocol 0.16.0-alpha.0-20251205-dfb1e1556 → 0.16.0-alpha.0-20251209-d6072d23e

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 (586) hide show
  1. package/dist/cjs/action/Val.js +1 -1
  2. package/dist/cjs/action/Val.js.map +1 -1
  3. package/dist/cjs/action/client/ClientInteraction.d.ts.map +1 -1
  4. package/dist/cjs/action/client/ClientInteraction.js +83 -35
  5. package/dist/cjs/action/client/ClientInteraction.js.map +2 -2
  6. package/dist/cjs/action/client/subscription/ClientSubscription.d.ts +10 -5
  7. package/dist/cjs/action/client/subscription/ClientSubscription.d.ts.map +1 -1
  8. package/dist/cjs/action/client/subscription/ClientSubscription.js +21 -1
  9. package/dist/cjs/action/client/subscription/ClientSubscription.js.map +2 -2
  10. package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js +2 -3
  11. package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
  12. package/dist/cjs/action/client/subscription/ClientSubscriptions.d.ts +4 -2
  13. package/dist/cjs/action/client/subscription/ClientSubscriptions.d.ts.map +1 -1
  14. package/dist/cjs/action/client/subscription/ClientSubscriptions.js +68 -8
  15. package/dist/cjs/action/client/subscription/ClientSubscriptions.js.map +1 -1
  16. package/dist/cjs/action/client/subscription/PeerSubscription.d.ts +0 -1
  17. package/dist/cjs/action/client/subscription/PeerSubscription.d.ts.map +1 -1
  18. package/dist/cjs/action/client/subscription/PeerSubscription.js +1 -2
  19. package/dist/cjs/action/client/subscription/PeerSubscription.js.map +1 -1
  20. package/dist/cjs/action/client/subscription/SustainedSubscription.d.ts +0 -2
  21. package/dist/cjs/action/client/subscription/SustainedSubscription.d.ts.map +1 -1
  22. package/dist/cjs/action/client/subscription/SustainedSubscription.js +2 -4
  23. package/dist/cjs/action/client/subscription/SustainedSubscription.js.map +1 -1
  24. package/dist/cjs/action/request/Invoke.js +2 -2
  25. package/dist/cjs/action/request/Invoke.js.map +1 -1
  26. package/dist/cjs/action/response/ReadResult.d.ts +1 -1
  27. package/dist/cjs/action/response/ReadResult.d.ts.map +1 -1
  28. package/dist/cjs/action/server/AttributeReadResponse.d.ts.map +1 -1
  29. package/dist/cjs/action/server/AttributeReadResponse.js +78 -25
  30. package/dist/cjs/action/server/AttributeReadResponse.js.map +1 -1
  31. package/dist/cjs/action/server/AttributeWriteResponse.d.ts.map +1 -1
  32. package/dist/cjs/action/server/AttributeWriteResponse.js +70 -17
  33. package/dist/cjs/action/server/AttributeWriteResponse.js.map +1 -1
  34. package/dist/cjs/action/server/CommandInvokeResponse.d.ts.map +1 -1
  35. package/dist/cjs/action/server/CommandInvokeResponse.js +83 -30
  36. package/dist/cjs/action/server/CommandInvokeResponse.js.map +1 -1
  37. package/dist/cjs/action/server/DataResponse.d.ts +1 -0
  38. package/dist/cjs/action/server/DataResponse.d.ts.map +1 -1
  39. package/dist/cjs/action/server/DataResponse.js +3 -0
  40. package/dist/cjs/action/server/DataResponse.js.map +1 -1
  41. package/dist/cjs/action/server/ServerInteraction.d.ts.map +1 -1
  42. package/dist/cjs/action/server/ServerInteraction.js +4 -4
  43. package/dist/cjs/action/server/ServerInteraction.js.map +1 -1
  44. package/dist/cjs/advertisement/Advertisement.d.ts.map +1 -1
  45. package/dist/cjs/advertisement/Advertisement.js +66 -14
  46. package/dist/cjs/advertisement/Advertisement.js.map +1 -1
  47. package/dist/cjs/advertisement/Advertiser.d.ts +4 -1
  48. package/dist/cjs/advertisement/Advertiser.d.ts.map +1 -1
  49. package/dist/cjs/advertisement/Advertiser.js +63 -2
  50. package/dist/cjs/advertisement/Advertiser.js.map +1 -1
  51. package/dist/cjs/advertisement/ble/BleAdvertiser.d.ts +6 -1
  52. package/dist/cjs/advertisement/ble/BleAdvertiser.d.ts.map +1 -1
  53. package/dist/cjs/advertisement/ble/BleAdvertiser.js +1 -1
  54. package/dist/cjs/advertisement/ble/BleAdvertiser.js.map +1 -1
  55. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.d.ts +5 -1
  56. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.d.ts.map +1 -1
  57. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.js +1 -1
  58. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.js.map +1 -1
  59. package/dist/cjs/certificate/kinds/Noc.d.ts.map +1 -1
  60. package/dist/cjs/certificate/kinds/Noc.js +8 -6
  61. package/dist/cjs/certificate/kinds/Noc.js.map +1 -1
  62. package/dist/cjs/certificate/kinds/definitions/asn.js +1 -1
  63. package/dist/cjs/certificate/kinds/definitions/asn.js.map +1 -1
  64. package/dist/cjs/certificate/kinds/definitions/attestation.d.ts.map +1 -1
  65. package/dist/cjs/cluster/client/AttributeClient.d.ts.map +1 -1
  66. package/dist/cjs/cluster/client/AttributeClient.js +2 -2
  67. package/dist/cjs/cluster/client/AttributeClient.js.map +1 -1
  68. package/dist/cjs/codec/MessageCodec.d.ts +8 -1
  69. package/dist/cjs/codec/MessageCodec.d.ts.map +1 -1
  70. package/dist/cjs/codec/MessageCodec.js +38 -28
  71. package/dist/cjs/codec/MessageCodec.js.map +2 -2
  72. package/dist/cjs/common/FailsafeContext.d.ts +8 -9
  73. package/dist/cjs/common/FailsafeContext.d.ts.map +1 -1
  74. package/dist/cjs/common/FailsafeContext.js +27 -33
  75. package/dist/cjs/common/FailsafeContext.js.map +1 -1
  76. package/dist/cjs/common/FailsafeTimer.d.ts +4 -3
  77. package/dist/cjs/common/FailsafeTimer.d.ts.map +1 -1
  78. package/dist/cjs/common/FailsafeTimer.js +4 -4
  79. package/dist/cjs/common/FailsafeTimer.js.map +1 -1
  80. package/dist/cjs/common/Mark.d.ts +17 -0
  81. package/dist/cjs/common/Mark.d.ts.map +1 -0
  82. package/dist/cjs/{peer/OperationalPeer.js → common/Mark.js} +19 -3
  83. package/dist/cjs/common/Mark.js.map +6 -0
  84. package/dist/cjs/common/index.d.ts +1 -0
  85. package/dist/cjs/common/index.d.ts.map +1 -1
  86. package/dist/cjs/common/index.js +1 -0
  87. package/dist/cjs/common/index.js.map +1 -1
  88. package/dist/cjs/fabric/Fabric.d.ts +16 -8
  89. package/dist/cjs/fabric/Fabric.d.ts.map +1 -1
  90. package/dist/cjs/fabric/Fabric.js +35 -18
  91. package/dist/cjs/fabric/Fabric.js.map +1 -1
  92. package/dist/cjs/fabric/FabricAuthority.d.ts +2 -2
  93. package/dist/cjs/fabric/FabricAuthority.d.ts.map +1 -1
  94. package/dist/cjs/fabric/FabricAuthority.js +3 -3
  95. package/dist/cjs/fabric/FabricAuthority.js.map +1 -1
  96. package/dist/cjs/fabric/FabricManager.d.ts +10 -14
  97. package/dist/cjs/fabric/FabricManager.d.ts.map +1 -1
  98. package/dist/cjs/fabric/FabricManager.js +44 -40
  99. package/dist/cjs/fabric/FabricManager.js.map +2 -2
  100. package/dist/cjs/index.d.ts +1 -1
  101. package/dist/cjs/index.d.ts.map +1 -1
  102. package/dist/cjs/index.js +1 -1
  103. package/dist/cjs/index.js.map +1 -1
  104. package/dist/cjs/interaction/AttributeDataEncoder.d.ts +1 -1
  105. package/dist/cjs/interaction/InteractionClient.d.ts +2 -2
  106. package/dist/cjs/interaction/InteractionClient.d.ts.map +1 -1
  107. package/dist/cjs/interaction/InteractionClient.js +39 -22
  108. package/dist/cjs/interaction/InteractionClient.js.map +1 -1
  109. package/dist/cjs/interaction/InteractionMessenger.d.ts +2 -2
  110. package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
  111. package/dist/cjs/interaction/InteractionMessenger.js +35 -27
  112. package/dist/cjs/interaction/InteractionMessenger.js.map +1 -1
  113. package/dist/cjs/interaction/Subscription.d.ts +16 -37
  114. package/dist/cjs/interaction/Subscription.d.ts.map +1 -1
  115. package/dist/cjs/interaction/Subscription.js +15 -68
  116. package/dist/cjs/interaction/Subscription.js.map +2 -2
  117. package/dist/cjs/interaction/SubscriptionClient.d.ts +2 -2
  118. package/dist/cjs/interaction/SubscriptionClient.d.ts.map +1 -1
  119. package/dist/cjs/interaction/SubscriptionClient.js +2 -2
  120. package/dist/cjs/interaction/SubscriptionClient.js.map +1 -1
  121. package/dist/cjs/mdns/MdnsClient.d.ts +10 -10
  122. package/dist/cjs/mdns/MdnsClient.d.ts.map +1 -1
  123. package/dist/cjs/mdns/MdnsClient.js +165 -80
  124. package/dist/cjs/mdns/MdnsClient.js.map +1 -1
  125. package/dist/cjs/mdns/MdnsServer.d.ts +2 -2
  126. package/dist/cjs/mdns/MdnsServer.d.ts.map +1 -1
  127. package/dist/cjs/mdns/MdnsServer.js +173 -94
  128. package/dist/cjs/mdns/MdnsServer.js.map +2 -2
  129. package/dist/cjs/mdns/MdnsService.d.ts.map +1 -1
  130. package/dist/cjs/mdns/MdnsService.js +3 -2
  131. package/dist/cjs/mdns/MdnsService.js.map +1 -1
  132. package/dist/cjs/mdns/MdnsSocket.d.ts +3 -2
  133. package/dist/cjs/mdns/MdnsSocket.d.ts.map +1 -1
  134. package/dist/cjs/mdns/MdnsSocket.js +2 -1
  135. package/dist/cjs/mdns/MdnsSocket.js.map +1 -1
  136. package/dist/cjs/peer/ControllerCommissioner.d.ts +2 -2
  137. package/dist/cjs/peer/ControllerCommissioner.d.ts.map +1 -1
  138. package/dist/cjs/peer/ControllerCommissioner.js +26 -28
  139. package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
  140. package/dist/cjs/peer/ControllerDiscovery.d.ts +1 -1
  141. package/dist/cjs/peer/ControllerDiscovery.d.ts.map +1 -1
  142. package/dist/cjs/peer/ControllerDiscovery.js +3 -3
  143. package/dist/cjs/peer/ControllerDiscovery.js.map +1 -1
  144. package/dist/cjs/peer/Peer.d.ts +57 -0
  145. package/dist/cjs/peer/Peer.d.ts.map +1 -0
  146. package/dist/cjs/peer/Peer.js +182 -0
  147. package/dist/cjs/peer/Peer.js.map +6 -0
  148. package/dist/cjs/peer/PeerAddress.d.ts.map +1 -1
  149. package/dist/cjs/peer/PeerAddress.js +6 -3
  150. package/dist/cjs/peer/PeerAddress.js.map +1 -1
  151. package/dist/cjs/peer/PeerAddressStore.d.ts +3 -3
  152. package/dist/cjs/peer/PeerAddressStore.d.ts.map +1 -1
  153. package/{src/peer/OperationalPeer.ts → dist/cjs/peer/PeerDescriptor.d.ts} +14 -12
  154. package/dist/cjs/peer/PeerDescriptor.d.ts.map +1 -0
  155. package/dist/cjs/peer/PeerDescriptor.js +71 -0
  156. package/dist/cjs/peer/PeerDescriptor.js.map +6 -0
  157. package/dist/cjs/peer/PeerSet.d.ts +23 -26
  158. package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
  159. package/dist/cjs/peer/PeerSet.js +173 -173
  160. package/dist/cjs/peer/PeerSet.js.map +2 -2
  161. package/dist/cjs/peer/index.d.ts +1 -1
  162. package/dist/cjs/peer/index.d.ts.map +1 -1
  163. package/dist/cjs/peer/index.js +1 -1
  164. package/dist/cjs/peer/index.js.map +1 -1
  165. package/dist/cjs/protocol/DeviceAdvertiser.js +4 -4
  166. package/dist/cjs/protocol/DeviceAdvertiser.js.map +1 -1
  167. package/dist/cjs/protocol/ExchangeManager.d.ts +6 -9
  168. package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
  169. package/dist/cjs/protocol/ExchangeManager.js +301 -243
  170. package/dist/cjs/protocol/ExchangeManager.js.map +2 -2
  171. package/dist/cjs/protocol/ExchangeProvider.d.ts +9 -11
  172. package/dist/cjs/protocol/ExchangeProvider.d.ts.map +1 -1
  173. package/dist/cjs/protocol/ExchangeProvider.js +79 -32
  174. package/dist/cjs/protocol/ExchangeProvider.js.map +2 -2
  175. package/dist/cjs/protocol/MessageChannel.d.ts +6 -7
  176. package/dist/cjs/protocol/MessageChannel.d.ts.map +1 -1
  177. package/dist/cjs/protocol/MessageChannel.js +14 -16
  178. package/dist/cjs/protocol/MessageChannel.js.map +1 -1
  179. package/dist/cjs/protocol/MessageCounter.d.ts +4 -4
  180. package/dist/cjs/protocol/MessageCounter.d.ts.map +1 -1
  181. package/dist/cjs/protocol/MessageCounter.js +7 -7
  182. package/dist/cjs/protocol/MessageCounter.js.map +1 -1
  183. package/dist/cjs/protocol/MessageExchange.d.ts +31 -20
  184. package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
  185. package/dist/cjs/protocol/MessageExchange.js +316 -231
  186. package/dist/cjs/protocol/MessageExchange.js.map +2 -2
  187. package/dist/cjs/protocol/ProtocolMocks.d.ts +100 -0
  188. package/dist/cjs/protocol/ProtocolMocks.d.ts.map +1 -0
  189. package/dist/cjs/protocol/ProtocolMocks.js +237 -0
  190. package/dist/cjs/protocol/ProtocolMocks.js.map +6 -0
  191. package/dist/cjs/protocol/errors.d.ts +35 -0
  192. package/dist/cjs/protocol/errors.d.ts.map +1 -0
  193. package/dist/cjs/protocol/errors.js +50 -0
  194. package/dist/cjs/protocol/errors.js.map +6 -0
  195. package/dist/cjs/protocol/index.d.ts +2 -1
  196. package/dist/cjs/protocol/index.d.ts.map +1 -1
  197. package/dist/cjs/protocol/index.js +2 -1
  198. package/dist/cjs/protocol/index.js.map +1 -1
  199. package/dist/cjs/securechannel/SecureChannelMessenger.d.ts +1 -0
  200. package/dist/cjs/securechannel/SecureChannelMessenger.d.ts.map +1 -1
  201. package/dist/cjs/securechannel/SecureChannelMessenger.js +3 -0
  202. package/dist/cjs/securechannel/SecureChannelMessenger.js.map +1 -1
  203. package/dist/cjs/securechannel/SecureChannelProtocol.js +2 -2
  204. package/dist/cjs/securechannel/SecureChannelProtocol.js.map +1 -1
  205. package/dist/cjs/session/GroupSession.d.ts +21 -10
  206. package/dist/cjs/session/GroupSession.d.ts.map +1 -1
  207. package/dist/cjs/session/GroupSession.js +37 -12
  208. package/dist/cjs/session/GroupSession.js.map +1 -1
  209. package/dist/cjs/session/NodeSession.d.ts +56 -50
  210. package/dist/cjs/session/NodeSession.d.ts.map +1 -1
  211. package/dist/cjs/session/NodeSession.js +95 -103
  212. package/dist/cjs/session/NodeSession.js.map +1 -1
  213. package/dist/cjs/session/SecureSession.d.ts +4 -4
  214. package/dist/cjs/session/SecureSession.d.ts.map +1 -1
  215. package/dist/cjs/session/SecureSession.js +1 -1
  216. package/dist/cjs/session/SecureSession.js.map +1 -1
  217. package/dist/cjs/session/Session.d.ts +82 -66
  218. package/dist/cjs/session/Session.d.ts.map +1 -1
  219. package/dist/cjs/session/Session.js +218 -45
  220. package/dist/cjs/session/Session.js.map +1 -1
  221. package/dist/cjs/session/SessionManager.d.ts +33 -36
  222. package/dist/cjs/session/SessionManager.d.ts.map +1 -1
  223. package/dist/cjs/session/SessionManager.js +112 -150
  224. package/dist/cjs/session/SessionManager.js.map +1 -1
  225. package/dist/cjs/session/SessionParameters.d.ts +87 -0
  226. package/dist/cjs/session/SessionParameters.d.ts.map +1 -0
  227. package/dist/cjs/session/SessionParameters.js +81 -0
  228. package/dist/cjs/session/SessionParameters.js.map +6 -0
  229. package/dist/{esm/session/InsecureSession.d.ts → cjs/session/UnsecuredSession.d.ts} +18 -16
  230. package/dist/cjs/session/UnsecuredSession.d.ts.map +1 -0
  231. package/dist/cjs/session/{InsecureSession.js → UnsecuredSession.js} +21 -21
  232. package/dist/cjs/session/UnsecuredSession.js.map +6 -0
  233. package/dist/cjs/session/case/CaseClient.d.ts.map +1 -1
  234. package/dist/cjs/session/case/CaseClient.js +6 -4
  235. package/dist/cjs/session/case/CaseClient.js.map +1 -1
  236. package/dist/cjs/session/case/CaseServer.d.ts.map +1 -1
  237. package/dist/cjs/session/case/CaseServer.js +14 -10
  238. package/dist/cjs/session/case/CaseServer.js.map +1 -1
  239. package/dist/cjs/session/index.d.ts +2 -1
  240. package/dist/cjs/session/index.d.ts.map +1 -1
  241. package/dist/cjs/session/index.js +2 -1
  242. package/dist/cjs/session/index.js.map +1 -1
  243. package/dist/cjs/session/pase/PaseClient.d.ts +3 -3
  244. package/dist/cjs/session/pase/PaseClient.d.ts.map +1 -1
  245. package/dist/cjs/session/pase/PaseClient.js +5 -3
  246. package/dist/cjs/session/pase/PaseClient.js.map +1 -1
  247. package/dist/cjs/session/pase/PaseServer.d.ts.map +1 -1
  248. package/dist/cjs/session/pase/PaseServer.js +13 -13
  249. package/dist/cjs/session/pase/PaseServer.js.map +1 -1
  250. package/dist/esm/action/Val.js +1 -1
  251. package/dist/esm/action/Val.js.map +1 -1
  252. package/dist/esm/action/client/ClientInteraction.d.ts.map +1 -1
  253. package/dist/esm/action/client/ClientInteraction.js +83 -35
  254. package/dist/esm/action/client/ClientInteraction.js.map +2 -2
  255. package/dist/esm/action/client/subscription/ClientSubscription.d.ts +10 -5
  256. package/dist/esm/action/client/subscription/ClientSubscription.d.ts.map +1 -1
  257. package/dist/esm/action/client/subscription/ClientSubscription.js +22 -2
  258. package/dist/esm/action/client/subscription/ClientSubscription.js.map +2 -2
  259. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js +2 -3
  260. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
  261. package/dist/esm/action/client/subscription/ClientSubscriptions.d.ts +4 -2
  262. package/dist/esm/action/client/subscription/ClientSubscriptions.d.ts.map +1 -1
  263. package/dist/esm/action/client/subscription/ClientSubscriptions.js +68 -8
  264. package/dist/esm/action/client/subscription/ClientSubscriptions.js.map +1 -1
  265. package/dist/esm/action/client/subscription/PeerSubscription.d.ts +0 -1
  266. package/dist/esm/action/client/subscription/PeerSubscription.d.ts.map +1 -1
  267. package/dist/esm/action/client/subscription/PeerSubscription.js +1 -2
  268. package/dist/esm/action/client/subscription/PeerSubscription.js.map +1 -1
  269. package/dist/esm/action/client/subscription/SustainedSubscription.d.ts +0 -2
  270. package/dist/esm/action/client/subscription/SustainedSubscription.d.ts.map +1 -1
  271. package/dist/esm/action/client/subscription/SustainedSubscription.js +2 -4
  272. package/dist/esm/action/client/subscription/SustainedSubscription.js.map +1 -1
  273. package/dist/esm/action/request/Invoke.js +2 -2
  274. package/dist/esm/action/request/Invoke.js.map +1 -1
  275. package/dist/esm/action/response/ReadResult.d.ts +1 -1
  276. package/dist/esm/action/response/ReadResult.d.ts.map +1 -1
  277. package/dist/esm/action/server/AttributeReadResponse.d.ts.map +1 -1
  278. package/dist/esm/action/server/AttributeReadResponse.js +78 -25
  279. package/dist/esm/action/server/AttributeReadResponse.js.map +1 -1
  280. package/dist/esm/action/server/AttributeWriteResponse.d.ts.map +1 -1
  281. package/dist/esm/action/server/AttributeWriteResponse.js +70 -17
  282. package/dist/esm/action/server/AttributeWriteResponse.js.map +1 -1
  283. package/dist/esm/action/server/CommandInvokeResponse.d.ts.map +1 -1
  284. package/dist/esm/action/server/CommandInvokeResponse.js +83 -30
  285. package/dist/esm/action/server/CommandInvokeResponse.js.map +1 -1
  286. package/dist/esm/action/server/DataResponse.d.ts +1 -0
  287. package/dist/esm/action/server/DataResponse.d.ts.map +1 -1
  288. package/dist/esm/action/server/DataResponse.js +3 -0
  289. package/dist/esm/action/server/DataResponse.js.map +1 -1
  290. package/dist/esm/action/server/ServerInteraction.d.ts.map +1 -1
  291. package/dist/esm/action/server/ServerInteraction.js +4 -4
  292. package/dist/esm/action/server/ServerInteraction.js.map +1 -1
  293. package/dist/esm/advertisement/Advertisement.d.ts.map +1 -1
  294. package/dist/esm/advertisement/Advertisement.js +66 -14
  295. package/dist/esm/advertisement/Advertisement.js.map +1 -1
  296. package/dist/esm/advertisement/Advertiser.d.ts +4 -1
  297. package/dist/esm/advertisement/Advertiser.d.ts.map +1 -1
  298. package/dist/esm/advertisement/Advertiser.js +63 -2
  299. package/dist/esm/advertisement/Advertiser.js.map +1 -1
  300. package/dist/esm/advertisement/ble/BleAdvertiser.d.ts +6 -1
  301. package/dist/esm/advertisement/ble/BleAdvertiser.d.ts.map +1 -1
  302. package/dist/esm/advertisement/ble/BleAdvertiser.js +1 -1
  303. package/dist/esm/advertisement/ble/BleAdvertiser.js.map +1 -1
  304. package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts +5 -1
  305. package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts.map +1 -1
  306. package/dist/esm/advertisement/mdns/MdnsAdvertiser.js +1 -1
  307. package/dist/esm/advertisement/mdns/MdnsAdvertiser.js.map +1 -1
  308. package/dist/esm/certificate/kinds/Noc.d.ts.map +1 -1
  309. package/dist/esm/certificate/kinds/Noc.js +8 -6
  310. package/dist/esm/certificate/kinds/Noc.js.map +1 -1
  311. package/dist/esm/certificate/kinds/definitions/asn.js +2 -2
  312. package/dist/esm/certificate/kinds/definitions/asn.js.map +1 -1
  313. package/dist/esm/certificate/kinds/definitions/attestation.d.ts.map +1 -1
  314. package/dist/esm/cluster/client/AttributeClient.d.ts.map +1 -1
  315. package/dist/esm/cluster/client/AttributeClient.js +1 -1
  316. package/dist/esm/cluster/client/AttributeClient.js.map +1 -1
  317. package/dist/esm/codec/MessageCodec.d.ts +8 -1
  318. package/dist/esm/codec/MessageCodec.d.ts.map +1 -1
  319. package/dist/esm/codec/MessageCodec.js +39 -28
  320. package/dist/esm/codec/MessageCodec.js.map +2 -2
  321. package/dist/esm/common/FailsafeContext.d.ts +8 -9
  322. package/dist/esm/common/FailsafeContext.d.ts.map +1 -1
  323. package/dist/esm/common/FailsafeContext.js +27 -33
  324. package/dist/esm/common/FailsafeContext.js.map +1 -1
  325. package/dist/esm/common/FailsafeTimer.d.ts +4 -3
  326. package/dist/esm/common/FailsafeTimer.d.ts.map +1 -1
  327. package/dist/esm/common/FailsafeTimer.js +4 -4
  328. package/dist/esm/common/FailsafeTimer.js.map +1 -1
  329. package/dist/esm/common/Mark.d.ts +17 -0
  330. package/dist/esm/common/Mark.d.ts.map +1 -0
  331. package/dist/esm/common/Mark.js +18 -0
  332. package/dist/esm/common/Mark.js.map +6 -0
  333. package/dist/esm/common/index.d.ts +1 -0
  334. package/dist/esm/common/index.d.ts.map +1 -1
  335. package/dist/esm/common/index.js +1 -0
  336. package/dist/esm/common/index.js.map +1 -1
  337. package/dist/esm/fabric/Fabric.d.ts +16 -8
  338. package/dist/esm/fabric/Fabric.d.ts.map +1 -1
  339. package/dist/esm/fabric/Fabric.js +36 -18
  340. package/dist/esm/fabric/Fabric.js.map +1 -1
  341. package/dist/esm/fabric/FabricAuthority.d.ts +2 -2
  342. package/dist/esm/fabric/FabricAuthority.d.ts.map +1 -1
  343. package/dist/esm/fabric/FabricAuthority.js +5 -5
  344. package/dist/esm/fabric/FabricAuthority.js.map +1 -1
  345. package/dist/esm/fabric/FabricManager.d.ts +10 -14
  346. package/dist/esm/fabric/FabricManager.d.ts.map +1 -1
  347. package/dist/esm/fabric/FabricManager.js +45 -40
  348. package/dist/esm/fabric/FabricManager.js.map +2 -2
  349. package/dist/esm/index.d.ts +1 -1
  350. package/dist/esm/index.d.ts.map +1 -1
  351. package/dist/esm/index.js +1 -1
  352. package/dist/esm/index.js.map +1 -1
  353. package/dist/esm/interaction/AttributeDataEncoder.d.ts +1 -1
  354. package/dist/esm/interaction/InteractionClient.d.ts +2 -2
  355. package/dist/esm/interaction/InteractionClient.d.ts.map +1 -1
  356. package/dist/esm/interaction/InteractionClient.js +39 -22
  357. package/dist/esm/interaction/InteractionClient.js.map +1 -1
  358. package/dist/esm/interaction/InteractionMessenger.d.ts +2 -2
  359. package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
  360. package/dist/esm/interaction/InteractionMessenger.js +33 -28
  361. package/dist/esm/interaction/InteractionMessenger.js.map +1 -1
  362. package/dist/esm/interaction/Subscription.d.ts +16 -37
  363. package/dist/esm/interaction/Subscription.d.ts.map +1 -1
  364. package/dist/esm/interaction/Subscription.js +16 -69
  365. package/dist/esm/interaction/Subscription.js.map +2 -2
  366. package/dist/esm/interaction/SubscriptionClient.d.ts +2 -2
  367. package/dist/esm/interaction/SubscriptionClient.d.ts.map +1 -1
  368. package/dist/esm/interaction/SubscriptionClient.js +2 -2
  369. package/dist/esm/interaction/SubscriptionClient.js.map +1 -1
  370. package/dist/esm/mdns/MdnsClient.d.ts +10 -10
  371. package/dist/esm/mdns/MdnsClient.d.ts.map +1 -1
  372. package/dist/esm/mdns/MdnsClient.js +166 -80
  373. package/dist/esm/mdns/MdnsClient.js.map +1 -1
  374. package/dist/esm/mdns/MdnsServer.d.ts +2 -2
  375. package/dist/esm/mdns/MdnsServer.d.ts.map +1 -1
  376. package/dist/esm/mdns/MdnsServer.js +176 -94
  377. package/dist/esm/mdns/MdnsServer.js.map +2 -2
  378. package/dist/esm/mdns/MdnsService.d.ts.map +1 -1
  379. package/dist/esm/mdns/MdnsService.js +3 -2
  380. package/dist/esm/mdns/MdnsService.js.map +1 -1
  381. package/dist/esm/mdns/MdnsSocket.d.ts +3 -2
  382. package/dist/esm/mdns/MdnsSocket.d.ts.map +1 -1
  383. package/dist/esm/mdns/MdnsSocket.js +2 -1
  384. package/dist/esm/mdns/MdnsSocket.js.map +1 -1
  385. package/dist/esm/peer/ControllerCommissioner.d.ts +2 -2
  386. package/dist/esm/peer/ControllerCommissioner.d.ts.map +1 -1
  387. package/dist/esm/peer/ControllerCommissioner.js +26 -28
  388. package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
  389. package/dist/esm/peer/ControllerDiscovery.d.ts +1 -1
  390. package/dist/esm/peer/ControllerDiscovery.d.ts.map +1 -1
  391. package/dist/esm/peer/ControllerDiscovery.js +1 -1
  392. package/dist/esm/peer/ControllerDiscovery.js.map +1 -1
  393. package/dist/esm/peer/Peer.d.ts +57 -0
  394. package/dist/esm/peer/Peer.d.ts.map +1 -0
  395. package/dist/esm/peer/Peer.js +162 -0
  396. package/dist/esm/peer/Peer.js.map +6 -0
  397. package/dist/esm/peer/PeerAddress.d.ts.map +1 -1
  398. package/dist/esm/peer/PeerAddress.js +6 -3
  399. package/dist/esm/peer/PeerAddress.js.map +1 -1
  400. package/dist/esm/peer/PeerAddressStore.d.ts +3 -3
  401. package/dist/esm/peer/PeerAddressStore.d.ts.map +1 -1
  402. package/dist/{cjs/peer/OperationalPeer.d.ts → esm/peer/PeerDescriptor.d.ts} +14 -7
  403. package/dist/esm/peer/PeerDescriptor.d.ts.map +1 -0
  404. package/dist/esm/peer/PeerDescriptor.js +51 -0
  405. package/dist/esm/peer/PeerDescriptor.js.map +6 -0
  406. package/dist/esm/peer/PeerSet.d.ts +23 -26
  407. package/dist/esm/peer/PeerSet.d.ts.map +1 -1
  408. package/dist/esm/peer/PeerSet.js +173 -175
  409. package/dist/esm/peer/PeerSet.js.map +2 -2
  410. package/dist/esm/peer/index.d.ts +1 -1
  411. package/dist/esm/peer/index.d.ts.map +1 -1
  412. package/dist/esm/peer/index.js +1 -1
  413. package/dist/esm/protocol/DeviceAdvertiser.js +4 -4
  414. package/dist/esm/protocol/DeviceAdvertiser.js.map +1 -1
  415. package/dist/esm/protocol/ExchangeManager.d.ts +6 -9
  416. package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
  417. package/dist/esm/protocol/ExchangeManager.js +303 -248
  418. package/dist/esm/protocol/ExchangeManager.js.map +2 -2
  419. package/dist/esm/protocol/ExchangeProvider.d.ts +9 -11
  420. package/dist/esm/protocol/ExchangeProvider.d.ts.map +1 -1
  421. package/dist/esm/protocol/ExchangeProvider.js +81 -37
  422. package/dist/esm/protocol/ExchangeProvider.js.map +2 -2
  423. package/dist/esm/protocol/MessageChannel.d.ts +6 -7
  424. package/dist/esm/protocol/MessageChannel.d.ts.map +1 -1
  425. package/dist/esm/protocol/MessageChannel.js +22 -18
  426. package/dist/esm/protocol/MessageChannel.js.map +1 -1
  427. package/dist/esm/protocol/MessageCounter.d.ts +4 -4
  428. package/dist/esm/protocol/MessageCounter.d.ts.map +1 -1
  429. package/dist/esm/protocol/MessageCounter.js +7 -7
  430. package/dist/esm/protocol/MessageCounter.js.map +1 -1
  431. package/dist/esm/protocol/MessageExchange.d.ts +31 -20
  432. package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
  433. package/dist/esm/protocol/MessageExchange.js +318 -238
  434. package/dist/esm/protocol/MessageExchange.js.map +2 -2
  435. package/dist/esm/protocol/ProtocolMocks.d.ts +100 -0
  436. package/dist/esm/protocol/ProtocolMocks.d.ts.map +1 -0
  437. package/dist/esm/protocol/ProtocolMocks.js +230 -0
  438. package/dist/esm/protocol/ProtocolMocks.js.map +6 -0
  439. package/dist/esm/protocol/errors.d.ts +35 -0
  440. package/dist/esm/protocol/errors.d.ts.map +1 -0
  441. package/dist/esm/protocol/errors.js +30 -0
  442. package/dist/esm/protocol/errors.js.map +6 -0
  443. package/dist/esm/protocol/index.d.ts +2 -1
  444. package/dist/esm/protocol/index.d.ts.map +1 -1
  445. package/dist/esm/protocol/index.js +2 -1
  446. package/dist/esm/protocol/index.js.map +1 -1
  447. package/dist/esm/securechannel/SecureChannelMessenger.d.ts +1 -0
  448. package/dist/esm/securechannel/SecureChannelMessenger.d.ts.map +1 -1
  449. package/dist/esm/securechannel/SecureChannelMessenger.js +3 -0
  450. package/dist/esm/securechannel/SecureChannelMessenger.js.map +1 -1
  451. package/dist/esm/securechannel/SecureChannelProtocol.js +2 -2
  452. package/dist/esm/securechannel/SecureChannelProtocol.js.map +1 -1
  453. package/dist/esm/session/GroupSession.d.ts +21 -10
  454. package/dist/esm/session/GroupSession.d.ts.map +1 -1
  455. package/dist/esm/session/GroupSession.js +41 -12
  456. package/dist/esm/session/GroupSession.js.map +1 -1
  457. package/dist/esm/session/NodeSession.d.ts +56 -50
  458. package/dist/esm/session/NodeSession.d.ts.map +1 -1
  459. package/dist/esm/session/NodeSession.js +99 -105
  460. package/dist/esm/session/NodeSession.js.map +1 -1
  461. package/dist/esm/session/SecureSession.d.ts +4 -4
  462. package/dist/esm/session/SecureSession.d.ts.map +1 -1
  463. package/dist/esm/session/SecureSession.js +1 -1
  464. package/dist/esm/session/SecureSession.js.map +1 -1
  465. package/dist/esm/session/Session.d.ts +82 -66
  466. package/dist/esm/session/Session.d.ts.map +1 -1
  467. package/dist/esm/session/Session.js +223 -45
  468. package/dist/esm/session/Session.js.map +1 -1
  469. package/dist/esm/session/SessionManager.d.ts +33 -36
  470. package/dist/esm/session/SessionManager.d.ts.map +1 -1
  471. package/dist/esm/session/SessionManager.js +113 -157
  472. package/dist/esm/session/SessionManager.js.map +1 -1
  473. package/dist/esm/session/SessionParameters.d.ts +87 -0
  474. package/dist/esm/session/SessionParameters.d.ts.map +1 -0
  475. package/dist/esm/session/SessionParameters.js +61 -0
  476. package/dist/esm/session/SessionParameters.js.map +6 -0
  477. package/dist/{cjs/session/InsecureSession.d.ts → esm/session/UnsecuredSession.d.ts} +18 -16
  478. package/dist/esm/session/UnsecuredSession.d.ts.map +1 -0
  479. package/dist/esm/session/{InsecureSession.js → UnsecuredSession.js} +18 -18
  480. package/dist/esm/session/UnsecuredSession.js.map +6 -0
  481. package/dist/esm/session/case/CaseClient.d.ts.map +1 -1
  482. package/dist/esm/session/case/CaseClient.js +5 -3
  483. package/dist/esm/session/case/CaseClient.js.map +1 -1
  484. package/dist/esm/session/case/CaseServer.d.ts.map +1 -1
  485. package/dist/esm/session/case/CaseServer.js +14 -10
  486. package/dist/esm/session/case/CaseServer.js.map +1 -1
  487. package/dist/esm/session/index.d.ts +2 -1
  488. package/dist/esm/session/index.d.ts.map +1 -1
  489. package/dist/esm/session/index.js +2 -1
  490. package/dist/esm/session/index.js.map +1 -1
  491. package/dist/esm/session/pase/PaseClient.d.ts +3 -3
  492. package/dist/esm/session/pase/PaseClient.d.ts.map +1 -1
  493. package/dist/esm/session/pase/PaseClient.js +5 -3
  494. package/dist/esm/session/pase/PaseClient.js.map +1 -1
  495. package/dist/esm/session/pase/PaseServer.d.ts.map +1 -1
  496. package/dist/esm/session/pase/PaseServer.js +13 -13
  497. package/dist/esm/session/pase/PaseServer.js.map +1 -1
  498. package/package.json +6 -6
  499. package/src/action/client/ClientInteraction.ts +47 -13
  500. package/src/action/client/subscription/ClientSubscription.ts +30 -5
  501. package/src/action/client/subscription/ClientSubscriptionHandler.ts +2 -4
  502. package/src/action/client/subscription/ClientSubscriptions.ts +14 -3
  503. package/src/action/client/subscription/PeerSubscription.ts +2 -2
  504. package/src/action/client/subscription/SustainedSubscription.ts +2 -6
  505. package/src/action/request/Invoke.ts +2 -2
  506. package/src/action/response/ReadResult.ts +1 -1
  507. package/src/action/server/AttributeReadResponse.ts +2 -0
  508. package/src/action/server/AttributeWriteResponse.ts +2 -0
  509. package/src/action/server/CommandInvokeResponse.ts +1 -0
  510. package/src/action/server/DataResponse.ts +4 -0
  511. package/src/action/server/ServerInteraction.ts +4 -4
  512. package/src/advertisement/Advertisement.ts +6 -7
  513. package/src/advertisement/Advertiser.ts +12 -1
  514. package/src/advertisement/ble/BleAdvertiser.ts +7 -2
  515. package/src/advertisement/mdns/MdnsAdvertiser.ts +7 -1
  516. package/src/certificate/kinds/Noc.ts +12 -7
  517. package/src/certificate/kinds/definitions/asn.ts +2 -2
  518. package/src/certificate/kinds/definitions/attestation.ts +1 -0
  519. package/src/cluster/client/AttributeClient.ts +1 -1
  520. package/src/codec/MessageCodec.ts +39 -32
  521. package/src/common/FailsafeContext.ts +36 -39
  522. package/src/common/FailsafeTimer.ts +7 -6
  523. package/src/common/Mark.ts +17 -0
  524. package/src/common/index.ts +1 -0
  525. package/src/fabric/Fabric.ts +51 -23
  526. package/src/fabric/FabricAuthority.ts +4 -4
  527. package/src/fabric/FabricManager.ts +53 -40
  528. package/src/index.ts +3 -1
  529. package/src/interaction/InteractionClient.ts +40 -23
  530. package/src/interaction/InteractionMessenger.ts +38 -32
  531. package/src/interaction/Subscription.ts +20 -92
  532. package/src/interaction/SubscriptionClient.ts +3 -3
  533. package/src/mdns/MdnsClient.ts +20 -3
  534. package/src/mdns/MdnsServer.ts +13 -1
  535. package/src/mdns/MdnsService.ts +3 -2
  536. package/src/mdns/MdnsSocket.ts +9 -3
  537. package/src/peer/ControllerCommissioner.ts +35 -37
  538. package/src/peer/ControllerDiscovery.ts +1 -1
  539. package/src/peer/Peer.ts +161 -0
  540. package/src/peer/PeerAddress.ts +6 -2
  541. package/src/peer/PeerAddressStore.ts +3 -3
  542. package/src/peer/PeerDescriptor.ts +89 -0
  543. package/src/peer/PeerSet.ts +145 -213
  544. package/src/peer/index.ts +1 -1
  545. package/src/protocol/DeviceAdvertiser.ts +4 -4
  546. package/src/protocol/ExchangeManager.ts +149 -178
  547. package/src/protocol/ExchangeProvider.ts +31 -40
  548. package/src/protocol/MessageChannel.ts +29 -18
  549. package/src/protocol/MessageCounter.ts +8 -8
  550. package/src/protocol/MessageExchange.ts +181 -144
  551. package/src/protocol/ProtocolMocks.ts +302 -0
  552. package/src/protocol/errors.ts +44 -0
  553. package/src/protocol/index.ts +2 -1
  554. package/src/securechannel/SecureChannelMessenger.ts +4 -0
  555. package/src/securechannel/SecureChannelProtocol.ts +2 -2
  556. package/src/session/GroupSession.ts +67 -23
  557. package/src/session/NodeSession.ts +140 -136
  558. package/src/session/SecureSession.ts +6 -5
  559. package/src/session/Session.ts +234 -101
  560. package/src/session/SessionManager.ts +148 -187
  561. package/src/session/SessionParameters.ts +108 -0
  562. package/src/session/{InsecureSession.ts → UnsecuredSession.ts} +28 -26
  563. package/src/session/case/CaseClient.ts +6 -3
  564. package/src/session/case/CaseServer.ts +15 -11
  565. package/src/session/index.ts +2 -1
  566. package/src/session/pase/PaseClient.ts +12 -5
  567. package/src/session/pase/PaseServer.ts +14 -13
  568. package/dist/cjs/peer/OperationalPeer.d.ts.map +0 -1
  569. package/dist/cjs/peer/OperationalPeer.js.map +0 -6
  570. package/dist/cjs/protocol/ChannelManager.d.ts +0 -29
  571. package/dist/cjs/protocol/ChannelManager.d.ts.map +0 -1
  572. package/dist/cjs/protocol/ChannelManager.js +0 -178
  573. package/dist/cjs/protocol/ChannelManager.js.map +0 -6
  574. package/dist/cjs/session/InsecureSession.d.ts.map +0 -1
  575. package/dist/cjs/session/InsecureSession.js.map +0 -6
  576. package/dist/esm/peer/OperationalPeer.d.ts +0 -38
  577. package/dist/esm/peer/OperationalPeer.d.ts.map +0 -1
  578. package/dist/esm/peer/OperationalPeer.js +0 -6
  579. package/dist/esm/peer/OperationalPeer.js.map +0 -6
  580. package/dist/esm/protocol/ChannelManager.d.ts +0 -29
  581. package/dist/esm/protocol/ChannelManager.d.ts.map +0 -1
  582. package/dist/esm/protocol/ChannelManager.js +0 -158
  583. package/dist/esm/protocol/ChannelManager.js.map +0 -6
  584. package/dist/esm/session/InsecureSession.d.ts.map +0 -1
  585. package/dist/esm/session/InsecureSession.js.map +0 -6
  586. package/src/protocol/ChannelManager.ts +0 -180
package/src/peer/index.ts CHANGED
@@ -7,8 +7,8 @@
7
7
  export * from "./ControllerCommissioner.js";
8
8
  export * from "./ControllerCommissioningFlow.js";
9
9
  export * from "./ControllerDiscovery.js";
10
- export * from "./OperationalPeer.js";
11
10
  export * from "./PeerAddress.js";
12
11
  export * from "./PeerAddressStore.js";
12
+ export * from "./PeerDescriptor.js";
13
13
  export * from "./PeerSet.js";
14
14
  export * from "./PhysicalDeviceProperties.js";
@@ -48,7 +48,7 @@ export class DeviceAdvertiser {
48
48
  });
49
49
 
50
50
  // When a fabric is updated we might need to adjust announcements
51
- this.#observers.on(fabrics.events.updated, async fabric => {
51
+ this.#observers.on(fabrics.events.replaced, async fabric => {
52
52
  if (!this.#isOperational) {
53
53
  return;
54
54
  }
@@ -78,7 +78,7 @@ export class DeviceAdvertiser {
78
78
  });
79
79
 
80
80
  // When a fabric is deleted, cancel any active advertisement
81
- this.#observers.on(fabrics.events.deleted, fabric => {
81
+ this.#observers.on(fabrics.events.deleting, fabric => {
82
82
  Advertisement.cancelAll(this.#advertisements(ad => ad.isOperational() && ad.description.fabric === fabric));
83
83
  });
84
84
 
@@ -86,7 +86,7 @@ export class DeviceAdvertiser {
86
86
  // configured
87
87
  this.#observers.on(sessions.sessions.added, session => {
88
88
  const fabricIndex = session.fabric?.fabricIndex;
89
- const fabric = fabricIndex ? fabrics.findByIndex(fabricIndex) : undefined;
89
+ const fabric = fabricIndex ? fabrics.maybeForIndex(fabricIndex) : undefined;
90
90
  if (!fabric) {
91
91
  return;
92
92
  }
@@ -102,7 +102,7 @@ export class DeviceAdvertiser {
102
102
  // When a session is closed, conditionally resume broadcast
103
103
  this.#observers.on(sessions.sessions.deleted, session => {
104
104
  const fabricIndex = session.fabric?.fabricIndex;
105
- const fabric = fabricIndex ? fabrics.findByIndex(fabricIndex) : undefined;
105
+ const fabric = fabricIndex ? fabrics.maybeForIndex(fabricIndex) : undefined;
106
106
 
107
107
  // If this was an operational connection, readvertise if we're no longer connected to the peer
108
108
  if (fabric) {
@@ -5,7 +5,9 @@
5
5
  */
6
6
 
7
7
  import { DecodedMessage, MessageCodec, SessionType } from "#codec/MessageCodec.js";
8
+ import { Mark } from "#common/Mark.js";
8
9
  import {
10
+ BasicMultiplex,
9
11
  Bytes,
10
12
  Channel,
11
13
  ConnectionlessTransport,
@@ -14,28 +16,23 @@ import {
14
16
  Entropy,
15
17
  Environment,
16
18
  Environmental,
19
+ hex,
17
20
  ImplementationError,
21
+ Lifetime,
18
22
  Logger,
19
- MatterAggregateError,
20
- MatterError,
21
23
  MatterFlowError,
22
24
  ObserverGroup,
23
25
  UdpInterface,
24
26
  UnexpectedDataError,
25
27
  } from "#general";
26
28
  import { PeerAddress } from "#peer/PeerAddress.js";
27
- import {
28
- ChannelNotConnectedError,
29
- DEFAULT_EXPECTED_PROCESSING_TIME,
30
- MessageChannel,
31
- } from "#protocol/MessageChannel.js";
29
+ import { DEFAULT_EXPECTED_PROCESSING_TIME } from "#protocol/MessageChannel.js";
32
30
  import { SecureChannelMessenger } from "#securechannel/SecureChannelMessenger.js";
33
- import { UNICAST_UNSECURE_SESSION_ID } from "#session/InsecureSession.js";
34
31
  import { NodeSession } from "#session/NodeSession.js";
35
32
  import { Session } from "#session/Session.js";
36
33
  import { SessionManager } from "#session/SessionManager.js";
34
+ import { UNICAST_UNSECURE_SESSION_ID } from "#session/UnsecuredSession.js";
37
35
  import { NodeId, SECURE_CHANNEL_PROTOCOL_ID, SecureMessageType } from "#types";
38
- import { ChannelManager } from "./ChannelManager.js";
39
36
  import { MessageExchange, MessageExchangeContext } from "./MessageExchange.js";
40
37
  import { DuplicateMessageError } from "./MessageReceptionState.js";
41
38
  import { ProtocolHandler } from "./ProtocolHandler.js";
@@ -54,60 +51,53 @@ const MAXIMUM_CONCURRENT_OUTGOING_EXCHANGES_PER_SESSION = 30;
54
51
  * Interfaces {@link ExchangeManager} with other components.
55
52
  */
56
53
  export interface ExchangeManagerContext {
54
+ lifetime: Lifetime.Owner;
57
55
  entropy: Entropy;
58
56
  netInterface: ConnectionlessTransportSet;
59
- sessionManager: SessionManager;
60
- channelManager: ChannelManager;
57
+ sessions: SessionManager;
61
58
  }
62
59
 
63
60
  export class ExchangeManager {
61
+ readonly #lifetime: Lifetime;
64
62
  readonly #transports: ConnectionlessTransportSet;
65
- readonly #sessionManager: SessionManager;
66
- readonly #channelManager: ChannelManager;
63
+ readonly #sessions: SessionManager;
67
64
  readonly #exchangeCounter: ExchangeCounter;
68
65
  readonly #exchanges = new Map<number, MessageExchange>();
69
66
  readonly #protocols = new Map<number, ProtocolHandler>();
70
67
  readonly #listeners = new Map<ConnectionlessTransport, ConnectionlessTransport.Listener>();
71
- readonly #closers = new Set<Promise<void>>();
68
+ readonly #workers: BasicMultiplex;
72
69
  readonly #observers = new ObserverGroup(this);
73
- #closing = false;
70
+ readonly #sessionObservers = new Map<Session, ObserverGroup>();
71
+ #isClosing = false;
74
72
 
75
73
  constructor(context: ExchangeManagerContext) {
74
+ this.#lifetime = context.lifetime.join("exchanges");
75
+ this.#workers = new BasicMultiplex();
76
76
  this.#transports = context.netInterface;
77
- this.#sessionManager = context.sessionManager;
78
- this.#channelManager = context.channelManager;
77
+ this.#sessions = context.sessions;
79
78
  this.#exchangeCounter = new ExchangeCounter(context.entropy);
80
79
 
81
80
  for (const netInterface of this.#transports) {
82
- this.#addListener(netInterface);
81
+ this.#addTransport(netInterface);
83
82
  }
84
83
 
85
- this.#observers.on(this.#transports.added, this.#addListener);
86
- this.#observers.on(this.#transports.deleted, this.#deleteListener);
87
-
88
- this.#observers.on(this.#sessionManager.sessions.deleted, session => {
89
- if (!session.closingAfterExchangeFinished) {
90
- // Delayed closing is executed when exchange is closed
91
- session.closer = this.#closeSession(session);
92
- }
93
- });
84
+ this.#observers.on(this.#transports.added, this.#addTransport);
85
+ this.#observers.on(this.#transports.deleted, this.#deleteTransport);
86
+ this.#observers.on(this.#sessions.sessions.added, this.#addSession);
87
+ this.#observers.on(this.#sessions.sessions.deleted, this.#deleteSession);
94
88
  }
95
89
 
96
90
  static [Environmental.create](env: Environment) {
97
91
  const instance = new ExchangeManager({
92
+ lifetime: env,
98
93
  entropy: env.get(Entropy),
99
94
  netInterface: env.get(ConnectionlessTransportSet),
100
- sessionManager: env.get(SessionManager),
101
- channelManager: env.get(ChannelManager),
95
+ sessions: env.get(SessionManager),
102
96
  });
103
97
  env.set(ExchangeManager, instance);
104
98
  return instance;
105
99
  }
106
100
 
107
- get channels() {
108
- return this.#channelManager;
109
- }
110
-
111
101
  hasProtocolHandler(protocolId: number) {
112
102
  return this.#protocols.has(protocolId);
113
103
  }
@@ -124,36 +114,57 @@ export class ExchangeManager {
124
114
  }
125
115
 
126
116
  initiateExchange(address: PeerAddress, protocolId: number) {
127
- return this.initiateExchangeWithChannel(this.#channelManager.getChannel(address), protocolId);
117
+ return this.initiateExchangeForSession(this.#sessions.sessionFor(address), protocolId);
128
118
  }
129
119
 
130
- initiateExchangeWithChannel(channel: MessageChannel, protocolId: number) {
120
+ initiateExchangeForSession(session: Session, protocolId: number) {
131
121
  const exchangeId = this.#exchangeCounter.getIncrementedCounter();
132
122
  const exchangeIndex = exchangeId | 0x10000; // Ensure initiated and received exchange index are different, since the exchangeID can be the same
133
- const exchange = MessageExchange.initiate(this.#messageExchangeContextFor(channel), exchangeId, protocolId);
123
+ const exchange = MessageExchange.initiate(this.#messageExchangeContextFor(session), exchangeId, protocolId);
134
124
  this.#addExchange(exchangeIndex, exchange);
135
125
  return exchange;
136
126
  }
137
127
 
138
128
  async close() {
139
- this.#closing = true;
129
+ if (this.#isClosing) {
130
+ return;
131
+ }
132
+
133
+ using closing = this.#lifetime.closing();
134
+
135
+ this.#isClosing = true;
136
+
137
+ const exchangesClosed = new BasicMultiplex();
138
+
139
+ for (const exchange of this.#exchanges.values()) {
140
+ exchangesClosed.add(exchange.close(true));
141
+ }
142
+
143
+ {
144
+ using _closing = closing.join("exchanges");
145
+ await exchangesClosed;
146
+ }
147
+
148
+ for (const listener of this.#listeners.keys()) {
149
+ this.#deleteTransport(listener);
150
+ }
151
+
140
152
  for (const protocol of this.#protocols.values()) {
141
- await protocol.close();
153
+ this.#workers.add(protocol.close());
142
154
  }
143
- for (const listeners of this.#listeners.keys()) {
144
- this.#deleteListener(listeners);
155
+
156
+ {
157
+ using _closing = closing.join("workers");
158
+ await this.#workers;
145
159
  }
146
- await MatterAggregateError.allSettled(this.#closers, "Error closing exchanges").catch(error =>
147
- logger.error(error),
148
- );
149
- await MatterAggregateError.allSettled(
150
- Array.from(this.#exchanges.values()).map(exchange => exchange.close(true)),
151
- "Error closing exchanges",
152
- ).catch(error => logger.error(error));
160
+
153
161
  this.#exchanges.clear();
162
+ this.#observers.close();
154
163
  }
155
164
 
156
- private async onMessage(channel: Channel<Bytes>, messageBytes: Bytes) {
165
+ async #onMessage(channel: Channel<Bytes>, messageBytes: Bytes) {
166
+ using _lifetime = this.#lifetime.join("receiving from", Diagnostic.strong(channel.name));
167
+
157
168
  const packet = MessageCodec.decodePacket(messageBytes);
158
169
  const bytes = Bytes.of(messageBytes);
159
170
  const aad = bytes.slice(0, bytes.length - packet.applicationPayload.byteLength); // Header+Extensions
@@ -165,25 +176,27 @@ export class ExchangeManager {
165
176
  let message: DecodedMessage | undefined;
166
177
  if (packet.header.sessionType === SessionType.Unicast) {
167
178
  if (packet.header.sessionId === UNICAST_UNSECURE_SESSION_ID) {
168
- if (this.#closing) return;
179
+ if (this.#isClosing) return;
169
180
  const initiatorNodeId = packet.header.sourceNodeId ?? NodeId.UNSPECIFIED_NODE_ID;
170
181
  session =
171
- this.#sessionManager.getUnsecureSession(initiatorNodeId) ??
172
- this.#sessionManager.createInsecureSession({
182
+ this.#sessions.getUnsecuredSession(initiatorNodeId) ??
183
+ this.#sessions.createUnsecuredSession({
184
+ channel,
173
185
  initiatorNodeId,
174
186
  });
175
187
  } else {
176
- session = this.#sessionManager.getSession(packet.header.sessionId);
188
+ session = this.#sessions.getSession(packet.header.sessionId);
177
189
  }
178
190
 
179
191
  if (session === undefined) {
180
- throw new MatterFlowError(
181
- `Cannot find a session for ID ${packet.header.sessionId}${
192
+ logger.warn(
193
+ `Ignoring message for unknown session ${Session.idStrOf(packet)}${
182
194
  packet.header.sourceNodeId !== undefined
183
- ? ` and source NodeId ${packet.header.sourceNodeId}`
195
+ ? ` from node ${hex.fixed(packet.header.sourceNodeId, 16)}`
184
196
  : ""
185
197
  }`,
186
198
  );
199
+ return;
187
200
  }
188
201
 
189
202
  message = session.decode(packet, aad);
@@ -196,13 +209,13 @@ export class ExchangeManager {
196
209
  isDuplicate = true;
197
210
  }
198
211
  } else if (packet.header.sessionType === SessionType.Group) {
199
- if (this.#closing) return;
212
+ if (this.#isClosing) return;
200
213
  if (packet.header.sourceNodeId === undefined) {
201
214
  throw new UnexpectedDataError("Group session message must include a source NodeId");
202
215
  }
203
216
 
204
217
  let key: Bytes;
205
- ({ session, message, key } = this.#sessionManager.groupSessionFromPacket(packet, aad));
218
+ ({ session, message, key } = this.#sessions.groupSessionFromPacket(packet, aad));
206
219
 
207
220
  try {
208
221
  session.updateMessageCounter(messageId, packet.header.sourceNodeId, key);
@@ -237,19 +250,18 @@ export class ExchangeManager {
237
250
  exId: message.payloadHeader.exchangeId,
238
251
  via: channel.name,
239
252
  });
253
+
240
254
  if (exchange !== undefined) {
241
- if (
242
- exchange.requiresSecureSession !== session.isSecure ||
243
- exchange.session.id !== packet.header.sessionId ||
244
- (exchange.isClosing && !isStandaloneAck)
245
- ) {
255
+ this.#lifetime.details.exchange = exchange.idStr;
256
+ if (exchange.session.id !== packet.header.sessionId || (exchange.isClosing && !isStandaloneAck)) {
246
257
  logger.debug(
247
- "Ignore « message because",
258
+ exchange.via,
259
+ "Ignore",
260
+ Mark.INBOUND,
261
+ "message because",
248
262
  exchange.isClosing
249
263
  ? "exchange is closing"
250
- : exchange.session.id !== packet.header.sessionId
251
- ? `session ID mismatch ${exchange.session.id} vs ${packet.header.sessionId}`
252
- : `session security requirements (${exchange.requiresSecureSession}) not fulfilled`,
264
+ : `session ID mismatch (header session is ${Session.idStrOf(packet)}`,
253
265
  messageDiagnostics,
254
266
  );
255
267
 
@@ -263,10 +275,10 @@ export class ExchangeManager {
263
275
 
264
276
  await exchange.onMessageReceived(message, isDuplicate);
265
277
  } else {
266
- if (this.#closing) return;
267
- if (session.closingAfterExchangeFinished) {
278
+ if (this.#isClosing) return;
279
+ if (session.isClosing) {
268
280
  throw new MatterFlowError(
269
- `Session with ID ${packet.header.sessionId} marked for closure, decline new exchange creation.`,
281
+ `Declining new exchange because session ${Session.idStrOf(packet)} is closing`,
270
282
  );
271
283
  }
272
284
 
@@ -279,7 +291,9 @@ export class ExchangeManager {
279
291
  // TODO When adding Group sessions, we need to check how to adjust that handling
280
292
  if (handlerSecurityMismatch) {
281
293
  logger.debug(
282
- `Ignore « message because not matching the security requirements (${protocolHandler.requiresSecureSession} vs. ${session.isSecure})`,
294
+ "Ignore",
295
+ Mark.INBOUND,
296
+ `message because not matching the security requirements (${protocolHandler.requiresSecureSession} vs. ${session.isSecure})`,
283
297
  messageDiagnostics,
284
298
  );
285
299
  }
@@ -291,29 +305,25 @@ export class ExchangeManager {
291
305
  !handlerSecurityMismatch
292
306
  ) {
293
307
  if (isStandaloneAck && !message.payloadHeader.requiresAck) {
294
- logger.debug("Ignore « unsolicited standalone ack message", messageDiagnostics);
308
+ logger.debug("Ignore", Mark.INBOUND, "unsolicited standalone ack message", messageDiagnostics);
295
309
  return;
296
310
  }
297
311
 
298
- const exchange = MessageExchange.fromInitialMessage(
299
- this.#messageExchangeContextFor(await this.#channelManager.getOrCreateChannel(channel, session)),
300
- message,
301
- );
312
+ const exchange = MessageExchange.fromInitialMessage(this.#messageExchangeContextFor(session), message);
313
+ this.#lifetime.details.exchange = exchange.idStr;
302
314
  this.#addExchange(exchangeIndex, exchange);
303
315
  await exchange.onMessageReceived(message);
304
316
  await protocolHandler.onNewExchange(exchange, message);
305
317
  } else if (message.payloadHeader.requiresAck) {
306
- const exchange = MessageExchange.fromInitialMessage(
307
- this.#messageExchangeContextFor(await this.#channelManager.getOrCreateChannel(channel, session)),
308
- message,
309
- );
318
+ const exchange = MessageExchange.fromInitialMessage(this.#messageExchangeContextFor(session), message);
319
+ this.#lifetime.details.exchange = exchange.idStr;
310
320
  this.#addExchange(exchangeIndex, exchange);
311
321
  await exchange.send(SecureMessageType.StandaloneAck, new Uint8Array(0), {
312
322
  includeAcknowledgeMessageId: message.packetHeader.messageId,
313
323
  protocolId: SECURE_CHANNEL_PROTOCOL_ID,
314
324
  });
315
325
  await exchange.close();
316
- logger.debug("Ignore « unsolicited message", messageDiagnostics);
326
+ logger.debug("Ignore", Mark.INBOUND, "unsolicited message", messageDiagnostics);
317
327
  } else {
318
328
  if (protocolHandler === undefined) {
319
329
  throw new MatterFlowError(`Unsupported protocol ${message.payloadHeader.protocolId}`);
@@ -321,82 +331,25 @@ export class ExchangeManager {
321
331
  if (isDuplicate) {
322
332
  if (message.packetHeader.destGroupId === undefined) {
323
333
  // Duplicate Non-Group messages are still interesting to log to know them
324
- logger.debug("Ignore « duplicate message", messageDiagnostics);
334
+ logger.debug("Ignore", Mark.INBOUND, "duplicate message", messageDiagnostics);
325
335
  }
326
336
  return;
327
337
  }
328
338
  if (!isStandaloneAck) {
329
- logger.info("Discard « unexpected message", messageDiagnostics, Diagnostic.json(message));
339
+ logger.info(
340
+ "Discard",
341
+ Mark.INBOUND,
342
+ "unexpected message",
343
+ messageDiagnostics,
344
+ Diagnostic.json(message),
345
+ );
330
346
  }
331
347
  }
332
348
  }
333
349
  }
334
350
 
335
351
  async deleteExchange(exchangeIndex: number) {
336
- const exchange = this.#exchanges.get(exchangeIndex);
337
- if (exchange === undefined) {
338
- logger.info(`Exchange with index ${exchangeIndex} to delete not found or already deleted.`);
339
- return;
340
- }
341
- const { session } = exchange;
342
352
  this.#exchanges.delete(exchangeIndex);
343
- if (NodeSession.is(session) && session.closingAfterExchangeFinished) {
344
- logger.debug(
345
- `Exchange index ${exchangeIndex} on Session ${session.name} is already marked for closure. Close session now.`,
346
- );
347
- try {
348
- await this.#closeSession(session);
349
- } catch (error) {
350
- logger.error(`Error closing session ${session.name}. Ignoring.`, error);
351
- }
352
- }
353
- }
354
-
355
- async #closeSession(session: NodeSession) {
356
- const sessionId = session.id;
357
- const sessionName = session.name;
358
-
359
- const asExchangeSession = session as { closedByExchange?: boolean };
360
- if (asExchangeSession.closedByExchange) {
361
- // Session already removed, so we do not need to close again
362
- return;
363
- }
364
- asExchangeSession.closedByExchange = true;
365
-
366
- for (const [_exchangeIndex, exchange] of this.#exchanges.entries()) {
367
- if (exchange.session.id === sessionId) {
368
- await exchange.destroy();
369
- }
370
- }
371
- if (session.sendCloseMessageWhenClosing) {
372
- let channel;
373
- try {
374
- channel = this.#channelManager.getChannelForSession(session);
375
- } catch (e) {
376
- logger.debug(`Not sending close for session ${sessionName}:`, e);
377
- return;
378
- }
379
- logger.debug(`Channel for session ${sessionName} is ${channel?.name}`);
380
- if (channel !== undefined) {
381
- const exchange = this.initiateExchangeWithChannel(channel, SECURE_CHANNEL_PROTOCOL_ID);
382
- logger.debug(`Initiated exchange ${exchange.id} to close session ${sessionName}`);
383
- try {
384
- const messenger = new SecureChannelMessenger(exchange);
385
- await messenger.sendCloseSession();
386
- await messenger.close();
387
- } catch (error) {
388
- if (error instanceof ChannelNotConnectedError) {
389
- logger.debug("Session already closed because channel is disconnected.");
390
- } else {
391
- logger.error("Error closing session", error);
392
- }
393
- }
394
- await exchange.destroy();
395
- }
396
- }
397
- if (session.closingAfterExchangeFinished) {
398
- await session.destroy(false, false);
399
- }
400
353
  }
401
354
 
402
355
  #addExchange(exchangeIndex: number, exchange: MessageExchange) {
@@ -424,31 +377,30 @@ export class ExchangeManager {
424
377
  // TODO: Adjust this logic into a Exchange creation queue instead of hard closing
425
378
  const exchangeToClose = sessionExchanges[0];
426
379
  logger.info(
427
- `Closing oldest exchange ${exchangeToClose.id} for session ${sessionId} because of too many concurrent outgoing exchanges. Ensure to not send that many parallel messages to one peer.`,
380
+ exchangeToClose.via,
381
+ `Closing oldest exchange for session because of too many concurrent outgoing exchanges. Ensure to not send that many parallel messages to one peer.`,
428
382
  );
429
- exchangeToClose.close().catch(error => logger.error("Error closing exchange", error)); // TODO Promise??
383
+ logger.debug(exchangeToClose.via, "Closing oldest exchange");
384
+ this.#workers.add(exchangeToClose.close());
430
385
  }
431
386
 
432
- calculateMaximumPeerResponseTimeMsFor(
433
- channel: MessageChannel,
434
- expectedProcessingTime = DEFAULT_EXPECTED_PROCESSING_TIME,
435
- ) {
436
- return channel.calculateMaximumPeerResponseTime(
437
- channel.session.parameters,
438
- this.#sessionManager.sessionParameters,
387
+ calculateMaximumPeerResponseTimeMsFor(session: Session, expectedProcessingTime = DEFAULT_EXPECTED_PROCESSING_TIME) {
388
+ return session.channel.calculateMaximumPeerResponseTime(
389
+ session.parameters,
390
+ this.#sessions.sessionParameters,
439
391
  expectedProcessingTime,
440
392
  );
441
393
  }
442
394
 
443
- #messageExchangeContextFor(channel: MessageChannel): MessageExchangeContext {
395
+ #messageExchangeContextFor(session: Session): MessageExchangeContext {
444
396
  return {
445
- channel,
446
- localSessionParameters: this.#sessionManager.sessionParameters,
447
- retry: number => this.#sessionManager.retry.emit(channel.session, number),
397
+ session,
398
+ localSessionParameters: this.#sessions.sessionParameters,
399
+ retry: number => this.#sessions.retry.emit(session, number),
448
400
  };
449
401
  }
450
402
 
451
- #addListener(netInterface: ConnectionlessTransport) {
403
+ #addTransport(netInterface: ConnectionlessTransport) {
452
404
  const udpInterface = netInterface instanceof UdpInterface;
453
405
  this.#listeners.set(
454
406
  netInterface,
@@ -460,35 +412,54 @@ export class ExchangeManager {
460
412
  return;
461
413
  }
462
414
 
463
- try {
464
- this.onMessage(socket, data).catch(error =>
465
- logger.info(
466
- `Error on channel ${socket.name}:`,
467
- error instanceof MatterError ? error.message : error,
468
- ),
469
- );
470
- } catch (error) {
471
- logger.info(
472
- `Ignoring UDP message on channel ${socket.name} with error`,
473
- error instanceof MatterError ? error.message : error,
474
- );
475
- }
415
+ this.#workers.add(this.#onMessage(socket, data));
476
416
  }),
477
417
  );
478
418
  }
479
419
 
480
- #deleteListener(netInterface: ConnectionlessTransport) {
420
+ #deleteTransport(netInterface: ConnectionlessTransport) {
481
421
  const listener = this.#listeners.get(netInterface);
482
422
  if (listener === undefined) {
483
423
  return;
484
424
  }
485
425
  this.#listeners.delete(netInterface);
486
426
 
487
- const closer = listener
488
- .close()
489
- .catch(e => logger.error("Error closing network listener", e))
490
- .finally(() => this.#closers.delete(closer));
491
- this.#closers.add(closer);
427
+ this.#workers.add(listener.close());
428
+ }
429
+
430
+ #addSession(session: Session) {
431
+ if (!(session instanceof NodeSession)) {
432
+ return;
433
+ }
434
+
435
+ let observers = this.#sessionObservers.get(session);
436
+ if (!observers) {
437
+ this.#sessionObservers.set(session, (observers = new ObserverGroup()));
438
+ }
439
+
440
+ observers.on(session.gracefulClose, () => this.#sendCloseSession(session));
441
+ }
442
+
443
+ #deleteSession(session: Session) {
444
+ const observers = this.#sessionObservers.get(session);
445
+ if (!observers) {
446
+ return;
447
+ }
448
+
449
+ observers.close();
450
+ this.#sessionObservers.delete(session);
451
+ }
452
+
453
+ async #sendCloseSession(session: NodeSession) {
454
+ await using exchange = this.initiateExchangeForSession(session, SECURE_CHANNEL_PROTOCOL_ID);
455
+ logger.debug(exchange.via, "Closing session");
456
+ try {
457
+ const messenger = new SecureChannelMessenger(exchange);
458
+ await messenger.sendCloseSession();
459
+ await messenger.close();
460
+ } catch (error) {
461
+ logger.error(exchange.via, "Error closing session:", error);
462
+ }
492
463
  }
493
464
  }
494
465