@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,111 +4,39 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import { AsyncObservable, Duration, InternalError, Logger } from "#general";
8
- import { NodeSession } from "#session/NodeSession.js";
9
- import { TlvAttributePath, TlvDataVersionFilter, TlvEventFilter, TlvEventPath, TypeFromSchema } from "#types";
10
-
11
- const logger = Logger.get("Subscription");
7
+ import { hex } from "#general";
8
+ import { Session } from "#session/Session.js";
12
9
 
13
10
  export type SubscriptionId = number;
14
11
 
15
- export interface SubscriptionCriteria {
16
- attributeRequests?: TypeFromSchema<typeof TlvAttributePath>[];
17
- dataVersionFilters?: TypeFromSchema<typeof TlvDataVersionFilter>[];
18
- eventRequests?: TypeFromSchema<typeof TlvEventPath>[];
19
- eventFilters?: TypeFromSchema<typeof TlvEventFilter>[];
20
- isFabricFiltered: boolean;
21
- }
22
-
23
12
  /**
24
13
  * A single active subscription.
25
14
  */
26
- export abstract class Subscription {
27
- #session: NodeSession;
28
- #id: SubscriptionId;
29
- #isClosed?: boolean;
30
- #isCanceledByPeer?: boolean;
31
- #criteria: SubscriptionCriteria;
32
- #cancelled = AsyncObservable<[subscription: Subscription]>();
33
- #maxInterval?: Duration;
34
-
35
- constructor(session: NodeSession, id: SubscriptionId, criteria: SubscriptionCriteria) {
36
- this.#session = session;
37
- this.#id = id;
38
- this.#criteria = criteria;
39
- }
40
-
41
- get id() {
42
- return this.#id;
43
- }
44
-
45
- get criteria() {
46
- return this.#criteria;
47
- }
48
-
49
- get isClosed() {
50
- return !!this.#isClosed;
51
- }
52
-
53
- get isCanceledByPeer() {
54
- return !!this.#isCanceledByPeer;
55
- }
15
+ export interface Subscription {
16
+ subscriptionId: SubscriptionId;
56
17
 
57
- get session() {
58
- return this.#session;
59
- }
60
-
61
- get cancelled() {
62
- return this.#cancelled;
63
- }
18
+ // TODO - these should reside in a server-specific interface
19
+ isCanceledByPeer: boolean;
20
+ handlePeerCancel(): Promise<void>;
21
+ close(flushViaSession?: Session): Promise<void>;
22
+ }
64
23
 
65
- get maxInterval() {
66
- if (this.#maxInterval === undefined) {
67
- throw new InternalError("Subscription maxInterval accessed before it was set");
24
+ export namespace Subscription {
25
+ export function idStrOf(subscription: undefined | number | { subscriptionId?: number }) {
26
+ if (typeof subscription === "object") {
27
+ subscription = subscription.subscriptionId;
68
28
  }
69
- return this.#maxInterval;
70
- }
71
29
 
72
- set maxInterval(value: Duration) {
73
- if (this.#maxInterval !== undefined) {
74
- throw new InternalError("Subscription maxInterval set twice");
30
+ if (subscription === undefined) {
31
+ return undefined;
75
32
  }
76
- this.#maxInterval = value;
77
- }
78
-
79
- /**
80
- * Update session state. This probably is meaningless except in a server context.
81
- */
82
- async update() {}
83
-
84
- /**
85
- * This flag is set on closed sessions when the close was initiated by the peer.
86
- */
87
- protected set isCanceledByPeer(value: boolean) {
88
- this.#isCanceledByPeer = value;
89
- }
90
-
91
- protected set isClosed(value: boolean) {
92
- this.#isClosed = value;
93
- }
94
-
95
- /** Close the subscription with the option to gracefully flush outstanding data. */
96
- abstract close(graceful: boolean, cancelledByPeer?: boolean): Promise<void>;
97
-
98
- /**
99
- * Destroy the subscription. Unsubscribe from all attributes and events and stop all timers.
100
- */
101
- protected async destroy(): Promise<void> {
102
- this.#isClosed = true;
103
- this.#session.subscriptions.delete(this);
104
- logger.debug(`Removed subscription ${this.id} from ${this.#session.name}`);
105
33
 
106
- this.#cancelled.emit(this);
34
+ return hex.fixed(subscription, 8);
107
35
  }
108
36
 
109
- protected activate() {
110
- // TODO Do not add to session but to node/peer
111
- this.#session.subscriptions.add(this);
112
- logger.debug(`Added subscription ${this.#id} to ${this.#session.name}`);
37
+ export function diagnosticOf(subscription: undefined | number | { subscriptionId?: number }) {
38
+ return {
39
+ "sub#": idStrOf(subscription),
40
+ };
113
41
  }
114
42
  }
@@ -19,7 +19,7 @@ export interface RegisteredSubscription {
19
19
  maximumPeerResponseTime: Duration;
20
20
  maxInterval: Duration;
21
21
  onData: (dataReport: DecodedDataReport) => MaybePromise<void>;
22
- onTimeout?: () => void;
22
+ onTimeout?: Timer.Callback;
23
23
  }
24
24
 
25
25
  /**
@@ -51,10 +51,10 @@ export class SubscriptionClient implements ProtocolHandler {
51
51
 
52
52
  const maxInterval = Millis(subscription.maxInterval + subscription.maximumPeerResponseTime);
53
53
 
54
- timer = Time.getTimer("Subscription timeout", maxInterval, () => {
54
+ timer = Time.getTimer("subscription timeout", maxInterval, lifetime => {
55
55
  logger.info(`Subscription ${id} timed out after ${Duration.format(maxInterval)}`);
56
56
  this.delete(id);
57
- onTimeout();
57
+ onTimeout(lifetime);
58
58
  }).start();
59
59
 
60
60
  this.#timeouts.set(id, timer);
@@ -20,6 +20,7 @@ import {
20
20
  Instant,
21
21
  InternalError,
22
22
  Lifespan,
23
+ Lifetime,
23
24
  Logger,
24
25
  Millis,
25
26
  Minutes,
@@ -34,6 +35,7 @@ import {
34
35
  createPromise,
35
36
  isIPv6,
36
37
  } from "#general";
38
+ import { PeerAddress } from "#peer/PeerAddress.js";
37
39
  import { NodeId, VendorId } from "#types";
38
40
  import {
39
41
  CommissionableDevice,
@@ -122,6 +124,8 @@ export interface MdnsScannerTargetCriteria {
122
124
  * queries to discover various types of Matter device types and listens for announcements.
123
125
  */
124
126
  export class MdnsClient implements Scanner {
127
+ readonly #lifetime: Lifetime;
128
+
125
129
  readonly type = ChannelType.UDP;
126
130
 
127
131
  /** Active announces by queryId with queries and known answers */
@@ -164,7 +168,9 @@ export class MdnsClient implements Scanner {
164
168
  /** True, if any node is interested in MDNS traffic, else we ignore all traffic */
165
169
  #listening = false;
166
170
 
167
- constructor(socket: MdnsSocket) {
171
+ constructor(socket: MdnsSocket, lifetime = Lifetime.process) {
172
+ this.#lifetime = lifetime.join("mdns client");
173
+
168
174
  this.#socket = socket;
169
175
  this.#observers.on(this.#socket.receipt, this.#handleMessage.bind(this));
170
176
  this.#periodicTimer = Time.getPeriodicTimer("Discovered node expiration", Minutes.one, () =>
@@ -498,7 +504,7 @@ export class MdnsClient implements Scanner {
498
504
  * IP/ports or an empty array if not found.
499
505
  */
500
506
  async findOperationalDevice(
501
- { operationalId }: Fabric,
507
+ fabric: Fabric,
502
508
  nodeId: NodeId,
503
509
  timeout?: Duration,
504
510
  ignoreExistingRecords = false,
@@ -506,10 +512,14 @@ export class MdnsClient implements Scanner {
506
512
  if (this.#closing) {
507
513
  throw new ImplementationError("Cannot discover operational device because scanner is closing.");
508
514
  }
509
- const deviceMatterQname = this.#createOperationalMatterQName(operationalId, nodeId);
515
+ const deviceMatterQname = this.#createOperationalMatterQName(fabric.operationalId, nodeId);
510
516
 
511
517
  let storedDevice = ignoreExistingRecords ? undefined : this.#getOperationalDeviceRecords(deviceMatterQname);
512
518
  if (storedDevice === undefined) {
519
+ using _finding = this.#lifetime.join(
520
+ "finding peer",
521
+ PeerAddress({ fabricIndex: fabric.fabricIndex, nodeId }),
522
+ );
513
523
  const promise = this.#registerWaiterPromise(deviceMatterQname, false, timeout, () =>
514
524
  this.#getOperationalDeviceRecords(deviceMatterQname),
515
525
  );
@@ -737,6 +747,9 @@ export class MdnsClient implements Scanner {
737
747
  ? []
738
748
  : this.#getCommissionableDeviceRecords(identifier).filter(({ addresses }) => addresses.length > 0);
739
749
  if (storedRecords.length === 0) {
750
+ using finding = this.#lifetime.join("finding commissionable");
751
+ Object.assign(finding.details, identifier);
752
+
740
753
  const queryId = this.#buildCommissionableQueryIdentifier(identifier);
741
754
  const promise = this.#registerWaiterPromise(queryId, true, timeout, () =>
742
755
  this.#getCommissionableDeviceRecords(identifier),
@@ -791,6 +804,9 @@ export class MdnsClient implements Scanner {
791
804
  const criteria: MdnsScannerTargetCriteria = { commissionable: true, operationalTargets: [] };
792
805
  this.targetCriteriaProviders.add(criteria);
793
806
 
807
+ using finding = this.#lifetime.join("finding commissionable");
808
+ Object.assign(finding.details, identifier);
809
+
794
810
  try {
795
811
  let lastDiscoveredDevices: CommissionableDevice[] | undefined = undefined;
796
812
  while (!canceled) {
@@ -832,6 +848,7 @@ export class MdnsClient implements Scanner {
832
848
  * Close all connects, end all timers and resolve all pending promises.
833
849
  */
834
850
  async close() {
851
+ using _closing = this.#lifetime.closing();
835
852
  this.#closing = true;
836
853
  this.#observers.close();
837
854
  this.#periodicTimer.stop();
@@ -6,12 +6,15 @@
6
6
 
7
7
  import {
8
8
  AsyncCache,
9
+ describeList,
10
+ Diagnostic,
9
11
  DnsMessageType,
10
12
  DnsMessageTypeFlag,
11
13
  DnsRecord,
12
14
  DnsRecordType,
13
15
  Instant,
14
16
  isDeepEqual,
17
+ Lifetime,
15
18
  Logger,
16
19
  MatterAggregateError,
17
20
  Millis,
@@ -26,6 +29,7 @@ import { MdnsSocket } from "./MdnsSocket.js";
26
29
  const logger = Logger.get("MdnsServer");
27
30
 
28
31
  export class MdnsServer {
32
+ #lifetime: Lifetime;
29
33
  #observers = new ObserverGroup();
30
34
  #recordsGenerator = new Map<string, MdnsServer.RecordGenerator>();
31
35
  readonly #records = new AsyncCache<Map<string, DnsRecord<any>[]>>(
@@ -50,8 +54,9 @@ export class MdnsServer {
50
54
 
51
55
  readonly #socket: MdnsSocket;
52
56
 
53
- constructor(socket: MdnsSocket) {
57
+ constructor(socket: MdnsSocket, lifetime = Lifetime.process) {
54
58
  this.#socket = socket;
59
+ this.#lifetime = lifetime.join("mdns server");
55
60
  this.#observers.on(this.#socket.receipt, this.#handleMessage.bind(this));
56
61
  }
57
62
 
@@ -68,6 +73,8 @@ export class MdnsServer {
68
73
  }
69
74
 
70
75
  async #handleMessage(incomingMessage: MdnsSocket.Message) {
76
+ using _processing = this.#lifetime.join("processing message");
77
+
71
78
  const records = await this.#records.get(incomingMessage.sourceIntf);
72
79
 
73
80
  // Ignore if we have no records for interface
@@ -166,6 +173,8 @@ export class MdnsServer {
166
173
  }
167
174
 
168
175
  async broadcast(...services: string[]) {
176
+ using _broadcasting = this.#lifetime.join("broadcasting", Diagnostic.strong(describeList("and", ...services)));
177
+
169
178
  await MatterAggregateError.allSettled(
170
179
  (await this.#getMulticastInterfacesForAnnounce()).map(async ({ name: netInterface }) => {
171
180
  const records = await this.#records.get(netInterface);
@@ -182,6 +191,8 @@ export class MdnsServer {
182
191
  }
183
192
 
184
193
  async expireAnnouncements(...services: string[]) {
194
+ using _expiring = this.#lifetime.join("expiring", Diagnostic.strong(describeList("and", ...services)));
195
+
185
196
  await MatterAggregateError.allSettled(
186
197
  this.#records.keys().map(async netInterface => {
187
198
  const records = await this.#records.get(netInterface);
@@ -218,6 +229,7 @@ export class MdnsServer {
218
229
  }
219
230
 
220
231
  async close() {
232
+ using _closing = this.#lifetime.closing();
221
233
  this.#observers.close();
222
234
  await this.#records.close();
223
235
  for (const { timer } of this.#truncatedQueryCache.values()) {
@@ -45,12 +45,13 @@ export class MdnsService {
45
45
 
46
46
  this.#construction = Construction(this, async () => {
47
47
  this.#socket = await MdnsSocket.create(network, {
48
+ lifetime: this.#construction,
48
49
  enableIpv4: this.enableIpv4,
49
50
  netInterface: this.limitedToNetInterface,
50
51
  });
51
52
 
52
- this.#server = new MdnsServer(this.#socket);
53
- this.#client = new MdnsClient(this.#socket);
53
+ this.#server = new MdnsServer(this.#socket, this.#construction);
54
+ this.#client = new MdnsClient(this.#socket, this.#construction);
54
55
  });
55
56
  }
56
57
 
@@ -5,6 +5,7 @@
5
5
  */
6
6
 
7
7
  import {
8
+ AsyncObservable,
8
9
  BasicObservable,
9
10
  Bytes,
10
11
  Diagnostic,
@@ -13,6 +14,7 @@ import {
13
14
  DnsMessagePartiallyPreEncoded,
14
15
  DnsMessageType,
15
16
  DnsMessageTypeFlag,
17
+ Lifetime,
16
18
  Logger,
17
19
  MatterAggregateError,
18
20
  MAX_MDNS_MESSAGE_SIZE,
@@ -31,15 +33,19 @@ export class MdnsSocket {
31
33
  #socket: UdpMulticastServer;
32
34
  #handlers?: Set<PromiseLike<void>>;
33
35
  #isClosed = false;
34
- #receipt = new BasicObservable<[message: MdnsSocket.Message]>(
36
+ #receipt: AsyncObservable<[message: MdnsSocket.Message]> = new BasicObservable(
35
37
  error => logger.error("Unhandled error in MDNS listener", error),
36
38
  true,
37
39
  );
38
40
 
39
- static async create(network: Network, options?: { enableIpv4?: boolean; netInterface?: string }) {
40
- const { enableIpv4 = true, netInterface } = options ?? {};
41
+ static async create(
42
+ network: Network,
43
+ options?: { enableIpv4?: boolean; netInterface?: string; lifetime?: Lifetime.Owner },
44
+ ) {
45
+ const { enableIpv4 = true, netInterface, lifetime } = options ?? {};
41
46
  const socket = new MdnsSocket(
42
47
  await UdpMulticastServer.create({
48
+ lifetime,
43
49
  network,
44
50
  netInterface,
45
51
  broadcastAddressIpv4: enableIpv4 ? MDNS_BROADCAST_IPV4 : undefined,
@@ -38,8 +38,8 @@ import {
38
38
  import { ControllerDiscovery, PairRetransmissionLimitReachedError } from "#peer/ControllerDiscovery.js";
39
39
  import { ExchangeManager } from "#protocol/ExchangeManager.js";
40
40
  import { DedicatedChannelExchangeProvider } from "#protocol/ExchangeProvider.js";
41
- import { MessageChannel } from "#protocol/MessageChannel.js";
42
41
  import { ChannelStatusResponseError } from "#securechannel/SecureChannelMessenger.js";
42
+ import { NodeSession } from "#session/NodeSession.js";
43
43
  import { PaseClient } from "#session/pase/PaseClient.js";
44
44
  import { SessionManager } from "#session/SessionManager.js";
45
45
  import { DiscoveryCapabilitiesBitmap, NodeId, SECURE_CHANNEL_PROTOCOL_ID, TypeFromPartialBitSchema } from "#types";
@@ -177,21 +177,21 @@ export class ControllerCommissioner {
177
177
  addresses.sort(a => (a.type === "udp" ? -1 : 1));
178
178
 
179
179
  // Attempt a connection on each known address
180
- let channel: MessageChannel | undefined;
180
+ let session: NodeSession | undefined;
181
181
  for (const address of addresses) {
182
182
  try {
183
- channel = await this.#initializePaseSecureChannel(address, passcode, discoveryData);
183
+ session = await this.#initializePaseSecureChannel(address, passcode, discoveryData);
184
184
  } catch (e) {
185
185
  NoResponseTimeoutError.accept(e);
186
186
  logger.warn(`Could not connect to ${ServerAddress.urlFor(address)}: ${e.message}`);
187
187
  }
188
188
  }
189
189
 
190
- if (channel === undefined) {
190
+ if (session === undefined) {
191
191
  throw new NoResponseTimeoutError("Could not connect to device");
192
192
  }
193
193
 
194
- return await this.#commissionConnectedNode(channel, options, discoveryData);
194
+ return await this.#commissionConnectedNode(session, options, discoveryData);
195
195
  }
196
196
 
197
197
  /**
@@ -199,7 +199,7 @@ export class ControllerCommissioner {
199
199
  */
200
200
  async discoverAndEstablishPase(
201
201
  options: DiscoveryAndCommissioningOptions,
202
- ): Promise<{ paseSecureChannel: MessageChannel; discoveryData?: DiscoveryData }> {
202
+ ): Promise<{ paseSession: NodeSession; discoveryData?: DiscoveryData }> {
203
203
  const {
204
204
  discovery: { timeout = Seconds(30) },
205
205
  passcode,
@@ -245,18 +245,18 @@ export class ControllerCommissioner {
245
245
  );
246
246
 
247
247
  // If we have a known address we try this first before we discover the device
248
- let paseSecureChannel: MessageChannel | undefined;
248
+ let paseSession: NodeSession | undefined;
249
249
  let discoveryData: DiscoveryData | undefined;
250
250
 
251
251
  // If we have a last known address, try this first
252
252
  if (knownAddress !== undefined) {
253
253
  try {
254
- paseSecureChannel = await this.#initializePaseSecureChannel(knownAddress, passcode);
254
+ paseSession = await this.#initializePaseSecureChannel(knownAddress, passcode);
255
255
  } catch (error) {
256
256
  NoResponseTimeoutError.accept(error);
257
257
  }
258
258
  }
259
- if (paseSecureChannel === undefined) {
259
+ if (paseSession === undefined) {
260
260
  const discoveredDevices = await ControllerDiscovery.discoverDeviceAddressesByIdentifier(
261
261
  scannersToUse,
262
262
  identifierData,
@@ -276,10 +276,10 @@ export class ControllerCommissioner {
276
276
  );
277
277
 
278
278
  // Pairing was successful, so store the address and assign the established secure channel
279
- paseSecureChannel = result;
279
+ paseSession = result;
280
280
  }
281
281
 
282
- return { paseSecureChannel, discoveryData };
282
+ return { paseSession, discoveryData };
283
283
  }
284
284
 
285
285
  /**
@@ -293,10 +293,10 @@ export class ControllerCommissioner {
293
293
  }
294
294
 
295
295
  // Establish PASE channel
296
- const { paseSecureChannel, discoveryData } = await this.discoverAndEstablishPase(options);
296
+ const { paseSession, discoveryData } = await this.discoverAndEstablishPase(options);
297
297
 
298
298
  // Commission the node
299
- return await this.#commissionConnectedNode(paseSecureChannel, options, discoveryData);
299
+ return await this.#commissionConnectedNode(paseSession, options, discoveryData);
300
300
  }
301
301
 
302
302
  /**
@@ -308,7 +308,7 @@ export class ControllerCommissioner {
308
308
  address: ServerAddress,
309
309
  passcode: number,
310
310
  device?: DiscoveryData,
311
- ): Promise<MessageChannel> {
311
+ ): Promise<NodeSession> {
312
312
  let paseChannel: Channel<Bytes>;
313
313
  if (device !== undefined) {
314
314
  logger.info(`Establish PASE to device`, MdnsClient.discoveryDataDiagnostics(device));
@@ -349,8 +349,9 @@ export class ControllerCommissioner {
349
349
  );
350
350
  }
351
351
 
352
- // Do PASE paring
353
- const unsecureSession = this.#context.sessions.createInsecureSession({
352
+ // Do PASE pairing
353
+ const unsecuredSession = this.#context.sessions.createUnsecuredSession({
354
+ channel: paseChannel,
354
355
  // Use the session parameters from MDNS announcements when available and rest is assumed to be fallbacks
355
356
  sessionParameters: {
356
357
  idleInterval: Millis(device?.SII),
@@ -359,32 +360,31 @@ export class ControllerCommissioner {
359
360
  },
360
361
  isInitiator: true,
361
362
  });
362
- const paseUnsecureMessageChannel = new MessageChannel(paseChannel, unsecureSession);
363
- const paseExchange = this.#context.exchanges.initiateExchangeWithChannel(
364
- paseUnsecureMessageChannel,
363
+ const paseExchange = this.#context.exchanges.initiateExchangeForSession(
364
+ unsecuredSession,
365
365
  SECURE_CHANNEL_PROTOCOL_ID,
366
366
  );
367
367
 
368
- let paseSecureSession;
369
368
  try {
370
- paseSecureSession = await this.#paseClient.pair(
369
+ const caseSession = await this.#paseClient.pair(
371
370
  this.#context.sessions.sessionParameters,
372
371
  paseExchange,
372
+ paseChannel,
373
373
  passcode,
374
374
  );
375
+ unsecuredSession.detachChannel();
376
+ return caseSession;
375
377
  } catch (e) {
376
378
  // Close the exchange and rethrow
377
- await paseExchange.close();
378
379
  if (e instanceof ChannelStatusResponseError) {
379
380
  throw new NoResponseTimeoutError(
380
381
  `Establishing PASE channel failed with channel status response error ${e.message}`,
381
382
  );
382
383
  }
383
384
  throw e;
385
+ } finally {
386
+ await unsecuredSession.initiateForceClose();
384
387
  }
385
-
386
- await unsecureSession.destroy();
387
- return new MessageChannel(paseChannel, paseSecureSession);
388
388
  }
389
389
 
390
390
  /** Validate if a Peer Address is already known and commissioned */
@@ -415,7 +415,7 @@ export class ControllerCommissioner {
415
415
  * success.
416
416
  */
417
417
  async #commissionConnectedNode(
418
- paseSecureMessageChannel: MessageChannel,
418
+ paseSession: NodeSession,
419
419
  options: CommissioningOptions,
420
420
  discoveryData?: DiscoveryData,
421
421
  ): Promise<PeerAddress> {
@@ -466,7 +466,7 @@ export class ControllerCommissioner {
466
466
  const commissioningManager = new commissioningFlowImpl(
467
467
  // Use the created secure session to do the commissioning
468
468
  new InteractionClient(
469
- new DedicatedChannelExchangeProvider(this.#context.exchanges, paseSecureMessageChannel),
469
+ new DedicatedChannelExchangeProvider(this.#context.exchanges, paseSession),
470
470
  undefined,
471
471
  address,
472
472
  ),
@@ -480,7 +480,7 @@ export class ControllerCommissioner {
480
480
  commissioning flow the commissioning channel SHALL terminate after successful step 12 (trigger
481
481
  joining of operational network at Commissionee).
482
482
  */
483
- await paseSecureMessageChannel.close(); // We reconnect using Case, so close PASE connection
483
+ await paseSession.initiateClose(); // We reconnect using Case, so close PASE connection
484
484
  }
485
485
 
486
486
  if (performCaseCommissioning !== undefined) {
@@ -504,17 +504,15 @@ export class ControllerCommissioner {
504
504
  await commissioningManager.executeCommissioning();
505
505
  } catch (error) {
506
506
  // We might have added data for an operational address that we need to cleanup
507
- await this.#context.clients.peers.delete(address);
507
+ await this.#context.clients.peers.get(address)?.delete();
508
508
  throw error;
509
509
  } finally {
510
- if (!paseSecureMessageChannel.closed) {
511
- /*
512
- In concurrent connection commissioning flow the commissioning channel SHALL terminate after
513
- successful step 15 (CommissioningComplete command invocation).
514
- If PaseSecureMessageChannel is not already closed, we are in non-concurrent connection commissioning flow.
515
- */
516
- await paseSecureMessageChannel.close(); // We are done, so close PASE session
517
- }
510
+ /*
511
+ In concurrent connection commissioning flow the commissioning channel SHALL terminate after
512
+ successful step 15 (CommissioningComplete command invocation).
513
+ If PaseSecureMessageChannel is not already closed, we are in non-concurrent connection commissioning flow.
514
+ */
515
+ await paseSession.initiateClose(); // We are done, so close PASE session
518
516
  }
519
517
 
520
518
  return address;
@@ -15,6 +15,7 @@ import {
15
15
  ServerAddress,
16
16
  } from "#general";
17
17
  import { CommissionableDeviceDiscoveryFailedError } from "#peer/ControllerCommissioningFlow.js";
18
+ import { RetransmissionLimitReachedError } from "#protocol/errors.js";
18
19
  import { NodeId } from "#types";
19
20
  import {
20
21
  AddressTypeFromDevice,
@@ -26,7 +27,6 @@ import {
26
27
  } from "../common/Scanner.js";
27
28
  import { Fabric } from "../fabric/Fabric.js";
28
29
  import { MdnsClient } from "../mdns/MdnsClient.js";
29
- import { RetransmissionLimitReachedError } from "../protocol/MessageExchange.js";
30
30
 
31
31
  const logger = Logger.get("ControllerDiscovery");
32
32