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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (586) hide show
  1. package/dist/cjs/action/Val.js +1 -1
  2. package/dist/cjs/action/Val.js.map +1 -1
  3. package/dist/cjs/action/client/ClientInteraction.d.ts.map +1 -1
  4. package/dist/cjs/action/client/ClientInteraction.js +83 -35
  5. package/dist/cjs/action/client/ClientInteraction.js.map +2 -2
  6. package/dist/cjs/action/client/subscription/ClientSubscription.d.ts +10 -5
  7. package/dist/cjs/action/client/subscription/ClientSubscription.d.ts.map +1 -1
  8. package/dist/cjs/action/client/subscription/ClientSubscription.js +21 -1
  9. package/dist/cjs/action/client/subscription/ClientSubscription.js.map +2 -2
  10. package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js +2 -3
  11. package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
  12. package/dist/cjs/action/client/subscription/ClientSubscriptions.d.ts +4 -2
  13. package/dist/cjs/action/client/subscription/ClientSubscriptions.d.ts.map +1 -1
  14. package/dist/cjs/action/client/subscription/ClientSubscriptions.js +68 -8
  15. package/dist/cjs/action/client/subscription/ClientSubscriptions.js.map +1 -1
  16. package/dist/cjs/action/client/subscription/PeerSubscription.d.ts +0 -1
  17. package/dist/cjs/action/client/subscription/PeerSubscription.d.ts.map +1 -1
  18. package/dist/cjs/action/client/subscription/PeerSubscription.js +1 -2
  19. package/dist/cjs/action/client/subscription/PeerSubscription.js.map +1 -1
  20. package/dist/cjs/action/client/subscription/SustainedSubscription.d.ts +0 -2
  21. package/dist/cjs/action/client/subscription/SustainedSubscription.d.ts.map +1 -1
  22. package/dist/cjs/action/client/subscription/SustainedSubscription.js +2 -4
  23. package/dist/cjs/action/client/subscription/SustainedSubscription.js.map +1 -1
  24. package/dist/cjs/action/request/Invoke.js +2 -2
  25. package/dist/cjs/action/request/Invoke.js.map +1 -1
  26. package/dist/cjs/action/response/ReadResult.d.ts +1 -1
  27. package/dist/cjs/action/response/ReadResult.d.ts.map +1 -1
  28. package/dist/cjs/action/server/AttributeReadResponse.d.ts.map +1 -1
  29. package/dist/cjs/action/server/AttributeReadResponse.js +78 -25
  30. package/dist/cjs/action/server/AttributeReadResponse.js.map +1 -1
  31. package/dist/cjs/action/server/AttributeWriteResponse.d.ts.map +1 -1
  32. package/dist/cjs/action/server/AttributeWriteResponse.js +70 -17
  33. package/dist/cjs/action/server/AttributeWriteResponse.js.map +1 -1
  34. package/dist/cjs/action/server/CommandInvokeResponse.d.ts.map +1 -1
  35. package/dist/cjs/action/server/CommandInvokeResponse.js +83 -30
  36. package/dist/cjs/action/server/CommandInvokeResponse.js.map +1 -1
  37. package/dist/cjs/action/server/DataResponse.d.ts +1 -0
  38. package/dist/cjs/action/server/DataResponse.d.ts.map +1 -1
  39. package/dist/cjs/action/server/DataResponse.js +3 -0
  40. package/dist/cjs/action/server/DataResponse.js.map +1 -1
  41. package/dist/cjs/action/server/ServerInteraction.d.ts.map +1 -1
  42. package/dist/cjs/action/server/ServerInteraction.js +4 -4
  43. package/dist/cjs/action/server/ServerInteraction.js.map +1 -1
  44. package/dist/cjs/advertisement/Advertisement.d.ts.map +1 -1
  45. package/dist/cjs/advertisement/Advertisement.js +66 -14
  46. package/dist/cjs/advertisement/Advertisement.js.map +1 -1
  47. package/dist/cjs/advertisement/Advertiser.d.ts +4 -1
  48. package/dist/cjs/advertisement/Advertiser.d.ts.map +1 -1
  49. package/dist/cjs/advertisement/Advertiser.js +63 -2
  50. package/dist/cjs/advertisement/Advertiser.js.map +1 -1
  51. package/dist/cjs/advertisement/ble/BleAdvertiser.d.ts +6 -1
  52. package/dist/cjs/advertisement/ble/BleAdvertiser.d.ts.map +1 -1
  53. package/dist/cjs/advertisement/ble/BleAdvertiser.js +1 -1
  54. package/dist/cjs/advertisement/ble/BleAdvertiser.js.map +1 -1
  55. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.d.ts +5 -1
  56. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.d.ts.map +1 -1
  57. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.js +1 -1
  58. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.js.map +1 -1
  59. package/dist/cjs/certificate/kinds/Noc.d.ts.map +1 -1
  60. package/dist/cjs/certificate/kinds/Noc.js +8 -6
  61. package/dist/cjs/certificate/kinds/Noc.js.map +1 -1
  62. package/dist/cjs/certificate/kinds/definitions/asn.js +1 -1
  63. package/dist/cjs/certificate/kinds/definitions/asn.js.map +1 -1
  64. package/dist/cjs/certificate/kinds/definitions/attestation.d.ts.map +1 -1
  65. package/dist/cjs/cluster/client/AttributeClient.d.ts.map +1 -1
  66. package/dist/cjs/cluster/client/AttributeClient.js +2 -2
  67. package/dist/cjs/cluster/client/AttributeClient.js.map +1 -1
  68. package/dist/cjs/codec/MessageCodec.d.ts +8 -1
  69. package/dist/cjs/codec/MessageCodec.d.ts.map +1 -1
  70. package/dist/cjs/codec/MessageCodec.js +38 -28
  71. package/dist/cjs/codec/MessageCodec.js.map +2 -2
  72. package/dist/cjs/common/FailsafeContext.d.ts +8 -9
  73. package/dist/cjs/common/FailsafeContext.d.ts.map +1 -1
  74. package/dist/cjs/common/FailsafeContext.js +27 -33
  75. package/dist/cjs/common/FailsafeContext.js.map +1 -1
  76. package/dist/cjs/common/FailsafeTimer.d.ts +4 -3
  77. package/dist/cjs/common/FailsafeTimer.d.ts.map +1 -1
  78. package/dist/cjs/common/FailsafeTimer.js +4 -4
  79. package/dist/cjs/common/FailsafeTimer.js.map +1 -1
  80. package/dist/cjs/common/Mark.d.ts +17 -0
  81. package/dist/cjs/common/Mark.d.ts.map +1 -0
  82. package/dist/cjs/{peer/OperationalPeer.js → common/Mark.js} +19 -3
  83. package/dist/cjs/common/Mark.js.map +6 -0
  84. package/dist/cjs/common/index.d.ts +1 -0
  85. package/dist/cjs/common/index.d.ts.map +1 -1
  86. package/dist/cjs/common/index.js +1 -0
  87. package/dist/cjs/common/index.js.map +1 -1
  88. package/dist/cjs/fabric/Fabric.d.ts +16 -8
  89. package/dist/cjs/fabric/Fabric.d.ts.map +1 -1
  90. package/dist/cjs/fabric/Fabric.js +35 -18
  91. package/dist/cjs/fabric/Fabric.js.map +1 -1
  92. package/dist/cjs/fabric/FabricAuthority.d.ts +2 -2
  93. package/dist/cjs/fabric/FabricAuthority.d.ts.map +1 -1
  94. package/dist/cjs/fabric/FabricAuthority.js +3 -3
  95. package/dist/cjs/fabric/FabricAuthority.js.map +1 -1
  96. package/dist/cjs/fabric/FabricManager.d.ts +10 -14
  97. package/dist/cjs/fabric/FabricManager.d.ts.map +1 -1
  98. package/dist/cjs/fabric/FabricManager.js +44 -40
  99. package/dist/cjs/fabric/FabricManager.js.map +2 -2
  100. package/dist/cjs/index.d.ts +1 -1
  101. package/dist/cjs/index.d.ts.map +1 -1
  102. package/dist/cjs/index.js +1 -1
  103. package/dist/cjs/index.js.map +1 -1
  104. package/dist/cjs/interaction/AttributeDataEncoder.d.ts +1 -1
  105. package/dist/cjs/interaction/InteractionClient.d.ts +2 -2
  106. package/dist/cjs/interaction/InteractionClient.d.ts.map +1 -1
  107. package/dist/cjs/interaction/InteractionClient.js +39 -22
  108. package/dist/cjs/interaction/InteractionClient.js.map +1 -1
  109. package/dist/cjs/interaction/InteractionMessenger.d.ts +2 -2
  110. package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
  111. package/dist/cjs/interaction/InteractionMessenger.js +35 -27
  112. package/dist/cjs/interaction/InteractionMessenger.js.map +1 -1
  113. package/dist/cjs/interaction/Subscription.d.ts +16 -37
  114. package/dist/cjs/interaction/Subscription.d.ts.map +1 -1
  115. package/dist/cjs/interaction/Subscription.js +15 -68
  116. package/dist/cjs/interaction/Subscription.js.map +2 -2
  117. package/dist/cjs/interaction/SubscriptionClient.d.ts +2 -2
  118. package/dist/cjs/interaction/SubscriptionClient.d.ts.map +1 -1
  119. package/dist/cjs/interaction/SubscriptionClient.js +2 -2
  120. package/dist/cjs/interaction/SubscriptionClient.js.map +1 -1
  121. package/dist/cjs/mdns/MdnsClient.d.ts +10 -10
  122. package/dist/cjs/mdns/MdnsClient.d.ts.map +1 -1
  123. package/dist/cjs/mdns/MdnsClient.js +165 -80
  124. package/dist/cjs/mdns/MdnsClient.js.map +1 -1
  125. package/dist/cjs/mdns/MdnsServer.d.ts +2 -2
  126. package/dist/cjs/mdns/MdnsServer.d.ts.map +1 -1
  127. package/dist/cjs/mdns/MdnsServer.js +173 -94
  128. package/dist/cjs/mdns/MdnsServer.js.map +2 -2
  129. package/dist/cjs/mdns/MdnsService.d.ts.map +1 -1
  130. package/dist/cjs/mdns/MdnsService.js +3 -2
  131. package/dist/cjs/mdns/MdnsService.js.map +1 -1
  132. package/dist/cjs/mdns/MdnsSocket.d.ts +3 -2
  133. package/dist/cjs/mdns/MdnsSocket.d.ts.map +1 -1
  134. package/dist/cjs/mdns/MdnsSocket.js +2 -1
  135. package/dist/cjs/mdns/MdnsSocket.js.map +1 -1
  136. package/dist/cjs/peer/ControllerCommissioner.d.ts +2 -2
  137. package/dist/cjs/peer/ControllerCommissioner.d.ts.map +1 -1
  138. package/dist/cjs/peer/ControllerCommissioner.js +26 -28
  139. package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
  140. package/dist/cjs/peer/ControllerDiscovery.d.ts +1 -1
  141. package/dist/cjs/peer/ControllerDiscovery.d.ts.map +1 -1
  142. package/dist/cjs/peer/ControllerDiscovery.js +3 -3
  143. package/dist/cjs/peer/ControllerDiscovery.js.map +1 -1
  144. package/dist/cjs/peer/Peer.d.ts +57 -0
  145. package/dist/cjs/peer/Peer.d.ts.map +1 -0
  146. package/dist/cjs/peer/Peer.js +182 -0
  147. package/dist/cjs/peer/Peer.js.map +6 -0
  148. package/dist/cjs/peer/PeerAddress.d.ts.map +1 -1
  149. package/dist/cjs/peer/PeerAddress.js +6 -3
  150. package/dist/cjs/peer/PeerAddress.js.map +1 -1
  151. package/dist/cjs/peer/PeerAddressStore.d.ts +3 -3
  152. package/dist/cjs/peer/PeerAddressStore.d.ts.map +1 -1
  153. package/{src/peer/OperationalPeer.ts → dist/cjs/peer/PeerDescriptor.d.ts} +14 -12
  154. package/dist/cjs/peer/PeerDescriptor.d.ts.map +1 -0
  155. package/dist/cjs/peer/PeerDescriptor.js +71 -0
  156. package/dist/cjs/peer/PeerDescriptor.js.map +6 -0
  157. package/dist/cjs/peer/PeerSet.d.ts +23 -26
  158. package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
  159. package/dist/cjs/peer/PeerSet.js +173 -173
  160. package/dist/cjs/peer/PeerSet.js.map +2 -2
  161. package/dist/cjs/peer/index.d.ts +1 -1
  162. package/dist/cjs/peer/index.d.ts.map +1 -1
  163. package/dist/cjs/peer/index.js +1 -1
  164. package/dist/cjs/peer/index.js.map +1 -1
  165. package/dist/cjs/protocol/DeviceAdvertiser.js +4 -4
  166. package/dist/cjs/protocol/DeviceAdvertiser.js.map +1 -1
  167. package/dist/cjs/protocol/ExchangeManager.d.ts +6 -9
  168. package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
  169. package/dist/cjs/protocol/ExchangeManager.js +301 -243
  170. package/dist/cjs/protocol/ExchangeManager.js.map +2 -2
  171. package/dist/cjs/protocol/ExchangeProvider.d.ts +9 -11
  172. package/dist/cjs/protocol/ExchangeProvider.d.ts.map +1 -1
  173. package/dist/cjs/protocol/ExchangeProvider.js +79 -32
  174. package/dist/cjs/protocol/ExchangeProvider.js.map +2 -2
  175. package/dist/cjs/protocol/MessageChannel.d.ts +6 -7
  176. package/dist/cjs/protocol/MessageChannel.d.ts.map +1 -1
  177. package/dist/cjs/protocol/MessageChannel.js +14 -16
  178. package/dist/cjs/protocol/MessageChannel.js.map +1 -1
  179. package/dist/cjs/protocol/MessageCounter.d.ts +4 -4
  180. package/dist/cjs/protocol/MessageCounter.d.ts.map +1 -1
  181. package/dist/cjs/protocol/MessageCounter.js +7 -7
  182. package/dist/cjs/protocol/MessageCounter.js.map +1 -1
  183. package/dist/cjs/protocol/MessageExchange.d.ts +31 -20
  184. package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
  185. package/dist/cjs/protocol/MessageExchange.js +316 -231
  186. package/dist/cjs/protocol/MessageExchange.js.map +2 -2
  187. package/dist/cjs/protocol/ProtocolMocks.d.ts +100 -0
  188. package/dist/cjs/protocol/ProtocolMocks.d.ts.map +1 -0
  189. package/dist/cjs/protocol/ProtocolMocks.js +237 -0
  190. package/dist/cjs/protocol/ProtocolMocks.js.map +6 -0
  191. package/dist/cjs/protocol/errors.d.ts +35 -0
  192. package/dist/cjs/protocol/errors.d.ts.map +1 -0
  193. package/dist/cjs/protocol/errors.js +50 -0
  194. package/dist/cjs/protocol/errors.js.map +6 -0
  195. package/dist/cjs/protocol/index.d.ts +2 -1
  196. package/dist/cjs/protocol/index.d.ts.map +1 -1
  197. package/dist/cjs/protocol/index.js +2 -1
  198. package/dist/cjs/protocol/index.js.map +1 -1
  199. package/dist/cjs/securechannel/SecureChannelMessenger.d.ts +1 -0
  200. package/dist/cjs/securechannel/SecureChannelMessenger.d.ts.map +1 -1
  201. package/dist/cjs/securechannel/SecureChannelMessenger.js +3 -0
  202. package/dist/cjs/securechannel/SecureChannelMessenger.js.map +1 -1
  203. package/dist/cjs/securechannel/SecureChannelProtocol.js +2 -2
  204. package/dist/cjs/securechannel/SecureChannelProtocol.js.map +1 -1
  205. package/dist/cjs/session/GroupSession.d.ts +21 -10
  206. package/dist/cjs/session/GroupSession.d.ts.map +1 -1
  207. package/dist/cjs/session/GroupSession.js +37 -12
  208. package/dist/cjs/session/GroupSession.js.map +1 -1
  209. package/dist/cjs/session/NodeSession.d.ts +56 -50
  210. package/dist/cjs/session/NodeSession.d.ts.map +1 -1
  211. package/dist/cjs/session/NodeSession.js +95 -103
  212. package/dist/cjs/session/NodeSession.js.map +1 -1
  213. package/dist/cjs/session/SecureSession.d.ts +4 -4
  214. package/dist/cjs/session/SecureSession.d.ts.map +1 -1
  215. package/dist/cjs/session/SecureSession.js +1 -1
  216. package/dist/cjs/session/SecureSession.js.map +1 -1
  217. package/dist/cjs/session/Session.d.ts +82 -66
  218. package/dist/cjs/session/Session.d.ts.map +1 -1
  219. package/dist/cjs/session/Session.js +218 -45
  220. package/dist/cjs/session/Session.js.map +1 -1
  221. package/dist/cjs/session/SessionManager.d.ts +33 -36
  222. package/dist/cjs/session/SessionManager.d.ts.map +1 -1
  223. package/dist/cjs/session/SessionManager.js +112 -150
  224. package/dist/cjs/session/SessionManager.js.map +1 -1
  225. package/dist/cjs/session/SessionParameters.d.ts +87 -0
  226. package/dist/cjs/session/SessionParameters.d.ts.map +1 -0
  227. package/dist/cjs/session/SessionParameters.js +81 -0
  228. package/dist/cjs/session/SessionParameters.js.map +6 -0
  229. package/dist/{esm/session/InsecureSession.d.ts → cjs/session/UnsecuredSession.d.ts} +18 -16
  230. package/dist/cjs/session/UnsecuredSession.d.ts.map +1 -0
  231. package/dist/cjs/session/{InsecureSession.js → UnsecuredSession.js} +21 -21
  232. package/dist/cjs/session/UnsecuredSession.js.map +6 -0
  233. package/dist/cjs/session/case/CaseClient.d.ts.map +1 -1
  234. package/dist/cjs/session/case/CaseClient.js +6 -4
  235. package/dist/cjs/session/case/CaseClient.js.map +1 -1
  236. package/dist/cjs/session/case/CaseServer.d.ts.map +1 -1
  237. package/dist/cjs/session/case/CaseServer.js +14 -10
  238. package/dist/cjs/session/case/CaseServer.js.map +1 -1
  239. package/dist/cjs/session/index.d.ts +2 -1
  240. package/dist/cjs/session/index.d.ts.map +1 -1
  241. package/dist/cjs/session/index.js +2 -1
  242. package/dist/cjs/session/index.js.map +1 -1
  243. package/dist/cjs/session/pase/PaseClient.d.ts +3 -3
  244. package/dist/cjs/session/pase/PaseClient.d.ts.map +1 -1
  245. package/dist/cjs/session/pase/PaseClient.js +5 -3
  246. package/dist/cjs/session/pase/PaseClient.js.map +1 -1
  247. package/dist/cjs/session/pase/PaseServer.d.ts.map +1 -1
  248. package/dist/cjs/session/pase/PaseServer.js +13 -13
  249. package/dist/cjs/session/pase/PaseServer.js.map +1 -1
  250. package/dist/esm/action/Val.js +1 -1
  251. package/dist/esm/action/Val.js.map +1 -1
  252. package/dist/esm/action/client/ClientInteraction.d.ts.map +1 -1
  253. package/dist/esm/action/client/ClientInteraction.js +83 -35
  254. package/dist/esm/action/client/ClientInteraction.js.map +2 -2
  255. package/dist/esm/action/client/subscription/ClientSubscription.d.ts +10 -5
  256. package/dist/esm/action/client/subscription/ClientSubscription.d.ts.map +1 -1
  257. package/dist/esm/action/client/subscription/ClientSubscription.js +22 -2
  258. package/dist/esm/action/client/subscription/ClientSubscription.js.map +2 -2
  259. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js +2 -3
  260. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
  261. package/dist/esm/action/client/subscription/ClientSubscriptions.d.ts +4 -2
  262. package/dist/esm/action/client/subscription/ClientSubscriptions.d.ts.map +1 -1
  263. package/dist/esm/action/client/subscription/ClientSubscriptions.js +68 -8
  264. package/dist/esm/action/client/subscription/ClientSubscriptions.js.map +1 -1
  265. package/dist/esm/action/client/subscription/PeerSubscription.d.ts +0 -1
  266. package/dist/esm/action/client/subscription/PeerSubscription.d.ts.map +1 -1
  267. package/dist/esm/action/client/subscription/PeerSubscription.js +1 -2
  268. package/dist/esm/action/client/subscription/PeerSubscription.js.map +1 -1
  269. package/dist/esm/action/client/subscription/SustainedSubscription.d.ts +0 -2
  270. package/dist/esm/action/client/subscription/SustainedSubscription.d.ts.map +1 -1
  271. package/dist/esm/action/client/subscription/SustainedSubscription.js +2 -4
  272. package/dist/esm/action/client/subscription/SustainedSubscription.js.map +1 -1
  273. package/dist/esm/action/request/Invoke.js +2 -2
  274. package/dist/esm/action/request/Invoke.js.map +1 -1
  275. package/dist/esm/action/response/ReadResult.d.ts +1 -1
  276. package/dist/esm/action/response/ReadResult.d.ts.map +1 -1
  277. package/dist/esm/action/server/AttributeReadResponse.d.ts.map +1 -1
  278. package/dist/esm/action/server/AttributeReadResponse.js +78 -25
  279. package/dist/esm/action/server/AttributeReadResponse.js.map +1 -1
  280. package/dist/esm/action/server/AttributeWriteResponse.d.ts.map +1 -1
  281. package/dist/esm/action/server/AttributeWriteResponse.js +70 -17
  282. package/dist/esm/action/server/AttributeWriteResponse.js.map +1 -1
  283. package/dist/esm/action/server/CommandInvokeResponse.d.ts.map +1 -1
  284. package/dist/esm/action/server/CommandInvokeResponse.js +83 -30
  285. package/dist/esm/action/server/CommandInvokeResponse.js.map +1 -1
  286. package/dist/esm/action/server/DataResponse.d.ts +1 -0
  287. package/dist/esm/action/server/DataResponse.d.ts.map +1 -1
  288. package/dist/esm/action/server/DataResponse.js +3 -0
  289. package/dist/esm/action/server/DataResponse.js.map +1 -1
  290. package/dist/esm/action/server/ServerInteraction.d.ts.map +1 -1
  291. package/dist/esm/action/server/ServerInteraction.js +4 -4
  292. package/dist/esm/action/server/ServerInteraction.js.map +1 -1
  293. package/dist/esm/advertisement/Advertisement.d.ts.map +1 -1
  294. package/dist/esm/advertisement/Advertisement.js +66 -14
  295. package/dist/esm/advertisement/Advertisement.js.map +1 -1
  296. package/dist/esm/advertisement/Advertiser.d.ts +4 -1
  297. package/dist/esm/advertisement/Advertiser.d.ts.map +1 -1
  298. package/dist/esm/advertisement/Advertiser.js +63 -2
  299. package/dist/esm/advertisement/Advertiser.js.map +1 -1
  300. package/dist/esm/advertisement/ble/BleAdvertiser.d.ts +6 -1
  301. package/dist/esm/advertisement/ble/BleAdvertiser.d.ts.map +1 -1
  302. package/dist/esm/advertisement/ble/BleAdvertiser.js +1 -1
  303. package/dist/esm/advertisement/ble/BleAdvertiser.js.map +1 -1
  304. package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts +5 -1
  305. package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts.map +1 -1
  306. package/dist/esm/advertisement/mdns/MdnsAdvertiser.js +1 -1
  307. package/dist/esm/advertisement/mdns/MdnsAdvertiser.js.map +1 -1
  308. package/dist/esm/certificate/kinds/Noc.d.ts.map +1 -1
  309. package/dist/esm/certificate/kinds/Noc.js +8 -6
  310. package/dist/esm/certificate/kinds/Noc.js.map +1 -1
  311. package/dist/esm/certificate/kinds/definitions/asn.js +2 -2
  312. package/dist/esm/certificate/kinds/definitions/asn.js.map +1 -1
  313. package/dist/esm/certificate/kinds/definitions/attestation.d.ts.map +1 -1
  314. package/dist/esm/cluster/client/AttributeClient.d.ts.map +1 -1
  315. package/dist/esm/cluster/client/AttributeClient.js +1 -1
  316. package/dist/esm/cluster/client/AttributeClient.js.map +1 -1
  317. package/dist/esm/codec/MessageCodec.d.ts +8 -1
  318. package/dist/esm/codec/MessageCodec.d.ts.map +1 -1
  319. package/dist/esm/codec/MessageCodec.js +39 -28
  320. package/dist/esm/codec/MessageCodec.js.map +2 -2
  321. package/dist/esm/common/FailsafeContext.d.ts +8 -9
  322. package/dist/esm/common/FailsafeContext.d.ts.map +1 -1
  323. package/dist/esm/common/FailsafeContext.js +27 -33
  324. package/dist/esm/common/FailsafeContext.js.map +1 -1
  325. package/dist/esm/common/FailsafeTimer.d.ts +4 -3
  326. package/dist/esm/common/FailsafeTimer.d.ts.map +1 -1
  327. package/dist/esm/common/FailsafeTimer.js +4 -4
  328. package/dist/esm/common/FailsafeTimer.js.map +1 -1
  329. package/dist/esm/common/Mark.d.ts +17 -0
  330. package/dist/esm/common/Mark.d.ts.map +1 -0
  331. package/dist/esm/common/Mark.js +18 -0
  332. package/dist/esm/common/Mark.js.map +6 -0
  333. package/dist/esm/common/index.d.ts +1 -0
  334. package/dist/esm/common/index.d.ts.map +1 -1
  335. package/dist/esm/common/index.js +1 -0
  336. package/dist/esm/common/index.js.map +1 -1
  337. package/dist/esm/fabric/Fabric.d.ts +16 -8
  338. package/dist/esm/fabric/Fabric.d.ts.map +1 -1
  339. package/dist/esm/fabric/Fabric.js +36 -18
  340. package/dist/esm/fabric/Fabric.js.map +1 -1
  341. package/dist/esm/fabric/FabricAuthority.d.ts +2 -2
  342. package/dist/esm/fabric/FabricAuthority.d.ts.map +1 -1
  343. package/dist/esm/fabric/FabricAuthority.js +5 -5
  344. package/dist/esm/fabric/FabricAuthority.js.map +1 -1
  345. package/dist/esm/fabric/FabricManager.d.ts +10 -14
  346. package/dist/esm/fabric/FabricManager.d.ts.map +1 -1
  347. package/dist/esm/fabric/FabricManager.js +45 -40
  348. package/dist/esm/fabric/FabricManager.js.map +2 -2
  349. package/dist/esm/index.d.ts +1 -1
  350. package/dist/esm/index.d.ts.map +1 -1
  351. package/dist/esm/index.js +1 -1
  352. package/dist/esm/index.js.map +1 -1
  353. package/dist/esm/interaction/AttributeDataEncoder.d.ts +1 -1
  354. package/dist/esm/interaction/InteractionClient.d.ts +2 -2
  355. package/dist/esm/interaction/InteractionClient.d.ts.map +1 -1
  356. package/dist/esm/interaction/InteractionClient.js +39 -22
  357. package/dist/esm/interaction/InteractionClient.js.map +1 -1
  358. package/dist/esm/interaction/InteractionMessenger.d.ts +2 -2
  359. package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
  360. package/dist/esm/interaction/InteractionMessenger.js +33 -28
  361. package/dist/esm/interaction/InteractionMessenger.js.map +1 -1
  362. package/dist/esm/interaction/Subscription.d.ts +16 -37
  363. package/dist/esm/interaction/Subscription.d.ts.map +1 -1
  364. package/dist/esm/interaction/Subscription.js +16 -69
  365. package/dist/esm/interaction/Subscription.js.map +2 -2
  366. package/dist/esm/interaction/SubscriptionClient.d.ts +2 -2
  367. package/dist/esm/interaction/SubscriptionClient.d.ts.map +1 -1
  368. package/dist/esm/interaction/SubscriptionClient.js +2 -2
  369. package/dist/esm/interaction/SubscriptionClient.js.map +1 -1
  370. package/dist/esm/mdns/MdnsClient.d.ts +10 -10
  371. package/dist/esm/mdns/MdnsClient.d.ts.map +1 -1
  372. package/dist/esm/mdns/MdnsClient.js +166 -80
  373. package/dist/esm/mdns/MdnsClient.js.map +1 -1
  374. package/dist/esm/mdns/MdnsServer.d.ts +2 -2
  375. package/dist/esm/mdns/MdnsServer.d.ts.map +1 -1
  376. package/dist/esm/mdns/MdnsServer.js +176 -94
  377. package/dist/esm/mdns/MdnsServer.js.map +2 -2
  378. package/dist/esm/mdns/MdnsService.d.ts.map +1 -1
  379. package/dist/esm/mdns/MdnsService.js +3 -2
  380. package/dist/esm/mdns/MdnsService.js.map +1 -1
  381. package/dist/esm/mdns/MdnsSocket.d.ts +3 -2
  382. package/dist/esm/mdns/MdnsSocket.d.ts.map +1 -1
  383. package/dist/esm/mdns/MdnsSocket.js +2 -1
  384. package/dist/esm/mdns/MdnsSocket.js.map +1 -1
  385. package/dist/esm/peer/ControllerCommissioner.d.ts +2 -2
  386. package/dist/esm/peer/ControllerCommissioner.d.ts.map +1 -1
  387. package/dist/esm/peer/ControllerCommissioner.js +26 -28
  388. package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
  389. package/dist/esm/peer/ControllerDiscovery.d.ts +1 -1
  390. package/dist/esm/peer/ControllerDiscovery.d.ts.map +1 -1
  391. package/dist/esm/peer/ControllerDiscovery.js +1 -1
  392. package/dist/esm/peer/ControllerDiscovery.js.map +1 -1
  393. package/dist/esm/peer/Peer.d.ts +57 -0
  394. package/dist/esm/peer/Peer.d.ts.map +1 -0
  395. package/dist/esm/peer/Peer.js +162 -0
  396. package/dist/esm/peer/Peer.js.map +6 -0
  397. package/dist/esm/peer/PeerAddress.d.ts.map +1 -1
  398. package/dist/esm/peer/PeerAddress.js +6 -3
  399. package/dist/esm/peer/PeerAddress.js.map +1 -1
  400. package/dist/esm/peer/PeerAddressStore.d.ts +3 -3
  401. package/dist/esm/peer/PeerAddressStore.d.ts.map +1 -1
  402. package/dist/{cjs/peer/OperationalPeer.d.ts → esm/peer/PeerDescriptor.d.ts} +14 -7
  403. package/dist/esm/peer/PeerDescriptor.d.ts.map +1 -0
  404. package/dist/esm/peer/PeerDescriptor.js +51 -0
  405. package/dist/esm/peer/PeerDescriptor.js.map +6 -0
  406. package/dist/esm/peer/PeerSet.d.ts +23 -26
  407. package/dist/esm/peer/PeerSet.d.ts.map +1 -1
  408. package/dist/esm/peer/PeerSet.js +173 -175
  409. package/dist/esm/peer/PeerSet.js.map +2 -2
  410. package/dist/esm/peer/index.d.ts +1 -1
  411. package/dist/esm/peer/index.d.ts.map +1 -1
  412. package/dist/esm/peer/index.js +1 -1
  413. package/dist/esm/protocol/DeviceAdvertiser.js +4 -4
  414. package/dist/esm/protocol/DeviceAdvertiser.js.map +1 -1
  415. package/dist/esm/protocol/ExchangeManager.d.ts +6 -9
  416. package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
  417. package/dist/esm/protocol/ExchangeManager.js +303 -248
  418. package/dist/esm/protocol/ExchangeManager.js.map +2 -2
  419. package/dist/esm/protocol/ExchangeProvider.d.ts +9 -11
  420. package/dist/esm/protocol/ExchangeProvider.d.ts.map +1 -1
  421. package/dist/esm/protocol/ExchangeProvider.js +81 -37
  422. package/dist/esm/protocol/ExchangeProvider.js.map +2 -2
  423. package/dist/esm/protocol/MessageChannel.d.ts +6 -7
  424. package/dist/esm/protocol/MessageChannel.d.ts.map +1 -1
  425. package/dist/esm/protocol/MessageChannel.js +22 -18
  426. package/dist/esm/protocol/MessageChannel.js.map +1 -1
  427. package/dist/esm/protocol/MessageCounter.d.ts +4 -4
  428. package/dist/esm/protocol/MessageCounter.d.ts.map +1 -1
  429. package/dist/esm/protocol/MessageCounter.js +7 -7
  430. package/dist/esm/protocol/MessageCounter.js.map +1 -1
  431. package/dist/esm/protocol/MessageExchange.d.ts +31 -20
  432. package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
  433. package/dist/esm/protocol/MessageExchange.js +318 -238
  434. package/dist/esm/protocol/MessageExchange.js.map +2 -2
  435. package/dist/esm/protocol/ProtocolMocks.d.ts +100 -0
  436. package/dist/esm/protocol/ProtocolMocks.d.ts.map +1 -0
  437. package/dist/esm/protocol/ProtocolMocks.js +230 -0
  438. package/dist/esm/protocol/ProtocolMocks.js.map +6 -0
  439. package/dist/esm/protocol/errors.d.ts +35 -0
  440. package/dist/esm/protocol/errors.d.ts.map +1 -0
  441. package/dist/esm/protocol/errors.js +30 -0
  442. package/dist/esm/protocol/errors.js.map +6 -0
  443. package/dist/esm/protocol/index.d.ts +2 -1
  444. package/dist/esm/protocol/index.d.ts.map +1 -1
  445. package/dist/esm/protocol/index.js +2 -1
  446. package/dist/esm/protocol/index.js.map +1 -1
  447. package/dist/esm/securechannel/SecureChannelMessenger.d.ts +1 -0
  448. package/dist/esm/securechannel/SecureChannelMessenger.d.ts.map +1 -1
  449. package/dist/esm/securechannel/SecureChannelMessenger.js +3 -0
  450. package/dist/esm/securechannel/SecureChannelMessenger.js.map +1 -1
  451. package/dist/esm/securechannel/SecureChannelProtocol.js +2 -2
  452. package/dist/esm/securechannel/SecureChannelProtocol.js.map +1 -1
  453. package/dist/esm/session/GroupSession.d.ts +21 -10
  454. package/dist/esm/session/GroupSession.d.ts.map +1 -1
  455. package/dist/esm/session/GroupSession.js +41 -12
  456. package/dist/esm/session/GroupSession.js.map +1 -1
  457. package/dist/esm/session/NodeSession.d.ts +56 -50
  458. package/dist/esm/session/NodeSession.d.ts.map +1 -1
  459. package/dist/esm/session/NodeSession.js +99 -105
  460. package/dist/esm/session/NodeSession.js.map +1 -1
  461. package/dist/esm/session/SecureSession.d.ts +4 -4
  462. package/dist/esm/session/SecureSession.d.ts.map +1 -1
  463. package/dist/esm/session/SecureSession.js +1 -1
  464. package/dist/esm/session/SecureSession.js.map +1 -1
  465. package/dist/esm/session/Session.d.ts +82 -66
  466. package/dist/esm/session/Session.d.ts.map +1 -1
  467. package/dist/esm/session/Session.js +223 -45
  468. package/dist/esm/session/Session.js.map +1 -1
  469. package/dist/esm/session/SessionManager.d.ts +33 -36
  470. package/dist/esm/session/SessionManager.d.ts.map +1 -1
  471. package/dist/esm/session/SessionManager.js +113 -157
  472. package/dist/esm/session/SessionManager.js.map +1 -1
  473. package/dist/esm/session/SessionParameters.d.ts +87 -0
  474. package/dist/esm/session/SessionParameters.d.ts.map +1 -0
  475. package/dist/esm/session/SessionParameters.js +61 -0
  476. package/dist/esm/session/SessionParameters.js.map +6 -0
  477. package/dist/{cjs/session/InsecureSession.d.ts → esm/session/UnsecuredSession.d.ts} +18 -16
  478. package/dist/esm/session/UnsecuredSession.d.ts.map +1 -0
  479. package/dist/esm/session/{InsecureSession.js → UnsecuredSession.js} +18 -18
  480. package/dist/esm/session/UnsecuredSession.js.map +6 -0
  481. package/dist/esm/session/case/CaseClient.d.ts.map +1 -1
  482. package/dist/esm/session/case/CaseClient.js +5 -3
  483. package/dist/esm/session/case/CaseClient.js.map +1 -1
  484. package/dist/esm/session/case/CaseServer.d.ts.map +1 -1
  485. package/dist/esm/session/case/CaseServer.js +14 -10
  486. package/dist/esm/session/case/CaseServer.js.map +1 -1
  487. package/dist/esm/session/index.d.ts +2 -1
  488. package/dist/esm/session/index.d.ts.map +1 -1
  489. package/dist/esm/session/index.js +2 -1
  490. package/dist/esm/session/index.js.map +1 -1
  491. package/dist/esm/session/pase/PaseClient.d.ts +3 -3
  492. package/dist/esm/session/pase/PaseClient.d.ts.map +1 -1
  493. package/dist/esm/session/pase/PaseClient.js +5 -3
  494. package/dist/esm/session/pase/PaseClient.js.map +1 -1
  495. package/dist/esm/session/pase/PaseServer.d.ts.map +1 -1
  496. package/dist/esm/session/pase/PaseServer.js +13 -13
  497. package/dist/esm/session/pase/PaseServer.js.map +1 -1
  498. package/package.json +6 -6
  499. package/src/action/client/ClientInteraction.ts +47 -13
  500. package/src/action/client/subscription/ClientSubscription.ts +30 -5
  501. package/src/action/client/subscription/ClientSubscriptionHandler.ts +2 -4
  502. package/src/action/client/subscription/ClientSubscriptions.ts +14 -3
  503. package/src/action/client/subscription/PeerSubscription.ts +2 -2
  504. package/src/action/client/subscription/SustainedSubscription.ts +2 -6
  505. package/src/action/request/Invoke.ts +2 -2
  506. package/src/action/response/ReadResult.ts +1 -1
  507. package/src/action/server/AttributeReadResponse.ts +2 -0
  508. package/src/action/server/AttributeWriteResponse.ts +2 -0
  509. package/src/action/server/CommandInvokeResponse.ts +1 -0
  510. package/src/action/server/DataResponse.ts +4 -0
  511. package/src/action/server/ServerInteraction.ts +4 -4
  512. package/src/advertisement/Advertisement.ts +6 -7
  513. package/src/advertisement/Advertiser.ts +12 -1
  514. package/src/advertisement/ble/BleAdvertiser.ts +7 -2
  515. package/src/advertisement/mdns/MdnsAdvertiser.ts +7 -1
  516. package/src/certificate/kinds/Noc.ts +12 -7
  517. package/src/certificate/kinds/definitions/asn.ts +2 -2
  518. package/src/certificate/kinds/definitions/attestation.ts +1 -0
  519. package/src/cluster/client/AttributeClient.ts +1 -1
  520. package/src/codec/MessageCodec.ts +39 -32
  521. package/src/common/FailsafeContext.ts +36 -39
  522. package/src/common/FailsafeTimer.ts +7 -6
  523. package/src/common/Mark.ts +17 -0
  524. package/src/common/index.ts +1 -0
  525. package/src/fabric/Fabric.ts +51 -23
  526. package/src/fabric/FabricAuthority.ts +4 -4
  527. package/src/fabric/FabricManager.ts +53 -40
  528. package/src/index.ts +3 -1
  529. package/src/interaction/InteractionClient.ts +40 -23
  530. package/src/interaction/InteractionMessenger.ts +38 -32
  531. package/src/interaction/Subscription.ts +20 -92
  532. package/src/interaction/SubscriptionClient.ts +3 -3
  533. package/src/mdns/MdnsClient.ts +20 -3
  534. package/src/mdns/MdnsServer.ts +13 -1
  535. package/src/mdns/MdnsService.ts +3 -2
  536. package/src/mdns/MdnsSocket.ts +9 -3
  537. package/src/peer/ControllerCommissioner.ts +35 -37
  538. package/src/peer/ControllerDiscovery.ts +1 -1
  539. package/src/peer/Peer.ts +161 -0
  540. package/src/peer/PeerAddress.ts +6 -2
  541. package/src/peer/PeerAddressStore.ts +3 -3
  542. package/src/peer/PeerDescriptor.ts +89 -0
  543. package/src/peer/PeerSet.ts +145 -213
  544. package/src/peer/index.ts +1 -1
  545. package/src/protocol/DeviceAdvertiser.ts +4 -4
  546. package/src/protocol/ExchangeManager.ts +149 -178
  547. package/src/protocol/ExchangeProvider.ts +31 -40
  548. package/src/protocol/MessageChannel.ts +29 -18
  549. package/src/protocol/MessageCounter.ts +8 -8
  550. package/src/protocol/MessageExchange.ts +181 -144
  551. package/src/protocol/ProtocolMocks.ts +302 -0
  552. package/src/protocol/errors.ts +44 -0
  553. package/src/protocol/index.ts +2 -1
  554. package/src/securechannel/SecureChannelMessenger.ts +4 -0
  555. package/src/securechannel/SecureChannelProtocol.ts +2 -2
  556. package/src/session/GroupSession.ts +67 -23
  557. package/src/session/NodeSession.ts +140 -136
  558. package/src/session/SecureSession.ts +6 -5
  559. package/src/session/Session.ts +234 -101
  560. package/src/session/SessionManager.ts +148 -187
  561. package/src/session/SessionParameters.ts +108 -0
  562. package/src/session/{InsecureSession.ts → UnsecuredSession.ts} +28 -26
  563. package/src/session/case/CaseClient.ts +6 -3
  564. package/src/session/case/CaseServer.ts +15 -11
  565. package/src/session/index.ts +2 -1
  566. package/src/session/pase/PaseClient.ts +12 -5
  567. package/src/session/pase/PaseServer.ts +14 -13
  568. package/dist/cjs/peer/OperationalPeer.d.ts.map +0 -1
  569. package/dist/cjs/peer/OperationalPeer.js.map +0 -6
  570. package/dist/cjs/protocol/ChannelManager.d.ts +0 -29
  571. package/dist/cjs/protocol/ChannelManager.d.ts.map +0 -1
  572. package/dist/cjs/protocol/ChannelManager.js +0 -178
  573. package/dist/cjs/protocol/ChannelManager.js.map +0 -6
  574. package/dist/cjs/session/InsecureSession.d.ts.map +0 -1
  575. package/dist/cjs/session/InsecureSession.js.map +0 -6
  576. package/dist/esm/peer/OperationalPeer.d.ts +0 -38
  577. package/dist/esm/peer/OperationalPeer.d.ts.map +0 -1
  578. package/dist/esm/peer/OperationalPeer.js +0 -6
  579. package/dist/esm/peer/OperationalPeer.js.map +0 -6
  580. package/dist/esm/protocol/ChannelManager.d.ts +0 -29
  581. package/dist/esm/protocol/ChannelManager.d.ts.map +0 -1
  582. package/dist/esm/protocol/ChannelManager.js +0 -158
  583. package/dist/esm/protocol/ChannelManager.js.map +0 -6
  584. package/dist/esm/session/InsecureSession.d.ts.map +0 -1
  585. package/dist/esm/session/InsecureSession.js.map +0 -6
  586. package/src/protocol/ChannelManager.ts +0 -180
@@ -4,34 +4,30 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import { Message, MessageCodec, PacketHeader, SessionType } from "#codec/MessageCodec.js";
7
+ import { Message, PacketHeader, SessionType } from "#codec/MessageCodec.js";
8
+ import { Mark } from "#common/Mark.js";
8
9
  import {
9
- AsyncObservable,
10
+ AsyncObservableValue,
10
11
  Bytes,
11
12
  createPromise,
12
13
  CRYPTO_AEAD_MIC_LENGTH_BYTES,
13
14
  DataReadQueue,
14
15
  Diagnostic,
15
16
  Duration,
17
+ hex,
16
18
  Instant,
17
19
  InternalError,
20
+ Lifetime,
18
21
  Logger,
19
- MatterError,
20
22
  MatterFlowError,
21
23
  Millis,
22
- NoResponseTimeoutError,
23
24
  Time,
24
25
  Timer,
25
26
  } from "#general";
26
- import {
27
- ChannelNotConnectedError,
28
- DEFAULT_EXPECTED_PROCESSING_TIME,
29
- MessageChannel,
30
- MRP,
31
- } from "#protocol/MessageChannel.js";
32
27
  import { GroupSession } from "#session/GroupSession.js";
33
- import { SecureSession } from "#session/SecureSession.js";
34
- import { SessionParameters } from "#session/Session.js";
28
+ import type { NodeSession } from "#session/NodeSession.js";
29
+ import { Session } from "#session/Session.js";
30
+ import { SessionParameters } from "#session/SessionParameters.js";
35
31
  import {
36
32
  GroupId,
37
33
  NodeId,
@@ -40,20 +36,11 @@ import {
40
36
  StatusCode,
41
37
  StatusResponseError,
42
38
  } from "#types";
39
+ import { RetransmissionLimitReachedError, SessionClosedError, UnexpectedMessageError } from "./errors.js";
40
+ import { DEFAULT_EXPECTED_PROCESSING_TIME, MRP } from "./MessageChannel.js";
43
41
 
44
42
  const logger = Logger.get("MessageExchange");
45
43
 
46
- export class RetransmissionLimitReachedError extends NoResponseTimeoutError {}
47
-
48
- export class UnexpectedMessageError extends MatterError {
49
- public constructor(
50
- message: string,
51
- public readonly receivedMessage: Message,
52
- ) {
53
- super(`(${MessageCodec.messageDiagnostics(receivedMessage)}) ${message}`);
54
- }
55
- }
56
-
57
44
  export type ExchangeLogContext = Record<string, unknown>;
58
45
 
59
46
  export type ExchangeSendOptions = {
@@ -107,63 +94,65 @@ export const MATTER_MESSAGE_OVERHEAD = 26 + 12 + CRYPTO_AEAD_MIC_LENGTH_BYTES;
107
94
  * Interfaces {@link MessageExchange} with other components.
108
95
  */
109
96
  export interface MessageExchangeContext {
110
- channel: MessageChannel;
97
+ session: Session;
111
98
  retry(number: number): void;
112
99
  localSessionParameters: SessionParameters;
113
100
  }
114
101
 
102
+ /**
103
+ * A Matter "message exchange" is a sequence of messages associated with a single interaction.
104
+ *
105
+ * TODO - rewrite using sleeps and abort controller
106
+ */
115
107
  export class MessageExchange {
116
108
  static fromInitialMessage(context: MessageExchangeContext, initialMessage: Message) {
117
- const {
118
- channel: { session },
119
- } = context;
120
- return new MessageExchange(
109
+ const { session } = context;
110
+ return new MessageExchange({
121
111
  context,
122
- false,
123
- session.id,
124
- initialMessage.packetHeader.destNodeId,
125
- initialMessage.packetHeader.sourceNodeId,
126
- initialMessage.payloadHeader.exchangeId,
127
- initialMessage.payloadHeader.protocolId,
128
- session.isSecure,
129
- );
112
+ isInitiator: false,
113
+ peerSessionId: session.id,
114
+ nodeId: initialMessage.packetHeader.destNodeId,
115
+ peerNodeId: initialMessage.packetHeader.sourceNodeId,
116
+ exchangeId: initialMessage.payloadHeader.exchangeId,
117
+ protocolId: initialMessage.payloadHeader.protocolId,
118
+ });
130
119
  }
131
120
 
132
121
  static initiate(context: MessageExchangeContext, exchangeId: number, protocolId: number) {
133
- const {
134
- channel: { session },
135
- } = context;
136
- return new MessageExchange(
122
+ const { session } = context;
123
+ return new MessageExchange({
137
124
  context,
138
- true,
139
- session.peerSessionId,
140
- session.nodeId,
141
- session.peerNodeId,
125
+ isInitiator: true,
126
+ peerSessionId: session.peerSessionId,
127
+ nodeId: session.nodeId,
128
+ peerNodeId: session.peerNodeId,
142
129
  exchangeId,
143
130
  protocolId,
144
- session.isSecure,
145
- );
131
+ });
146
132
  }
147
133
 
134
+ readonly #context: MessageExchangeContext;
135
+ readonly #isInitiator: boolean;
148
136
  readonly #messagesQueue = new DataReadQueue<Message>();
137
+ readonly #lifetime: Lifetime;
149
138
  #receivedMessageToAck: Message | undefined;
150
- #receivedMessageAckTimer = Time.getTimer("Ack receipt timeout", MRP.STANDALONE_ACK_TIMEOUT, () => {
139
+ #receivedMessageAckTimer = Time.getTimer("ack receipt timeout", MRP.STANDALONE_ACK_TIMEOUT, () => {
151
140
  if (this.#receivedMessageToAck !== undefined) {
152
141
  const messageToAck = this.#receivedMessageToAck;
153
142
  this.#receivedMessageToAck = undefined;
154
- // TODO: We need to track this promise later
155
- this.sendStandaloneAckForMessage(messageToAck).catch(error =>
143
+ // TODO await
144
+ this.#sendStandaloneAckForMessage(messageToAck).catch(error =>
156
145
  logger.error("An error happened when sending a standalone ack", error),
157
146
  );
158
147
  }
159
148
  });
160
149
  #sentMessageToAck: Message | undefined;
161
- #sentMessageAckSuccess: ((...args: any[]) => void) | undefined;
150
+ #sentMessageAckSuccess: ((message: Message | undefined) => void) | undefined;
162
151
  #sentMessageAckFailure: ((error?: Error) => void) | undefined;
163
152
  #retransmissionTimer: Timer | undefined;
164
153
  #retransmissionCounter = 0;
165
154
  #closeTimer: Timer | undefined;
166
- #isClosing = false;
155
+ #isDestroyed = false;
167
156
  #timedInteractionTimer: Timer | undefined;
168
157
  #used: boolean;
169
158
 
@@ -172,21 +161,14 @@ export class MessageExchange {
172
161
  readonly #peerNodeId: NodeId | undefined;
173
162
  readonly #exchangeId: number;
174
163
  readonly #protocolId: number;
175
- readonly #closed = AsyncObservable<[]>();
176
- readonly #closing = AsyncObservable<[]>();
177
-
178
- constructor(
179
- readonly context: MessageExchangeContext,
180
- readonly isInitiator: boolean,
181
- peerSessionId: number,
182
- nodeId: NodeId | undefined,
183
- peerNodeId: NodeId | undefined,
184
- exchangeId: number,
185
- protocolId: number,
186
- readonly requiresSecureSession: boolean,
187
- ) {
188
- const { channel } = context;
189
- const { session } = channel;
164
+ readonly #closed = AsyncObservableValue();
165
+ readonly #closing = AsyncObservableValue();
166
+
167
+ constructor(config: MessageExchange.Config) {
168
+ const { context, isInitiator, peerSessionId, nodeId, peerNodeId, exchangeId, protocolId } = config;
169
+
170
+ this.#context = context;
171
+ this.#isInitiator = isInitiator;
190
172
  this.#peerSessionId = peerSessionId;
191
173
  this.#nodeId = nodeId;
192
174
  this.#peerNodeId = peerNodeId;
@@ -197,25 +179,37 @@ export class MessageExchange {
197
179
 
198
180
  this.#used = !isInitiator; // If we are the initiator then exchange was not used yet, so track it
199
181
 
182
+ const { session } = context;
200
183
  logger.debug(
201
184
  "New exchange",
202
- isInitiator ? "»" : "«",
203
- channel.name,
185
+ isInitiator ? Mark.OUTBOUND : Mark.INBOUND,
186
+ this.via,
204
187
  Diagnostic.dict({
205
188
  protocol: this.#protocolId,
206
- exId: this.#exchangeId,
207
- sess: session.name,
208
- peerSess: this.#peerSessionId,
189
+ peerSess: Session.idStrOf(this.#peerSessionId),
209
190
  SAT: Duration.format(activeThreshold),
210
191
  SAI: Duration.format(activeInterval),
211
192
  SII: Duration.format(idleInterval),
212
193
  maxTrans: MRP.MAX_TRANSMISSIONS,
213
194
  exchangeFlags: Diagnostic.asFlags({
214
- MRP: this.channel.usesMrp,
195
+ MRP: this.session.usesMrp,
215
196
  I: this.isInitiator,
216
197
  }),
217
198
  }),
218
199
  );
200
+
201
+ session.addExchange(this);
202
+
203
+ // Only do partial via because other details are in parent lifetime
204
+ this.#lifetime = this.#context.session.join("exchange", Diagnostic.via(hex.word(this.id)));
205
+ }
206
+
207
+ get context() {
208
+ return this.#context;
209
+ }
210
+
211
+ get isInitiator() {
212
+ return this.#isInitiator;
219
213
  }
220
214
 
221
215
  /** Emits when the exchange is actually closed. This happens after all Retries and Communication are done. */
@@ -232,19 +226,23 @@ export class MessageExchange {
232
226
  }
233
227
 
234
228
  get isClosing() {
235
- return this.#isClosing;
229
+ return this.#closing.value;
236
230
  }
237
231
 
238
232
  get id() {
239
233
  return this.#exchangeId;
240
234
  }
241
235
 
242
- get channel() {
243
- return this.context.channel;
236
+ get idStr() {
237
+ return hex.word(this.#exchangeId);
244
238
  }
245
239
 
246
240
  get session() {
247
- return this.channel.session;
241
+ return this.context.session;
242
+ }
243
+
244
+ get channel() {
245
+ return this.session.channel;
248
246
  }
249
247
 
250
248
  /**
@@ -257,24 +255,15 @@ export class MessageExchange {
257
255
  return this.channel.maxPayloadSize - MATTER_MESSAGE_OVERHEAD;
258
256
  }
259
257
 
260
- async sendStandaloneAckForMessage(message: Message) {
261
- const {
262
- packetHeader: { messageId },
263
- payloadHeader: { requiresAck },
264
- } = message;
265
- if (!requiresAck || !this.channel.usesMrp) return;
266
-
267
- await this.send(SecureMessageType.StandaloneAck, new Uint8Array(0), {
268
- includeAcknowledgeMessageId: messageId,
269
- protocolId: SECURE_CHANNEL_PROTOCOL_ID,
270
- });
258
+ join(...name: unknown[]) {
259
+ return this.#lifetime.join(...name);
271
260
  }
272
261
 
273
262
  async onMessageReceived(message: Message, duplicate = false) {
274
- logger.debug("Message «", MessageCodec.messageDiagnostics(message, { duplicate }));
263
+ logger.debug("Message", Mark.INBOUND, Message.diagnosticsOf(this, message, { duplicate }));
275
264
 
276
265
  // Adjust the incoming message when ack was required, but this exchange does not use it to skip all relevant logic
277
- if (message.payloadHeader.requiresAck && !this.channel.usesMrp) {
266
+ if (message.payloadHeader.requiresAck && !this.session.usesMrp) {
278
267
  logger.debug("Ignoring ack-required flag because MRP is not used for this exchange");
279
268
  message.payloadHeader.requiresAck = false;
280
269
  }
@@ -296,13 +285,14 @@ export class MessageExchange {
296
285
  if (duplicate) {
297
286
  // Received a message retransmission, but the reply is not ready yet, ignoring
298
287
  if (requiresAck) {
299
- await this.sendStandaloneAckForMessage(message);
288
+ await this.#sendStandaloneAckForMessage(message);
300
289
  }
301
290
  return;
302
291
  }
303
292
  if (messageId === this.#sentMessageToAck?.payloadHeader.ackedMessageId) {
304
293
  // Received a message retransmission. This means that the other side didn't get our ack
305
294
  // Resending the previous reply message which contains the ack
295
+ using _acking = this.join("resending ack");
306
296
  await this.channel.send(this.#sentMessageToAck);
307
297
  return;
308
298
  }
@@ -342,36 +332,37 @@ export class MessageExchange {
342
332
  // We still have a message to ack, so ack this one as standalone ack directly
343
333
  if (this.#receivedMessageToAck !== undefined) {
344
334
  this.#receivedMessageAckTimer.stop();
345
- await this.sendStandaloneAckForMessage(this.#receivedMessageToAck);
335
+ await this.#sendStandaloneAckForMessage(this.#receivedMessageToAck);
346
336
  return;
347
337
  }
348
338
  this.#receivedMessageToAck = message;
349
339
  this.#receivedMessageAckTimer.start();
350
340
  }
351
- await this.#messagesQueue.write(message);
341
+ this.#messagesQueue.write(message);
352
342
  }
353
343
 
354
- async send(messageType: number, payload: Bytes, options?: ExchangeSendOptions) {
355
- if (options?.requiresAck && !this.channel.usesMrp) {
356
- options.requiresAck = false;
357
- }
358
-
344
+ async send(messageType: number, payload: Bytes, options: ExchangeSendOptions = {}) {
359
345
  const {
360
346
  expectAckOnly = false,
361
347
  disableMrpLogic,
362
348
  expectedProcessingTime = DEFAULT_EXPECTED_PROCESSING_TIME,
363
- requiresAck,
364
349
  includeAcknowledgeMessageId,
365
350
  logContext,
366
351
  protocolId = this.#protocolId,
367
- } = options ?? {};
368
- if (!this.channel.usesMrp && includeAcknowledgeMessageId !== undefined) {
352
+ } = options;
353
+
354
+ if (!this.session.usesMrp && includeAcknowledgeMessageId !== undefined) {
369
355
  throw new InternalError("Cannot include an acknowledge message ID when MRP is not used");
370
356
  }
371
- const isStandaloneAck = SecureMessageType.isStandaloneAck(protocolId, messageType);
372
357
 
358
+ let { requiresAck } = options;
359
+ if (requiresAck && !(this.session.usesMrp || (this.session as NodeSession).isPeerLost)) {
360
+ requiresAck = false;
361
+ }
362
+
363
+ const isStandaloneAck = SecureMessageType.isStandaloneAck(protocolId, messageType);
373
364
  if (isStandaloneAck) {
374
- if (!this.channel.usesMrp) {
365
+ if (!this.session.usesMrp) {
375
366
  return;
376
367
  }
377
368
  if (requiresAck) {
@@ -386,7 +377,7 @@ export class MessageExchange {
386
377
  this.session.notifyActivity(false);
387
378
 
388
379
  let ackedMessageId = includeAcknowledgeMessageId;
389
- if (ackedMessageId === undefined && this.channel.usesMrp) {
380
+ if (ackedMessageId === undefined && this.session.usesMrp) {
390
381
  ackedMessageId = this.#receivedMessageToAck?.packetHeader.messageId;
391
382
  if (ackedMessageId !== undefined) {
392
383
  this.#receivedMessageAckTimer.stop();
@@ -436,42 +427,49 @@ export class MessageExchange {
436
427
  protocolId,
437
428
  messageType,
438
429
  isInitiatorMessage: this.isInitiator,
439
- requiresAck: requiresAck ?? (this.channel.usesMrp && !isStandaloneAck),
430
+ requiresAck: requiresAck ?? (this.session.usesMrp && !isStandaloneAck),
440
431
  ackedMessageId,
441
432
  hasSecuredExtension: false,
442
433
  },
443
434
  payload,
444
435
  };
445
436
 
446
- let ackPromise: Promise<Message> | undefined;
447
- if (this.channel.usesMrp && message.payloadHeader.requiresAck && !disableMrpLogic) {
437
+ let ackPromise: Promise<Message | undefined> | undefined;
438
+ if (this.session.usesMrp && message.payloadHeader.requiresAck && !disableMrpLogic) {
448
439
  this.#sentMessageToAck = message;
449
440
  this.#retransmissionTimer = Time.getTimer(
450
- `Message retransmission ${message.packetHeader.messageId}`,
441
+ `retransmitting ${Message.via(this, message)}`,
451
442
  this.channel.getMrpResubmissionBackOffTime(0),
452
443
  () => this.#retransmitMessage(message, expectedProcessingTime),
453
444
  );
454
- const { promise, resolver, rejecter } = createPromise<Message>();
445
+ const { promise, resolver, rejecter } = createPromise<Message | undefined>();
455
446
  ackPromise = promise;
456
447
  this.#sentMessageAckSuccess = resolver;
457
448
  this.#sentMessageAckFailure = rejecter;
458
449
  }
459
450
 
451
+ using sending = this.join("sending", Diagnostic.strong(Message.via(this, message)));
460
452
  await this.channel.send(message, logContext);
461
453
 
462
454
  if (ackPromise !== undefined) {
463
455
  this.#retransmissionCounter = 0;
464
456
  this.#retransmissionTimer?.start();
465
- // Await Response to be received (or Message retransmit limit reached which rejects the promise)
457
+
458
+ // Await response. Resolves with message when received, undefined when aborted, and rejects on timeout
459
+ using _waiting = sending.join("waiting for ack");
466
460
  const responseMessage = await ackPromise;
461
+
467
462
  this.#sentMessageAckSuccess = undefined;
468
463
  this.#sentMessageAckFailure = undefined;
469
- // If we only expect an Ack without data but got data, throw an error
470
- const {
471
- payloadHeader: { protocolId, messageType },
472
- } = responseMessage;
473
- if (expectAckOnly && !SecureMessageType.isStandaloneAck(protocolId, messageType)) {
474
- throw new UnexpectedMessageError("Expected ack only", responseMessage);
464
+
465
+ if (responseMessage) {
466
+ // If we only expect an Ack without data but got data, throw an error
467
+ const {
468
+ payloadHeader: { protocolId, messageType },
469
+ } = responseMessage;
470
+ if (expectAckOnly && !SecureMessageType.isStandaloneAck(protocolId, messageType)) {
471
+ throw new UnexpectedMessageError("Expected ack only", this.session, responseMessage);
472
+ }
475
473
  }
476
474
  }
477
475
  }
@@ -492,12 +490,25 @@ export class MessageExchange {
492
490
  return this.#messagesQueue.read(timeout);
493
491
  }
494
492
 
493
+ async #sendStandaloneAckForMessage(message: Message) {
494
+ const {
495
+ packetHeader: { messageId },
496
+ payloadHeader: { requiresAck },
497
+ } = message;
498
+ if (!requiresAck || !this.session.usesMrp) return;
499
+
500
+ await this.send(SecureMessageType.StandaloneAck, new Uint8Array(0), {
501
+ includeAcknowledgeMessageId: messageId,
502
+ protocolId: SECURE_CHANNEL_PROTOCOL_ID,
503
+ });
504
+ }
505
+
495
506
  #retransmitMessage(message: Message, expectedProcessingTime?: Duration) {
496
507
  this.#retransmissionCounter++;
497
- if (this.#isClosing || this.#retransmissionCounter >= MRP.MAX_TRANSMISSIONS) {
508
+ if (this.isClosing || this.#retransmissionCounter >= MRP.MAX_TRANSMISSIONS) {
498
509
  // Ok all 4 resubmissions are done, but we need to wait a bit longer because of processing time and
499
510
  // the resubmissions from the other side
500
- if (expectedProcessingTime && !this.#isClosing) {
511
+ if (expectedProcessingTime && !this.isClosing) {
501
512
  // We already have waited after the last message was sent, so deduct this time from the final wait time
502
513
  const finalWaitTime = Millis(
503
514
  this.channel.calculateMaximumPeerResponseTime(
@@ -509,10 +520,10 @@ export class MessageExchange {
509
520
  if (finalWaitTime > 0) {
510
521
  this.#retransmissionCounter--; // We will not resubmit the message again
511
522
  logger.debug(
512
- `Message ${message.packetHeader.messageId}: Wait additional ${Duration.format(finalWaitTime)} for processing time and peer resubmissions after all our resubmissions`,
523
+ `Message ${Message.via(this, message)}: Wait additional ${Duration.format(finalWaitTime)} for processing time and peer resubmissions after all our resubmissions`,
513
524
  );
514
525
  this.#retransmissionTimer = Time.getTimer(
515
- `Message wait time after resubmissions ${message.packetHeader.messageId}`,
526
+ `waiting after resubmissions for ${Message.via(this, message)}`,
516
527
  finalWaitTime,
517
528
  () => this.#retransmitMessage(message),
518
529
  ).start();
@@ -529,7 +540,8 @@ export class MessageExchange {
529
540
  }
530
541
  if (this.#closeTimer !== undefined) {
531
542
  // All resubmissions done and in closing, no need to wait further
532
- this.#close().catch(error => logger.error("An error happened when closing the exchange", error));
543
+ // TODO await
544
+ this.#close().catch(error => logger.error("Error closing exchange", error));
533
545
  }
534
546
  return;
535
547
  }
@@ -539,15 +551,16 @@ export class MessageExchange {
539
551
  this.context.retry(this.#retransmissionCounter);
540
552
  const resubmissionBackoffTime = this.channel.getMrpResubmissionBackOffTime(this.#retransmissionCounter);
541
553
  logger.debug(
542
- `Resubmit message ${message.packetHeader.messageId} (retransmission attempt ${this.#retransmissionCounter}, backoff time ${Duration.format(resubmissionBackoffTime)}))`,
554
+ `Resubmitting ${Message.via(this, message)} (retransmission attempt ${this.#retransmissionCounter}, backoff time ${Duration.format(resubmissionBackoffTime)}))`,
543
555
  );
544
556
 
557
+ // TODO await
545
558
  this.channel
546
559
  .send(message)
547
560
  .then(() => this.#initializeResubmission(message, resubmissionBackoffTime, expectedProcessingTime))
548
561
  .catch(error => {
549
- logger.error("An error happened when retransmitting a message", error);
550
- if (error instanceof ChannelNotConnectedError) {
562
+ logger.error(`Error retransmitting ${Message.via(this, message)}:`, error);
563
+ if (error instanceof SessionClosedError) {
551
564
  this.#close().catch(error => logger.error("An error happened when closing the exchange", error));
552
565
  } else {
553
566
  this.#initializeResubmission(message, resubmissionBackoffTime, expectedProcessingTime);
@@ -561,13 +574,21 @@ export class MessageExchange {
561
574
  ).start();
562
575
  }
563
576
 
577
+ [Symbol.asyncDispose]() {
578
+ return this.destroy();
579
+ }
580
+
564
581
  async destroy() {
582
+ if (this.#isDestroyed) {
583
+ return;
584
+ }
585
+ this.#isDestroyed = true;
565
586
  if (this.#closeTimer === undefined && this.#receivedMessageToAck !== undefined) {
566
587
  this.#receivedMessageAckTimer.stop();
567
588
  const messageToAck = this.#receivedMessageToAck;
568
589
  this.#receivedMessageToAck = undefined;
569
590
  try {
570
- await this.sendStandaloneAckForMessage(messageToAck);
591
+ await this.#sendStandaloneAckForMessage(messageToAck);
571
592
  } catch (error) {
572
593
  logger.error("An error happened when closing the exchange", error);
573
594
  }
@@ -585,7 +606,8 @@ export class MessageExchange {
585
606
  }
586
607
 
587
608
  logger.debug(
588
- "Starting timed interaction «",
609
+ "Starting timed interaction",
610
+ Mark.INBOUND,
589
611
  this.channel.name,
590
612
  Diagnostic.dict({ exId: this.#exchangeId, timeout: Duration.format(timeout) }),
591
613
  );
@@ -620,7 +642,13 @@ export class MessageExchange {
620
642
  return this.#timedInteractionTimer !== undefined && !this.#timedInteractionTimer.isRunning;
621
643
  }
622
644
 
623
- async close(force = false) {
645
+ async close(force = this.isInitiator) {
646
+ if (this.#isDestroyed) {
647
+ return;
648
+ }
649
+
650
+ this.#lifetime.closing();
651
+
624
652
  if (this.#closeTimer !== undefined) {
625
653
  if (force) {
626
654
  // Force close does not wait any longer
@@ -633,26 +661,22 @@ export class MessageExchange {
633
661
  if (!this.#used) {
634
662
  // The exchange was never in use, so we can close it directly
635
663
  // If we see that in the wild we should fix the reasons
636
- logger.info(`Exchange ${this.session.name} / ${this.#exchangeId} was never used, closing directly`);
664
+ logger.info(this.via, `Exchange never used, closing directly`);
637
665
  return this.#close();
638
666
  }
639
- this.#isClosing = true;
640
- this.#closing.emit();
667
+ await this.#closing.emit(true);
641
668
 
642
669
  if (this.#receivedMessageToAck !== undefined) {
643
670
  this.#receivedMessageAckTimer.stop();
644
671
  const messageToAck = this.#receivedMessageToAck;
645
672
  this.#receivedMessageToAck = undefined;
646
673
  try {
647
- await this.sendStandaloneAckForMessage(messageToAck);
674
+ await this.#sendStandaloneAckForMessage(messageToAck);
648
675
  } catch (error) {
649
- logger.error(
650
- `An error happened when closing the exchange ${this.session.name} / ${this.#exchangeId}`,
651
- error,
652
- );
676
+ logger.error(this.via, `Unhandled error closing exchange`, error);
653
677
  }
654
678
  if (force) {
655
- // We have sent the Ack, so close here, no retries because close is forced
679
+ // We have sent the Ack, so close here, no retries needed
656
680
  return this.#close();
657
681
  }
658
682
  } else if (this.#sentMessageToAck === undefined || force) {
@@ -668,29 +692,42 @@ export class MessageExchange {
668
692
  maxResubmissionTime = Millis(maxResubmissionTime + this.channel.getMrpResubmissionBackOffTime(i));
669
693
  }
670
694
  this.#closeTimer = Time.getTimer(
671
- `Message exchange cleanup ${this.session.name} / ${this.#exchangeId}`,
695
+ `Exchange ${this.via} close`,
672
696
  maxResubmissionTime,
673
697
  async () => await this.#close(),
674
698
  ).start();
675
699
  }
676
700
 
677
701
  async #close() {
678
- if (!this.#isClosing) {
679
- this.#closing.emit();
680
- }
681
- this.#isClosing = true;
702
+ using _closing = this.#lifetime.closing();
703
+
682
704
  this.#retransmissionTimer?.stop();
705
+ this.#sentMessageAckSuccess?.(undefined);
706
+
683
707
  this.#closeTimer?.stop();
684
708
  this.#timedInteractionTimer?.stop();
685
709
  this.#messagesQueue.close();
686
- await this.#closed.emit();
710
+
711
+ await this.#closed.emit(true);
687
712
  }
688
713
 
689
714
  get via() {
690
- if (this.session === undefined || !this.session.isSecure) {
691
- return this.channel.name; // already formatted as "via"
715
+ if (this.session === undefined) {
716
+ return Diagnostic.via(`${Mark.EXCHANGE}${this.idStr}`);
692
717
  }
693
718
 
694
- return Diagnostic.via(`${(this.session as SecureSession).peerAddress.toString()}#${this.session.id}`);
719
+ return Diagnostic.via(`${this.session.via}${Mark.EXCHANGE}${this.idStr}`);
720
+ }
721
+ }
722
+
723
+ export namespace MessageExchange {
724
+ export interface Config {
725
+ context: MessageExchangeContext;
726
+ isInitiator: boolean;
727
+ peerSessionId: number;
728
+ nodeId?: NodeId;
729
+ peerNodeId?: NodeId;
730
+ exchangeId: number;
731
+ protocolId: number;
695
732
  }
696
733
  }