@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
@@ -0,0 +1,302 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { Message } from "#codec/MessageCodec.js";
8
+ import { Fabric as RealFabric } from "#fabric/Fabric.js";
9
+ import {
10
+ AsyncObservable,
11
+ b$,
12
+ Bytes,
13
+ Channel,
14
+ ChannelType,
15
+ Crypto,
16
+ DataReadQueue,
17
+ Environment,
18
+ ImplementationError,
19
+ IpNetworkChannel,
20
+ Lifetime,
21
+ MAX_UDP_MESSAGE_SIZE,
22
+ MaybePromise,
23
+ MockCrypto,
24
+ Observable,
25
+ ServerAddressUdp,
26
+ } from "#general";
27
+ import { MessageType } from "#interaction/InteractionMessenger.js";
28
+ import { NodeSession as RealNodeSession } from "#session/NodeSession.js";
29
+ import { Session } from "#session/Session.js";
30
+ import { SessionParameters } from "#session/SessionParameters.js";
31
+ import { FabricId, FabricIndex, NodeId, SECURE_CHANNEL_PROTOCOL_ID, Status, TlvStatusResponse, VendorId } from "#types";
32
+ import { Specification } from "@matter/model";
33
+ import { MessageChannel as RealMessageChannel } from "./MessageChannel.js";
34
+ import { MessageExchange, MessageExchangeContext } from "./MessageExchange.js";
35
+
36
+ export namespace ProtocolMocks {
37
+ /**
38
+ * A fabric that will fill any fields not provided with placeholder values.
39
+ */
40
+ export class Fabric extends RealFabric {
41
+ constructor(config?: Partial<RealFabric.Config>, crypto?: Crypto) {
42
+ if (!crypto) {
43
+ crypto = Environment.default.maybeGet(Crypto);
44
+ if (!(crypto instanceof MockCrypto)) {
45
+ crypto = MockCrypto();
46
+ }
47
+ }
48
+
49
+ const keyPair = config?.keyPair ?? crypto.createKeyPair();
50
+ if (MaybePromise.is(keyPair)) {
51
+ throw new ImplementationError("Must provide key pair with async crypto");
52
+ }
53
+
54
+ super(crypto, {
55
+ ...Fabric.defaults,
56
+ ...config,
57
+ keyPair,
58
+ });
59
+ }
60
+ }
61
+
62
+ export namespace Fabric {
63
+ export const defaults: RealFabric.Config = {
64
+ fabricId: FabricId(0x2906c908d115d362n),
65
+ fabricIndex: FabricIndex(1),
66
+ identityProtectionKey: Bytes.empty,
67
+ intermediateCACert: Bytes.empty,
68
+ keyPair: { publicKey: Bytes.empty, privateKey: Bytes.empty },
69
+ label: "test-fabric",
70
+ nodeId: NodeId(0xcd5544aa7b13ef14n),
71
+ operationalCert: Bytes.empty,
72
+ operationalId: Bytes.empty,
73
+ operationalIdentityProtectionKey: b$`9bc61cd9c62a2df6d64dfcaa9dc472d4`,
74
+ rootCert: Bytes.empty,
75
+ rootNodeId: NodeId(1),
76
+ rootPublicKey: b$`044a9f42b1ca4840d37292bbc7f6a7e11e22200c976fc900dbc98a7a383a641cb8254a2e56d4e295a847943b4e3897c4a773e930277b4d9fbede8a052686bfacfa`,
77
+ rootVendorId: VendorId(1),
78
+ };
79
+ }
80
+
81
+ /**
82
+ * A mock {@link NodeSession} that supports functional tests without full mock networking.
83
+ */
84
+ export class NodeSession extends RealNodeSession {
85
+ constructor(config?: NodeSession.Config) {
86
+ const index = config?.index ?? 1;
87
+ const fabricIndex = (config?.fabricIndex ?? 1) as FabricIndex;
88
+ const crypto = config?.crypto ?? Environment.default.get(Crypto);
89
+ const fabric = config && "fabric" in config ? config.fabric : new Fabric({ fabricIndex });
90
+ const maxPayloadSize = config?.maxPayloadSize;
91
+
92
+ // Channel is optional so support "channel: undefined" to disable the default channel
93
+ let channel;
94
+ if (config && "channel" in config) {
95
+ channel = config.channel;
96
+ } else {
97
+ channel = new NetworkChannel({ index, maxPayloadSize });
98
+ }
99
+
100
+ const fullConfig = {
101
+ id: index,
102
+ peerNodeId: NodeId(index),
103
+ attestationKey: Bytes.empty,
104
+ caseAuthenticatedTags: [],
105
+ peerSessionId: index,
106
+ decryptKey: Bytes.empty,
107
+ encryptKey: Bytes.empty,
108
+ isInitiator: true,
109
+ ...config,
110
+ crypto,
111
+ fabric,
112
+ };
113
+ delete fullConfig.channel;
114
+
115
+ super(fullConfig);
116
+
117
+ // Initialize with a mocked message channel
118
+ this.channel = new MessageChannel({ channel, session: this });
119
+
120
+ // ...and mock lifetime
121
+ this.lifetime = Lifetime.mock;
122
+ }
123
+
124
+ static override async create(config: NodeSession.CreateConfig) {
125
+ const crypto = config?.crypto ?? config?.manager?.crypto ?? Environment.default.get(Crypto);
126
+ const index = config?.index ?? 1;
127
+ return RealNodeSession.create.call(this, {
128
+ id: index,
129
+ crypto,
130
+ peerNodeId: NodeId(0),
131
+ peerSessionId: index,
132
+ sharedSecret: Bytes.empty,
133
+ salt: Bytes.empty,
134
+ isInitiator: true,
135
+ isResumption: false,
136
+ ...config,
137
+ });
138
+ }
139
+ }
140
+
141
+ export namespace NodeSession {
142
+ export type Config = Partial<RealNodeSession.Config> & MockSessionConfig;
143
+ export type CreateConfig = Partial<RealNodeSession.CreateConfig & MockSessionConfig>;
144
+ }
145
+
146
+ /**
147
+ * A mock channel that can act as a placeholder without full mock networking.
148
+ */
149
+ export class NetworkChannel implements IpNetworkChannel<Bytes> {
150
+ maxPayloadSize: number;
151
+ isReliable = true;
152
+ supportsLargeMessages = false;
153
+ name = "mock-byte-channel";
154
+ type = ChannelType.UDP;
155
+ networkAddress: ServerAddressUdp;
156
+
157
+ constructor(config: MockNetworkConfig) {
158
+ const index = config.index ?? 1;
159
+ this.maxPayloadSize = config.maxPayloadSize ?? MAX_UDP_MESSAGE_SIZE;
160
+ this.networkAddress = { type: "udp", ip: `::${index}`, port: 5540 };
161
+ }
162
+
163
+ async send(): Promise<void> {
164
+ // Currently we just ignore transmissions
165
+ }
166
+
167
+ async close() {}
168
+ }
169
+
170
+ /**
171
+ * A mock message channel that stores outbound messages for later analysis.
172
+ */
173
+ export class MessageChannel extends RealMessageChannel {
174
+ #requests = new DataReadQueue<Message>();
175
+ #readReady?: AsyncObservable<[]>;
176
+
177
+ constructor(config?: {
178
+ channel?: Channel<Bytes>;
179
+ session?: Session;
180
+ onClose?: () => MaybePromise<void>;
181
+ index?: number;
182
+ fabricIndex?: number;
183
+ }) {
184
+ const index = config?.index ?? 1;
185
+ const fabricIndex = config?.fabricIndex ?? 1;
186
+ const channel = config?.channel ?? new NetworkChannel({ index });
187
+ const session = config?.session ?? new NodeSession({ index, fabricIndex });
188
+ super(channel, session, config?.onClose);
189
+ }
190
+
191
+ override async send(message: Message) {
192
+ this.#requests.write(message);
193
+ await this.#readReady?.emit();
194
+ }
195
+
196
+ read() {
197
+ return this.#requests.read();
198
+ }
199
+
200
+ get readReady() {
201
+ return (this.#readReady ??= new Observable());
202
+ }
203
+ }
204
+
205
+ /**
206
+ * A mock message exchange that "transports" messages via internal queues.
207
+ */
208
+ export class Exchange extends MessageExchange {
209
+ #responses = new DataReadQueue<Message>();
210
+
211
+ constructor(
212
+ config?: Omit<Partial<MessageExchange.Config>, "context"> &
213
+ MockSessionConfig & {
214
+ context?: Partial<MessageExchangeContext>;
215
+ fabric?: Fabric;
216
+ },
217
+ ) {
218
+ const context = config?.context;
219
+
220
+ const index = config?.index ?? 1;
221
+ const fabricIndex = config?.fabricIndex ?? 1;
222
+ const maxPayloadSize = config?.maxPayloadSize;
223
+
224
+ super({
225
+ isInitiator: true,
226
+ exchangeId: index,
227
+ peerSessionId: index,
228
+ protocolId: config?.protocolId ?? SECURE_CHANNEL_PROTOCOL_ID,
229
+
230
+ ...config,
231
+
232
+ context: {
233
+ session: context?.session ?? new NodeSession({ index, fabricIndex, maxPayloadSize }),
234
+ localSessionParameters: SessionParameters(
235
+ context?.localSessionParameters ?? SessionParameters.defaults,
236
+ ),
237
+ retry() {},
238
+ },
239
+ });
240
+ }
241
+
242
+ /**
243
+ * Enqueue a mock response.
244
+ */
245
+ async write(message: Message) {
246
+ this.#responses.write(message);
247
+ }
248
+
249
+ /**
250
+ * Enqueue a mock status response.
251
+ */
252
+ async writeStatus(status = Status.Success) {
253
+ await this.write({
254
+ packetHeader: {
255
+ messageId: 123,
256
+ },
257
+ payloadHeader: {
258
+ messageType: MessageType.StatusResponse,
259
+ },
260
+ payload: TlvStatusResponse.encode({
261
+ status,
262
+ interactionModelRevision: Specification.INTERACTION_MODEL_REVISION,
263
+ }),
264
+ } as Message);
265
+ }
266
+
267
+ /**
268
+ * Wait for a mock request.
269
+ */
270
+ read() {
271
+ return this.#mockChannel.read();
272
+ }
273
+
274
+ /**
275
+ * Emits when read() won't block.
276
+ */
277
+ get readReady() {
278
+ return this.#mockChannel.readReady;
279
+ }
280
+
281
+ override nextMessage() {
282
+ return this.#responses.read();
283
+ }
284
+
285
+ get #mockChannel() {
286
+ const channel = this.channel;
287
+ if (!(channel instanceof MessageChannel)) {
288
+ throw new ImplementationError("Message channel is not mocked");
289
+ }
290
+ return channel;
291
+ }
292
+ }
293
+
294
+ export interface MockNetworkConfig {
295
+ index?: number;
296
+ maxPayloadSize?: number;
297
+ }
298
+
299
+ export interface MockSessionConfig extends MockNetworkConfig {
300
+ fabricIndex?: number;
301
+ }
302
+ }
@@ -0,0 +1,44 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { Message } from "#codec/MessageCodec.js";
8
+ import type { Session } from "#session/Session.js";
9
+ import { Status, StatusResponseError } from "#types";
10
+ import { MatterError, NoResponseTimeoutError } from "@matter/general";
11
+
12
+ /**
13
+ * Indicates MRP retries were exhausted without a response from the client.
14
+ *
15
+ * TODO - we use this error far too broadly and throw in places that do not involve MRP
16
+ */
17
+ export class RetransmissionLimitReachedError extends NoResponseTimeoutError {}
18
+
19
+ /**
20
+ * Thrown when we receive a message on an exchange that we did not expect.
21
+ */
22
+ export class UnexpectedMessageError extends MatterError {
23
+ public constructor(
24
+ message: string,
25
+ session: Session,
26
+ public readonly receivedMessage: Message,
27
+ ) {
28
+ super(`(${Message.diagnosticsOf(session, receivedMessage)}) ${message}`);
29
+ }
30
+ }
31
+
32
+ /**
33
+ * Thrown for communication attempts on closed sessions.
34
+ */
35
+ export class SessionClosedError extends MatterError {}
36
+
37
+ /**
38
+ * Thrown for operations that are illegal because a session is not associated with a fabric.
39
+ */
40
+ export class NoAssociatedFabricError extends StatusResponseError {
41
+ constructor(message: string) {
42
+ super(message, Status.UnsupportedAccess);
43
+ }
44
+ }
@@ -4,9 +4,9 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- export * from "./ChannelManager.js";
8
7
  export * from "./DeviceAdvertiser.js";
9
8
  export * from "./DeviceCommissioner.js";
9
+ export * from "./errors.js";
10
10
  export * from "./ExchangeManager.js";
11
11
  export * from "./ExchangeProvider.js";
12
12
  export * from "./MessageChannel.js";
@@ -14,4 +14,5 @@ export * from "./MessageCounter.js";
14
14
  export * from "./MessageExchange.js";
15
15
  export * from "./MessageReceptionState.js";
16
16
  export * from "./ProtocolHandler.js";
17
+ export * from "./ProtocolMocks.js";
17
18
  export * from "./ProtocolStatusMessage.js";
@@ -133,6 +133,10 @@ export class SecureChannelMessenger {
133
133
  return this.exchange.channel.channel.name;
134
134
  }
135
135
 
136
+ [Symbol.asyncDispose]() {
137
+ return this.close();
138
+ }
139
+
136
140
  async close() {
137
141
  await this.exchange.close();
138
142
  }
@@ -84,8 +84,8 @@ export class StatusReportOnlySecureChannelProtocol implements ProtocolHandler {
84
84
 
85
85
  const { session } = exchange;
86
86
  NodeSession.assert(session);
87
- logger.debug(`Peer requested to close session ${session.name}. Remove session now.`);
88
- await session.closeByPeer();
87
+ logger.debug(exchange.via, "Closed by peer");
88
+ await session.handlePeerClose();
89
89
  }
90
90
 
91
91
  async close() {
@@ -5,22 +5,29 @@
5
5
  */
6
6
  import { Subject } from "#action/server/Subject.js";
7
7
  import { DecodedMessage, DecodedPacket, Message, MessageCodec, Packet, SessionType } from "#codec/MessageCodec.js";
8
- import { Fabric } from "#fabric/Fabric.js";
9
- import { FabricManager } from "#fabric/FabricManager.js";
8
+ import { Mark } from "#common/Mark.js";
9
+ import type { Fabric } from "#fabric/Fabric.js";
10
+ import type { FabricManager } from "#fabric/FabricManager.js";
10
11
  import {
11
12
  Bytes,
13
+ ChannelType,
14
+ ConnectionlessTransportSet,
12
15
  CryptoDecryptError,
16
+ Diagnostic,
17
+ hex,
13
18
  ImplementationError,
14
19
  InternalError,
15
20
  Logger,
16
21
  MatterFlowError,
22
+ STANDARD_MATTER_PORT,
17
23
  UnexpectedDataError,
18
24
  } from "#general";
25
+ import { PairRetransmissionLimitReachedError } from "#peer/ControllerDiscovery.js";
19
26
  import { PeerAddress } from "#peer/PeerAddress.js";
20
- import type { SessionManager } from "#session/SessionManager.js";
21
27
  import { FabricIndex, GroupId, NodeId } from "#types";
22
28
  import { SecureSession } from "./SecureSession.js";
23
29
  import { Session } from "./Session.js";
30
+ import { SessionManager } from "./SessionManager.js";
24
31
 
25
32
  const logger = Logger.get("SecureGroupSession");
26
33
 
@@ -35,17 +42,10 @@ export class GroupSession extends SecureSession {
35
42
 
36
43
  readonly keySetId: number;
37
44
 
38
- constructor(args: {
39
- manager?: SessionManager;
40
- id: number; // Records the Group Session ID derived from the Operational Group Key used to encrypt the message.
41
- fabric: Fabric;
42
- keySetId: number; // The Group Key Set ID that was used to encrypt the incoming group message.
43
- peerNodeId: NodeId; //The Target Group Node Id
44
- operationalGroupKey: Bytes; // The Operational Group Key that was used to encrypt the incoming group message.
45
- }) {
46
- const { manager, fabric, operationalGroupKey, id, peerNodeId, keySetId } = args;
45
+ constructor(config: GroupSession.Config) {
46
+ const { manager, fabric, operationalGroupKey, id, peerNodeId, keySetId } = config;
47
47
  super({
48
- ...args,
48
+ ...config,
49
49
  setActiveTimestamp: false, // We always set the active timestamp for Secure sessions TODO Check
50
50
  messageCounter: fabric.groups.messaging.counterFor(operationalGroupKey),
51
51
  });
@@ -58,7 +58,47 @@ export class GroupSession extends SecureSession {
58
58
  manager?.registerGroupSession(this);
59
59
  fabric.addSession(this);
60
60
 
61
- logger.debug(`Created secure GROUP session for fabric index ${fabric.fabricIndex}`, this.name);
61
+ logger.debug(this.via, `Created secure GROUP session for fabric index ${fabric.fabricIndex}`);
62
+ }
63
+
64
+ /**
65
+ * Create an outbound group session.
66
+ */
67
+ static async create(options: {
68
+ manager?: SessionManager;
69
+ transports: ConnectionlessTransportSet;
70
+ id: number;
71
+ fabric: Fabric;
72
+ keySetId: number;
73
+ groupNodeId: NodeId;
74
+ operationalGroupKey: Bytes;
75
+ }) {
76
+ const { manager, transports, id, fabric, keySetId, groupNodeId, operationalGroupKey } = options;
77
+
78
+ const groupId = GroupId.fromNodeId(groupNodeId);
79
+ const multicastAddress = fabric.groups.multicastAddressFor(groupId);
80
+
81
+ const operationalInterface = transports.interfaceFor(ChannelType.UDP, multicastAddress);
82
+ if (operationalInterface === undefined) {
83
+ // TODO - better error class
84
+ throw new PairRetransmissionLimitReachedError(`IPv6 interface not initialized`);
85
+ }
86
+
87
+ const channel = await operationalInterface.openChannel({
88
+ type: ChannelType.UDP,
89
+ ip: multicastAddress,
90
+ port: STANDARD_MATTER_PORT,
91
+ });
92
+
93
+ return new GroupSession({
94
+ manager,
95
+ channel,
96
+ id,
97
+ fabric,
98
+ keySetId,
99
+ peerNodeId: groupNodeId,
100
+ operationalGroupKey,
101
+ });
62
102
  }
63
103
 
64
104
  override get type() {
@@ -77,8 +117,8 @@ export class GroupSession extends SecureSession {
77
117
  return this.#id; // we use the same peer session ID then ours because should be the same keys
78
118
  }
79
119
 
80
- get name() {
81
- return `group/${this.#id}`;
120
+ get via() {
121
+ return Diagnostic.via(`${Mark.SESSION}group#${hex.word(this.id)}`);
82
122
  }
83
123
 
84
124
  get nodeId() {
@@ -215,20 +255,24 @@ export class GroupSession extends SecureSession {
215
255
  return { message, key, sessionId, sourceNodeId, keySetId, fabric };
216
256
  }
217
257
 
218
- async destroy() {
219
- logger.info(`End group session ${this.name}`);
258
+ override async close() {
220
259
  this.manager?.removeGroupSession(this);
221
- }
222
-
223
- end() {
224
- return this.destroy();
260
+ await super.close();
225
261
  }
226
262
  }
227
263
 
228
264
  export namespace GroupSession {
265
+ export interface Config extends Session.CommonConfig {
266
+ id: number; // Records the Group Session ID derived from the Operational Group Key used to encrypt the message.
267
+ fabric: Fabric;
268
+ keySetId: number; // The Group Key Set ID that was used to encrypt the incoming group message.
269
+ peerNodeId: NodeId; //The Target Group Node Id
270
+ operationalGroupKey: Bytes; // The Operational Group Key that was used to encrypt the incoming group message.
271
+ }
272
+
229
273
  export function assert(session?: Session, errorText?: string): asserts session is GroupSession {
230
274
  if (!is(session)) {
231
- throw new MatterFlowError(errorText ?? "Insecure session in secure context");
275
+ throw new MatterFlowError(errorText ?? "Unsecured session in secure context");
232
276
  }
233
277
  }
234
278