@matter/protocol 0.16.0-alpha.0-20251203-aaf94bca8 → 0.16.0-alpha.0-20251207-37e501b18

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