@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
@@ -13,6 +13,7 @@ import { Write } from "#action/request/Write.js";
13
13
  import { DecodedInvokeResult, InvokeResult } from "#action/response/InvokeResult.js";
14
14
  import { ReadResult } from "#action/response/ReadResult.js";
15
15
  import { WriteResult } from "#action/response/WriteResult.js";
16
+ import { Mark } from "#common/Mark.js";
16
17
  import {
17
18
  Abort,
18
19
  BasicSet,
@@ -22,12 +23,14 @@ import {
22
23
  Environment,
23
24
  ImplementationError,
24
25
  isObject,
26
+ Lifetime,
25
27
  Logger,
26
28
  Minutes,
27
29
  RetrySchedule,
28
30
  Seconds,
29
31
  } from "#general";
30
32
  import { InteractionClientMessenger, MessageType } from "#interaction/InteractionMessenger.js";
33
+ import { Subscription } from "#interaction/Subscription.js";
31
34
  import { ExchangeProvider } from "#protocol/ExchangeProvider.js";
32
35
  import { SecureSession } from "#session/SecureSession.js";
33
36
  import { Status, TlvAttributeReport, TlvNoResponse, TlvSubscribeResponse, TypeFromSchema } from "#types";
@@ -65,6 +68,7 @@ const DEFAULT_MINIMUM_RESPONSE_TIMEOUT_WITH_FAILSAFE = Seconds(30);
65
68
  export class ClientInteraction<
66
69
  SessionT extends InteractionSession = InteractionSession,
67
70
  > implements Interactable<SessionT> {
71
+ readonly #lifetime: Lifetime;
68
72
  readonly #exchanges: ExchangeProvider;
69
73
  readonly #subscriptions: ClientSubscriptions;
70
74
  readonly #interactions = new BasicSet<Read | Write | Invoke | Subscribe>();
@@ -79,6 +83,17 @@ export class ClientInteraction<
79
83
  environment.get(Entropy),
80
84
  RetrySchedule.Configuration(SustainedSubscription.DefaultRetrySchedule, sustainRetries),
81
85
  );
86
+
87
+ this.#lifetime = environment.join("interactions");
88
+ Object.defineProperties(this.#lifetime.details, {
89
+ "# active": {
90
+ get: () => {
91
+ return this.#interactions.size;
92
+ },
93
+
94
+ enumerable: true,
95
+ },
96
+ });
82
97
  }
83
98
 
84
99
  get session() {
@@ -86,6 +101,8 @@ export class ClientInteraction<
86
101
  }
87
102
 
88
103
  async close() {
104
+ using _closing = this.#lifetime.closing();
105
+
89
106
  this.#abort();
90
107
 
91
108
  while (this.#interactions.size) {
@@ -108,10 +125,10 @@ export class ClientInteraction<
108
125
  );
109
126
  }
110
127
 
111
- await using context = await this.#begin(request, session);
128
+ await using context = await this.#begin("reading", request, session);
112
129
  const { checkAbort, messenger } = context;
113
130
 
114
- logger.debug("Read »", messenger.exchange.via, request);
131
+ logger.debug("Read", Mark.OUTBOUND, messenger.exchange.via, request);
115
132
  await messenger.sendReadRequest(request);
116
133
  checkAbort();
117
134
 
@@ -128,7 +145,8 @@ export class ClientInteraction<
128
145
  }
129
146
 
130
147
  logger.debug(
131
- "Read «",
148
+ "Read",
149
+ Mark.INBOUND,
132
150
  messenger.exchange.via,
133
151
  Diagnostic.weak(
134
152
  attributeReportCount + eventReportCount === 0
@@ -145,7 +163,7 @@ export class ClientInteraction<
145
163
  * You must check each {@link WriteResult.AttributeStatus} to determine whether individual updates failed.
146
164
  */
147
165
  async write<T extends Write>(request: T, session?: SessionT): WriteResult<T> {
148
- await using context = await this.#begin(request, session);
166
+ await using context = await this.#begin("writing", request, session);
149
167
  const { checkAbort, messenger } = context;
150
168
 
151
169
  if (request.timedRequest) {
@@ -153,7 +171,7 @@ export class ClientInteraction<
153
171
  checkAbort();
154
172
  }
155
173
 
156
- logger.info("Write »", messenger.exchange.via, request);
174
+ logger.info("Write", Mark.OUTBOUND, messenger.exchange.via, request);
157
175
 
158
176
  const response = await messenger.sendWriteCommand(request);
159
177
  checkAbort();
@@ -192,7 +210,8 @@ export class ClientInteraction<
192
210
  ) as Awaited<WriteResult<T>>;
193
211
 
194
212
  logger.info(
195
- "Write «",
213
+ "Write",
214
+ Mark.INBOUND,
196
215
  messenger.exchange.via,
197
216
  Diagnostic.weak(
198
217
  successCount + failureCount === 0
@@ -208,7 +227,7 @@ export class ClientInteraction<
208
227
  * Invoke one or more commands.
209
228
  */
210
229
  async *invoke(request: ClientInvoke, session?: SessionT): DecodedInvokeResult {
211
- await using context = await this.#begin(request, session);
230
+ await using context = await this.#begin("invoking", request, session);
212
231
  const { checkAbort, messenger } = context;
213
232
 
214
233
  if (request.timedRequest) {
@@ -217,7 +236,8 @@ export class ClientInteraction<
217
236
  }
218
237
 
219
238
  logger.info(
220
- "Invoke »",
239
+ "Invoke",
240
+ Mark.OUTBOUND,
221
241
  messenger.exchange.via,
222
242
  Diagnostic.asFlags({ suppressResponse: request.suppressResponse, timed: request.timedRequest }),
223
243
  request,
@@ -259,7 +279,8 @@ export class ClientInteraction<
259
279
  commandFields === undefined ? undefined : responseSchema.decodeTlv(commandFields);
260
280
 
261
281
  logger.info(
262
- "Invoke «",
282
+ "Invoke",
283
+ Mark.INBOUND,
263
284
  messenger.exchange.via,
264
285
  Diagnostic.strong(resolvePathForSpecifier(cmd)),
265
286
  isObject(data) ? Diagnostic.dict(data) : Diagnostic.weak("(no payload)"),
@@ -320,7 +341,7 @@ export class ClientInteraction<
320
341
  if (!request.keepSubscriptions) {
321
342
  for (const subscription of this.#subscriptions) {
322
343
  logger.debug(
323
- `Removing subscription with ID ${subscription.subscriptionId} because new subscription replaces it`,
344
+ `Removing subscription with ID ${Subscription.idStrOf(subscription)} because new subscription replaces it`,
324
345
  );
325
346
  subscription.close();
326
347
  }
@@ -343,7 +364,7 @@ export class ClientInteraction<
343
364
  const peer = this.#exchanges.session.peerAddress;
344
365
 
345
366
  const subscribe = async (request: ClientSubscribe) => {
346
- await using context = await this.#begin(request, session);
367
+ await using context = await this.#begin("subscribing", request, session);
347
368
  const { checkAbort, messenger } = context;
348
369
 
349
370
  logger.info(
@@ -371,7 +392,8 @@ export class ClientInteraction<
371
392
  const response = TlvSubscribeResponse.decode(responseMessage.payload);
372
393
 
373
394
  logger.info(
374
- "Subscription successful «",
395
+ "Subscription successful",
396
+ Mark.INBOUND,
375
397
  messenger.exchange.via,
376
398
  Diagnostic.dict({
377
399
  id: response.subscriptionId,
@@ -380,6 +402,7 @@ export class ClientInteraction<
380
402
  );
381
403
 
382
404
  const subscription = new PeerSubscription({
405
+ lifetime: this.#subscriptions,
383
406
  request,
384
407
  peer,
385
408
  closed: () => this.#subscriptions.delete(subscription),
@@ -394,6 +417,7 @@ export class ClientInteraction<
394
417
  let subscription: ClientSubscription;
395
418
  if (request.sustain) {
396
419
  subscription = new SustainedSubscription({
420
+ lifetime: this.#subscriptions,
397
421
  subscribe,
398
422
  peer,
399
423
  closed: () => this.#subscriptions.delete(subscription),
@@ -423,7 +447,9 @@ export class ClientInteraction<
423
447
  }
424
448
  }
425
449
 
426
- async #begin(request: Read | Write | Invoke | Subscribe, session: SessionT | undefined) {
450
+ async #begin(what: string, request: Read | Write | Invoke | Subscribe, session: SessionT | undefined) {
451
+ using lifetime = this.#lifetime.join(what);
452
+
427
453
  if (this.#abort.aborted) {
428
454
  throw new ImplementationError("Client interaction unavailable after close");
429
455
  }
@@ -433,10 +459,18 @@ export class ClientInteraction<
433
459
 
434
460
  const messenger = await InteractionClientMessenger.create(this.#exchanges);
435
461
 
462
+ // Provide via dynamically so is up-to-date if exchange changes due to retry
463
+ Object.defineProperty(lifetime.details, "via", {
464
+ get() {
465
+ return messenger.exchange.via;
466
+ },
467
+ });
468
+
436
469
  const context: RequestContext = {
437
470
  checkAbort,
438
471
  messenger,
439
472
  [Symbol.asyncDispose]: async () => {
473
+ using _closing = lifetime.closing();
440
474
  await messenger.close();
441
475
  this.#interactions.delete(request);
442
476
  },
@@ -6,9 +6,10 @@
6
6
 
7
7
  import type { Subscribe } from "#action/request/Subscribe.js";
8
8
  import type { ActiveSubscription } from "#action/response/SubscribeResult.js";
9
- import { Abort, Diagnostic, Logger } from "#general";
10
- import { PeerAddress } from "#peer/PeerAddress.js";
11
- import { ClientSubscribe } from "./ClientSubscribe.js";
9
+ import { Abort, decamelize, Diagnostic, Lifetime, Logger } from "#general";
10
+ import type { SubscriptionId } from "#interaction/Subscription.js";
11
+ import type { PeerAddress } from "#peer/PeerAddress.js";
12
+ import type { ClientSubscribe } from "./ClientSubscribe.js";
12
13
 
13
14
  const logger = Logger.get("ClientSubscription");
14
15
 
@@ -18,7 +19,6 @@ const logger = Logger.get("ClientSubscription");
18
19
  export abstract class ClientSubscription implements ActiveSubscription {
19
20
  readonly request: Subscribe;
20
21
  readonly peer: PeerAddress;
21
- abstract subscriptionId: number;
22
22
  abstract maxInterval: number;
23
23
  abstract interactionModelRevision: number;
24
24
 
@@ -27,11 +27,14 @@ export abstract class ClientSubscription implements ActiveSubscription {
27
27
  */
28
28
  done?: Promise<void>;
29
29
 
30
+ readonly #lifetime: Lifetime;
30
31
  readonly #closed: () => void;
31
32
  readonly #abort: Abort;
32
33
  #isClosed = false;
34
+ #id: SubscriptionId = -1;
33
35
 
34
- constructor({ request, peer, closed, abort }: ClientSubscription.Configuration) {
36
+ constructor({ request, peer, closed, abort, lifetime }: ClientSubscription.Configuration) {
37
+ this.#lifetime = lifetime.join(this.kind);
35
38
  this.request = request;
36
39
  this.peer = peer;
37
40
  this.#closed = closed;
@@ -41,10 +44,26 @@ export abstract class ClientSubscription implements ActiveSubscription {
41
44
  });
42
45
  }
43
46
 
47
+ get kind() {
48
+ return decamelize(this.constructor.name.replace(/Subscription$/, ""), " ");
49
+ }
50
+
51
+ get subscriptionId() {
52
+ return this.#id;
53
+ }
54
+
55
+ set subscriptionId(id: SubscriptionId) {
56
+ this.#id = id;
57
+ this.#lifetime.name = [this.kind, Diagnostic.strong(id)];
58
+ }
59
+
44
60
  close() {
45
61
  if (this.#isClosed) {
46
62
  return;
47
63
  }
64
+
65
+ const closing = this.#lifetime.closing();
66
+
48
67
  this.#isClosed = true;
49
68
 
50
69
  this.#abort();
@@ -58,6 +77,7 @@ export abstract class ClientSubscription implements ActiveSubscription {
58
77
  this.done
59
78
  .finally(() => {
60
79
  this.request.closed?.();
80
+ closing[Symbol.dispose]();
61
81
  })
62
82
  .catch(unhandledError);
63
83
  } else {
@@ -65,6 +85,8 @@ export abstract class ClientSubscription implements ActiveSubscription {
65
85
  this.request.closed?.();
66
86
  } catch (e) {
67
87
  unhandledError(e);
88
+ } finally {
89
+ closing[Symbol.dispose]();
68
90
  }
69
91
  }
70
92
  }
@@ -79,10 +101,13 @@ export abstract class ClientSubscription implements ActiveSubscription {
79
101
  }
80
102
 
81
103
  export namespace ClientSubscription {
104
+ export const NO_SUBSCRIPTION = -1;
105
+
82
106
  export interface Configuration {
83
107
  request: ClientSubscribe;
84
108
  peer: PeerAddress;
85
109
  closed: () => void;
110
+ lifetime: Lifetime.Owner;
86
111
  abort?: AbortSignal;
87
112
  }
88
113
  }
@@ -8,7 +8,7 @@ import { ReadResult } from "#action/response/ReadResult.js";
8
8
  import { Diagnostic, InternalError, Logger } from "#general";
9
9
  import { DecodedDataReport } from "#interaction/DecodedDataReport.js";
10
10
  import { IncomingInteractionClientMessenger } from "#interaction/InteractionMessenger.js";
11
- import { SubscriptionId } from "#interaction/Subscription.js";
11
+ import { Subscription, SubscriptionId } from "#interaction/Subscription.js";
12
12
  import { MessageExchange } from "#protocol/MessageExchange.js";
13
13
  import { ProtocolHandler } from "#protocol/ProtocolHandler.js";
14
14
  import { SecureSession } from "#session/SecureSession.js";
@@ -94,9 +94,7 @@ export class ClientSubscriptionHandler implements ProtocolHandler {
94
94
  async function sendInvalid(messenger: IncomingInteractionClientMessenger, subscriptionId?: SubscriptionId) {
95
95
  await messenger.sendStatus(Status.InvalidSubscription, {
96
96
  multipleMessageInteraction: true,
97
- logContext: {
98
- subId: subscriptionId,
99
- },
97
+ logContext: Subscription.diagnosticOf(subscriptionId),
100
98
  });
101
99
  await messenger.close();
102
100
  }
@@ -6,7 +6,7 @@
6
6
 
7
7
  import { ReadResult } from "#action/response/ReadResult.js";
8
8
  import type { ActiveSubscription } from "#action/response/SubscribeResult.js";
9
- import { BasicSet, Environment, Environmental, Millis, Time, Timer, Timestamp } from "#general";
9
+ import { BasicSet, Environment, Environmental, Lifetime, Millis, Time, Timer, Timestamp } from "#general";
10
10
  import { SubscriptionId } from "#interaction/Subscription.js";
11
11
  import { PeerAddress } from "#peer/PeerAddress.js";
12
12
  import { ClientSubscription } from "./ClientSubscription.js";
@@ -15,17 +15,26 @@ import type { PeerSubscription } from "./PeerSubscription.js";
15
15
  /**
16
16
  * A managed set of {@link ActiveSubscription} instances.
17
17
  */
18
- export class ClientSubscriptions {
18
+ export class ClientSubscriptions implements Lifetime.Owner {
19
+ #lifetime: Lifetime;
19
20
  #active = new BasicSet<ClientSubscription>();
20
21
  #peers = new Map<PeerAddress, Map<number, PeerSubscription>>();
21
22
  #timeout?: Timer;
22
23
 
24
+ constructor(lifetime: Lifetime.Owner) {
25
+ this.#lifetime = lifetime.join("client subscriptions");
26
+ }
27
+
23
28
  static [Environmental.create](env: Environment) {
24
- const instance = new ClientSubscriptions();
29
+ const instance = new ClientSubscriptions(env);
25
30
  env.set(ClientSubscriptions, instance);
26
31
  return instance;
27
32
  }
28
33
 
34
+ join(...name: unknown[]) {
35
+ return this.#lifetime.join(...name);
36
+ }
37
+
29
38
  /**
30
39
  * Register a user-facing {@link ClientSubscription}.
31
40
  */
@@ -77,6 +86,8 @@ export class ClientSubscriptions {
77
86
  * Terminate all subscriptions.
78
87
  */
79
88
  async close() {
89
+ using _closing = this.#lifetime.closing();
90
+
80
91
  if (this.#timeout) {
81
92
  this.#timeout.stop();
82
93
  this.#timeout = undefined;
@@ -14,15 +14,15 @@ import { ClientSubscription } from "./ClientSubscription.js";
14
14
  export class PeerSubscription extends ClientSubscription {
15
15
  readonly interactionModelRevision: number;
16
16
  readonly maxInterval: number;
17
- readonly subscriptionId: number;
18
17
  isReading = false;
19
18
 
20
19
  timeoutAt?: Timestamp;
21
20
 
22
21
  constructor(config: PeerSubscription.Configuration) {
22
+ const { subscriptionId, interactionModelRevision, maxInterval } = config.response;
23
+
23
24
  super(config);
24
25
 
25
- const { subscriptionId, interactionModelRevision, maxInterval } = config.response;
26
26
  this.subscriptionId = subscriptionId;
27
27
  this.interactionModelRevision = interactionModelRevision;
28
28
  this.maxInterval = maxInterval;
@@ -81,6 +81,7 @@ export class SustainedSubscription extends ClientSubscription {
81
81
  const closed = new Promise<void>(resolve => {
82
82
  request.closed = () => {
83
83
  this.#subscription = undefined;
84
+ this.subscriptionId = ClientSubscription.NO_SUBSCRIPTION;
84
85
  resolve();
85
86
  };
86
87
  });
@@ -89,6 +90,7 @@ export class SustainedSubscription extends ClientSubscription {
89
90
  for (const retry of this.#retries) {
90
91
  try {
91
92
  this.#subscription = await this.#subscribe(request);
93
+ this.subscriptionId = this.#subscription.subscriptionId;
92
94
  break;
93
95
  } catch (e) {
94
96
  if (this.abort.aborted) {
@@ -146,10 +148,6 @@ export class SustainedSubscription extends ClientSubscription {
146
148
  get maxInterval() {
147
149
  return this.#subscription?.maxInterval ?? Hours.one;
148
150
  }
149
-
150
- get subscriptionId() {
151
- return this.#subscription?.subscriptionId ?? SustainedSubscription.NO_SUBSCRIPTION;
152
- }
153
151
  }
154
152
 
155
153
  export namespace SustainedSubscription {
@@ -177,8 +175,6 @@ export namespace SustainedSubscription {
177
175
  }
178
176
  }
179
177
 
180
- export const NO_SUBSCRIPTION = -1;
181
-
182
178
  export const DefaultRetrySchedule: RetrySchedule.Configuration = {
183
179
  // Protocol-level level happens at the exchange level and is faster; this is an application-level retry. Retry
184
180
  // more slowly so we do not hammer devices that are experiencing transient errors
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  import { Diagnostic, Duration, isObject } from "#general";
8
- import { FALLBACK_INTERACTIONMODEL_REVISION } from "#session/Session.js";
8
+ import { SessionParameters } from "#session/SessionParameters.js";
9
9
  import { ClusterType, CommandData, FabricIndex, InvokeRequest, ObjectSchema, TlvSchema, TypeFromSchema } from "#types";
10
10
  import { MalformedRequestError } from "./MalformedRequestError.js";
11
11
  import { resolvePathForSpecifier, Specifier } from "./Specifier.js";
@@ -58,7 +58,7 @@ export function Invoke(
58
58
  }
59
59
 
60
60
  const {
61
- interactionModelRevision = FALLBACK_INTERACTIONMODEL_REVISION,
61
+ interactionModelRevision = SessionParameters.fallbacks.interactionModelRevision,
62
62
  suppressResponse = false,
63
63
  timeout,
64
64
  expectedProcessingTime,
@@ -64,6 +64,8 @@ export class AttributeReadResponse<
64
64
  }
65
65
 
66
66
  *process({ dataVersionFilters, attributeRequests }: Read.Attributes): Generator<ReadResult.Chunk, void, void> {
67
+ using _reading = this.join("reading attributes");
68
+
67
69
  const nodeId = hasLocalActor(this.session) ? NodeId.UNSPECIFIED_NODE_ID : this.nodeId;
68
70
 
69
71
  // Index versions
@@ -53,6 +53,8 @@ export class AttributeWriteResponse<
53
53
  }
54
54
 
55
55
  async process<T extends Write>({ writeRequests, suppressResponse }: T): WriteResult<T> {
56
+ using _writing = this.join("writing");
57
+
56
58
  const writeResponses = new Array<WriteResult.AttributeStatus>();
57
59
  for (const { path, data, dataVersion } of writeRequests) {
58
60
  if (path.endpointId === undefined || path.clusterId === undefined || path.attributeId === undefined) {
@@ -63,6 +63,7 @@ export class CommandInvokeResponse<
63
63
  }
64
64
 
65
65
  async *process<T extends Invoke>({ invokeRequests, suppressResponse }: T): InvokeResult {
66
+ using _invoking = this.join("invoking");
66
67
  const multipleInvokes = invokeRequests.length > 1;
67
68
 
68
69
  // Register paths
@@ -53,6 +53,10 @@ export abstract class DataResponse<SessionT extends InteractionSession = Interac
53
53
  return this.#cachedNodeId;
54
54
  }
55
55
 
56
+ protected join(...name: unknown[]) {
57
+ return this.#session.transaction?.join(...name);
58
+ }
59
+
56
60
  abstract counts: {
57
61
  /**
58
62
  * Number of existent entries that were processed. Not all must have had data to send.
@@ -65,17 +65,17 @@ export class ServerInteraction<
65
65
  throw new NotImplementedError();
66
66
  }
67
67
 
68
- write<T extends Write>(request: T, session: SessionT): WriteResult<T> {
68
+ async write<T extends Write>(request: T, session: SessionT): WriteResult<T> {
69
69
  // TODO - validate request
70
70
 
71
71
  const writer = new AttributeWriteResponse(this.#node, session);
72
- return writer.process(request);
72
+ return await writer.process(request);
73
73
  }
74
74
 
75
- invoke(request: Invoke, session: SessionT): InvokeResult {
75
+ async *invoke(request: Invoke, session: SessionT): InvokeResult {
76
76
  // TODO - validate request
77
77
 
78
78
  const invoker = new CommandInvokeResponse(this.#node, session);
79
- return invoker.process(request);
79
+ yield* invoker.process(request);
80
80
  }
81
81
  }
@@ -257,13 +257,12 @@ export abstract class Advertisement<T extends ServiceDescription = ServiceDescri
257
257
  });
258
258
  }
259
259
 
260
- async #run(context: ActivityContext, event: Advertiser.BroadcastEvent, previous?: ActivityContext) {
261
- // If automatic advertisement starts when it is already active, kill the previous version
262
- if (previous) {
263
- await previous;
264
- }
265
-
266
- logger.debug("Begin auto broadcast", this.dict());
260
+ async #run(context: ActivityContext, event: Advertiser.BroadcastEvent) {
261
+ // Diagnostics
262
+ const dict = this.dict();
263
+ using advertising = this.advertiser.join("advertising");
264
+ Object.assign(advertising.details, dict);
265
+ logger.debug("Begin auto broadcast", dict);
267
266
 
268
267
  // Perform advertisement
269
268
  try {
@@ -5,16 +5,22 @@
5
5
  */
6
6
 
7
7
  import type { Fabric } from "#fabric/Fabric.js";
8
+ import { Lifetime } from "@matter/general";
8
9
  import { Advertisement } from "./Advertisement.js";
9
10
  import type { ServiceDescription } from "./ServiceDescription.js";
10
11
 
11
12
  /**
12
13
  * A component that advertises a Matter service.
13
14
  */
14
- export abstract class Advertiser {
15
+ export abstract class Advertiser implements Lifetime.Owner {
16
+ #lifetime: Lifetime;
15
17
  #advertisements = new Set<Advertisement>();
16
18
  #isClosed = false;
17
19
 
20
+ constructor(lifetime = Lifetime.process) {
21
+ this.#lifetime = lifetime.join("advertiser");
22
+ }
23
+
18
24
  /**
19
25
  * Begin advertising on configured schedule.
20
26
  *
@@ -45,6 +51,7 @@ export abstract class Advertiser {
45
51
  * Destroy the instance.
46
52
  */
47
53
  async close() {
54
+ using _closing = this.#lifetime.closing();
48
55
  this.#isClosed = true;
49
56
  await Advertisement.closeAll(this.#advertisements);
50
57
  }
@@ -73,6 +80,10 @@ export abstract class Advertiser {
73
80
  filter(predicate: (ad: Advertisement) => boolean) {
74
81
  return [...this.#advertisements].filter(predicate);
75
82
  }
83
+
84
+ join(...name: unknown[]): Lifetime {
85
+ return this.#lifetime.join(...name);
86
+ }
76
87
  }
77
88
 
78
89
  export namespace Advertiser {
@@ -5,7 +5,7 @@
5
5
  */
6
6
 
7
7
  import { BlePeripheralInterface } from "#ble/Ble.js";
8
- import { Bytes, Duration, ImplementationError, Millis } from "#general";
8
+ import { Bytes, Duration, ImplementationError, Lifetime, Millis } from "#general";
9
9
  import { DatatypeModel, FieldElement } from "#model";
10
10
  import { MAXIMUM_COMMISSIONING_TIMEOUT } from "#types";
11
11
  import { Advertisement } from "../Advertisement.js";
@@ -20,7 +20,7 @@ export class BleAdvertiser extends Advertiser {
20
20
  #isClosed = false;
21
21
 
22
22
  constructor(peripheral: BlePeripheralInterface, options?: BleAdvertiser.Options) {
23
- super();
23
+ super(options?.lifetime);
24
24
 
25
25
  this.#peripheral = peripheral;
26
26
  this.#config = BleAdvertiser.Configuration(options);
@@ -58,6 +58,11 @@ export namespace BleAdvertiser {
58
58
  * All intervals are in milliseconds.
59
59
  */
60
60
  export interface Configuration {
61
+ /**
62
+ * Lifetime of advertiser owner.
63
+ */
64
+ readonly lifetime?: Lifetime.Owner;
65
+
61
66
  /**
62
67
  * Additional advertisement data.
63
68
  */
@@ -13,6 +13,7 @@ import {
13
13
  ImplementationError,
14
14
  Instant,
15
15
  InternalError,
16
+ Lifetime,
16
17
  RetrySchedule,
17
18
  Seconds,
18
19
  STANDARD_MATTER_PORT,
@@ -39,7 +40,7 @@ export class MdnsAdvertiser extends Advertiser {
39
40
  readonly server: MdnsServer,
40
41
  options?: MdnsAdvertiser.Options,
41
42
  ) {
42
- super();
43
+ super(options?.lifetime);
43
44
 
44
45
  this.port = options?.port ?? STANDARD_MATTER_PORT;
45
46
  this.omitPrivateDetails = options?.omitPrivateDetails ?? false;
@@ -153,6 +154,11 @@ export namespace MdnsAdvertiser {
153
154
  * MDNS advertisement configuration options.
154
155
  */
155
156
  export interface Options {
157
+ /**
158
+ * Lifetime of advertiser owner.
159
+ */
160
+ readonly lifetime?: Lifetime.Owner;
161
+
156
162
  /**
157
163
  * The port of the Matter service to advertise.
158
164
  *
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import { Bytes, DerObject, X520 } from "#general";
7
+ import { Bytes, DerObject, hex, X520 } from "#general";
8
8
  import { FabricId, MATTER_EPOCH_OFFSET_S, NodeId, VendorId } from "#types";
9
9
  import { InternalError } from "@matter/general";
10
10
 
@@ -64,7 +64,7 @@ const GenericMatterObject = <T>(
64
64
  fieldName: string,
65
65
  valueConverter?: (value: T) => string,
66
66
  ) => {
67
- const oidHex = `${oidBase}${id.toString(16).padStart(2, "0")}`;
67
+ const oidHex = `${oidBase}${hex.byte(id)}`;
68
68
  // Register in reverse lookup map immediately at function creation time
69
69
  if (MATTER_OID_TO_FIELD_MAP[oidHex] !== undefined && MATTER_OID_TO_FIELD_MAP[oidHex] !== fieldName) {
70
70
  throw new InternalError(
@@ -3,6 +3,7 @@
3
3
  * Copyright 2022-2025 Matter.js Authors
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
+
6
7
  import { VendorId } from "#types";
7
8
  import { X509Certificate } from "./base.js";
8
9
 
@@ -6,9 +6,9 @@
6
6
 
7
7
  import { ImplementationError } from "#general";
8
8
  import { FabricIndex as FabricIndexElement } from "#model";
9
+ import { NoAssociatedFabricError } from "#protocol/errors.js";
9
10
  import { Attribute, AttributeError, AttributeId, ClusterId, EndpointNumber, FabricIndex, TlvSchema } from "#types";
10
11
  import { InteractionClient } from "../../interaction/InteractionClient.js";
11
- import { NoAssociatedFabricError } from "../../session/NodeSession.js";
12
12
 
13
13
  /**
14
14
  * Factory function to create an AttributeClient for a given attribute.