@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
@@ -18,8 +18,8 @@ import {
18
18
  Environmental,
19
19
  ImmutableSet,
20
20
  ImplementationError,
21
- isIpNetworkChannel,
22
21
  isIPv6,
22
+ Lifetime,
23
23
  Logger,
24
24
  MatterError,
25
25
  Minutes,
@@ -28,27 +28,26 @@ import {
28
28
  Seconds,
29
29
  ServerAddress,
30
30
  ServerAddressUdp,
31
- STANDARD_MATTER_PORT,
32
31
  Time,
33
32
  Timer,
34
33
  } from "#general";
35
34
  import { MdnsClient } from "#mdns/MdnsClient.js";
36
35
  import { PeerAddress, PeerAddressMap } from "#peer/PeerAddress.js";
37
- import { ChannelManager } from "#protocol/ChannelManager.js";
36
+ import { RetransmissionLimitReachedError } from "#protocol/errors.js";
38
37
  import { ExchangeManager } from "#protocol/ExchangeManager.js";
39
38
  import { DedicatedChannelExchangeProvider, ReconnectableExchangeProvider } from "#protocol/ExchangeProvider.js";
40
- import { ChannelNotConnectedError, MessageChannel } from "#protocol/MessageChannel.js";
41
- import { MessageExchange, RetransmissionLimitReachedError } from "#protocol/MessageExchange.js";
39
+ import { MessageExchange } from "#protocol/MessageExchange.js";
42
40
  import { ChannelStatusResponseError } from "#securechannel/SecureChannelMessenger.js";
43
41
  import { CaseClient } from "#session/case/CaseClient.js";
44
42
  import { SecureSession } from "#session/SecureSession.js";
45
43
  import { Session } from "#session/Session.js";
46
44
  import { SessionManager } from "#session/SessionManager.js";
47
- import { CaseAuthenticatedTag, GroupId, NodeId, SECURE_CHANNEL_PROTOCOL_ID, SecureChannelStatusCode } from "#types";
45
+ import { CaseAuthenticatedTag, NodeId, SECURE_CHANNEL_PROTOCOL_ID, SecureChannelStatusCode } from "#types";
48
46
  import { ControllerDiscovery, DiscoveryError, PairRetransmissionLimitReachedError } from "./ControllerDiscovery.js";
49
47
  import { InteractionQueue } from "./InteractionQueue.js";
50
- import { OperationalPeer } from "./OperationalPeer.js";
48
+ import { Peer } from "./Peer.js";
51
49
  import { PeerAddressStore, PeerDataStore } from "./PeerAddressStore.js";
50
+ import { PeerDescriptor } from "./PeerDescriptor.js";
52
51
 
53
52
  const logger = Logger.get("PeerSet");
54
53
 
@@ -92,19 +91,12 @@ export interface PeerConnectionOptions {
92
91
  caseAuthenticatedTags?: CaseAuthenticatedTag[];
93
92
  }
94
93
 
95
- interface RunningDiscovery {
96
- type: NodeDiscoveryType;
97
- promises?: (() => Promise<MessageChannel>)[];
98
- stopTimerFunc?: (() => void) | undefined;
99
- mdnsClient?: MdnsClient;
100
- }
101
-
102
94
  /**
103
95
  * Interfaces {@link PeerSet} with other components.
104
96
  */
105
97
  export interface PeerSetContext {
98
+ lifetime: Lifetime.Owner;
106
99
  sessions: SessionManager;
107
- channels: ChannelManager;
108
100
  exchanges: ExchangeManager;
109
101
  scanners: ScannerSet;
110
102
  transports: ConnectionlessTransportSet;
@@ -114,44 +106,46 @@ export interface PeerSetContext {
114
106
  /**
115
107
  * Manages operational connections to peers on shared fabric.
116
108
  */
117
- export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<OperationalPeer> {
109
+ export class PeerSet implements ImmutableSet<Peer>, ObservableSet<Peer> {
110
+ readonly #lifetime: Lifetime;
118
111
  readonly #sessions: SessionManager;
119
- readonly #channels: ChannelManager;
120
112
  readonly #exchanges: ExchangeManager;
121
113
  readonly #scanners: ScannerSet;
122
114
  readonly #transports: ConnectionlessTransportSet;
123
115
  readonly #caseClient: CaseClient;
124
- readonly #peers = new BasicSet<OperationalPeer>();
125
- readonly #peersByAddress = new PeerAddressMap<OperationalPeer>();
126
- readonly #runningPeerDiscoveries = new PeerAddressMap<RunningDiscovery>();
127
- readonly #runningPeerReconnections = new PeerAddressMap<{
128
- promise: Promise<MessageChannel>;
129
- rejecter: (reason?: any) => void;
130
- }>();
116
+ readonly #peers = new BasicSet<Peer>();
131
117
  readonly #construction: Construction<PeerSet>;
132
118
  readonly #store: PeerAddressStore;
133
119
  readonly #interactionQueue = new InteractionQueue();
134
120
  readonly #nodeCachedData = new PeerAddressMap<PeerDataStore>(); // Temporarily until we store it in new API
135
- readonly #disconnected = AsyncObservable<[address: PeerAddress]>();
121
+ readonly #disconnected = AsyncObservable<[peer: Peer]>();
122
+ readonly #peerContext: Peer.Context;
136
123
 
137
124
  constructor(context: PeerSetContext) {
138
- const { sessions, channels, exchanges, scanners, transports: netInterfaces, store } = context;
125
+ const { lifetime, sessions, exchanges, scanners, transports: netInterfaces, store } = context;
139
126
 
127
+ this.#lifetime = lifetime.join("peers");
140
128
  this.#sessions = sessions;
141
- this.#channels = channels;
142
129
  this.#exchanges = exchanges;
143
130
  this.#scanners = scanners;
144
131
  this.#transports = netInterfaces;
145
132
  this.#store = store;
146
133
  this.#caseClient = new CaseClient(this.#sessions);
147
134
 
148
- this.#peers.added.on(peer => {
149
- peer.address = PeerAddress(peer.address);
150
- this.#peersByAddress.set(peer.address, peer);
151
- });
135
+ this.#peerContext = {
136
+ lifetime: this.#lifetime,
137
+ sessions,
138
+ savePeer: peer => this.#store.updatePeer(peer.descriptor),
139
+ deletePeer: peer => this.#store.deletePeer(peer.address),
140
+ closed: peer => this.#peers.delete(peer),
141
+ };
152
142
 
153
- this.#peers.deleted.on(peer => {
154
- this.#peersByAddress.delete(peer.address);
143
+ this.#peers.added.on(peer => {
144
+ peer.sessions.deleted.on(() => {
145
+ if (!peer.sessions.size) {
146
+ this.#disconnected.emit(peer);
147
+ }
148
+ });
155
149
  });
156
150
 
157
151
  this.#sessions.retry.on((session, count) => {
@@ -162,17 +156,9 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
162
156
  this.#handleFirstRetry(session);
163
157
  });
164
158
 
165
- /** A channel was added by ourselves */
166
- this.#channels.added.on((address, msgChannel) => {
167
- if (isIpNetworkChannel(msgChannel.channel)) {
168
- // Update the channel address if it has one
169
- return this.#addOrUpdatePeer(address, msgChannel.channel.networkAddress);
170
- }
171
- });
172
-
173
159
  this.#construction = Construction(this, async () => {
174
- for (const peer of await this.#store.loadPeers()) {
175
- this.#peers.add(peer);
160
+ for (const descriptor of await this.#store.loadPeers()) {
161
+ this.#peers.add(new Peer(descriptor, this.#peerContext));
176
162
  }
177
163
  });
178
164
  }
@@ -193,26 +179,40 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
193
179
  return this.#disconnected;
194
180
  }
195
181
 
196
- has(item: PeerAddress | OperationalPeer) {
197
- if ("address" in item) {
198
- return this.#peers.has(item);
182
+ /**
183
+ * Unconditional get.
184
+ *
185
+ * Creates the peer if not already present.
186
+ */
187
+ for(address: PeerAddress) {
188
+ let peer = this.get(address);
189
+ if (peer) {
190
+ return peer;
199
191
  }
200
- return this.#peersByAddress.has(item);
192
+
193
+ peer = new Peer({ address }, this.#peerContext);
194
+ this.#peers.add(peer);
195
+
196
+ return peer;
197
+ }
198
+
199
+ has(item: PeerAddress | PeerDescriptor | Peer) {
200
+ return !!this.get(item);
201
201
  }
202
202
 
203
203
  get size() {
204
204
  return this.#peers.size;
205
205
  }
206
206
 
207
- find(predicate: (item: OperationalPeer) => boolean | undefined) {
207
+ find(predicate: (item: Peer) => boolean | undefined) {
208
208
  return this.#peers.find(predicate);
209
209
  }
210
210
 
211
- filter(predicate: (item: OperationalPeer) => boolean | undefined) {
211
+ filter(predicate: (item: Peer) => boolean | undefined) {
212
212
  return this.#peers.filter(predicate);
213
213
  }
214
214
 
215
- map<T>(mapper: (item: OperationalPeer) => T) {
215
+ map<T>(mapper: (item: Peer) => T) {
216
216
  return this.#peers.map(mapper);
217
217
  }
218
218
 
@@ -226,8 +226,8 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
226
226
 
227
227
  static [Environmental.create](env: Environment) {
228
228
  const instance = new PeerSet({
229
+ lifetime: env,
229
230
  sessions: env.get(SessionManager),
230
- channels: env.get(ChannelManager),
231
231
  exchanges: env.get(ExchangeManager),
232
232
  scanners: env.get(ScannerSet),
233
233
  transports: env.get(ConnectionlessTransportSet),
@@ -261,36 +261,40 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
261
261
  ) {
262
262
  address = PeerAddress(address);
263
263
 
264
- const isGroupNode = PeerAddress.isGroup(address);
264
+ if (PeerAddress.isGroup(address)) {
265
+ return;
266
+ }
267
+
265
268
  const { allowUnknownPeer, operationalAddress } = options;
266
- if (!this.#peersByAddress.has(address) && !allowUnknownPeer && !isGroupNode) {
269
+ if (!this.has(address) && !allowUnknownPeer) {
267
270
  throw new UnknownNodeError(`Cannot connect to unknown device ${PeerAddress(address)}`);
268
271
  }
269
272
 
270
- if (!this.#channels.hasChannel(address)) {
271
- if (isGroupNode) {
272
- await this.#createGroupChannel(address);
273
- return;
274
- }
273
+ const peer = this.for(address);
275
274
 
276
- const { promise: existingReconnectPromise } = this.#runningPeerReconnections.get(address) ?? {};
277
- if (existingReconnectPromise !== undefined) {
278
- return existingReconnectPromise;
279
- }
275
+ if (this.#sessions.maybeSessionFor(address) || peer.activeDiscovery?.type === NodeDiscoveryType.FullDiscovery) {
276
+ return;
277
+ }
280
278
 
281
- const { promise, resolver, rejecter } = createPromise<MessageChannel>();
282
- this.#runningPeerReconnections.set(address, { promise, rejecter });
283
-
284
- this.#resume(address, options, operationalAddress)
285
- .then(channel => {
286
- this.#runningPeerReconnections.delete(address);
287
- resolver(channel);
288
- })
289
- .catch(error => {
290
- this.#runningPeerReconnections.delete(address);
291
- rejecter(error);
292
- });
279
+ const { promise: existingReconnectPromise } = peer.activeReconnection ?? {};
280
+ if (existingReconnectPromise !== undefined) {
281
+ return existingReconnectPromise;
282
+ }
283
+
284
+ const { promise, resolver, rejecter } = createPromise<SecureSession>();
285
+ peer.activeReconnection = { promise, rejecter };
286
+
287
+ this.#resume(address, options, operationalAddress)
288
+ .then(channel => {
289
+ peer.activeReconnection = undefined;
290
+ resolver(channel);
291
+ })
292
+ .catch(error => {
293
+ peer.activeReconnection = undefined;
294
+ rejecter(error);
295
+ });
293
296
 
297
+ if (options.discoveryOptions?.discoveryType !== NodeDiscoveryType.FullDiscovery) {
294
298
  return promise;
295
299
  }
296
300
  }
@@ -299,42 +303,41 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
299
303
  * Obtain an exchange provider for the designated peer.
300
304
  * TODO enhance PeerConnectionOptions.discoveryOptions.discoveryData with "addresses" for known operational addresses
301
305
  */
302
- async exchangeProviderFor(addressOrChannel: PeerAddress | MessageChannel, options: PeerConnectionOptions = {}) {
303
- if (addressOrChannel instanceof MessageChannel) {
304
- return new DedicatedChannelExchangeProvider(this.#exchanges, addressOrChannel);
306
+ async exchangeProviderFor(addressOrSession: PeerAddress | SecureSession, options: PeerConnectionOptions = {}) {
307
+ if (addressOrSession instanceof SecureSession) {
308
+ return new DedicatedChannelExchangeProvider(this.#exchanges, addressOrSession);
305
309
  }
306
- const address: PeerAddress = addressOrChannel;
310
+ const address: PeerAddress = addressOrSession;
307
311
  if (PeerAddress.isGroup(address)) {
308
- if (!this.#channels.hasChannel(address)) {
309
- // Ensure that we have a group channel
310
- await this.#createGroupChannel(address);
311
- }
312
- return new DedicatedChannelExchangeProvider(this.#exchanges, this.#channels.getChannel(address));
312
+ const session = await this.#sessions.groupSessionForAddress(address, this.#transports);
313
+ return new DedicatedChannelExchangeProvider(this.#exchanges, session);
313
314
  }
314
- let initiallyConnected = this.#channels.hasChannel(address);
315
- return new ReconnectableExchangeProvider(this.#exchanges, this.#channels, address, async () => {
315
+ let initiallyConnected = !!this.#sessions.maybeSessionFor(address);
316
+ return new ReconnectableExchangeProvider(this.#exchanges, this.#sessions, address, async () => {
316
317
  const { caseAuthenticatedTags, discoveryOptions } = options;
317
318
 
318
- if (!initiallyConnected && !this.#channels.hasChannel(address)) {
319
+ if (!initiallyConnected && !this.#sessions.maybeSessionFor(address)) {
319
320
  // We got an uninitialized node, so do the first connection as usual
320
321
  await this.#ensureConnection(address, {
321
322
  discoveryOptions: { discoveryType: NodeDiscoveryType.None },
322
323
  caseAuthenticatedTags,
323
324
  });
324
325
  initiallyConnected = true; // We only do this connection once, rest is handled in following code
325
- if (this.#channels.hasChannel(address)) {
326
+ if (this.#sessions.maybeSessionFor(address)) {
326
327
  return;
327
328
  }
328
329
  }
329
330
 
330
- if (!this.#channels.hasChannel(address)) {
331
- throw new RetransmissionLimitReachedError(`Device ${PeerAddress(address)} is currently not reachable.`);
331
+ if (!this.#sessions.maybeSessionFor(address)) {
332
+ throw new RetransmissionLimitReachedError(`Device ${PeerAddress(address)} is unreachable`);
332
333
  }
333
- await this.#channels.removeAllNodeChannels(address);
334
+
335
+ // Close all sessions
336
+ await this.#sessions.handlePeerLoss(address);
334
337
 
335
338
  // Enrich discoveryData with data from the node store when not provided
336
339
  const { discoveryData } = discoveryOptions ?? {
337
- discoveryData: this.#peersByAddress.get(address)?.discoveryData,
340
+ discoveryData: this.get(address)?.descriptor.discoveryData,
338
341
  };
339
342
  // Try to use first result for one last try before we need to reconnect
340
343
  const operationalAddress = this.#knownOperationalAddressFor(address, true);
@@ -343,15 +346,16 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
343
346
  `Re-discovering device failed (no address found), remove all sessions for ${PeerAddress(address)}`,
344
347
  );
345
348
  // We remove all sessions, this also informs the PairedNode class
346
- await this.#sessions.removeAllSessionsForNode(address);
347
349
  throw new RetransmissionLimitReachedError(`No operational address found for ${PeerAddress(address)}`);
348
350
  }
351
+
352
+ // Try to reconnect to last known address
349
353
  if (
350
354
  (await this.#reconnectKnownAddress(address, operationalAddress, discoveryData, {
351
355
  expectedProcessingTime: Seconds(2),
352
356
  })) === undefined
353
357
  ) {
354
- throw new RetransmissionLimitReachedError(`${PeerAddress(address)} is not reachable.`);
358
+ throw new RetransmissionLimitReachedError(`${PeerAddress(address)} is not reachable`);
355
359
  }
356
360
  });
357
361
  }
@@ -359,67 +363,21 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
359
363
  /**
360
364
  * Retrieve a peer by address.
361
365
  */
362
- get(peer: PeerAddress | OperationalPeer) {
366
+ get(peer: PeerAddress | PeerDescriptor) {
363
367
  if ("address" in peer) {
364
- return this.#peersByAddress.get(peer.address);
365
- }
366
- return this.#peersByAddress.get(peer);
367
- }
368
-
369
- /**
370
- * Terminate any active peer connection.
371
- * Also handles unknown peers
372
- */
373
- async disconnect(peer: PeerAddress | OperationalPeer, sendSessionClose = true) {
374
- let address = this.get(peer)?.address; // Check known Peers
375
- if (address === undefined) {
376
- // We did not find a ClientNode for this peer, so check if it is a PeerAddress
377
- if ("nodeId" in peer && "fabricIndex" in peer) {
378
- address = peer;
379
- } else {
380
- return;
381
- }
368
+ return this.#peers.get("address", PeerAddress(peer.address));
382
369
  }
383
-
384
- await this.#sessions.removeAllSessionsForNode(address, sendSessionClose);
385
- await this.#channels.removeAllNodeChannels(address);
386
- await this.#disconnected.emit(address);
387
- }
388
-
389
- /**
390
- * Forget a known peer.
391
- */
392
- async delete(peer: PeerAddress | OperationalPeer) {
393
- const actual = this.get(peer);
394
- if (actual === undefined) {
395
- return;
396
- }
397
-
398
- const { address } = actual;
399
- logger.info(`Removing ${address}`);
400
- this.#peers.delete(actual);
401
- await this.#store.deletePeer(address);
402
- await this.disconnect(address, false);
403
- await this.#sessions.deleteResumptionRecord(address);
370
+ return this.#peers.get("address", PeerAddress(peer));
404
371
  }
405
372
 
406
373
  async close() {
407
- for (const [address, { stopTimerFunc, mdnsClient: mdnsScanner }] of this.#runningPeerDiscoveries.entries()) {
408
- stopTimerFunc?.();
409
-
410
- // This ends discovery without triggering promises
411
- mdnsScanner?.cancelOperationalDeviceDiscovery(this.#sessions.fabricFor(address), address.nodeId, false);
412
- }
374
+ using _closing = this.#lifetime.closing();
413
375
 
414
- for (const { address } of this.#peers) {
415
- await this.disconnect(address, false);
376
+ for (const peer of this.#peers) {
377
+ await peer.close();
416
378
  }
417
379
 
418
380
  this.#interactionQueue.close();
419
- this.#runningPeerReconnections.forEach(({ rejecter }) =>
420
- rejecter(new ChannelNotConnectedError("PeerSet closed")),
421
- );
422
- this.#runningPeerReconnections.clear();
423
381
  }
424
382
 
425
383
  /**
@@ -442,12 +400,12 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
442
400
  } catch (error) {
443
401
  if (
444
402
  (error instanceof DiscoveryError || error instanceof NoResponseTimeoutError) &&
445
- this.#peersByAddress.has(address) &&
403
+ this.has(address) &&
446
404
  tryOperationalAddress === undefined
447
405
  ) {
448
406
  logger.info(`Resume failed, remove all sessions for ${PeerAddress(address)}`);
449
407
  // We remove all sessions, this also informs the PairedNode class
450
- await this.#sessions.removeAllSessionsForNode(address);
408
+ await this.#sessions.handlePeerLoss(address);
451
409
  }
452
410
  throw error;
453
411
  }
@@ -463,7 +421,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
463
421
  discoveryOptions: {
464
422
  discoveryType: requestedDiscoveryType = NodeDiscoveryType.FullDiscovery,
465
423
  timeout,
466
- discoveryData = this.#peersByAddress.get(address)?.discoveryData,
424
+ discoveryData = this.get(address)?.descriptor.discoveryData,
467
425
  } = {},
468
426
  caseAuthenticatedTags,
469
427
  } = options ?? {};
@@ -479,7 +437,8 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
479
437
  throw new ImplementationError("Cannot discover device without mDNS scanner.");
480
438
  }
481
439
 
482
- const existingDiscoveryDetails = this.#runningPeerDiscoveries.get(address) ?? {
440
+ const peer = this.for(address);
441
+ const existingDiscoveryDetails = peer.activeDiscovery ?? {
483
442
  type: NodeDiscoveryType.None,
484
443
  };
485
444
 
@@ -489,7 +448,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
489
448
  existingDiscoveryDetails.type < requestedDiscoveryType
490
449
  ) {
491
450
  mdnsScanner.cancelOperationalDeviceDiscovery(this.#sessions.fabricFor(address), address.nodeId);
492
- this.#runningPeerDiscoveries.delete(address);
451
+ peer.activeDiscovery = undefined;
493
452
  existingDiscoveryDetails.type = NodeDiscoveryType.None;
494
453
  }
495
454
 
@@ -530,7 +489,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
530
489
  }
531
490
  }
532
491
 
533
- const discoveryPromises = new Array<() => Promise<MessageChannel>>();
492
+ const discoveryPromises = new Array<() => Promise<SecureSession>>();
534
493
  let reconnectionPollingTimer: Timer | undefined;
535
494
  let stopTimerFunc: (() => void) | undefined;
536
495
 
@@ -538,7 +497,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
538
497
  if (lastOperationalAddress !== undefined) {
539
498
  // Additionally to general discovery we also try to poll the formerly known operational address
540
499
  if (requestedDiscoveryType === NodeDiscoveryType.FullDiscovery) {
541
- const { promise, resolver, rejecter } = createPromise<MessageChannel>();
500
+ const { promise, resolver, rejecter } = createPromise<SecureSession>();
542
501
 
543
502
  logger.debug(
544
503
  `Starting reconnection polling for ${ServerAddress.urlFor(lastOperationalAddress)} (interval ${Duration.format(RECONNECTION_POLLING_INTERVAL)})`,
@@ -561,7 +520,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
561
520
  this.#sessions.fabricFor(address),
562
521
  address.nodeId,
563
522
  );
564
- this.#runningPeerDiscoveries.delete(address);
523
+ peer.activeDiscovery = undefined;
565
524
  resolver(result);
566
525
  }
567
526
  } catch (error) {
@@ -571,7 +530,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
571
530
  this.#sessions.fabricFor(address),
572
531
  address.nodeId,
573
532
  );
574
- this.#runningPeerDiscoveries.delete(address);
533
+ peer.activeDiscovery = undefined;
575
534
  rejecter(error);
576
535
  }
577
536
  }
@@ -595,9 +554,9 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
595
554
  timeout,
596
555
  timeout === undefined,
597
556
  );
598
- const { stopTimerFunc } = this.#runningPeerDiscoveries.get(address) ?? {};
557
+ const { stopTimerFunc } = peer.activeDiscovery ?? {};
599
558
  stopTimerFunc?.();
600
- this.#runningPeerDiscoveries.delete(address);
559
+ peer.activeDiscovery = undefined;
601
560
 
602
561
  const { result } = await ControllerDiscovery.iterateServerAddresses(
603
562
  [scanResult],
@@ -622,15 +581,15 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
622
581
  return result;
623
582
  });
624
583
 
625
- this.#runningPeerDiscoveries.set(address, {
584
+ peer.activeDiscovery = {
626
585
  type: requestedDiscoveryType,
627
586
  promises: discoveryPromises,
628
587
  stopTimerFunc,
629
588
  mdnsClient: mdnsScanner,
630
- });
589
+ };
631
590
 
632
591
  return await anyPromise(discoveryPromises).finally(() => {
633
- this.#runningPeerDiscoveries.delete(address);
592
+ peer.activeDiscovery = undefined;
634
593
  });
635
594
  }
636
595
 
@@ -639,7 +598,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
639
598
  operationalAddress: ServerAddressUdp,
640
599
  discoveryData?: DiscoveryData,
641
600
  options?: CaseClient.PairOptions,
642
- ): Promise<MessageChannel | undefined> {
601
+ ): Promise<SecureSession | undefined> {
643
602
  address = PeerAddress(address);
644
603
 
645
604
  const { ip, port } = operationalAddress;
@@ -653,17 +612,17 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
653
612
  : ""
654
613
  }`,
655
614
  );
656
- const channel = await this.#pair(address, operationalAddress, discoveryData, options);
615
+ const session = await this.#pair(address, operationalAddress, discoveryData, options);
657
616
  await this.#addOrUpdatePeer(address, operationalAddress);
658
- return channel;
617
+ return session;
659
618
  } catch (error) {
660
- if (error instanceof NoResponseTimeoutError) {
619
+ if (error instanceof NoResponseTimeoutError || error instanceof ChannelStatusResponseError) {
661
620
  logger.debug(
662
621
  `Failed to resume connection to ${address} connection with ${ip}:${port}, discovering the node now:`,
663
622
  error.message ? error.message : error,
664
623
  );
665
624
  // We remove all sessions, this also informs the PairedNode class
666
- await this.#sessions.removeAllSessionsForNode(address, false, startTime);
625
+ await this.#sessions.handlePeerLoss(address, startTime);
667
626
  return undefined;
668
627
  } else {
669
628
  throw error;
@@ -671,27 +630,6 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
671
630
  }
672
631
  }
673
632
 
674
- async #createGroupChannel(address: PeerAddress) {
675
- const groupId = GroupId.fromNodeId(address.nodeId);
676
- GroupId.assertGroupId(groupId);
677
- const multicastAddress = this.#sessions.fabricFor(address).groups.multicastAddressFor(groupId);
678
-
679
- const operationalInterface = this.#transports.interfaceFor(ChannelType.UDP, multicastAddress);
680
- if (operationalInterface === undefined) {
681
- throw new PairRetransmissionLimitReachedError(`IPv6 interface not initialized`);
682
- }
683
- const operationalChannel = await operationalInterface.openChannel({
684
- type: ChannelType.UDP,
685
- ip: multicastAddress,
686
- port: STANDARD_MATTER_PORT,
687
- });
688
-
689
- const session = this.#sessions.groupSessionForAddress(address);
690
- const channel = new MessageChannel(operationalChannel, session);
691
- await this.#channels.setChannel(address, channel);
692
- return channel;
693
- }
694
-
695
633
  /** Pair with an operational device (already commissioned) and establish a CASE session. */
696
634
  async #pair(
697
635
  address: PeerAddress,
@@ -715,7 +653,8 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
715
653
 
716
654
  const operationalChannel = await operationalInterface.openChannel(operationalServerAddress);
717
655
  const { sessionParameters } = this.#sessions.findResumptionRecordByAddress(address) ?? {};
718
- const unsecureSession = this.#sessions.createInsecureSession({
656
+ const unsecuredSession = this.#sessions.createUnsecuredSession({
657
+ channel: operationalChannel,
719
658
  // Use the session parameters from MDNS announcements when available and rest is assumed to be fallbacks
720
659
  sessionParameters: {
721
660
  ...sessionParameters,
@@ -727,34 +666,26 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
727
666
  });
728
667
 
729
668
  try {
730
- const operationalSecureSession = await this.#doCasePair(
731
- new MessageChannel(operationalChannel, unsecureSession),
732
- address,
733
- options,
734
- );
735
-
736
- const channel = new MessageChannel(operationalChannel, operationalSecureSession);
737
- await this.#channels.setChannel(address, channel);
738
- return channel;
669
+ return await this.#doCasePair(unsecuredSession, address, options);
739
670
  } catch (error) {
740
671
  NoResponseTimeoutError.accept(error);
741
672
 
742
673
  // Convert error
743
674
  throw new PairRetransmissionLimitReachedError(error.message);
744
675
  } finally {
745
- await unsecureSession.destroy();
676
+ await unsecuredSession.initiateClose();
746
677
  }
747
678
  }
748
679
 
749
680
  async #doCasePair(
750
- unsecureMessageChannel: MessageChannel,
681
+ paseSession: Session,
751
682
  address: PeerAddress,
752
683
  options?: CaseClient.PairOptions,
753
684
  ): Promise<SecureSession> {
754
685
  const fabric = this.#sessions.fabricFor(address);
755
686
  let exchange: MessageExchange | undefined;
756
687
  try {
757
- exchange = this.#exchanges.initiateExchangeWithChannel(unsecureMessageChannel, SECURE_CHANNEL_PROTOCOL_ID);
688
+ exchange = this.#exchanges.initiateExchangeForSession(paseSession, SECURE_CHANNEL_PROTOCOL_ID);
758
689
 
759
690
  const { session, resumed } = await this.#caseClient.pair(exchange, fabric, address.nodeId, options);
760
691
 
@@ -776,7 +707,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
776
707
  `Case client: Resumption record seems outdated for Fabric ${NodeId.toHexString(fabric.nodeId)} (index ${fabric.fabricIndex}) and PeerNode ${NodeId.toHexString(address.nodeId)}. Retrying pairing without resumption...`,
777
708
  );
778
709
  // An endless loop should not happen here, as the resumption record is deleted in the next step
779
- return await this.#doCasePair(unsecureMessageChannel, address, options);
710
+ return await this.#doCasePair(paseSession, address, options);
780
711
  }
781
712
  }
782
713
  throw error;
@@ -819,25 +750,24 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
819
750
  operationalServerAddress?: ServerAddressUdp,
820
751
  discoveryData?: DiscoveryData,
821
752
  ) {
822
- let peer = this.#peersByAddress.get(address);
753
+ let peer = this.get(address);
823
754
  if (peer === undefined) {
824
- peer = { address, dataStore: await this.#store.createNodeStore(address) };
755
+ peer = new Peer({ address, dataStore: await this.#store.createNodeStore(address) }, this.#peerContext);
825
756
  this.#peers.add(peer);
826
757
  }
827
- peer.operationalAddress = operationalServerAddress ?? peer.operationalAddress;
758
+ peer.descriptor.operationalAddress = operationalServerAddress ?? peer.descriptor.operationalAddress;
828
759
  if (discoveryData !== undefined) {
829
- peer.discoveryData = {
830
- ...peer.discoveryData,
760
+ peer.descriptor.discoveryData = {
761
+ ...peer.descriptor.discoveryData,
831
762
  ...discoveryData,
832
763
  };
833
764
  }
834
- await this.#store.updatePeer(peer);
835
765
 
836
766
  // If we got a new channel and have a running discovery we can end it
837
- if (peer.operationalAddress !== undefined && this.#runningPeerDiscoveries.has(address)) {
767
+ if (peer.descriptor.operationalAddress !== undefined && peer.activeDiscovery) {
838
768
  logger.info(`Found ${address} during discovery, cancel discovery.`);
839
769
  // We are currently discovering this node, so we need to update the discovery data
840
- const { mdnsClient: mdnsScanner } = this.#runningPeerDiscoveries.get(address) ?? {};
770
+ const { mdnsClient: mdnsScanner } = peer.activeDiscovery ?? {};
841
771
 
842
772
  // This ends discovery and triggers the promises
843
773
  mdnsScanner?.cancelOperationalDeviceDiscovery(this.#sessions.fabricFor(address), address.nodeId, true);
@@ -849,12 +779,13 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
849
779
  }
850
780
 
851
781
  #getLastOperationalAddress(address: PeerAddress) {
852
- return this.#peersByAddress.get(address)?.operationalAddress;
782
+ return this.get(address)?.descriptor.operationalAddress;
853
783
  }
854
784
 
855
785
  #handleFirstRetry(session: Session) {
856
786
  if (!session.isSecure || (session as SecureSession).fabric === undefined) {
857
- // For insecure sessions from CASE/PASE or not yet fabric bound session establishments we do not need to do anything
787
+ // For unsecured sessions from CASE/PASE or not yet fabric bound session establishments we do not need to do
788
+ // anything
858
789
  return;
859
790
  }
860
791
  const { associatedFabric: fabric, peerNodeId: nodeId } = session;
@@ -862,11 +793,12 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
862
793
  return;
863
794
  }
864
795
  const address = fabric.addressOf(nodeId);
865
- if (this.#runningPeerDiscoveries.has(address)) {
796
+ const peer = this.for(address);
797
+ if (peer.activeDiscovery) {
866
798
  // We already discover for this node, so we do not need to start a new discovery
867
799
  return;
868
800
  }
869
- this.#runningPeerDiscoveries.set(address, { type: NodeDiscoveryType.RetransmissionDiscovery });
801
+ peer.activeDiscovery = { type: NodeDiscoveryType.RetransmissionDiscovery };
870
802
  this.#scanners
871
803
  .scannerFor(ChannelType.UDP)
872
804
  ?.findOperationalDevice(fabric, nodeId, RETRANSMISSION_DISCOVERY_TIMEOUT, true)
@@ -874,8 +806,8 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
874
806
  logger.error(`Failed to discover ${address} after resubmission started.`, error);
875
807
  })
876
808
  .finally(() => {
877
- if (this.#runningPeerDiscoveries.get(address)?.type === NodeDiscoveryType.RetransmissionDiscovery) {
878
- this.#runningPeerDiscoveries.delete(address);
809
+ if (peer.activeDiscovery?.type === NodeDiscoveryType.RetransmissionDiscovery) {
810
+ peer.activeDiscovery = undefined;
879
811
  }
880
812
  });
881
813
  }