@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
@@ -4,13 +4,16 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import { DecodedPacket } from "#codec/MessageCodec.js";
7
+ import type { DecodedPacket } from "#codec/MessageCodec.js";
8
8
  import { SupportedTransportsSchema } from "#common/SupportedTransportsBitmap.js";
9
9
  import { FabricManager } from "#fabric/FabricManager.js";
10
10
  import {
11
11
  BasicSet,
12
12
  Bytes,
13
+ Channel,
14
+ ConnectionlessTransportSet,
13
15
  Construction,
16
+ Crypto,
14
17
  Duration,
15
18
  Environment,
16
19
  Environmental,
@@ -23,43 +26,25 @@ import {
23
26
  ObserverGroup,
24
27
  StorageContext,
25
28
  StorageManager,
29
+ Timestamp,
26
30
  toHex,
27
31
  } from "#general";
28
- import { Subscription } from "#interaction/Subscription.js";
29
- import { Specification } from "#model";
32
+ import type { Subscription } from "#interaction/Subscription.js";
30
33
  import { PeerAddress, PeerAddressMap } from "#peer/PeerAddress.js";
34
+ import { SessionClosedError } from "#protocol/errors.js";
31
35
  import { GroupSession } from "#session/GroupSession.js";
32
- import { CaseAuthenticatedTag, DEFAULT_MAX_PATHS_PER_INVOKE, FabricId, FabricIndex, GroupId, NodeId } from "#types";
36
+ import { CaseAuthenticatedTag, FabricId, FabricIndex, GroupId, NodeId } from "#types";
33
37
  import { UnexpectedDataError } from "@matter/general";
34
- import { ExposedFabricInformation, Fabric } from "../fabric/Fabric.js";
38
+ import type { ExposedFabricInformation, Fabric } from "../fabric/Fabric.js";
35
39
  import { MessageCounter } from "../protocol/MessageCounter.js";
36
- import { InsecureSession } from "./InsecureSession.js";
37
40
  import { NodeSession } from "./NodeSession.js";
38
41
  import { SecureSession } from "./SecureSession.js";
39
- import {
40
- FALLBACK_DATAMODEL_REVISION,
41
- FALLBACK_INTERACTIONMODEL_REVISION,
42
- FALLBACK_MAX_PATHS_PER_INVOKE,
43
- FALLBACK_MAX_TCP_MESSAGE_SIZE,
44
- FALLBACK_SPECIFICATION_VERSION,
45
- Session,
46
- SessionParameterOptions,
47
- SessionParameters,
48
- } from "./Session.js";
49
- import { SessionIntervals } from "./SessionIntervals.js";
42
+ import type { Session } from "./Session.js";
43
+ import { SessionParameters } from "./SessionParameters.js";
44
+ import { UnsecuredSession } from "./UnsecuredSession.js";
50
45
 
51
46
  const logger = Logger.get("SessionManager");
52
47
 
53
- const DEFAULT_SESSION_PARAMETERS = {
54
- ...SessionIntervals.defaults,
55
- dataModelRevision: Specification.DATA_MODEL_REVISION,
56
- interactionModelRevision: Specification.INTERACTION_MODEL_REVISION,
57
- specificationVersion: Specification.SPECIFICATION_VERSION,
58
- maxPathsPerInvoke: DEFAULT_MAX_PATHS_PER_INVOKE,
59
- supportedTransports: {},
60
- maxTcpMessageSize: FALLBACK_MAX_TCP_MESSAGE_SIZE,
61
- };
62
-
63
48
  export interface ResumptionRecord {
64
49
  sharedSecret: Bytes;
65
50
  resumptionId: Bytes;
@@ -112,7 +97,7 @@ export interface SessionManagerContext {
112
97
  /**
113
98
  * Parameter overrides.
114
99
  */
115
- parameters?: Partial<SessionParameters>;
100
+ parameters?: SessionParameters.Config;
116
101
 
117
102
  /**
118
103
  * This is an arbitrary contextual object attached to sessions used for compatibility with legacy APIs.
@@ -129,34 +114,49 @@ const ID_SPACE_UPPER_BOUND = 0xffff;
129
114
  */
130
115
  export class SessionManager {
131
116
  readonly #context: SessionManagerContext;
132
- readonly #insecureSessions = new Map<NodeId, InsecureSession>();
117
+ readonly #unsecuredSessions = new Map<NodeId, UnsecuredSession>();
133
118
  readonly #sessions = new BasicSet<NodeSession>();
134
119
  readonly #groupSessions = new Map<NodeId, BasicSet<GroupSession>>();
135
120
  #nextSessionId: number;
136
121
  #resumptionRecords = new PeerAddressMap<ResumptionRecord>();
137
122
  readonly #globalUnencryptedMessageCounter;
138
- readonly #subscriptionsChanged = Observable<[session: NodeSession, subscription: Subscription]>();
139
123
  #sessionParameters: SessionParameters;
140
- readonly #retry = Observable<[session: Session, number: number]>();
141
124
  readonly #construction: Construction<SessionManager>;
142
125
  readonly #observers = new ObserverGroup();
143
126
  readonly #subscriptionUpdateMutex = new Mutex(this);
144
127
  #idUpperBound = ID_SPACE_UPPER_BOUND;
145
128
 
129
+ readonly #subscriptionsChanged = Observable<[session: NodeSession, subscription: Subscription]>();
130
+ readonly #retry = Observable<[session: Session, number: number]>();
131
+
146
132
  constructor(context: SessionManagerContext) {
147
133
  this.#context = context;
148
134
  const {
149
135
  fabrics: { crypto },
150
136
  } = context;
151
- this.#sessionParameters = { ...DEFAULT_SESSION_PARAMETERS, ...context.parameters };
137
+ this.#sessionParameters = SessionParameters({ ...SessionParameters.defaults, ...context.parameters });
152
138
  this.#nextSessionId = crypto.randomUint16;
153
139
  this.#globalUnencryptedMessageCounter = new MessageCounter(crypto);
154
140
 
155
141
  // When fabric is removed, also remove the resumption record
156
- this.#observers.on(context.fabrics.events.deleted, async fabric => {
142
+ this.#observers.on(context.fabrics.events.deleting, async fabric => {
157
143
  await this.deleteResumptionRecordsForFabric(fabric);
158
144
  });
159
145
 
146
+ // Add subscription monitors to new node sessions
147
+ this.#sessions.added.on(session => {
148
+ const subscriptionsChanged = (subscription: Subscription) => {
149
+ if (session.isClosing) {
150
+ return;
151
+ }
152
+
153
+ this.#subscriptionsChanged.emit(session, subscription);
154
+ };
155
+
156
+ session.subscriptions.added.on(subscriptionsChanged);
157
+ session.subscriptions.deleted.on(subscriptionsChanged);
158
+ });
159
+
160
160
  this.#construction = Construction(this, () => this.#initialize());
161
161
  }
162
162
 
@@ -189,10 +189,10 @@ export class SessionManager {
189
189
  }
190
190
 
191
191
  /**
192
- * Active insecure sessions.
192
+ * Active unsecured sessions.
193
193
  */
194
- get insecureSessions() {
195
- return this.#insecureSessions;
194
+ get unsecuredSessions() {
195
+ return this.#unsecuredSessions;
196
196
  }
197
197
 
198
198
  /**
@@ -251,23 +251,25 @@ export class SessionManager {
251
251
  return this.#context.owner;
252
252
  }
253
253
 
254
- createInsecureSession(options: {
254
+ createUnsecuredSession(options: {
255
+ channel: Channel<Bytes>;
255
256
  initiatorNodeId?: NodeId;
256
- sessionParameters?: SessionParameterOptions;
257
+ sessionParameters?: SessionParameters.Config;
257
258
  isInitiator?: boolean;
258
259
  }) {
259
260
  this.#construction.assert();
260
261
 
261
- const { initiatorNodeId, sessionParameters, isInitiator } = options;
262
+ const { channel, initiatorNodeId, sessionParameters, isInitiator } = options;
262
263
  if (initiatorNodeId !== undefined) {
263
- if (this.#insecureSessions.has(initiatorNodeId)) {
264
- throw new MatterFlowError(`UnsecureSession with NodeId ${initiatorNodeId} already exists.`);
264
+ if (this.#unsecuredSessions.has(initiatorNodeId)) {
265
+ throw new MatterFlowError(`UnsecuredSession with NodeId ${initiatorNodeId} already exists.`);
265
266
  }
266
267
  }
267
268
  while (true) {
268
- const session = new InsecureSession({
269
+ const session = new UnsecuredSession({
269
270
  crypto: this.#context.fabrics.crypto,
270
271
  manager: this,
272
+ channel,
271
273
  messageCounter: this.#globalUnencryptedMessageCounter,
272
274
  initiatorNodeId,
273
275
  sessionParameters,
@@ -275,68 +277,20 @@ export class SessionManager {
275
277
  });
276
278
 
277
279
  const ephemeralNodeId = session.nodeId;
278
- if (this.#insecureSessions.has(ephemeralNodeId)) continue;
280
+ if (this.#unsecuredSessions.has(ephemeralNodeId)) continue;
279
281
 
280
- this.#insecureSessions.set(ephemeralNodeId, session);
282
+ this.#unsecuredSessions.set(ephemeralNodeId, session);
283
+ session.activate();
281
284
  return session;
282
285
  }
283
286
  }
284
287
 
285
- async createSecureSession(args: {
286
- sessionId: number;
287
- fabric: Fabric | undefined;
288
- peerNodeId: NodeId;
289
- peerSessionId: number;
290
- sharedSecret: Bytes;
291
- salt: Bytes;
292
- isInitiator: boolean;
293
- isResumption: boolean;
294
- peerSessionParameters?: SessionParameterOptions;
295
- caseAuthenticatedTags?: CaseAuthenticatedTag[];
296
- }) {
297
- await this.construction;
298
-
299
- const {
300
- sessionId,
301
- fabric,
302
- peerNodeId,
303
- peerSessionId,
304
- sharedSecret,
305
- salt,
306
- isInitiator,
307
- isResumption,
308
- peerSessionParameters,
309
- caseAuthenticatedTags,
310
- } = args;
311
- const session = await NodeSession.create({
288
+ async createSecureSession(config: Omit<NodeSession.CreateConfig, "crypto"> & { crypto?: Crypto }) {
289
+ return await NodeSession.create({
312
290
  crypto: this.crypto,
291
+ ...config,
313
292
  manager: this,
314
- id: sessionId,
315
- fabric,
316
- peerNodeId,
317
- peerSessionId,
318
- sharedSecret,
319
- salt,
320
- isInitiator,
321
- isResumption,
322
- peerSessionParameters: peerSessionParameters,
323
- caseAuthenticatedTags,
324
293
  });
325
-
326
- const subscriptionsChanged = (subscription: Subscription) => {
327
- if (session.isClosing) {
328
- return;
329
- }
330
-
331
- this.#subscriptionsChanged.emit(session, subscription);
332
- };
333
-
334
- session.subscriptions.added.on(subscriptionsChanged);
335
- session.subscriptions.deleted.on(subscriptionsChanged);
336
-
337
- this.#sessions.add(session);
338
-
339
- return session;
340
294
  }
341
295
 
342
296
  /**
@@ -405,7 +359,10 @@ export class SessionManager {
405
359
 
406
360
  // All session ids are taken, search for the oldest unused session, and close it and re-use its ID
407
361
  const oldestSession = this.findOldestInactiveSession();
408
- await oldestSession.end(true, false);
362
+
363
+ await oldestSession.initiateClose(async () => {
364
+ await oldestSession.closeSubscriptions(true);
365
+ });
409
366
  this.#nextSessionId = oldestSession.id;
410
367
  return this.#nextSessionId++;
411
368
  }
@@ -419,9 +376,7 @@ export class SessionManager {
419
376
  getPaseSession() {
420
377
  this.#construction.assert();
421
378
 
422
- return [...this.#sessions].find(
423
- session => NodeSession.is(session) && session.isPase && !session.closingAfterExchangeFinished,
424
- );
379
+ return [...this.#sessions].find(session => NodeSession.is(session) && session.isPase && !session.isClosing);
425
380
  }
426
381
 
427
382
  forFabric(fabric: Fabric) {
@@ -433,45 +388,73 @@ export class SessionManager {
433
388
  );
434
389
  }
435
390
 
436
- getSessionForNode(address: PeerAddress) {
391
+ sessionFor(peer: PeerAddress) {
392
+ const session = this.maybeSessionFor(peer);
393
+ if (session) {
394
+ return session;
395
+ }
396
+
397
+ throw new SessionClosedError(`Not currently connected to ${PeerAddress(peer)}`);
398
+ }
399
+
400
+ maybeSessionFor(address: PeerAddress) {
437
401
  this.#construction.assert();
438
402
 
439
- //TODO: It can have multiple sessions for one node ...
440
- return [...this.#sessions].find(session => {
441
- if (!session.isSecure) return false;
442
- return session.peerIs(address);
443
- });
403
+ // Prefer the most recently used session. Older ones may not work with broken peers (e.g. CHIP test harness)
404
+ let found: NodeSession | undefined;
405
+ for (const session of this.#sessions) {
406
+ if (!session.peerIs(address) || session.isClosing) {
407
+ continue;
408
+ }
409
+
410
+ if (!found || found.timestamp < session.timestamp) {
411
+ found = session;
412
+ }
413
+ }
414
+
415
+ return found;
444
416
  }
445
417
 
446
- async removeAllSessionsForNode(address: PeerAddress, sendClose = false, closeBeforeCreatedTimestamp?: number) {
418
+ sessionsFor(address: PeerAddress) {
419
+ address = PeerAddress(address);
420
+ return this.#sessions.filter(session => session.peerAddress === address && !session.isClosing);
421
+ }
422
+
423
+ sessionsForFabricIndex(fabricIndex: FabricIndex) {
424
+ return this.#sessions.filter(session => session.fabric?.fabricIndex === fabricIndex);
425
+ }
426
+
427
+ async handlePeerLoss(address: PeerAddress, asOf?: Timestamp) {
447
428
  await this.#construction;
448
429
 
449
430
  for (const session of this.#sessions) {
450
- if (!session.isSecure) continue;
451
- if (closeBeforeCreatedTimestamp !== undefined && session.createdAt >= closeBeforeCreatedTimestamp) continue;
452
- const secureSession = session;
453
- if (secureSession.peerIs(address)) {
454
- await secureSession.destroy(sendClose, false);
455
- this.#sessions.delete(session);
431
+ if (!session.peerIs(address)) {
432
+ continue;
456
433
  }
434
+
435
+ if (asOf !== undefined && session.createdAt >= asOf) {
436
+ continue;
437
+ }
438
+
439
+ await session.handlePeerLoss();
457
440
  }
458
441
  }
459
442
 
460
- getUnsecureSession(sourceNodeId?: NodeId) {
443
+ getUnsecuredSession(sourceNodeId?: NodeId) {
461
444
  this.#construction.assert();
462
445
 
463
446
  if (sourceNodeId === undefined) {
464
- return this.#insecureSessions.get(NodeId.UNSPECIFIED_NODE_ID);
447
+ return this.#unsecuredSessions.get(NodeId.UNSPECIFIED_NODE_ID);
465
448
  }
466
- return this.#insecureSessions.get(sourceNodeId);
449
+ return this.#unsecuredSessions.get(sourceNodeId);
467
450
  }
468
451
 
469
452
  /**
470
- * Creates or Returns a Group Session for a Group Peer Address.
471
- * This is used for sending group messages because it returns the session for the current
472
- * Group Epoch key. The Source Node Id is the own Node.
453
+ * Obtain an outbound group session for a specific group.
454
+ *
455
+ * Returns the session for the current group epoch key. The source is this node and the peer is the group.
473
456
  */
474
- groupSessionForAddress(address: PeerAddress) {
457
+ async groupSessionForAddress(address: PeerAddress, transports: ConnectionlessTransportSet) {
475
458
  const groupId = GroupId.fromNodeId(address.nodeId);
476
459
  GroupId.assertGroupId(groupId);
477
460
 
@@ -483,23 +466,29 @@ export class SessionManager {
483
466
  );
484
467
  }
485
468
 
486
- let session = this.#groupSessions.get(fabric.nodeId)?.get("id", sessionId);
487
- if (session === undefined) {
488
- session = new GroupSession({
489
- manager: this,
490
- id: sessionId,
491
- fabric,
492
- keySetId,
493
- operationalGroupKey: key,
494
- peerNodeId: address.nodeId, // The peer node ID is the group node ID
495
- });
469
+ const session = this.#groupSessions.get(fabric.nodeId)?.get("id", sessionId);
470
+ if (session) {
471
+ return session;
496
472
  }
497
- return session;
473
+
474
+ return await GroupSession.create({
475
+ transports,
476
+ manager: this,
477
+ id: sessionId,
478
+ fabric,
479
+ keySetId,
480
+ operationalGroupKey: key,
481
+ groupNodeId: address.nodeId,
482
+ });
498
483
  }
499
484
 
500
485
  /**
501
- * Creates or Returns the Group session based on an incoming packet.
502
- * The Session ID is determined by trying to decrypt te packet with possible keys.
486
+ * Obtain a Group session for an incoming packet.
487
+ *
488
+ * The session ID is determined by decrypting the packet with possible keys.
489
+ *
490
+ * Note that the resulting session is non-operational in the sense that attempting outbound communication will
491
+ * result in an error.
503
492
  */
504
493
  groupSessionFromPacket(packet: DecodedPacket, aad: Bytes) {
505
494
  const groupId = packet.header.destGroupId;
@@ -606,17 +595,7 @@ export class SessionManager {
606
595
  fabricId,
607
596
  fabricIndex,
608
597
  peerNodeId,
609
- sessionParameters: {
610
- idleInterval,
611
- activeInterval,
612
- activeThreshold,
613
- dataModelRevision,
614
- interactionModelRevision,
615
- specificationVersion,
616
- maxPathsPerInvoke,
617
- supportedTransports,
618
- maxTcpMessageSize,
619
- } = {},
598
+ sessionParameters,
620
599
  caseAuthenticatedTags,
621
600
  }) => {
622
601
  const fabric = this.#context.fabrics.find(
@@ -645,21 +624,8 @@ export class SessionManager {
645
624
  resumptionId,
646
625
  fabric,
647
626
  peerNodeId,
648
- sessionParameters: {
649
- // Make sure to initialize default values when restoring an older resumption record
650
- idleInterval: idleInterval ?? SessionIntervals.defaults.idleInterval,
651
- activeInterval: activeInterval ?? SessionIntervals.defaults.activeInterval,
652
- activeThreshold: activeThreshold ?? SessionIntervals.defaults.activeThreshold,
653
- dataModelRevision: dataModelRevision ?? FALLBACK_DATAMODEL_REVISION,
654
- interactionModelRevision: interactionModelRevision ?? FALLBACK_INTERACTIONMODEL_REVISION,
655
- specificationVersion: specificationVersion ?? FALLBACK_SPECIFICATION_VERSION,
656
- maxPathsPerInvoke: maxPathsPerInvoke ?? FALLBACK_MAX_PATHS_PER_INVOKE,
657
- supportedTransports:
658
- supportedTransports !== undefined
659
- ? SupportedTransportsSchema.decode(supportedTransports)
660
- : {},
661
- maxTcpMessageSize: maxTcpMessageSize ?? FALLBACK_MAX_TCP_MESSAGE_SIZE,
662
- },
627
+ // Make sure to initialize default values when restoring an older resumption record
628
+ sessionParameters: SessionParameters(sessionParameters),
663
629
  caseAuthenticatedTags,
664
630
  });
665
631
  },
@@ -671,11 +637,11 @@ export class SessionManager {
671
637
  return [...this.#sessions]
672
638
  .filter(session => session.isSecure && !session.isPase)
673
639
  .map(session => ({
674
- name: session.name,
640
+ name: session.via,
675
641
  nodeId: session.nodeId,
676
642
  peerNodeId: session.peerNodeId,
677
643
  fabric: session instanceof SecureSession ? session.fabric?.externalInformation : undefined,
678
- isPeerActive: session.isPeerActive(),
644
+ isPeerActive: session.isPeerActive,
679
645
  secure: session.isSecure,
680
646
  lastInteractionTimestamp: session instanceof SecureSession ? session.timestamp : undefined,
681
647
  lastActiveTimestamp: session instanceof SecureSession ? session.activeTimestamp : undefined,
@@ -689,30 +655,46 @@ export class SessionManager {
689
655
  }
690
656
 
691
657
  this.#observers.close();
658
+ await this.#storeResumptionRecords();
692
659
 
693
660
  await this.closeAllSessions();
694
661
  }
695
662
 
696
663
  async clear() {
664
+ if (this.#construction.status === Lifecycle.Status.Initializing) {
665
+ await this.#construction;
666
+ }
667
+
697
668
  await this.closeAllSessions();
698
669
  await this.#context.storage.clear();
699
670
  this.#resumptionRecords.clear();
700
671
  }
701
672
 
702
673
  async closeAllSessions() {
674
+ if (this.#construction.status === Lifecycle.Status.Initializing) {
675
+ await this.#construction;
676
+ }
677
+
703
678
  await this.#subscriptionUpdateMutex;
704
679
 
705
- await this.#storeResumptionRecords();
706
680
  const closePromises = this.#sessions.map(async session => {
707
- await session?.end(false);
681
+ await session.closeSubscriptions(true);
682
+
683
+ // TODO - some CHIP tests (CASERecovery for one) expect us to exit without closing the session and will fail
684
+ // if we end gracefully. Not clear why this behavior would be desirable as it leads to a timeout when the
685
+ // node attempts contact even if we've already restarted
686
+ await session.initiateForceClose();
687
+
708
688
  this.#sessions.delete(session);
709
689
  });
710
- for (const session of this.#insecureSessions.values()) {
711
- closePromises.push(session?.end());
690
+
691
+ for (const session of this.#unsecuredSessions.values()) {
692
+ closePromises.push(session.initiateClose());
712
693
  }
694
+
713
695
  for (const sessions of this.#groupSessions.values()) {
714
696
  for (const session of sessions) {
715
- closePromises.push(session?.end());
697
+ closePromises.push(session.initiateClose());
716
698
  }
717
699
  }
718
700
  await MatterAggregateError.allSettled(closePromises, "Error closing sessions").catch(error =>
@@ -720,27 +702,6 @@ export class SessionManager {
720
702
  );
721
703
  }
722
704
 
723
- updateAllSubscriptions() {
724
- this.#subscriptionUpdateMutex.run(async () => {
725
- for (const session of this.#sessions) {
726
- for (const subscription of session.subscriptions) {
727
- await subscription.update();
728
- }
729
- }
730
- });
731
- }
732
-
733
- /** Clears all subscriptions for a given node and returns how many were cleared. */
734
- async clearSubscriptionsForNode(peerAddress: PeerAddress, flushSubscriptions?: boolean) {
735
- let clearedCount = 0;
736
- for (const session of this.#sessions) {
737
- if (PeerAddress.is(session.peerAddress, peerAddress)) {
738
- clearedCount += await session.clearSubscriptions(flushSubscriptions, true);
739
- }
740
- }
741
- return clearedCount;
742
- }
743
-
744
705
  /**
745
706
  * Compress range of IDs. This is intended for testing.
746
707
  */
@@ -0,0 +1,108 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { SupportedTransportsBitmap, SupportedTransportsSchema } from "#common/SupportedTransportsBitmap.js";
8
+ import { Specification } from "#model";
9
+ import { SessionIntervals } from "./SessionIntervals.js";
10
+
11
+ export interface SessionParameters extends SessionIntervals {
12
+ /** Version of Data Model for the Session parameters side where it appears. */
13
+ dataModelRevision: number;
14
+
15
+ /** Version of Interaction Model for the Session parameters side where it appears. */
16
+ interactionModelRevision: number;
17
+
18
+ /** Version of Specification for the Session parameters side where it appears. */
19
+ specificationVersion: number;
20
+
21
+ /** The maximum number of elements in the InvokeRequests list that the Node is able to process. */
22
+ maxPathsPerInvoke: number;
23
+
24
+ /** A bitmap of the supported transport protocols in addition to MRP. */
25
+ supportedTransports: SessionParameters.SupportedTransports;
26
+
27
+ /**
28
+ * Maximum size of the message carried over TCP, excluding the framing message length field, that the node is
29
+ * capable of receiving from its peer.
30
+ */
31
+ maxTcpMessageSize?: number;
32
+ }
33
+
34
+ export function SessionParameters(config?: SessionParameters.Config): SessionParameters {
35
+ // Decode supported transports if supplied as number
36
+ let supportedTransports = config?.supportedTransports;
37
+ if (typeof supportedTransports === "number") {
38
+ supportedTransports = SupportedTransportsSchema.decode(supportedTransports);
39
+ }
40
+ supportedTransports ??= SessionParameters.fallbacks.supportedTransports;
41
+
42
+ // The MAX_TCP_MESSAGE_SIZE field SHALL only be present if the SUPPORTED_TRANSPORTS field indicates that TCP is
43
+ // supported
44
+ let maxTcpMessageSize: number | undefined;
45
+ if (supportedTransports.tcpClient || supportedTransports.tcpServer) {
46
+ maxTcpMessageSize = config?.maxTcpMessageSize;
47
+ maxTcpMessageSize ??= SessionParameters.fallbacks.maxTcpMessageSize;
48
+ }
49
+
50
+ return { ...SessionParameters.fallbacks, ...config, supportedTransports, maxTcpMessageSize };
51
+ }
52
+
53
+ export namespace SessionParameters {
54
+ export interface SupportedTransports extends Partial<SupportedTransportsBitmap> {}
55
+
56
+ export interface Config extends Partial<Omit<SessionParameters, "supportedTransports">> {
57
+ supportedTransports?: number | SupportedTransports;
58
+ }
59
+
60
+ /**
61
+ * Session parameters we use for peers if not supplied by the peer.
62
+ */
63
+ export const fallbacks = {
64
+ ...SessionIntervals.defaults,
65
+
66
+ /**
67
+ * Fallback value for Data Model Revision when not provided in Session parameters. We use Matter 1.2 as
68
+ * assumption.
69
+ */
70
+ dataModelRevision: 17,
71
+
72
+ /**
73
+ * Fallback value for Interaction Model Revision when not provided in Session parameters. We use Matter 1.2 as
74
+ * assumption.
75
+ */
76
+ interactionModelRevision: 11,
77
+
78
+ /**
79
+ * Fallback value for Specification Version when not provided in Session parameters. We use 0 as assumption which is
80
+ * "before 1.3".
81
+ */
82
+ specificationVersion: 0,
83
+
84
+ /**
85
+ * Fallback value for the maximum number of paths that can be included in a single invoke message when not provided in
86
+ * Session parameters.
87
+ */
88
+ maxPathsPerInvoke: 1,
89
+
90
+ /**
91
+ * No TCP support by default.
92
+ */
93
+ supportedTransports: {},
94
+
95
+ maxTcpMessageSize: 64000,
96
+ };
97
+
98
+ /**
99
+ * Session parameters we use for ourselves.
100
+ */
101
+ export const defaults = {
102
+ ...fallbacks,
103
+
104
+ dataModelRevision: Specification.DATA_MODEL_REVISION,
105
+ interactionModelRevision: Specification.INTERACTION_MODEL_REVISION,
106
+ specificationVersion: Specification.SPECIFICATION_VERSION,
107
+ };
108
+ }