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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (570) hide show
  1. package/dist/cjs/action/client/ClientInteraction.d.ts.map +1 -1
  2. package/dist/cjs/action/client/ClientInteraction.js +82 -34
  3. package/dist/cjs/action/client/ClientInteraction.js.map +2 -2
  4. package/dist/cjs/action/client/subscription/ClientSubscription.d.ts +10 -5
  5. package/dist/cjs/action/client/subscription/ClientSubscription.d.ts.map +1 -1
  6. package/dist/cjs/action/client/subscription/ClientSubscription.js +21 -1
  7. package/dist/cjs/action/client/subscription/ClientSubscription.js.map +2 -2
  8. package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js +2 -3
  9. package/dist/cjs/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
  10. package/dist/cjs/action/client/subscription/ClientSubscriptions.d.ts +4 -2
  11. package/dist/cjs/action/client/subscription/ClientSubscriptions.d.ts.map +1 -1
  12. package/dist/cjs/action/client/subscription/ClientSubscriptions.js +68 -8
  13. package/dist/cjs/action/client/subscription/ClientSubscriptions.js.map +1 -1
  14. package/dist/cjs/action/client/subscription/PeerSubscription.d.ts +0 -1
  15. package/dist/cjs/action/client/subscription/PeerSubscription.d.ts.map +1 -1
  16. package/dist/cjs/action/client/subscription/PeerSubscription.js +1 -2
  17. package/dist/cjs/action/client/subscription/PeerSubscription.js.map +1 -1
  18. package/dist/cjs/action/client/subscription/SustainedSubscription.d.ts +0 -2
  19. package/dist/cjs/action/client/subscription/SustainedSubscription.d.ts.map +1 -1
  20. package/dist/cjs/action/client/subscription/SustainedSubscription.js +2 -4
  21. package/dist/cjs/action/client/subscription/SustainedSubscription.js.map +1 -1
  22. package/dist/cjs/action/request/Invoke.js +2 -2
  23. package/dist/cjs/action/request/Invoke.js.map +1 -1
  24. package/dist/cjs/action/server/AttributeReadResponse.d.ts.map +1 -1
  25. package/dist/cjs/action/server/AttributeReadResponse.js +78 -25
  26. package/dist/cjs/action/server/AttributeReadResponse.js.map +1 -1
  27. package/dist/cjs/action/server/AttributeWriteResponse.d.ts.map +1 -1
  28. package/dist/cjs/action/server/AttributeWriteResponse.js +70 -17
  29. package/dist/cjs/action/server/AttributeWriteResponse.js.map +1 -1
  30. package/dist/cjs/action/server/CommandInvokeResponse.d.ts.map +1 -1
  31. package/dist/cjs/action/server/CommandInvokeResponse.js +83 -30
  32. package/dist/cjs/action/server/CommandInvokeResponse.js.map +1 -1
  33. package/dist/cjs/action/server/DataResponse.d.ts +1 -0
  34. package/dist/cjs/action/server/DataResponse.d.ts.map +1 -1
  35. package/dist/cjs/action/server/DataResponse.js +3 -0
  36. package/dist/cjs/action/server/DataResponse.js.map +1 -1
  37. package/dist/cjs/action/server/ServerInteraction.d.ts.map +1 -1
  38. package/dist/cjs/action/server/ServerInteraction.js +4 -4
  39. package/dist/cjs/action/server/ServerInteraction.js.map +1 -1
  40. package/dist/cjs/advertisement/Advertisement.d.ts.map +1 -1
  41. package/dist/cjs/advertisement/Advertisement.js +66 -14
  42. package/dist/cjs/advertisement/Advertisement.js.map +1 -1
  43. package/dist/cjs/advertisement/Advertiser.d.ts +4 -1
  44. package/dist/cjs/advertisement/Advertiser.d.ts.map +1 -1
  45. package/dist/cjs/advertisement/Advertiser.js +63 -2
  46. package/dist/cjs/advertisement/Advertiser.js.map +1 -1
  47. package/dist/cjs/advertisement/ble/BleAdvertiser.d.ts +6 -1
  48. package/dist/cjs/advertisement/ble/BleAdvertiser.d.ts.map +1 -1
  49. package/dist/cjs/advertisement/ble/BleAdvertiser.js +1 -1
  50. package/dist/cjs/advertisement/ble/BleAdvertiser.js.map +1 -1
  51. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.d.ts +5 -1
  52. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.d.ts.map +1 -1
  53. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.js +1 -1
  54. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.js.map +1 -1
  55. package/dist/cjs/certificate/kinds/definitions/asn.js +1 -1
  56. package/dist/cjs/certificate/kinds/definitions/asn.js.map +1 -1
  57. package/dist/cjs/certificate/kinds/definitions/attestation.d.ts.map +1 -1
  58. package/dist/cjs/cluster/client/AttributeClient.d.ts.map +1 -1
  59. package/dist/cjs/cluster/client/AttributeClient.js +2 -2
  60. package/dist/cjs/cluster/client/AttributeClient.js.map +1 -1
  61. package/dist/cjs/codec/MessageCodec.d.ts +8 -1
  62. package/dist/cjs/codec/MessageCodec.d.ts.map +1 -1
  63. package/dist/cjs/codec/MessageCodec.js +38 -28
  64. package/dist/cjs/codec/MessageCodec.js.map +2 -2
  65. package/dist/cjs/common/FailsafeContext.d.ts +8 -9
  66. package/dist/cjs/common/FailsafeContext.d.ts.map +1 -1
  67. package/dist/cjs/common/FailsafeContext.js +27 -33
  68. package/dist/cjs/common/FailsafeContext.js.map +1 -1
  69. package/dist/cjs/common/FailsafeTimer.d.ts +4 -3
  70. package/dist/cjs/common/FailsafeTimer.d.ts.map +1 -1
  71. package/dist/cjs/common/FailsafeTimer.js +4 -4
  72. package/dist/cjs/common/FailsafeTimer.js.map +1 -1
  73. package/dist/cjs/common/Mark.d.ts +17 -0
  74. package/dist/cjs/common/Mark.d.ts.map +1 -0
  75. package/dist/cjs/{peer/OperationalPeer.js → common/Mark.js} +19 -3
  76. package/dist/cjs/common/Mark.js.map +6 -0
  77. package/dist/cjs/common/index.d.ts +1 -0
  78. package/dist/cjs/common/index.d.ts.map +1 -1
  79. package/dist/cjs/common/index.js +1 -0
  80. package/dist/cjs/common/index.js.map +1 -1
  81. package/dist/cjs/fabric/Fabric.d.ts +16 -8
  82. package/dist/cjs/fabric/Fabric.d.ts.map +1 -1
  83. package/dist/cjs/fabric/Fabric.js +35 -18
  84. package/dist/cjs/fabric/Fabric.js.map +1 -1
  85. package/dist/cjs/fabric/FabricAuthority.d.ts +2 -2
  86. package/dist/cjs/fabric/FabricAuthority.d.ts.map +1 -1
  87. package/dist/cjs/fabric/FabricAuthority.js +3 -3
  88. package/dist/cjs/fabric/FabricAuthority.js.map +1 -1
  89. package/dist/cjs/fabric/FabricManager.d.ts +10 -14
  90. package/dist/cjs/fabric/FabricManager.d.ts.map +1 -1
  91. package/dist/cjs/fabric/FabricManager.js +44 -40
  92. package/dist/cjs/fabric/FabricManager.js.map +2 -2
  93. package/dist/cjs/index.d.ts +1 -1
  94. package/dist/cjs/index.d.ts.map +1 -1
  95. package/dist/cjs/index.js +1 -1
  96. package/dist/cjs/index.js.map +1 -1
  97. package/dist/cjs/interaction/AttributeDataEncoder.d.ts +1 -1
  98. package/dist/cjs/interaction/InteractionClient.d.ts +2 -2
  99. package/dist/cjs/interaction/InteractionClient.d.ts.map +1 -1
  100. package/dist/cjs/interaction/InteractionClient.js +39 -22
  101. package/dist/cjs/interaction/InteractionClient.js.map +1 -1
  102. package/dist/cjs/interaction/InteractionMessenger.d.ts +2 -2
  103. package/dist/cjs/interaction/InteractionMessenger.d.ts.map +1 -1
  104. package/dist/cjs/interaction/InteractionMessenger.js +35 -27
  105. package/dist/cjs/interaction/InteractionMessenger.js.map +1 -1
  106. package/dist/cjs/interaction/Subscription.d.ts +16 -37
  107. package/dist/cjs/interaction/Subscription.d.ts.map +1 -1
  108. package/dist/cjs/interaction/Subscription.js +15 -68
  109. package/dist/cjs/interaction/Subscription.js.map +2 -2
  110. package/dist/cjs/interaction/SubscriptionClient.d.ts +2 -2
  111. package/dist/cjs/interaction/SubscriptionClient.d.ts.map +1 -1
  112. package/dist/cjs/interaction/SubscriptionClient.js +2 -2
  113. package/dist/cjs/interaction/SubscriptionClient.js.map +1 -1
  114. package/dist/cjs/mdns/MdnsClient.d.ts +10 -10
  115. package/dist/cjs/mdns/MdnsClient.d.ts.map +1 -1
  116. package/dist/cjs/mdns/MdnsClient.js +165 -80
  117. package/dist/cjs/mdns/MdnsClient.js.map +1 -1
  118. package/dist/cjs/mdns/MdnsServer.d.ts +2 -2
  119. package/dist/cjs/mdns/MdnsServer.d.ts.map +1 -1
  120. package/dist/cjs/mdns/MdnsServer.js +173 -94
  121. package/dist/cjs/mdns/MdnsServer.js.map +2 -2
  122. package/dist/cjs/mdns/MdnsService.d.ts.map +1 -1
  123. package/dist/cjs/mdns/MdnsService.js +3 -2
  124. package/dist/cjs/mdns/MdnsService.js.map +1 -1
  125. package/dist/cjs/mdns/MdnsSocket.d.ts +3 -2
  126. package/dist/cjs/mdns/MdnsSocket.d.ts.map +1 -1
  127. package/dist/cjs/mdns/MdnsSocket.js +2 -1
  128. package/dist/cjs/mdns/MdnsSocket.js.map +1 -1
  129. package/dist/cjs/peer/ControllerCommissioner.d.ts +2 -2
  130. package/dist/cjs/peer/ControllerCommissioner.d.ts.map +1 -1
  131. package/dist/cjs/peer/ControllerCommissioner.js +26 -28
  132. package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
  133. package/dist/cjs/peer/ControllerDiscovery.d.ts +1 -1
  134. package/dist/cjs/peer/ControllerDiscovery.d.ts.map +1 -1
  135. package/dist/cjs/peer/ControllerDiscovery.js +3 -3
  136. package/dist/cjs/peer/ControllerDiscovery.js.map +1 -1
  137. package/dist/cjs/peer/Peer.d.ts +57 -0
  138. package/dist/cjs/peer/Peer.d.ts.map +1 -0
  139. package/dist/cjs/peer/Peer.js +182 -0
  140. package/dist/cjs/peer/Peer.js.map +6 -0
  141. package/dist/cjs/peer/PeerAddress.d.ts.map +1 -1
  142. package/dist/cjs/peer/PeerAddress.js +5 -2
  143. package/dist/cjs/peer/PeerAddress.js.map +1 -1
  144. package/dist/cjs/peer/PeerAddressStore.d.ts +3 -3
  145. package/dist/cjs/peer/PeerAddressStore.d.ts.map +1 -1
  146. package/{src/peer/OperationalPeer.ts → dist/cjs/peer/PeerDescriptor.d.ts} +14 -12
  147. package/dist/cjs/peer/PeerDescriptor.d.ts.map +1 -0
  148. package/dist/cjs/peer/PeerDescriptor.js +71 -0
  149. package/dist/cjs/peer/PeerDescriptor.js.map +6 -0
  150. package/dist/cjs/peer/PeerSet.d.ts +23 -26
  151. package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
  152. package/dist/cjs/peer/PeerSet.js +173 -173
  153. package/dist/cjs/peer/PeerSet.js.map +2 -2
  154. package/dist/cjs/peer/index.d.ts +1 -1
  155. package/dist/cjs/peer/index.d.ts.map +1 -1
  156. package/dist/cjs/peer/index.js +1 -1
  157. package/dist/cjs/peer/index.js.map +1 -1
  158. package/dist/cjs/protocol/DeviceAdvertiser.js +4 -4
  159. package/dist/cjs/protocol/DeviceAdvertiser.js.map +1 -1
  160. package/dist/cjs/protocol/ExchangeManager.d.ts +6 -9
  161. package/dist/cjs/protocol/ExchangeManager.d.ts.map +1 -1
  162. package/dist/cjs/protocol/ExchangeManager.js +306 -246
  163. package/dist/cjs/protocol/ExchangeManager.js.map +2 -2
  164. package/dist/cjs/protocol/ExchangeProvider.d.ts +9 -11
  165. package/dist/cjs/protocol/ExchangeProvider.d.ts.map +1 -1
  166. package/dist/cjs/protocol/ExchangeProvider.js +79 -32
  167. package/dist/cjs/protocol/ExchangeProvider.js.map +2 -2
  168. package/dist/cjs/protocol/MessageChannel.d.ts +6 -7
  169. package/dist/cjs/protocol/MessageChannel.d.ts.map +1 -1
  170. package/dist/cjs/protocol/MessageChannel.js +14 -16
  171. package/dist/cjs/protocol/MessageChannel.js.map +1 -1
  172. package/dist/cjs/protocol/MessageCounter.d.ts +4 -4
  173. package/dist/cjs/protocol/MessageCounter.d.ts.map +1 -1
  174. package/dist/cjs/protocol/MessageCounter.js +7 -7
  175. package/dist/cjs/protocol/MessageCounter.js.map +1 -1
  176. package/dist/cjs/protocol/MessageExchange.d.ts +31 -20
  177. package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
  178. package/dist/cjs/protocol/MessageExchange.js +316 -231
  179. package/dist/cjs/protocol/MessageExchange.js.map +2 -2
  180. package/dist/cjs/protocol/ProtocolMocks.d.ts +100 -0
  181. package/dist/cjs/protocol/ProtocolMocks.d.ts.map +1 -0
  182. package/dist/cjs/protocol/ProtocolMocks.js +237 -0
  183. package/dist/cjs/protocol/ProtocolMocks.js.map +6 -0
  184. package/dist/cjs/protocol/errors.d.ts +35 -0
  185. package/dist/cjs/protocol/errors.d.ts.map +1 -0
  186. package/dist/cjs/protocol/errors.js +50 -0
  187. package/dist/cjs/protocol/errors.js.map +6 -0
  188. package/dist/cjs/protocol/index.d.ts +2 -1
  189. package/dist/cjs/protocol/index.d.ts.map +1 -1
  190. package/dist/cjs/protocol/index.js +2 -1
  191. package/dist/cjs/protocol/index.js.map +1 -1
  192. package/dist/cjs/securechannel/SecureChannelMessenger.d.ts +1 -0
  193. package/dist/cjs/securechannel/SecureChannelMessenger.d.ts.map +1 -1
  194. package/dist/cjs/securechannel/SecureChannelMessenger.js +3 -0
  195. package/dist/cjs/securechannel/SecureChannelMessenger.js.map +1 -1
  196. package/dist/cjs/securechannel/SecureChannelProtocol.js +2 -2
  197. package/dist/cjs/securechannel/SecureChannelProtocol.js.map +1 -1
  198. package/dist/cjs/session/GroupSession.d.ts +21 -10
  199. package/dist/cjs/session/GroupSession.d.ts.map +1 -1
  200. package/dist/cjs/session/GroupSession.js +37 -12
  201. package/dist/cjs/session/GroupSession.js.map +1 -1
  202. package/dist/cjs/session/NodeSession.d.ts +56 -50
  203. package/dist/cjs/session/NodeSession.d.ts.map +1 -1
  204. package/dist/cjs/session/NodeSession.js +95 -103
  205. package/dist/cjs/session/NodeSession.js.map +1 -1
  206. package/dist/cjs/session/SecureSession.d.ts +4 -4
  207. package/dist/cjs/session/SecureSession.d.ts.map +1 -1
  208. package/dist/cjs/session/SecureSession.js +1 -1
  209. package/dist/cjs/session/SecureSession.js.map +1 -1
  210. package/dist/cjs/session/Session.d.ts +82 -66
  211. package/dist/cjs/session/Session.d.ts.map +1 -1
  212. package/dist/cjs/session/Session.js +218 -45
  213. package/dist/cjs/session/Session.js.map +1 -1
  214. package/dist/cjs/session/SessionManager.d.ts +33 -36
  215. package/dist/cjs/session/SessionManager.d.ts.map +1 -1
  216. package/dist/cjs/session/SessionManager.js +112 -150
  217. package/dist/cjs/session/SessionManager.js.map +1 -1
  218. package/dist/cjs/session/SessionParameters.d.ts +87 -0
  219. package/dist/cjs/session/SessionParameters.d.ts.map +1 -0
  220. package/dist/cjs/session/SessionParameters.js +81 -0
  221. package/dist/cjs/session/SessionParameters.js.map +6 -0
  222. package/dist/{esm/session/InsecureSession.d.ts → cjs/session/UnsecuredSession.d.ts} +18 -16
  223. package/dist/cjs/session/UnsecuredSession.d.ts.map +1 -0
  224. package/dist/cjs/session/{InsecureSession.js → UnsecuredSession.js} +21 -21
  225. package/dist/cjs/session/UnsecuredSession.js.map +6 -0
  226. package/dist/cjs/session/case/CaseClient.d.ts.map +1 -1
  227. package/dist/cjs/session/case/CaseClient.js +6 -4
  228. package/dist/cjs/session/case/CaseClient.js.map +1 -1
  229. package/dist/cjs/session/case/CaseServer.d.ts.map +1 -1
  230. package/dist/cjs/session/case/CaseServer.js +14 -10
  231. package/dist/cjs/session/case/CaseServer.js.map +1 -1
  232. package/dist/cjs/session/index.d.ts +2 -1
  233. package/dist/cjs/session/index.d.ts.map +1 -1
  234. package/dist/cjs/session/index.js +2 -1
  235. package/dist/cjs/session/index.js.map +1 -1
  236. package/dist/cjs/session/pase/PaseClient.d.ts +3 -3
  237. package/dist/cjs/session/pase/PaseClient.d.ts.map +1 -1
  238. package/dist/cjs/session/pase/PaseClient.js +5 -3
  239. package/dist/cjs/session/pase/PaseClient.js.map +1 -1
  240. package/dist/cjs/session/pase/PaseServer.d.ts.map +1 -1
  241. package/dist/cjs/session/pase/PaseServer.js +13 -13
  242. package/dist/cjs/session/pase/PaseServer.js.map +1 -1
  243. package/dist/esm/action/client/ClientInteraction.d.ts.map +1 -1
  244. package/dist/esm/action/client/ClientInteraction.js +82 -34
  245. package/dist/esm/action/client/ClientInteraction.js.map +2 -2
  246. package/dist/esm/action/client/subscription/ClientSubscription.d.ts +10 -5
  247. package/dist/esm/action/client/subscription/ClientSubscription.d.ts.map +1 -1
  248. package/dist/esm/action/client/subscription/ClientSubscription.js +22 -2
  249. package/dist/esm/action/client/subscription/ClientSubscription.js.map +2 -2
  250. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js +2 -3
  251. package/dist/esm/action/client/subscription/ClientSubscriptionHandler.js.map +1 -1
  252. package/dist/esm/action/client/subscription/ClientSubscriptions.d.ts +4 -2
  253. package/dist/esm/action/client/subscription/ClientSubscriptions.d.ts.map +1 -1
  254. package/dist/esm/action/client/subscription/ClientSubscriptions.js +68 -8
  255. package/dist/esm/action/client/subscription/ClientSubscriptions.js.map +1 -1
  256. package/dist/esm/action/client/subscription/PeerSubscription.d.ts +0 -1
  257. package/dist/esm/action/client/subscription/PeerSubscription.d.ts.map +1 -1
  258. package/dist/esm/action/client/subscription/PeerSubscription.js +1 -2
  259. package/dist/esm/action/client/subscription/PeerSubscription.js.map +1 -1
  260. package/dist/esm/action/client/subscription/SustainedSubscription.d.ts +0 -2
  261. package/dist/esm/action/client/subscription/SustainedSubscription.d.ts.map +1 -1
  262. package/dist/esm/action/client/subscription/SustainedSubscription.js +2 -4
  263. package/dist/esm/action/client/subscription/SustainedSubscription.js.map +1 -1
  264. package/dist/esm/action/request/Invoke.js +2 -2
  265. package/dist/esm/action/request/Invoke.js.map +1 -1
  266. package/dist/esm/action/server/AttributeReadResponse.d.ts.map +1 -1
  267. package/dist/esm/action/server/AttributeReadResponse.js +78 -25
  268. package/dist/esm/action/server/AttributeReadResponse.js.map +1 -1
  269. package/dist/esm/action/server/AttributeWriteResponse.d.ts.map +1 -1
  270. package/dist/esm/action/server/AttributeWriteResponse.js +70 -17
  271. package/dist/esm/action/server/AttributeWriteResponse.js.map +1 -1
  272. package/dist/esm/action/server/CommandInvokeResponse.d.ts.map +1 -1
  273. package/dist/esm/action/server/CommandInvokeResponse.js +83 -30
  274. package/dist/esm/action/server/CommandInvokeResponse.js.map +1 -1
  275. package/dist/esm/action/server/DataResponse.d.ts +1 -0
  276. package/dist/esm/action/server/DataResponse.d.ts.map +1 -1
  277. package/dist/esm/action/server/DataResponse.js +3 -0
  278. package/dist/esm/action/server/DataResponse.js.map +1 -1
  279. package/dist/esm/action/server/ServerInteraction.d.ts.map +1 -1
  280. package/dist/esm/action/server/ServerInteraction.js +4 -4
  281. package/dist/esm/action/server/ServerInteraction.js.map +1 -1
  282. package/dist/esm/advertisement/Advertisement.d.ts.map +1 -1
  283. package/dist/esm/advertisement/Advertisement.js +66 -14
  284. package/dist/esm/advertisement/Advertisement.js.map +1 -1
  285. package/dist/esm/advertisement/Advertiser.d.ts +4 -1
  286. package/dist/esm/advertisement/Advertiser.d.ts.map +1 -1
  287. package/dist/esm/advertisement/Advertiser.js +63 -2
  288. package/dist/esm/advertisement/Advertiser.js.map +1 -1
  289. package/dist/esm/advertisement/ble/BleAdvertiser.d.ts +6 -1
  290. package/dist/esm/advertisement/ble/BleAdvertiser.d.ts.map +1 -1
  291. package/dist/esm/advertisement/ble/BleAdvertiser.js +1 -1
  292. package/dist/esm/advertisement/ble/BleAdvertiser.js.map +1 -1
  293. package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts +5 -1
  294. package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts.map +1 -1
  295. package/dist/esm/advertisement/mdns/MdnsAdvertiser.js +1 -1
  296. package/dist/esm/advertisement/mdns/MdnsAdvertiser.js.map +1 -1
  297. package/dist/esm/certificate/kinds/definitions/asn.js +2 -2
  298. package/dist/esm/certificate/kinds/definitions/asn.js.map +1 -1
  299. package/dist/esm/certificate/kinds/definitions/attestation.d.ts.map +1 -1
  300. package/dist/esm/cluster/client/AttributeClient.d.ts.map +1 -1
  301. package/dist/esm/cluster/client/AttributeClient.js +1 -1
  302. package/dist/esm/cluster/client/AttributeClient.js.map +1 -1
  303. package/dist/esm/codec/MessageCodec.d.ts +8 -1
  304. package/dist/esm/codec/MessageCodec.d.ts.map +1 -1
  305. package/dist/esm/codec/MessageCodec.js +39 -28
  306. package/dist/esm/codec/MessageCodec.js.map +2 -2
  307. package/dist/esm/common/FailsafeContext.d.ts +8 -9
  308. package/dist/esm/common/FailsafeContext.d.ts.map +1 -1
  309. package/dist/esm/common/FailsafeContext.js +27 -33
  310. package/dist/esm/common/FailsafeContext.js.map +1 -1
  311. package/dist/esm/common/FailsafeTimer.d.ts +4 -3
  312. package/dist/esm/common/FailsafeTimer.d.ts.map +1 -1
  313. package/dist/esm/common/FailsafeTimer.js +4 -4
  314. package/dist/esm/common/FailsafeTimer.js.map +1 -1
  315. package/dist/esm/common/Mark.d.ts +17 -0
  316. package/dist/esm/common/Mark.d.ts.map +1 -0
  317. package/dist/esm/common/Mark.js +18 -0
  318. package/dist/esm/common/Mark.js.map +6 -0
  319. package/dist/esm/common/index.d.ts +1 -0
  320. package/dist/esm/common/index.d.ts.map +1 -1
  321. package/dist/esm/common/index.js +1 -0
  322. package/dist/esm/common/index.js.map +1 -1
  323. package/dist/esm/fabric/Fabric.d.ts +16 -8
  324. package/dist/esm/fabric/Fabric.d.ts.map +1 -1
  325. package/dist/esm/fabric/Fabric.js +36 -18
  326. package/dist/esm/fabric/Fabric.js.map +1 -1
  327. package/dist/esm/fabric/FabricAuthority.d.ts +2 -2
  328. package/dist/esm/fabric/FabricAuthority.d.ts.map +1 -1
  329. package/dist/esm/fabric/FabricAuthority.js +5 -5
  330. package/dist/esm/fabric/FabricAuthority.js.map +1 -1
  331. package/dist/esm/fabric/FabricManager.d.ts +10 -14
  332. package/dist/esm/fabric/FabricManager.d.ts.map +1 -1
  333. package/dist/esm/fabric/FabricManager.js +45 -40
  334. package/dist/esm/fabric/FabricManager.js.map +2 -2
  335. package/dist/esm/index.d.ts +1 -1
  336. package/dist/esm/index.d.ts.map +1 -1
  337. package/dist/esm/index.js +1 -1
  338. package/dist/esm/index.js.map +1 -1
  339. package/dist/esm/interaction/AttributeDataEncoder.d.ts +1 -1
  340. package/dist/esm/interaction/InteractionClient.d.ts +2 -2
  341. package/dist/esm/interaction/InteractionClient.d.ts.map +1 -1
  342. package/dist/esm/interaction/InteractionClient.js +39 -22
  343. package/dist/esm/interaction/InteractionClient.js.map +1 -1
  344. package/dist/esm/interaction/InteractionMessenger.d.ts +2 -2
  345. package/dist/esm/interaction/InteractionMessenger.d.ts.map +1 -1
  346. package/dist/esm/interaction/InteractionMessenger.js +33 -28
  347. package/dist/esm/interaction/InteractionMessenger.js.map +1 -1
  348. package/dist/esm/interaction/Subscription.d.ts +16 -37
  349. package/dist/esm/interaction/Subscription.d.ts.map +1 -1
  350. package/dist/esm/interaction/Subscription.js +16 -69
  351. package/dist/esm/interaction/Subscription.js.map +2 -2
  352. package/dist/esm/interaction/SubscriptionClient.d.ts +2 -2
  353. package/dist/esm/interaction/SubscriptionClient.d.ts.map +1 -1
  354. package/dist/esm/interaction/SubscriptionClient.js +2 -2
  355. package/dist/esm/interaction/SubscriptionClient.js.map +1 -1
  356. package/dist/esm/mdns/MdnsClient.d.ts +10 -10
  357. package/dist/esm/mdns/MdnsClient.d.ts.map +1 -1
  358. package/dist/esm/mdns/MdnsClient.js +166 -80
  359. package/dist/esm/mdns/MdnsClient.js.map +1 -1
  360. package/dist/esm/mdns/MdnsServer.d.ts +2 -2
  361. package/dist/esm/mdns/MdnsServer.d.ts.map +1 -1
  362. package/dist/esm/mdns/MdnsServer.js +176 -94
  363. package/dist/esm/mdns/MdnsServer.js.map +2 -2
  364. package/dist/esm/mdns/MdnsService.d.ts.map +1 -1
  365. package/dist/esm/mdns/MdnsService.js +3 -2
  366. package/dist/esm/mdns/MdnsService.js.map +1 -1
  367. package/dist/esm/mdns/MdnsSocket.d.ts +3 -2
  368. package/dist/esm/mdns/MdnsSocket.d.ts.map +1 -1
  369. package/dist/esm/mdns/MdnsSocket.js +2 -1
  370. package/dist/esm/mdns/MdnsSocket.js.map +1 -1
  371. package/dist/esm/peer/ControllerCommissioner.d.ts +2 -2
  372. package/dist/esm/peer/ControllerCommissioner.d.ts.map +1 -1
  373. package/dist/esm/peer/ControllerCommissioner.js +26 -28
  374. package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
  375. package/dist/esm/peer/ControllerDiscovery.d.ts +1 -1
  376. package/dist/esm/peer/ControllerDiscovery.d.ts.map +1 -1
  377. package/dist/esm/peer/ControllerDiscovery.js +1 -1
  378. package/dist/esm/peer/ControllerDiscovery.js.map +1 -1
  379. package/dist/esm/peer/Peer.d.ts +57 -0
  380. package/dist/esm/peer/Peer.d.ts.map +1 -0
  381. package/dist/esm/peer/Peer.js +162 -0
  382. package/dist/esm/peer/Peer.js.map +6 -0
  383. package/dist/esm/peer/PeerAddress.d.ts.map +1 -1
  384. package/dist/esm/peer/PeerAddress.js +5 -2
  385. package/dist/esm/peer/PeerAddress.js.map +1 -1
  386. package/dist/esm/peer/PeerAddressStore.d.ts +3 -3
  387. package/dist/esm/peer/PeerAddressStore.d.ts.map +1 -1
  388. package/dist/{cjs/peer/OperationalPeer.d.ts → esm/peer/PeerDescriptor.d.ts} +14 -7
  389. package/dist/esm/peer/PeerDescriptor.d.ts.map +1 -0
  390. package/dist/esm/peer/PeerDescriptor.js +51 -0
  391. package/dist/esm/peer/PeerDescriptor.js.map +6 -0
  392. package/dist/esm/peer/PeerSet.d.ts +23 -26
  393. package/dist/esm/peer/PeerSet.d.ts.map +1 -1
  394. package/dist/esm/peer/PeerSet.js +173 -175
  395. package/dist/esm/peer/PeerSet.js.map +2 -2
  396. package/dist/esm/peer/index.d.ts +1 -1
  397. package/dist/esm/peer/index.d.ts.map +1 -1
  398. package/dist/esm/peer/index.js +1 -1
  399. package/dist/esm/protocol/DeviceAdvertiser.js +4 -4
  400. package/dist/esm/protocol/DeviceAdvertiser.js.map +1 -1
  401. package/dist/esm/protocol/ExchangeManager.d.ts +6 -9
  402. package/dist/esm/protocol/ExchangeManager.d.ts.map +1 -1
  403. package/dist/esm/protocol/ExchangeManager.js +308 -251
  404. package/dist/esm/protocol/ExchangeManager.js.map +2 -2
  405. package/dist/esm/protocol/ExchangeProvider.d.ts +9 -11
  406. package/dist/esm/protocol/ExchangeProvider.d.ts.map +1 -1
  407. package/dist/esm/protocol/ExchangeProvider.js +81 -37
  408. package/dist/esm/protocol/ExchangeProvider.js.map +2 -2
  409. package/dist/esm/protocol/MessageChannel.d.ts +6 -7
  410. package/dist/esm/protocol/MessageChannel.d.ts.map +1 -1
  411. package/dist/esm/protocol/MessageChannel.js +22 -18
  412. package/dist/esm/protocol/MessageChannel.js.map +1 -1
  413. package/dist/esm/protocol/MessageCounter.d.ts +4 -4
  414. package/dist/esm/protocol/MessageCounter.d.ts.map +1 -1
  415. package/dist/esm/protocol/MessageCounter.js +7 -7
  416. package/dist/esm/protocol/MessageCounter.js.map +1 -1
  417. package/dist/esm/protocol/MessageExchange.d.ts +31 -20
  418. package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
  419. package/dist/esm/protocol/MessageExchange.js +318 -238
  420. package/dist/esm/protocol/MessageExchange.js.map +2 -2
  421. package/dist/esm/protocol/ProtocolMocks.d.ts +100 -0
  422. package/dist/esm/protocol/ProtocolMocks.d.ts.map +1 -0
  423. package/dist/esm/protocol/ProtocolMocks.js +230 -0
  424. package/dist/esm/protocol/ProtocolMocks.js.map +6 -0
  425. package/dist/esm/protocol/errors.d.ts +35 -0
  426. package/dist/esm/protocol/errors.d.ts.map +1 -0
  427. package/dist/esm/protocol/errors.js +30 -0
  428. package/dist/esm/protocol/errors.js.map +6 -0
  429. package/dist/esm/protocol/index.d.ts +2 -1
  430. package/dist/esm/protocol/index.d.ts.map +1 -1
  431. package/dist/esm/protocol/index.js +2 -1
  432. package/dist/esm/protocol/index.js.map +1 -1
  433. package/dist/esm/securechannel/SecureChannelMessenger.d.ts +1 -0
  434. package/dist/esm/securechannel/SecureChannelMessenger.d.ts.map +1 -1
  435. package/dist/esm/securechannel/SecureChannelMessenger.js +3 -0
  436. package/dist/esm/securechannel/SecureChannelMessenger.js.map +1 -1
  437. package/dist/esm/securechannel/SecureChannelProtocol.js +2 -2
  438. package/dist/esm/securechannel/SecureChannelProtocol.js.map +1 -1
  439. package/dist/esm/session/GroupSession.d.ts +21 -10
  440. package/dist/esm/session/GroupSession.d.ts.map +1 -1
  441. package/dist/esm/session/GroupSession.js +41 -12
  442. package/dist/esm/session/GroupSession.js.map +1 -1
  443. package/dist/esm/session/NodeSession.d.ts +56 -50
  444. package/dist/esm/session/NodeSession.d.ts.map +1 -1
  445. package/dist/esm/session/NodeSession.js +99 -105
  446. package/dist/esm/session/NodeSession.js.map +1 -1
  447. package/dist/esm/session/SecureSession.d.ts +4 -4
  448. package/dist/esm/session/SecureSession.d.ts.map +1 -1
  449. package/dist/esm/session/SecureSession.js +1 -1
  450. package/dist/esm/session/SecureSession.js.map +1 -1
  451. package/dist/esm/session/Session.d.ts +82 -66
  452. package/dist/esm/session/Session.d.ts.map +1 -1
  453. package/dist/esm/session/Session.js +223 -45
  454. package/dist/esm/session/Session.js.map +1 -1
  455. package/dist/esm/session/SessionManager.d.ts +33 -36
  456. package/dist/esm/session/SessionManager.d.ts.map +1 -1
  457. package/dist/esm/session/SessionManager.js +113 -157
  458. package/dist/esm/session/SessionManager.js.map +1 -1
  459. package/dist/esm/session/SessionParameters.d.ts +87 -0
  460. package/dist/esm/session/SessionParameters.d.ts.map +1 -0
  461. package/dist/esm/session/SessionParameters.js +61 -0
  462. package/dist/esm/session/SessionParameters.js.map +6 -0
  463. package/dist/{cjs/session/InsecureSession.d.ts → esm/session/UnsecuredSession.d.ts} +18 -16
  464. package/dist/esm/session/UnsecuredSession.d.ts.map +1 -0
  465. package/dist/esm/session/{InsecureSession.js → UnsecuredSession.js} +18 -18
  466. package/dist/esm/session/UnsecuredSession.js.map +6 -0
  467. package/dist/esm/session/case/CaseClient.d.ts.map +1 -1
  468. package/dist/esm/session/case/CaseClient.js +5 -3
  469. package/dist/esm/session/case/CaseClient.js.map +1 -1
  470. package/dist/esm/session/case/CaseServer.d.ts.map +1 -1
  471. package/dist/esm/session/case/CaseServer.js +14 -10
  472. package/dist/esm/session/case/CaseServer.js.map +1 -1
  473. package/dist/esm/session/index.d.ts +2 -1
  474. package/dist/esm/session/index.d.ts.map +1 -1
  475. package/dist/esm/session/index.js +2 -1
  476. package/dist/esm/session/index.js.map +1 -1
  477. package/dist/esm/session/pase/PaseClient.d.ts +3 -3
  478. package/dist/esm/session/pase/PaseClient.d.ts.map +1 -1
  479. package/dist/esm/session/pase/PaseClient.js +5 -3
  480. package/dist/esm/session/pase/PaseClient.js.map +1 -1
  481. package/dist/esm/session/pase/PaseServer.d.ts.map +1 -1
  482. package/dist/esm/session/pase/PaseServer.js +13 -13
  483. package/dist/esm/session/pase/PaseServer.js.map +1 -1
  484. package/package.json +6 -6
  485. package/src/action/client/ClientInteraction.ts +47 -13
  486. package/src/action/client/subscription/ClientSubscription.ts +30 -5
  487. package/src/action/client/subscription/ClientSubscriptionHandler.ts +2 -4
  488. package/src/action/client/subscription/ClientSubscriptions.ts +14 -3
  489. package/src/action/client/subscription/PeerSubscription.ts +2 -2
  490. package/src/action/client/subscription/SustainedSubscription.ts +2 -6
  491. package/src/action/request/Invoke.ts +2 -2
  492. package/src/action/server/AttributeReadResponse.ts +2 -0
  493. package/src/action/server/AttributeWriteResponse.ts +2 -0
  494. package/src/action/server/CommandInvokeResponse.ts +1 -0
  495. package/src/action/server/DataResponse.ts +4 -0
  496. package/src/action/server/ServerInteraction.ts +4 -4
  497. package/src/advertisement/Advertisement.ts +6 -7
  498. package/src/advertisement/Advertiser.ts +12 -1
  499. package/src/advertisement/ble/BleAdvertiser.ts +7 -2
  500. package/src/advertisement/mdns/MdnsAdvertiser.ts +7 -1
  501. package/src/certificate/kinds/definitions/asn.ts +2 -2
  502. package/src/certificate/kinds/definitions/attestation.ts +1 -0
  503. package/src/cluster/client/AttributeClient.ts +1 -1
  504. package/src/codec/MessageCodec.ts +39 -32
  505. package/src/common/FailsafeContext.ts +36 -39
  506. package/src/common/FailsafeTimer.ts +7 -6
  507. package/src/common/Mark.ts +17 -0
  508. package/src/common/index.ts +1 -0
  509. package/src/fabric/Fabric.ts +51 -23
  510. package/src/fabric/FabricAuthority.ts +4 -4
  511. package/src/fabric/FabricManager.ts +53 -40
  512. package/src/index.ts +3 -1
  513. package/src/interaction/InteractionClient.ts +40 -23
  514. package/src/interaction/InteractionMessenger.ts +38 -32
  515. package/src/interaction/Subscription.ts +20 -92
  516. package/src/interaction/SubscriptionClient.ts +3 -3
  517. package/src/mdns/MdnsClient.ts +20 -3
  518. package/src/mdns/MdnsServer.ts +13 -1
  519. package/src/mdns/MdnsService.ts +3 -2
  520. package/src/mdns/MdnsSocket.ts +9 -3
  521. package/src/peer/ControllerCommissioner.ts +35 -37
  522. package/src/peer/ControllerDiscovery.ts +1 -1
  523. package/src/peer/Peer.ts +161 -0
  524. package/src/peer/PeerAddress.ts +6 -2
  525. package/src/peer/PeerAddressStore.ts +3 -3
  526. package/src/peer/PeerDescriptor.ts +89 -0
  527. package/src/peer/PeerSet.ts +145 -213
  528. package/src/peer/index.ts +1 -1
  529. package/src/protocol/DeviceAdvertiser.ts +4 -4
  530. package/src/protocol/ExchangeManager.ts +161 -181
  531. package/src/protocol/ExchangeProvider.ts +31 -40
  532. package/src/protocol/MessageChannel.ts +29 -18
  533. package/src/protocol/MessageCounter.ts +8 -8
  534. package/src/protocol/MessageExchange.ts +181 -144
  535. package/src/protocol/ProtocolMocks.ts +302 -0
  536. package/src/protocol/errors.ts +44 -0
  537. package/src/protocol/index.ts +2 -1
  538. package/src/securechannel/SecureChannelMessenger.ts +4 -0
  539. package/src/securechannel/SecureChannelProtocol.ts +2 -2
  540. package/src/session/GroupSession.ts +67 -23
  541. package/src/session/NodeSession.ts +140 -136
  542. package/src/session/SecureSession.ts +6 -5
  543. package/src/session/Session.ts +234 -101
  544. package/src/session/SessionManager.ts +148 -187
  545. package/src/session/SessionParameters.ts +108 -0
  546. package/src/session/{InsecureSession.ts → UnsecuredSession.ts} +28 -26
  547. package/src/session/case/CaseClient.ts +6 -3
  548. package/src/session/case/CaseServer.ts +15 -11
  549. package/src/session/index.ts +2 -1
  550. package/src/session/pase/PaseClient.ts +12 -5
  551. package/src/session/pase/PaseServer.ts +14 -13
  552. package/dist/cjs/peer/OperationalPeer.d.ts.map +0 -1
  553. package/dist/cjs/peer/OperationalPeer.js.map +0 -6
  554. package/dist/cjs/protocol/ChannelManager.d.ts +0 -29
  555. package/dist/cjs/protocol/ChannelManager.d.ts.map +0 -1
  556. package/dist/cjs/protocol/ChannelManager.js +0 -178
  557. package/dist/cjs/protocol/ChannelManager.js.map +0 -6
  558. package/dist/cjs/session/InsecureSession.d.ts.map +0 -1
  559. package/dist/cjs/session/InsecureSession.js.map +0 -6
  560. package/dist/esm/peer/OperationalPeer.d.ts +0 -38
  561. package/dist/esm/peer/OperationalPeer.d.ts.map +0 -1
  562. package/dist/esm/peer/OperationalPeer.js +0 -6
  563. package/dist/esm/peer/OperationalPeer.js.map +0 -6
  564. package/dist/esm/protocol/ChannelManager.d.ts +0 -29
  565. package/dist/esm/protocol/ChannelManager.d.ts.map +0 -1
  566. package/dist/esm/protocol/ChannelManager.js +0 -158
  567. package/dist/esm/protocol/ChannelManager.js.map +0 -6
  568. package/dist/esm/session/InsecureSession.d.ts.map +0 -1
  569. package/dist/esm/session/InsecureSession.js.map +0 -6
  570. package/src/protocol/ChannelManager.ts +0 -180
@@ -4,12 +4,14 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
+ import { Mark } from "#common/Mark.js";
7
8
  import {
8
9
  Bytes,
9
10
  DataReader,
10
11
  DataWriter,
11
12
  Diagnostic,
12
13
  Endian,
14
+ hex,
13
15
  InternalError,
14
16
  NotImplementedError,
15
17
  UnexpectedDataError,
@@ -53,6 +55,7 @@ export interface Packet {
53
55
  export interface DecodedPacket extends Packet {
54
56
  header: DecodedPacketHeader;
55
57
  }
58
+
56
59
  export interface Message {
57
60
  packetHeader: PacketHeader;
58
61
  payloadHeader: PayloadHeader;
@@ -60,6 +63,42 @@ export interface Message {
60
63
  payload: Bytes;
61
64
  }
62
65
 
66
+ export namespace Message {
67
+ export function via({ via }: { via: string }, { packetHeader: { messageId } }: Message) {
68
+ return Diagnostic.via(`${via}${Mark.MESSAGE}${hex.fixed(messageId, 8)}`);
69
+ }
70
+
71
+ export function diagnosticsOf(context: { via: string }, message: Message, logContext?: ExchangeLogContext) {
72
+ const {
73
+ payloadHeader: { messageType, protocolId, ackedMessageId, requiresAck },
74
+ payload,
75
+ } = message;
76
+
77
+ const duplicate = !!logContext?.duplicate;
78
+ const forInfo = logContext?.for;
79
+ const log = { ...logContext };
80
+ delete log.duplicate;
81
+ delete log.for;
82
+ const { type, for: forType } = mapProtocolAndMessageType(protocolId, messageType);
83
+ return Diagnostic.dict(
84
+ {
85
+ for: forInfo ?? forType,
86
+ ...log,
87
+ id: Message.via(context, message),
88
+ type,
89
+ acked: ackedMessageId === undefined ? undefined : hex.fixed(ackedMessageId, 8),
90
+ msgFlags: Diagnostic.asFlags({
91
+ reqAck: requiresAck,
92
+ dup: duplicate,
93
+ }),
94
+ size: payload.byteLength ? payload.byteLength : undefined,
95
+ payload: payload.byteLength ? payload : undefined,
96
+ },
97
+ true,
98
+ );
99
+ }
100
+ }
101
+
63
102
  export interface DecodedMessage extends Message {
64
103
  packetHeader: DecodedPacketHeader;
65
104
  }
@@ -291,38 +330,6 @@ export class MessageCodec {
291
330
  return writer.toByteArray();
292
331
  }
293
332
 
294
- static messageDiagnostics(
295
- {
296
- packetHeader: { messageId, sessionId },
297
- payloadHeader: { exchangeId, messageType, protocolId, ackedMessageId, requiresAck },
298
- payload,
299
- }: Message,
300
- logContext?: ExchangeLogContext,
301
- ) {
302
- const duplicate = !!logContext?.duplicate;
303
- const forInfo = logContext?.for;
304
- const log = { ...logContext };
305
- delete log.duplicate;
306
- delete log.for;
307
- const { type, for: forType } = mapProtocolAndMessageType(protocolId, messageType);
308
- return Diagnostic.dict(
309
- {
310
- for: forInfo ?? forType,
311
- ...log,
312
- msgId: `${sessionId}/${exchangeId}/${messageId}`,
313
- type,
314
- acked: ackedMessageId,
315
- msgFlags: Diagnostic.asFlags({
316
- reqAck: requiresAck,
317
- dup: duplicate,
318
- }),
319
- size: payload.byteLength ? payload.byteLength : undefined,
320
- payload: payload.byteLength ? payload : undefined,
321
- },
322
- true,
323
- );
324
- }
325
-
326
333
  private static encodePayloadHeader({
327
334
  exchangeId,
328
335
  isInitiatorMessage,
@@ -14,7 +14,8 @@ import {
14
14
  UnexpectedDataError,
15
15
  UninitializedDependencyError,
16
16
  } from "#general";
17
- import { SecureSession } from "#session/SecureSession.js";
17
+ import type { MessageExchange } from "#protocol/MessageExchange.js";
18
+ import type { NodeSession } from "#session/NodeSession.js";
18
19
  import { CaseAuthenticatedTag, NodeId, ValidationError, VendorId } from "#types";
19
20
  import { Fabric, FabricBuilder } from "../fabric/Fabric.js";
20
21
  import { FabricManager } from "../fabric/FabricManager.js";
@@ -63,8 +64,11 @@ export abstract class FailsafeContext {
63
64
 
64
65
  // If ExpiryLengthSeconds is non-zero and the fail-safe timer was not currently armed, then the fail-safe
65
66
  // timer SHALL be armed for that duration.
66
- this.#failsafe = new FailsafeTimer(this.#associatedFabric, expiryLength, maxCumulativeFailsafe, () =>
67
- this.#failSafeExpired(),
67
+ this.#failsafe = new FailsafeTimer(
68
+ this.#associatedFabric,
69
+ expiryLength,
70
+ maxCumulativeFailsafe,
71
+ this.#failSafeExpired.bind(this),
68
72
  );
69
73
  logger.debug(`Arm failSafe timer for ${Duration.format(expiryLength)}`);
70
74
 
@@ -78,9 +82,9 @@ export abstract class FailsafeContext {
78
82
  });
79
83
  }
80
84
 
81
- async extend(fabric: Fabric | undefined, expiryLength: Duration) {
85
+ async extend(fabric: Fabric | undefined, expiryLength: Duration, currentExchange?: MessageExchange) {
82
86
  await this.#construction;
83
- await this.#failsafe?.reArm(fabric, expiryLength);
87
+ await this.#failsafe?.reArm(fabric, expiryLength, currentExchange);
84
88
  if (expiryLength > 0) {
85
89
  logger.debug(`Extend failSafe timer for ${Duration.format(expiryLength)}`);
86
90
  }
@@ -141,7 +145,7 @@ export abstract class FailsafeContext {
141
145
  // TODO 3. Any temporary administrative privileges automatically granted to any open PASE session SHALL be revoked (see Section 6.6.2.8, “Bootstrapping of the Access Control Cluster”).
142
146
 
143
147
  // 4. The Secure Session Context of any PASE session still established at the Server SHALL be cleared.
144
- await this.removePaseSession();
148
+ await this.closePaseSession();
145
149
 
146
150
  await this.close();
147
151
  }
@@ -155,16 +159,8 @@ export abstract class FailsafeContext {
155
159
  return this.#fabrics.allocateFabricIndex();
156
160
  }
157
161
 
158
- async addFabric(fabric: Fabric) {
159
- this.#fabrics.addFabric(fabric);
160
- if (this.#failsafe !== undefined) {
161
- this.#associatedFabric = this.#failsafe.associatedFabric = fabric;
162
- }
163
- return fabric.fabricIndex;
164
- }
165
-
166
- async updateFabric(fabric: Fabric) {
167
- await this.#fabrics.updateFabric(fabric);
162
+ async replaceFabric(fabric: Fabric) {
163
+ await this.#fabrics.replaceFabric(fabric);
168
164
  await this.#sessions.deleteResumptionRecordsForFabric(fabric);
169
165
  }
170
166
 
@@ -183,19 +179,19 @@ export abstract class FailsafeContext {
183
179
  return result;
184
180
  }
185
181
 
186
- async removePaseSession() {
182
+ async closePaseSession(currentExchange?: MessageExchange) {
187
183
  const session = this.#sessions.getPaseSession();
188
- if (session !== undefined) {
189
- await session.close(true);
184
+ if (session) {
185
+ await session.initiateForceClose(currentExchange);
190
186
  }
191
187
  }
192
188
 
193
- async close() {
189
+ async close(currentExchange?: MessageExchange) {
194
190
  await this.#construction.close(async () => {
195
191
  if (this.#failsafe) {
196
192
  await this.#failsafe.close();
197
193
  this.#failsafe = undefined;
198
- await this.rollback();
194
+ await this.rollback(currentExchange);
199
195
  }
200
196
  });
201
197
  }
@@ -256,28 +252,35 @@ export abstract class FailsafeContext {
256
252
  );
257
253
  }
258
254
 
259
- return builder
255
+ this.#associatedFabric = await builder
260
256
  .setRootVendorId(adminVendorId)
261
257
  .setIdentityProtectionKey(ipkValue)
262
258
  .setRootNodeId(caseAdminSubject)
263
259
  .build(this.#fabrics.allocateFabricIndex());
260
+ this.#fabrics.addFabric(this.#associatedFabric);
261
+
262
+ if (this.#failsafe) {
263
+ this.#failsafe.associatedFabric = this.#associatedFabric;
264
+ }
265
+
266
+ return this.#associatedFabric;
264
267
  }
265
268
 
266
- async #failSafeExpired() {
269
+ async #failSafeExpired(currentExchange?: MessageExchange) {
267
270
  logger.info("Failsafe timer expired; resetting fabric builder");
268
271
 
269
- await this.close();
272
+ await this.close(currentExchange);
270
273
  }
271
274
 
272
- protected async rollback() {
275
+ protected async rollback(currentExchange?: MessageExchange) {
273
276
  if (this.fabricIndex !== undefined && !this.#forUpdateNoc) {
274
- logger.debug(`Revoking fabric with index ${this.fabricIndex}`);
275
- await this.#fabrics.revokeFabric(this.fabricIndex);
277
+ logger.debug(`Revoking fabric index ${this.fabricIndex}`);
278
+ await this.#associatedFabric?.delete(currentExchange);
276
279
  }
277
280
 
278
281
  // On expiry of the fail-safe timer, the following actions SHALL be performed in order:
279
282
  // 1. Terminate any open PASE secure session by clearing any associated Secure Session Context at the Server.
280
- await this.removePaseSession();
283
+ await this.closePaseSession(currentExchange);
281
284
 
282
285
  // TODO 2. Revoke the temporary administrative privileges granted to any open PASE session (see Section 6.6.2.8, “Bootstrapping of the Access Control Cluster”) at the Server.
283
286
 
@@ -287,9 +290,8 @@ export abstract class FailsafeContext {
287
290
  const fabricIndex = this.fabricIndex;
288
291
  if (this.#fabrics.has(fabricIndex)) {
289
292
  fabric = this.#fabrics.for(fabricIndex);
290
- const session = this.#sessions.getSessionForNode(fabric.addressOf(fabric.rootNodeId));
291
- if (session !== undefined && session.isSecure) {
292
- await session.close(false);
293
+ for (const session of this.#sessions.sessionsForFabricIndex(fabricIndex)) {
294
+ await session.initiateForceClose(currentExchange);
293
295
  }
294
296
  }
295
297
  }
@@ -309,10 +311,7 @@ export abstract class FailsafeContext {
309
311
  // 6. If an AddNOC command had been successfully invoked, achieve the equivalent effect of invoking the RemoveFabric command against the Fabric Index stored in the Fail-Safe Context for the Fabric Index that was the subject of the AddNOC command. This SHALL remove all associations to that Fabric including all fabric-scoped data, and MAY possibly factory-reset the device depending on current device state. This SHALL only apply to Fabrics added during the fail-safe period as the result of the AddNOC command.
310
312
  // 7. Remove any RCACs added by the AddTrustedRootCertificate command that are not currently referenced by any entry in the Fabrics attribute.
311
313
  if (!this.#forUpdateNoc && fabric !== undefined) {
312
- const fabricIndex = this.fabricIndex;
313
- if (fabricIndex !== undefined && this.#fabrics.has(fabricIndex)) {
314
- await this.revokeFabric(this.#fabrics.for(fabricIndex));
315
- }
314
+ await this.#associatedFabric?.delete();
316
315
  }
317
316
 
318
317
  // 8. Reset the Breadcrumb attribute to zero.
@@ -329,11 +328,9 @@ export abstract class FailsafeContext {
329
328
  abstract restoreNetworkState(): Promise<void>;
330
329
 
331
330
  async restoreFabric(fabric: Fabric) {
332
- await this.updateFabric(fabric);
331
+ await this.replaceFabric(fabric);
333
332
  }
334
333
 
335
- abstract revokeFabric(fabric: Fabric): Promise<void>;
336
-
337
334
  abstract restoreBreadcrumb(): Promise<void>;
338
335
 
339
336
  get #builder() {
@@ -350,6 +347,6 @@ export namespace FailsafeContext {
350
347
  fabrics: FabricManager;
351
348
  expiryLength: Duration;
352
349
  maxCumulativeFailsafe: Duration;
353
- session: SecureSession;
350
+ session: NodeSession;
354
351
  }
355
352
  }
@@ -5,6 +5,7 @@
5
5
  */
6
6
 
7
7
  import { Duration, Logger, MatterFlowError, Time, Timer } from "#general";
8
+ import { MessageExchange } from "#protocol/MessageExchange.js";
8
9
  import { Fabric } from "../fabric/Fabric.js";
9
10
  import type { FailsafeContext } from "./FailsafeContext.js";
10
11
 
@@ -16,7 +17,7 @@ const logger = Logger.get("FailsafeTimer");
16
17
  * Manages the failsafe timer associated with a {@link FailsafeContext}.
17
18
  */
18
19
  export class FailsafeTimer {
19
- #expiryCallback: () => Promise<void>;
20
+ #expiryCallback: (currentExchange?: MessageExchange) => Promise<void>;
20
21
  #failsafeTimer: Timer;
21
22
  #maxCumulativeFailsafeTimer: Timer;
22
23
  #completed = false;
@@ -25,7 +26,7 @@ export class FailsafeTimer {
25
26
  public associatedFabric: Fabric | undefined,
26
27
  expiryLength: Duration,
27
28
  maxCumulativeFailsafe: Duration,
28
- expiryCallback: () => Promise<void>,
29
+ expiryCallback: (currentExchange?: MessageExchange) => Promise<void>,
29
30
  ) {
30
31
  this.#expiryCallback = expiryCallback;
31
32
  this.#failsafeTimer = this.#startFailsafeTimer(expiryLength);
@@ -44,7 +45,7 @@ export class FailsafeTimer {
44
45
  }
45
46
 
46
47
  /** Handle "Re-Arming" an existing FailSafe context to extend the timer, expire or fail if not allowed. */
47
- async reArm(associatedFabric: Fabric | undefined, expiry: Duration) {
48
+ async reArm(associatedFabric: Fabric | undefined, expiry: Duration, currentExchange?: MessageExchange) {
48
49
  if (!this.#failsafeTimer.isRunning) {
49
50
  throw new MatterFlowError("FailSafe already expired.");
50
51
  }
@@ -61,7 +62,7 @@ export class FailsafeTimer {
61
62
  // If ExpiryLengthSeconds is 0 and the fail-safe timer was already armed and the accessing fabric matches
62
63
  // the Fabric currently associated with the fail-safe context, then the fail-safe timer SHALL be
63
64
  // immediately expired (see further below for side-effects of expiration).
64
- await this.expire();
65
+ await this.expire(currentExchange);
65
66
  } else {
66
67
  // If ExpiryLengthSeconds is non-zero and the fail-safe timer was currently armed, and the accessing Fabric
67
68
  // matches the fail-safe context’s associated Fabric, then the fail-safe timer SHALL be re- armed to expire
@@ -76,13 +77,13 @@ export class FailsafeTimer {
76
77
  }
77
78
 
78
79
  /** Expire the FailSafe context. This is called by the timer and can also be called manually if needed. */
79
- async expire() {
80
+ async expire(currentExchange?: MessageExchange) {
80
81
  if (this.#completed) {
81
82
  // Completion was already triggered, so do nothing
82
83
  return;
83
84
  }
84
85
  this.complete();
85
- await this.#expiryCallback();
86
+ await this.#expiryCallback(currentExchange);
86
87
  }
87
88
 
88
89
  /** Complete the FailSafe context. This is called when the commissioning is completed. */
@@ -0,0 +1,17 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ /**
8
+ * Visual demarcators for specific log elements.
9
+ */
10
+ export namespace Mark {
11
+ export const INBOUND = "«";
12
+ export const OUTBOUND = "»";
13
+ export const SESSION = "•"; // Makes more sense but renders poorly: "⚭" (marriage). Infinity OK too: "∞"
14
+ export const LOCAL_SESSION = "◦";
15
+ export const EXCHANGE = "⇵";
16
+ export const MESSAGE = "✉";
17
+ }
@@ -8,6 +8,7 @@ export * from "../peer/PeerAddress.js";
8
8
  export * from "./ExpandedPath.js";
9
9
  export * from "./FailsafeContext.js";
10
10
  export * from "./FailsafeTimer.js";
11
+ export * from "./Mark.js";
11
12
  export * from "./OperationalCredentialsTypes.js";
12
13
  export * from "./Scanner.js";
13
14
  export * from "./SupportedTransportsBitmap.js";
@@ -9,6 +9,7 @@ import { Icac } from "#certificate/kinds/Icac.js";
9
9
  import { Noc } from "#certificate/kinds/Noc.js";
10
10
  import { Rcac } from "#certificate/kinds/Rcac.js";
11
11
  import {
12
+ AsyncObservable,
12
13
  BinaryKeyPair,
13
14
  Bytes,
14
15
  Crypto,
@@ -28,7 +29,8 @@ import {
28
29
  import { FabricGroups, GROUP_SECURITY_INFO } from "#groups/FabricGroups.js";
29
30
  import { FabricAccessControl } from "#interaction/FabricAccessControl.js";
30
31
  import { PeerAddress } from "#peer/PeerAddress.js";
31
- import { Session } from "#session/Session.js";
32
+ import { MessageExchange } from "#protocol/MessageExchange.js";
33
+ import { SecureSession } from "#session/SecureSession.js";
32
34
  import { CaseAuthenticatedTag, FabricId, FabricIndex, GroupId, NodeId, StatusResponse, VendorId } from "#types";
33
35
 
34
36
  const logger = Logger.get("Fabric");
@@ -61,15 +63,20 @@ export class Fabric {
61
63
  readonly intermediateCACert: Bytes | undefined;
62
64
  readonly operationalCert: Bytes;
63
65
  readonly #keyPair: Key;
64
- readonly #sessions = new Set<Session>();
66
+ readonly #sessions = new Set<SecureSession>();
65
67
  readonly #groups: FabricGroups;
66
68
  readonly #accessControl: FabricAccessControl;
69
+
70
+ readonly #leaving = AsyncObservable<[]>();
71
+ readonly #deleting = AsyncObservable<[]>();
72
+ readonly #deleted = AsyncObservable<[]>();
73
+
67
74
  #vidVerificationStatement?: Bytes;
68
75
  #vvsc?: Bytes;
69
76
  #label: string;
70
- #removeCallbacks = new Array<() => MaybePromise<void>>();
71
77
  #persistCallback: ((isUpdate?: boolean) => MaybePromise<void>) | undefined;
72
78
  #storage?: StorageContext;
79
+ #isDeleting?: boolean;
73
80
 
74
81
  constructor(crypto: Crypto, config: Fabric.Config) {
75
82
  this.#crypto = crypto;
@@ -203,6 +210,22 @@ export class Fabric {
203
210
  return this.#keyPair.publicKey;
204
211
  }
205
212
 
213
+ get isDeleting() {
214
+ return this.#isDeleting;
215
+ }
216
+
217
+ get leaving() {
218
+ return this.#leaving;
219
+ }
220
+
221
+ get deleting() {
222
+ return this.#deleting;
223
+ }
224
+
225
+ get deleted() {
226
+ return this.#deleted;
227
+ }
228
+
206
229
  sign(data: Bytes) {
207
230
  return this.crypto.signEcdsa(this.#keyPair, data);
208
231
  }
@@ -258,11 +281,11 @@ export class Fabric {
258
281
  return await Promise.all(destinationIds);
259
282
  }
260
283
 
261
- addSession(session: Session) {
284
+ addSession(session: SecureSession) {
262
285
  this.#sessions.add(session);
263
286
  }
264
287
 
265
- removeSession(session: Session) {
288
+ deleteSession(session: SecureSession) {
266
289
  this.#sessions.delete(session);
267
290
  }
268
291
 
@@ -274,17 +297,6 @@ export class Fabric {
274
297
  }
275
298
  }
276
299
 
277
- addRemoveCallback(callback: () => MaybePromise<void>) {
278
- this.#removeCallbacks.push(callback);
279
- }
280
-
281
- deleteRemoveCallback(callback: () => MaybePromise<void>) {
282
- const index = this.#removeCallbacks.indexOf(callback);
283
- if (index >= 0) {
284
- this.#removeCallbacks.splice(index, 1);
285
- }
286
- }
287
-
288
300
  set persistCallback(callback: (isUpdate?: boolean) => MaybePromise<void>) {
289
301
  // TODO Remove "isUpdate" parameter as soon as the fabric scoped data are removed from here/legacy API gets removed
290
302
  this.#persistCallback = callback;
@@ -296,17 +308,33 @@ export class Fabric {
296
308
  * Devices should use this to cleanly exit a fabric. It flushes subscriptions to ensure the "leave" event emits
297
309
  * and closes sessions.
298
310
  */
299
- leave(currentSessionId?: number) {
300
- return this.remove(currentSessionId, true);
301
- }
311
+ async leave(currentExchange?: MessageExchange) {
312
+ await this.#leaving.emit();
302
313
 
303
- async remove(currentSessionId?: number, graceful = false) {
304
- for (const callback of this.#removeCallbacks) {
305
- await callback();
314
+ for (const session of [...this.#sessions]) {
315
+ await session.initiateClose(async () => {
316
+ await session.closeSubscriptions(true);
317
+ });
306
318
  }
319
+
320
+ await this.delete(currentExchange);
321
+ }
322
+
323
+ /**
324
+ * Permanently remove the fabric.
325
+ *
326
+ * Does not emit the leave event.
327
+ */
328
+ async delete(currentExchange?: MessageExchange) {
329
+ this.#isDeleting = true;
330
+
331
+ await this.#deleting.emit();
332
+
307
333
  for (const session of [...this.#sessions]) {
308
- await session.destroy(graceful, session.id === currentSessionId, graceful); // Delay Close for current session only
334
+ await session.initiateForceClose(currentExchange);
309
335
  }
336
+
337
+ await this.#deleted.emit();
310
338
  }
311
339
 
312
340
  persist(isUpdate = true) {
@@ -6,6 +6,7 @@
6
6
 
7
7
  import { CertificateAuthority } from "#certificate/CertificateAuthority.js";
8
8
  import {
9
+ AsyncObservable,
9
10
  Bytes,
10
11
  Construction,
11
12
  CRYPTO_SYMMETRIC_KEY_LENGTH,
@@ -13,7 +14,6 @@ import {
13
14
  Environmental,
14
15
  ImplementationError,
15
16
  Logger,
16
- Observable,
17
17
  } from "#general";
18
18
  import { CaseAuthenticatedTag, FabricId, FabricIndex, NodeId, VendorId } from "#types";
19
19
  import { Fabric, FabricBuilder } from "./Fabric.js";
@@ -52,7 +52,7 @@ export class FabricAuthority {
52
52
  #construction: Construction<FabricAuthority>;
53
53
  #ca: CertificateAuthority;
54
54
  #fabrics: FabricManager;
55
- #fabricAdded = new Observable<[Fabric]>();
55
+ #fabricAdded = new AsyncObservable<[Fabric]>();
56
56
 
57
57
  constructor({ ca, fabrics }: FabricAuthorityContext) {
58
58
  this.#ca = ca;
@@ -143,7 +143,7 @@ export class FabricAuthority {
143
143
  let index = config.adminFabricIndex;
144
144
  if (index === undefined) {
145
145
  index = this.#fabrics.allocateFabricIndex();
146
- } else if (this.#fabrics.findByIndex(index) !== undefined) {
146
+ } else if (this.#fabrics.maybeForIndex(index) !== undefined) {
147
147
  throw new ImplementationError(`Cannot allocate controller fabric ${index} because index is in use`);
148
148
  }
149
149
 
@@ -153,7 +153,7 @@ export class FabricAuthority {
153
153
  fabric.persist();
154
154
 
155
155
  logger.debug(`Created new controller fabric ${index}`);
156
- this.#fabricAdded.emit(fabric);
156
+ await this.#fabricAdded.emit(fabric);
157
157
 
158
158
  return fabric;
159
159
  }