@matter/protocol 0.16.0-alpha.0-20250809-ee8375bcb → 0.16.0-alpha.0-20250812-285b75d83

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 (408) hide show
  1. package/dist/cjs/advertisement/Advertisement.d.ts +119 -0
  2. package/dist/cjs/advertisement/Advertisement.d.ts.map +1 -0
  3. package/dist/cjs/advertisement/Advertisement.js +267 -0
  4. package/dist/cjs/advertisement/Advertisement.js.map +6 -0
  5. package/dist/cjs/advertisement/Advertiser.d.ts +50 -0
  6. package/dist/cjs/advertisement/Advertiser.d.ts.map +1 -0
  7. package/dist/cjs/advertisement/Advertiser.js +81 -0
  8. package/dist/cjs/advertisement/Advertiser.js.map +6 -0
  9. package/dist/cjs/advertisement/CommissioningMode.d.ts +11 -0
  10. package/dist/cjs/advertisement/CommissioningMode.d.ts.map +1 -0
  11. package/dist/cjs/advertisement/CommissioningMode.js +35 -0
  12. package/dist/cjs/advertisement/CommissioningMode.js.map +6 -0
  13. package/dist/cjs/{common/InstanceBroadcaster.d.ts → advertisement/PairingHintBitmap.d.ts} +3 -69
  14. package/dist/cjs/advertisement/PairingHintBitmap.d.ts.map +1 -0
  15. package/dist/cjs/{common/InstanceBroadcaster.js → advertisement/PairingHintBitmap.js} +5 -12
  16. package/dist/cjs/advertisement/PairingHintBitmap.js.map +6 -0
  17. package/dist/cjs/advertisement/ServiceDescription.d.ts +70 -0
  18. package/dist/cjs/advertisement/ServiceDescription.d.ts.map +1 -0
  19. package/dist/cjs/advertisement/ServiceDescription.js +61 -0
  20. package/dist/cjs/advertisement/ServiceDescription.js.map +6 -0
  21. package/dist/cjs/advertisement/ble/BleAdvertisement.d.ts +16 -0
  22. package/dist/cjs/advertisement/ble/BleAdvertisement.d.ts.map +1 -0
  23. package/dist/cjs/advertisement/ble/BleAdvertisement.js +85 -0
  24. package/dist/cjs/advertisement/ble/BleAdvertisement.js.map +6 -0
  25. package/dist/cjs/advertisement/ble/BleAdvertiser.d.ts +66 -0
  26. package/dist/cjs/advertisement/ble/BleAdvertiser.d.ts.map +1 -0
  27. package/dist/cjs/advertisement/ble/BleAdvertiser.js +83 -0
  28. package/dist/cjs/advertisement/ble/BleAdvertiser.js.map +6 -0
  29. package/dist/cjs/advertisement/ble/index.d.ts +8 -0
  30. package/dist/cjs/advertisement/ble/index.d.ts.map +1 -0
  31. package/dist/cjs/advertisement/ble/index.js +25 -0
  32. package/dist/cjs/advertisement/ble/index.js.map +6 -0
  33. package/dist/cjs/advertisement/index.d.ts +13 -0
  34. package/dist/cjs/advertisement/index.d.ts.map +1 -0
  35. package/dist/cjs/advertisement/index.js +30 -0
  36. package/dist/cjs/advertisement/index.js.map +6 -0
  37. package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts +21 -0
  38. package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts.map +1 -0
  39. package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.js +104 -0
  40. package/dist/cjs/advertisement/mdns/CommissionableMdnsAdvertisement.js.map +6 -0
  41. package/dist/cjs/advertisement/mdns/CommissionerMdnsAdvertisement.d.ts +20 -0
  42. package/dist/cjs/advertisement/mdns/CommissionerMdnsAdvertisement.d.ts.map +1 -0
  43. package/dist/cjs/advertisement/mdns/CommissionerMdnsAdvertisement.js +70 -0
  44. package/dist/cjs/advertisement/mdns/CommissionerMdnsAdvertisement.js.map +6 -0
  45. package/dist/cjs/advertisement/mdns/MdnsAdvertisement.d.ts +40 -0
  46. package/dist/cjs/advertisement/mdns/MdnsAdvertisement.d.ts.map +1 -0
  47. package/dist/cjs/advertisement/mdns/MdnsAdvertisement.js +145 -0
  48. package/dist/cjs/advertisement/mdns/MdnsAdvertisement.js.map +6 -0
  49. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.d.ts +99 -0
  50. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.d.ts.map +1 -0
  51. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.js +166 -0
  52. package/dist/cjs/advertisement/mdns/MdnsAdvertiser.js.map +6 -0
  53. package/dist/cjs/advertisement/mdns/OperationalMdnsAdvertisement.d.ts +18 -0
  54. package/dist/cjs/advertisement/mdns/OperationalMdnsAdvertisement.d.ts.map +1 -0
  55. package/dist/cjs/advertisement/mdns/OperationalMdnsAdvertisement.js +55 -0
  56. package/dist/cjs/advertisement/mdns/OperationalMdnsAdvertisement.js.map +6 -0
  57. package/dist/cjs/advertisement/mdns/index.d.ts +11 -0
  58. package/dist/cjs/advertisement/mdns/index.d.ts.map +1 -0
  59. package/dist/cjs/advertisement/mdns/index.js +28 -0
  60. package/dist/cjs/advertisement/mdns/index.js.map +6 -0
  61. package/dist/cjs/ble/Ble.d.ts +7 -5
  62. package/dist/cjs/ble/Ble.d.ts.map +1 -1
  63. package/dist/cjs/ble/Ble.js.map +1 -1
  64. package/dist/cjs/ble/BleConsts.d.ts +2 -1
  65. package/dist/cjs/ble/BleConsts.d.ts.map +1 -1
  66. package/dist/cjs/ble/BleConsts.js +3 -1
  67. package/dist/cjs/ble/BleConsts.js.map +1 -1
  68. package/dist/cjs/codec/BtpCodec.d.ts +1 -1
  69. package/dist/cjs/codec/BtpCodec.d.ts.map +1 -1
  70. package/dist/cjs/codec/BtpCodec.js +4 -4
  71. package/dist/cjs/codec/BtpCodec.js.map +1 -1
  72. package/dist/cjs/common/Scanner.d.ts +1 -25
  73. package/dist/cjs/common/Scanner.d.ts.map +1 -1
  74. package/dist/cjs/common/Scanner.js +1 -18
  75. package/dist/cjs/common/Scanner.js.map +1 -1
  76. package/dist/cjs/common/SupportedTransportsBitmap.d.ts +33 -0
  77. package/dist/cjs/common/SupportedTransportsBitmap.d.ts.map +1 -0
  78. package/dist/cjs/common/SupportedTransportsBitmap.js +45 -0
  79. package/dist/cjs/common/SupportedTransportsBitmap.js.map +6 -0
  80. package/dist/cjs/common/index.d.ts +1 -1
  81. package/dist/cjs/common/index.d.ts.map +1 -1
  82. package/dist/cjs/common/index.js +1 -1
  83. package/dist/cjs/common/index.js.map +1 -1
  84. package/dist/cjs/fabric/Fabric.d.ts +1 -0
  85. package/dist/cjs/fabric/Fabric.d.ts.map +1 -1
  86. package/dist/cjs/fabric/Fabric.js +7 -0
  87. package/dist/cjs/fabric/Fabric.js.map +1 -1
  88. package/dist/cjs/index.d.ts +1 -0
  89. package/dist/cjs/index.d.ts.map +1 -1
  90. package/dist/cjs/index.js +1 -0
  91. package/dist/cjs/index.js.map +1 -1
  92. package/dist/{esm/mdns/MdnsScanner.d.ts → cjs/mdns/MdnsClient.d.ts} +11 -14
  93. package/dist/cjs/mdns/MdnsClient.d.ts.map +1 -0
  94. package/dist/cjs/mdns/{MdnsScanner.js → MdnsClient.js} +35 -90
  95. package/dist/cjs/mdns/MdnsClient.js.map +6 -0
  96. package/dist/cjs/mdns/MdnsConsts.d.ts +11 -2
  97. package/dist/cjs/mdns/MdnsConsts.d.ts.map +1 -1
  98. package/dist/cjs/mdns/MdnsConsts.js +31 -4
  99. package/dist/cjs/mdns/MdnsConsts.js.map +1 -1
  100. package/dist/cjs/mdns/MdnsServer.d.ts +13 -22
  101. package/dist/cjs/mdns/MdnsServer.d.ts.map +1 -1
  102. package/dist/cjs/mdns/MdnsServer.js +53 -150
  103. package/dist/cjs/mdns/MdnsServer.js.map +2 -2
  104. package/dist/cjs/mdns/MdnsService.d.ts +4 -5
  105. package/dist/cjs/mdns/MdnsService.d.ts.map +1 -1
  106. package/dist/cjs/mdns/MdnsService.js +22 -23
  107. package/dist/cjs/mdns/MdnsService.js.map +1 -1
  108. package/dist/cjs/mdns/MdnsSocket.d.ts +32 -0
  109. package/dist/cjs/mdns/MdnsSocket.d.ts.map +1 -0
  110. package/dist/cjs/mdns/MdnsSocket.js +144 -0
  111. package/dist/cjs/mdns/MdnsSocket.js.map +6 -0
  112. package/dist/cjs/mdns/index.d.ts +2 -3
  113. package/dist/cjs/mdns/index.d.ts.map +1 -1
  114. package/dist/cjs/mdns/index.js +2 -3
  115. package/dist/cjs/mdns/index.js.map +1 -1
  116. package/dist/cjs/peer/ControllerCommissioner.js +2 -2
  117. package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
  118. package/dist/cjs/peer/ControllerDiscovery.d.ts +3 -3
  119. package/dist/cjs/peer/ControllerDiscovery.d.ts.map +1 -1
  120. package/dist/cjs/peer/ControllerDiscovery.js.map +1 -1
  121. package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
  122. package/dist/cjs/peer/PeerSet.js +10 -5
  123. package/dist/cjs/peer/PeerSet.js.map +1 -1
  124. package/dist/cjs/protocol/DeviceAdvertiser.d.ts +23 -18
  125. package/dist/cjs/protocol/DeviceAdvertiser.d.ts.map +1 -1
  126. package/dist/cjs/protocol/DeviceAdvertiser.js +130 -129
  127. package/dist/cjs/protocol/DeviceAdvertiser.js.map +1 -1
  128. package/dist/cjs/protocol/DeviceCommissioner.d.ts +0 -1
  129. package/dist/cjs/protocol/DeviceCommissioner.d.ts.map +1 -1
  130. package/dist/cjs/protocol/DeviceCommissioner.js +44 -44
  131. package/dist/cjs/protocol/DeviceCommissioner.js.map +1 -1
  132. package/dist/cjs/protocol/ExchangeManager.js +1 -1
  133. package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
  134. package/dist/cjs/protocol/MessageExchange.d.ts +1 -1
  135. package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
  136. package/dist/cjs/protocol/MessageExchange.js +6 -8
  137. package/dist/cjs/protocol/MessageExchange.js.map +1 -1
  138. package/dist/cjs/protocol/ProtocolHandler.d.ts +4 -0
  139. package/dist/cjs/protocol/ProtocolHandler.d.ts.map +1 -1
  140. package/dist/cjs/protocol/ProtocolStatusMessage.d.ts +8 -4
  141. package/dist/cjs/protocol/ProtocolStatusMessage.d.ts.map +1 -1
  142. package/dist/cjs/protocol/ProtocolStatusMessage.js +23 -8
  143. package/dist/cjs/protocol/ProtocolStatusMessage.js.map +1 -1
  144. package/dist/cjs/securechannel/SecureChannelMessenger.js +2 -2
  145. package/dist/cjs/securechannel/SecureChannelMessenger.js.map +1 -1
  146. package/dist/cjs/securechannel/SecureChannelProtocol.js +1 -1
  147. package/dist/cjs/securechannel/SecureChannelProtocol.js.map +1 -1
  148. package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.d.ts +3 -3
  149. package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.d.ts.map +1 -1
  150. package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.js +3 -3
  151. package/dist/cjs/securechannel/SecureChannelStatusMessageSchema.js.map +1 -1
  152. package/dist/cjs/session/NodeSession.d.ts +1 -0
  153. package/dist/cjs/session/NodeSession.d.ts.map +1 -1
  154. package/dist/cjs/session/NodeSession.js +3 -0
  155. package/dist/cjs/session/NodeSession.js.map +1 -1
  156. package/dist/cjs/session/Session.d.ts +3 -33
  157. package/dist/cjs/session/Session.d.ts.map +1 -1
  158. package/dist/cjs/session/Session.js +4 -9
  159. package/dist/cjs/session/Session.js.map +1 -1
  160. package/dist/cjs/session/SessionIntervals.d.ts +36 -0
  161. package/dist/cjs/session/SessionIntervals.d.ts.map +1 -0
  162. package/dist/cjs/session/SessionIntervals.js +51 -0
  163. package/dist/cjs/session/SessionIntervals.js.map +6 -0
  164. package/dist/cjs/session/SessionManager.d.ts +1 -1
  165. package/dist/cjs/session/SessionManager.d.ts.map +1 -1
  166. package/dist/cjs/session/SessionManager.js +11 -12
  167. package/dist/cjs/session/SessionManager.js.map +1 -1
  168. package/dist/cjs/session/pase/PaseMessages.js +2 -2
  169. package/dist/cjs/session/pase/PaseMessages.js.map +1 -1
  170. package/dist/esm/advertisement/Advertisement.d.ts +119 -0
  171. package/dist/esm/advertisement/Advertisement.d.ts.map +1 -0
  172. package/dist/esm/advertisement/Advertisement.js +247 -0
  173. package/dist/esm/advertisement/Advertisement.js.map +6 -0
  174. package/dist/esm/advertisement/Advertiser.d.ts +50 -0
  175. package/dist/esm/advertisement/Advertiser.d.ts.map +1 -0
  176. package/dist/esm/advertisement/Advertiser.js +61 -0
  177. package/dist/esm/advertisement/Advertiser.js.map +6 -0
  178. package/dist/esm/advertisement/CommissioningMode.d.ts +11 -0
  179. package/dist/esm/advertisement/CommissioningMode.d.ts.map +1 -0
  180. package/dist/esm/advertisement/CommissioningMode.js +15 -0
  181. package/dist/esm/advertisement/CommissioningMode.js.map +6 -0
  182. package/dist/esm/{common/InstanceBroadcaster.d.ts → advertisement/PairingHintBitmap.d.ts} +3 -69
  183. package/dist/esm/advertisement/PairingHintBitmap.d.ts.map +1 -0
  184. package/dist/esm/{common/InstanceBroadcaster.js → advertisement/PairingHintBitmap.js} +2 -9
  185. package/dist/esm/{common/InstanceBroadcaster.js.map → advertisement/PairingHintBitmap.js.map} +3 -3
  186. package/dist/esm/advertisement/ServiceDescription.d.ts +70 -0
  187. package/dist/esm/advertisement/ServiceDescription.d.ts.map +1 -0
  188. package/dist/esm/advertisement/ServiceDescription.js +41 -0
  189. package/dist/esm/advertisement/ServiceDescription.js.map +6 -0
  190. package/dist/esm/advertisement/ble/BleAdvertisement.d.ts +16 -0
  191. package/dist/esm/advertisement/ble/BleAdvertisement.d.ts.map +1 -0
  192. package/dist/esm/advertisement/ble/BleAdvertisement.js +65 -0
  193. package/dist/esm/advertisement/ble/BleAdvertisement.js.map +6 -0
  194. package/dist/esm/advertisement/ble/BleAdvertiser.d.ts +66 -0
  195. package/dist/esm/advertisement/ble/BleAdvertiser.d.ts.map +1 -0
  196. package/dist/esm/advertisement/ble/BleAdvertiser.js +63 -0
  197. package/dist/esm/advertisement/ble/BleAdvertiser.js.map +6 -0
  198. package/dist/esm/advertisement/ble/index.d.ts +8 -0
  199. package/dist/esm/advertisement/ble/index.d.ts.map +1 -0
  200. package/dist/esm/advertisement/ble/index.js +8 -0
  201. package/dist/esm/advertisement/ble/index.js.map +6 -0
  202. package/dist/esm/advertisement/index.d.ts +13 -0
  203. package/dist/esm/advertisement/index.d.ts.map +1 -0
  204. package/dist/esm/advertisement/index.js +13 -0
  205. package/dist/esm/advertisement/index.js.map +6 -0
  206. package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts +21 -0
  207. package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts.map +1 -0
  208. package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.js +95 -0
  209. package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.js.map +6 -0
  210. package/dist/esm/advertisement/mdns/CommissionerMdnsAdvertisement.d.ts +20 -0
  211. package/dist/esm/advertisement/mdns/CommissionerMdnsAdvertisement.d.ts.map +1 -0
  212. package/dist/esm/advertisement/mdns/CommissionerMdnsAdvertisement.js +54 -0
  213. package/dist/esm/advertisement/mdns/CommissionerMdnsAdvertisement.js.map +6 -0
  214. package/dist/esm/advertisement/mdns/MdnsAdvertisement.d.ts +40 -0
  215. package/dist/esm/advertisement/mdns/MdnsAdvertisement.d.ts.map +1 -0
  216. package/dist/esm/advertisement/mdns/MdnsAdvertisement.js +125 -0
  217. package/dist/esm/advertisement/mdns/MdnsAdvertisement.js.map +6 -0
  218. package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts +99 -0
  219. package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts.map +1 -0
  220. package/dist/esm/advertisement/mdns/MdnsAdvertiser.js +146 -0
  221. package/dist/esm/advertisement/mdns/MdnsAdvertiser.js.map +6 -0
  222. package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.d.ts +18 -0
  223. package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.d.ts.map +1 -0
  224. package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.js +40 -0
  225. package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.js.map +6 -0
  226. package/dist/esm/advertisement/mdns/index.d.ts +11 -0
  227. package/dist/esm/advertisement/mdns/index.d.ts.map +1 -0
  228. package/dist/esm/advertisement/mdns/index.js +11 -0
  229. package/dist/esm/advertisement/mdns/index.js.map +6 -0
  230. package/dist/esm/ble/Ble.d.ts +7 -5
  231. package/dist/esm/ble/Ble.d.ts.map +1 -1
  232. package/dist/esm/ble/Ble.js.map +1 -1
  233. package/dist/esm/ble/BleConsts.d.ts +2 -1
  234. package/dist/esm/ble/BleConsts.d.ts.map +1 -1
  235. package/dist/esm/ble/BleConsts.js +3 -1
  236. package/dist/esm/ble/BleConsts.js.map +1 -1
  237. package/dist/esm/codec/BtpCodec.d.ts +1 -1
  238. package/dist/esm/codec/BtpCodec.d.ts.map +1 -1
  239. package/dist/esm/codec/BtpCodec.js +4 -4
  240. package/dist/esm/codec/BtpCodec.js.map +1 -1
  241. package/dist/esm/common/Scanner.d.ts +1 -25
  242. package/dist/esm/common/Scanner.d.ts.map +1 -1
  243. package/dist/esm/common/Scanner.js +1 -18
  244. package/dist/esm/common/Scanner.js.map +1 -1
  245. package/dist/esm/common/SupportedTransportsBitmap.d.ts +33 -0
  246. package/dist/esm/common/SupportedTransportsBitmap.d.ts.map +1 -0
  247. package/dist/esm/common/SupportedTransportsBitmap.js +25 -0
  248. package/dist/esm/common/SupportedTransportsBitmap.js.map +6 -0
  249. package/dist/esm/common/index.d.ts +1 -1
  250. package/dist/esm/common/index.d.ts.map +1 -1
  251. package/dist/esm/common/index.js +1 -1
  252. package/dist/esm/fabric/Fabric.d.ts +1 -0
  253. package/dist/esm/fabric/Fabric.d.ts.map +1 -1
  254. package/dist/esm/fabric/Fabric.js +7 -0
  255. package/dist/esm/fabric/Fabric.js.map +1 -1
  256. package/dist/esm/index.d.ts +1 -0
  257. package/dist/esm/index.d.ts.map +1 -1
  258. package/dist/esm/index.js +1 -0
  259. package/dist/esm/index.js.map +1 -1
  260. package/dist/{cjs/mdns/MdnsScanner.d.ts → esm/mdns/MdnsClient.d.ts} +11 -14
  261. package/dist/esm/mdns/MdnsClient.d.ts.map +1 -0
  262. package/dist/esm/mdns/{MdnsScanner.js → MdnsClient.js} +34 -92
  263. package/dist/esm/mdns/MdnsClient.js.map +6 -0
  264. package/dist/esm/mdns/MdnsConsts.d.ts +11 -2
  265. package/dist/esm/mdns/MdnsConsts.d.ts.map +1 -1
  266. package/dist/esm/mdns/MdnsConsts.js +31 -4
  267. package/dist/esm/mdns/MdnsConsts.js.map +1 -1
  268. package/dist/esm/mdns/MdnsServer.d.ts +13 -22
  269. package/dist/esm/mdns/MdnsServer.d.ts.map +1 -1
  270. package/dist/esm/mdns/MdnsServer.js +55 -155
  271. package/dist/esm/mdns/MdnsServer.js.map +2 -2
  272. package/dist/esm/mdns/MdnsService.d.ts +4 -5
  273. package/dist/esm/mdns/MdnsService.d.ts.map +1 -1
  274. package/dist/esm/mdns/MdnsService.js +22 -24
  275. package/dist/esm/mdns/MdnsService.js.map +1 -1
  276. package/dist/esm/mdns/MdnsSocket.d.ts +32 -0
  277. package/dist/esm/mdns/MdnsSocket.d.ts.map +1 -0
  278. package/dist/esm/mdns/MdnsSocket.js +133 -0
  279. package/dist/esm/mdns/MdnsSocket.js.map +6 -0
  280. package/dist/esm/mdns/index.d.ts +2 -3
  281. package/dist/esm/mdns/index.d.ts.map +1 -1
  282. package/dist/esm/mdns/index.js +2 -3
  283. package/dist/esm/mdns/index.js.map +1 -1
  284. package/dist/esm/peer/ControllerCommissioner.js +2 -2
  285. package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
  286. package/dist/esm/peer/ControllerDiscovery.d.ts +3 -3
  287. package/dist/esm/peer/ControllerDiscovery.d.ts.map +1 -1
  288. package/dist/esm/peer/ControllerDiscovery.js.map +1 -1
  289. package/dist/esm/peer/PeerSet.d.ts.map +1 -1
  290. package/dist/esm/peer/PeerSet.js +10 -5
  291. package/dist/esm/peer/PeerSet.js.map +1 -1
  292. package/dist/esm/protocol/DeviceAdvertiser.d.ts +23 -18
  293. package/dist/esm/protocol/DeviceAdvertiser.d.ts.map +1 -1
  294. package/dist/esm/protocol/DeviceAdvertiser.js +131 -139
  295. package/dist/esm/protocol/DeviceAdvertiser.js.map +1 -1
  296. package/dist/esm/protocol/DeviceCommissioner.d.ts +0 -1
  297. package/dist/esm/protocol/DeviceCommissioner.d.ts.map +1 -1
  298. package/dist/esm/protocol/DeviceCommissioner.js +47 -47
  299. package/dist/esm/protocol/DeviceCommissioner.js.map +1 -1
  300. package/dist/esm/protocol/ExchangeManager.js +1 -1
  301. package/dist/esm/protocol/ExchangeManager.js.map +1 -1
  302. package/dist/esm/protocol/MessageExchange.d.ts +1 -1
  303. package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
  304. package/dist/esm/protocol/MessageExchange.js +6 -12
  305. package/dist/esm/protocol/MessageExchange.js.map +1 -1
  306. package/dist/esm/protocol/ProtocolHandler.d.ts +4 -0
  307. package/dist/esm/protocol/ProtocolHandler.d.ts.map +1 -1
  308. package/dist/esm/protocol/ProtocolStatusMessage.d.ts +8 -4
  309. package/dist/esm/protocol/ProtocolStatusMessage.d.ts.map +1 -1
  310. package/dist/esm/protocol/ProtocolStatusMessage.js +24 -9
  311. package/dist/esm/protocol/ProtocolStatusMessage.js.map +1 -1
  312. package/dist/esm/securechannel/SecureChannelMessenger.js +3 -3
  313. package/dist/esm/securechannel/SecureChannelMessenger.js.map +1 -1
  314. package/dist/esm/securechannel/SecureChannelProtocol.js +2 -2
  315. package/dist/esm/securechannel/SecureChannelProtocol.js.map +1 -1
  316. package/dist/esm/securechannel/SecureChannelStatusMessageSchema.d.ts +3 -3
  317. package/dist/esm/securechannel/SecureChannelStatusMessageSchema.d.ts.map +1 -1
  318. package/dist/esm/securechannel/SecureChannelStatusMessageSchema.js +3 -3
  319. package/dist/esm/securechannel/SecureChannelStatusMessageSchema.js.map +1 -1
  320. package/dist/esm/session/NodeSession.d.ts +1 -0
  321. package/dist/esm/session/NodeSession.d.ts.map +1 -1
  322. package/dist/esm/session/NodeSession.js +3 -0
  323. package/dist/esm/session/NodeSession.js.map +1 -1
  324. package/dist/esm/session/Session.d.ts +3 -33
  325. package/dist/esm/session/Session.d.ts.map +1 -1
  326. package/dist/esm/session/Session.js +4 -9
  327. package/dist/esm/session/Session.js.map +1 -1
  328. package/dist/esm/session/SessionIntervals.d.ts +36 -0
  329. package/dist/esm/session/SessionIntervals.d.ts.map +1 -0
  330. package/dist/esm/session/SessionIntervals.js +31 -0
  331. package/dist/esm/session/SessionIntervals.js.map +6 -0
  332. package/dist/esm/session/SessionManager.d.ts +1 -1
  333. package/dist/esm/session/SessionManager.d.ts.map +1 -1
  334. package/dist/esm/session/SessionManager.js +10 -14
  335. package/dist/esm/session/SessionManager.js.map +1 -1
  336. package/dist/esm/session/pase/PaseMessages.js +1 -1
  337. package/package.json +6 -6
  338. package/src/advertisement/Advertisement.ts +348 -0
  339. package/src/advertisement/Advertiser.ts +83 -0
  340. package/src/advertisement/CommissioningMode.ts +11 -0
  341. package/src/{common/InstanceBroadcaster.ts → advertisement/PairingHintBitmap.ts} +1 -92
  342. package/src/advertisement/ServiceDescription.ts +110 -0
  343. package/src/advertisement/ble/BleAdvertisement.ts +90 -0
  344. package/src/advertisement/ble/BleAdvertiser.ts +116 -0
  345. package/src/advertisement/ble/index.ts +8 -0
  346. package/src/advertisement/index.ts +13 -0
  347. package/src/advertisement/mdns/CommissionableMdnsAdvertisement.ts +118 -0
  348. package/src/advertisement/mdns/CommissionerMdnsAdvertisement.ts +73 -0
  349. package/src/advertisement/mdns/MdnsAdvertisement.ts +167 -0
  350. package/src/advertisement/mdns/MdnsAdvertiser.ts +248 -0
  351. package/src/advertisement/mdns/OperationalMdnsAdvertisement.ts +50 -0
  352. package/src/advertisement/mdns/index.ts +11 -0
  353. package/src/ble/Ble.ts +8 -5
  354. package/src/ble/BleConsts.ts +2 -1
  355. package/src/codec/BtpCodec.ts +4 -3
  356. package/src/common/Scanner.ts +1 -17
  357. package/src/common/SupportedTransportsBitmap.ts +25 -0
  358. package/src/common/index.ts +1 -1
  359. package/src/fabric/Fabric.ts +8 -0
  360. package/src/index.ts +1 -0
  361. package/src/mdns/{MdnsScanner.ts → MdnsClient.ts} +34 -103
  362. package/src/mdns/MdnsConsts.ts +27 -2
  363. package/src/mdns/MdnsServer.ts +76 -198
  364. package/src/mdns/MdnsService.ts +24 -27
  365. package/src/mdns/MdnsSocket.ts +179 -0
  366. package/src/mdns/index.ts +2 -3
  367. package/src/peer/ControllerCommissioner.ts +2 -2
  368. package/src/peer/ControllerDiscovery.ts +3 -3
  369. package/src/peer/PeerSet.ts +15 -9
  370. package/src/protocol/DeviceAdvertiser.ts +161 -151
  371. package/src/protocol/DeviceCommissioner.ts +65 -75
  372. package/src/protocol/ExchangeManager.ts +1 -1
  373. package/src/protocol/MessageExchange.ts +8 -14
  374. package/src/protocol/ProtocolHandler.ts +7 -0
  375. package/src/protocol/ProtocolStatusMessage.ts +26 -10
  376. package/src/securechannel/SecureChannelMessenger.ts +3 -3
  377. package/src/securechannel/SecureChannelProtocol.ts +2 -2
  378. package/src/securechannel/SecureChannelStatusMessageSchema.ts +3 -3
  379. package/src/session/NodeSession.ts +4 -0
  380. package/src/session/Session.ts +6 -42
  381. package/src/session/SessionIntervals.ts +57 -0
  382. package/src/session/SessionManager.ts +9 -13
  383. package/src/session/pase/PaseMessages.ts +1 -1
  384. package/dist/cjs/common/InstanceBroadcaster.d.ts.map +0 -1
  385. package/dist/cjs/common/InstanceBroadcaster.js.map +0 -6
  386. package/dist/cjs/mdns/MdnsBroadcaster.d.ts +0 -34
  387. package/dist/cjs/mdns/MdnsBroadcaster.d.ts.map +0 -1
  388. package/dist/cjs/mdns/MdnsBroadcaster.js +0 -365
  389. package/dist/cjs/mdns/MdnsBroadcaster.js.map +0 -6
  390. package/dist/cjs/mdns/MdnsInstanceBroadcaster.d.ts +0 -28
  391. package/dist/cjs/mdns/MdnsInstanceBroadcaster.d.ts.map +0 -1
  392. package/dist/cjs/mdns/MdnsInstanceBroadcaster.js +0 -87
  393. package/dist/cjs/mdns/MdnsInstanceBroadcaster.js.map +0 -6
  394. package/dist/cjs/mdns/MdnsScanner.d.ts.map +0 -1
  395. package/dist/cjs/mdns/MdnsScanner.js.map +0 -6
  396. package/dist/esm/common/InstanceBroadcaster.d.ts.map +0 -1
  397. package/dist/esm/mdns/MdnsBroadcaster.d.ts +0 -34
  398. package/dist/esm/mdns/MdnsBroadcaster.d.ts.map +0 -1
  399. package/dist/esm/mdns/MdnsBroadcaster.js +0 -378
  400. package/dist/esm/mdns/MdnsBroadcaster.js.map +0 -6
  401. package/dist/esm/mdns/MdnsInstanceBroadcaster.d.ts +0 -28
  402. package/dist/esm/mdns/MdnsInstanceBroadcaster.d.ts.map +0 -1
  403. package/dist/esm/mdns/MdnsInstanceBroadcaster.js +0 -67
  404. package/dist/esm/mdns/MdnsInstanceBroadcaster.js.map +0 -6
  405. package/dist/esm/mdns/MdnsScanner.d.ts.map +0 -1
  406. package/dist/esm/mdns/MdnsScanner.js.map +0 -6
  407. package/src/mdns/MdnsBroadcaster.ts +0 -451
  408. package/src/mdns/MdnsInstanceBroadcaster.ts +0 -88
package/src/mdns/index.ts CHANGED
@@ -4,9 +4,8 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- export * from "./MdnsBroadcaster.js";
7
+ export * from "./MdnsClient.js";
8
8
  export * from "./MdnsConsts.js";
9
- export * from "./MdnsInstanceBroadcaster.js";
10
- export * from "./MdnsScanner.js";
11
9
  export * from "./MdnsServer.js";
12
10
  export * from "./MdnsService.js";
11
+ export * from "./MdnsSocket.js";
@@ -23,7 +23,7 @@ import {
23
23
  serverAddressToString,
24
24
  } from "#general";
25
25
  import { InteractionClient, InteractionClientProvider } from "#interaction/InteractionClient.js";
26
- import { MdnsScanner } from "#mdns/MdnsScanner.js";
26
+ import { MdnsClient } from "#mdns/MdnsClient.js";
27
27
  import {
28
28
  CommissioningError,
29
29
  ControllerCommissioningFlow,
@@ -306,7 +306,7 @@ export class ControllerCommissioner {
306
306
  ): Promise<MessageChannel> {
307
307
  let paseChannel: Channel<Uint8Array>;
308
308
  if (device !== undefined) {
309
- logger.info(`Establish PASE to device`, MdnsScanner.discoveryDataDiagnostics(device));
309
+ logger.info(`Establish PASE to device`, MdnsClient.discoveryDataDiagnostics(device));
310
310
  }
311
311
  if (address.type === "udp") {
312
312
  const { ip } = address;
@@ -16,7 +16,7 @@ import {
16
16
  Scanner,
17
17
  } from "../common/Scanner.js";
18
18
  import { Fabric } from "../fabric/Fabric.js";
19
- import { MdnsScanner } from "../mdns/MdnsScanner.js";
19
+ import { MdnsClient } from "../mdns/MdnsClient.js";
20
20
  import { RetransmissionLimitReachedError } from "../protocol/MessageExchange.js";
21
21
 
22
22
  const logger = Logger.get("ControllerDiscovery");
@@ -117,7 +117,7 @@ export class ControllerDiscovery {
117
117
  static async discoverOperationalDevice(
118
118
  fabric: Fabric,
119
119
  peerNodeId: NodeId,
120
- scanner: MdnsScanner,
120
+ scanner: MdnsClient,
121
121
  timeoutSeconds?: number,
122
122
  ignoreExistingRecords?: boolean,
123
123
  ): Promise<OperationalDevice> {
@@ -135,7 +135,7 @@ export class ControllerDiscovery {
135
135
  return foundDevice;
136
136
  }
137
137
 
138
- static cancelOperationalDeviceDiscovery(fabric: Fabric, peerNodeId: NodeId, scanner: MdnsScanner) {
138
+ static cancelOperationalDeviceDiscovery(fabric: Fabric, peerNodeId: NodeId, scanner: MdnsClient) {
139
139
  scanner.cancelOperationalDeviceDiscovery(fabric, peerNodeId);
140
140
  }
141
141
 
@@ -30,7 +30,7 @@ import {
30
30
  Timer,
31
31
  } from "#general";
32
32
  import { SubscriptionClient } from "#interaction/SubscriptionClient.js";
33
- import { MdnsScanner } from "#mdns/MdnsScanner.js";
33
+ import { MdnsClient } from "#mdns/MdnsClient.js";
34
34
  import { PeerAddress, PeerAddressMap } from "#peer/PeerAddress.js";
35
35
  import { ChannelManager } from "#protocol/ChannelManager.js";
36
36
  import { ExchangeManager } from "#protocol/ExchangeManager.js";
@@ -86,7 +86,7 @@ interface RunningDiscovery {
86
86
  type: NodeDiscoveryType;
87
87
  promises?: (() => Promise<MessageChannel>)[];
88
88
  stopTimerFunc?: (() => void) | undefined;
89
- mdnsScanner?: MdnsScanner;
89
+ mdnsClient?: MdnsClient;
90
90
  }
91
91
 
92
92
  /**
@@ -147,7 +147,13 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
147
147
  this.#peersByAddress.delete(peer.address);
148
148
  });
149
149
 
150
- this.#sessions.resubmissionStarted.on(this.#handleResubmissionStarted.bind(this));
150
+ this.#sessions.retry.on((session, count) => {
151
+ if (count !== 1) {
152
+ return;
153
+ }
154
+
155
+ this.#handleFirstRetry(session);
156
+ });
151
157
 
152
158
  /** A channel was added by ourselves */
153
159
  this.#channels.added.on((address, msgChannel) => {
@@ -375,7 +381,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
375
381
  }
376
382
 
377
383
  async close() {
378
- for (const [address, { stopTimerFunc, mdnsScanner }] of this.#runningPeerDiscoveries.entries()) {
384
+ for (const [address, { stopTimerFunc, mdnsClient: mdnsScanner }] of this.#runningPeerDiscoveries.entries()) {
379
385
  stopTimerFunc?.();
380
386
 
381
387
  // This ends discovery without triggering promises
@@ -442,7 +448,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
442
448
  throw new ImplementationError("Cannot set retransmission discovery type.");
443
449
  }
444
450
 
445
- const mdnsScanner = this.#scanners.scannerFor(ChannelType.UDP) as MdnsScanner | undefined;
451
+ const mdnsScanner = this.#scanners.scannerFor(ChannelType.UDP) as MdnsClient | undefined;
446
452
  if (!mdnsScanner) {
447
453
  throw new ImplementationError("Cannot discover device without mDNS scanner.");
448
454
  }
@@ -593,7 +599,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
593
599
  type: requestedDiscoveryType,
594
600
  promises: discoveryPromises,
595
601
  stopTimerFunc,
596
- mdnsScanner,
602
+ mdnsClient: mdnsScanner,
597
603
  });
598
604
 
599
605
  return await anyPromise(discoveryPromises).finally(() => {
@@ -765,7 +771,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
765
771
  return lastKnownAddress;
766
772
  }
767
773
 
768
- const mdnsScanner = this.#scanners.scannerFor(ChannelType.UDP) as MdnsScanner | undefined;
774
+ const mdnsScanner = this.#scanners.scannerFor(ChannelType.UDP) as MdnsClient | undefined;
769
775
  const discoveredAddresses = mdnsScanner?.getDiscoveredOperationalDevice(
770
776
  this.#sessions.fabricFor(address),
771
777
  address.nodeId,
@@ -810,7 +816,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
810
816
  if (this.#runningPeerDiscoveries.has(address)) {
811
817
  logger.info(`Found ${address} during discovery, cancel discovery.`);
812
818
  // We are currently discovering this node, so we need to update the discovery data
813
- const { mdnsScanner } = this.#runningPeerDiscoveries.get(address) ?? {};
819
+ const { mdnsClient: mdnsScanner } = this.#runningPeerDiscoveries.get(address) ?? {};
814
820
 
815
821
  // This ends discovery and triggers the promises
816
822
  mdnsScanner?.cancelOperationalDeviceDiscovery(this.#sessions.fabricFor(address), address.nodeId, true);
@@ -821,7 +827,7 @@ export class PeerSet implements ImmutableSet<OperationalPeer>, ObservableSet<Ope
821
827
  return this.#peersByAddress.get(address)?.operationalAddress;
822
828
  }
823
829
 
824
- #handleResubmissionStarted(session: Session) {
830
+ #handleFirstRetry(session: Session) {
825
831
  if (!session.isSecure || (session as SecureSession).fabric === undefined) {
826
832
  // For insecure sessions from CASE/PASE or not yet fabric bound session establishments we do not need to do anything
827
833
  return;
@@ -4,25 +4,14 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import { CommissioningMode, CommissioningModeInstanceData, InstanceBroadcaster } from "#common/InstanceBroadcaster.js";
7
+ import { Advertisement } from "#advertisement/Advertisement.js";
8
+ import { Advertiser } from "#advertisement/Advertiser.js";
9
+ import { ServiceDescription } from "#advertisement/ServiceDescription.js";
8
10
  import { Fabric } from "#fabric/Fabric.js";
9
11
  import { FabricManager } from "#fabric/FabricManager.js";
10
- import {
11
- AsyncObservable,
12
- Diagnostic,
13
- Environment,
14
- Environmental,
15
- Logger,
16
- MatterAggregateError,
17
- Mutex,
18
- ObserverGroup,
19
- Time,
20
- Timer,
21
- } from "#general";
12
+ import { Environment, Environmental, MatterAggregateError, ObserverGroup } from "#general";
13
+ import { SecureSession } from "#session/SecureSession.js";
22
14
  import { SessionManager } from "#session/SessionManager.js";
23
- import { DEVICE_ANNOUNCEMENT_DURATION_MS, DEVICE_ANNOUNCEMENT_INTERVAL_MS } from "#types";
24
-
25
- const logger = Logger.get("DeviceAdvertiser");
26
15
 
27
16
  /**
28
17
  * Interfaces the {@link DeviceAdvertiser} with other components.
@@ -36,51 +25,81 @@ export interface DeviceAdvertiserContext {
36
25
  * Advertises a node for commissioning (if uncommissioned) or operationally (if commissioned).
37
26
  */
38
27
  export class DeviceAdvertiser {
39
- readonly #context: DeviceAdvertiserContext;
40
- readonly #broadcasters = new Set<InstanceBroadcaster>();
41
- readonly #timedOut = AsyncObservable<[]>();
42
- readonly #operationalModeEnabled = new AsyncObservable<[]>();
43
- readonly #operationalModeEnded = new AsyncObservable<[]>();
44
- readonly #observers = new ObserverGroup();
45
- #interval: Timer;
46
- #startTime: number | null = null;
28
+ #context: DeviceAdvertiserContext;
29
+ #advertisers = new Set<Advertiser>();
30
+ #observers = new ObserverGroup();
31
+ #isOperational = false;
47
32
  #isClosing = false;
48
- #commissioningMode = CommissioningMode.NotCommissioning;
49
-
50
- // Currently we do not put much effort into synchronizing announcements as it probably isn't really necessary. But
51
- // this mutex prevents automated announcements from piling up and allows us to ensure announcements are complete on
52
- // close
53
- #mutex = new Mutex(this);
33
+ #commissioningService?: ServiceDescription;
54
34
 
55
35
  constructor(context: DeviceAdvertiserContext) {
56
36
  this.#context = context;
37
+ const { fabrics, sessions } = this.#context;
57
38
 
58
- this.#interval = Time.getPeriodicTimer("Server node announcement", DEVICE_ANNOUNCEMENT_INTERVAL_MS, () =>
59
- // Announcement needs to await a previous announcement because otherwise in testing at least announcement
60
- // may crash if started simultaneously
61
- this.#mutex.run(this.advertise.bind(this)),
62
- );
39
+ // When a fabric is added, begin advertising automatically if in operational mode
40
+ this.#observers.on(fabrics.events.added, fabric => {
41
+ if (!this.#isOperational) {
42
+ return;
43
+ }
44
+
45
+ this.#advertiseFabric(fabric, "startup");
46
+ });
47
+
48
+ // When a fabric is deleted, cancel any active advertisement
49
+ this.#observers.on(fabrics.events.deleted, fabric => {
50
+ Advertisement.cancelAll(this.#advertisements(ad => ad.isOperational() && ad.description.fabric === fabric));
51
+ });
52
+
53
+ // When an operational session is established, notify relevant advertisers so they can stop advertising if so
54
+ // configured
55
+ this.#observers.on(sessions.sessions.added, session => {
56
+ const fabricIndex = session.fabric?.fabricIndex;
57
+ const fabric = fabricIndex ? fabrics.findByIndex(fabricIndex) : undefined;
58
+ if (!fabric) {
59
+ return;
60
+ }
63
61
 
64
- this.#observers.on(this.#context.fabrics.events.deleted, () => {
65
- if (this.#context.fabrics.length === 0) {
66
- // Last fabric got removed, so expire all announcements
67
- this.#mutex.run(this.#exitOperationalMode.bind(this));
68
- } else {
69
- // At least one fabric is still present, so re-announce
70
- this.#mutex.run(() => this.advertise(true));
62
+ for (const advertiser of this.#advertisers) {
63
+ const ad = advertiser.advertisementForFabric(fabric);
64
+ if (ad) {
65
+ ad.serviceConnected();
66
+ }
71
67
  }
72
68
  });
73
69
 
74
- this.#observers.on(this.#context.sessions.resubmissionStarted, (session?) => {
75
- logger.debug(`Resubmission started, re-announce node ${session?.nodeId}`);
76
- this.#mutex.run(() => this.advertise(true));
70
+ // When a session is closed, conditionally resume broadcast
71
+ this.#observers.on(sessions.sessions.deleted, session => {
72
+ const fabricIndex = session.fabric?.fabricIndex;
73
+ const fabric = fabricIndex ? fabrics.findByIndex(fabricIndex) : undefined;
74
+
75
+ // If this was an operational connection, readvertise if we're no longer connected to the peer
76
+ if (fabric) {
77
+ if (fabric.hasSessionForPeer(session.peerNodeId)) {
78
+ return;
79
+ }
80
+
81
+ for (const advertiser of this.#advertisers) {
82
+ const ad = advertiser.advertisementForFabric(fabric);
83
+ if (ad) {
84
+ ad.serviceDisconnected();
85
+ }
86
+ }
87
+
88
+ return;
89
+ }
90
+
91
+ // If we're in commissioning mode, resume advertising for commissioning
92
+ this.#startCommissioningAdvertisement();
77
93
  });
78
94
 
79
- this.#observers.on(this.#context.sessions.subscriptionsChanged, (_session, subscription) => {
80
- if (subscription.isCanceledByPeer) {
81
- logger.debug(`Subscription canceled by peer, re-announce`);
82
- this.#mutex.run(this.startAdvertising.bind(this));
95
+ // Trigger retransmission broadcast on retry
96
+ this.#observers.on(sessions.retry, session => {
97
+ if (!session.isSecure || !(session as SecureSession).fabric) {
98
+ return;
83
99
  }
100
+
101
+ // Each time we retry a transmission, also trigger retry broadcast for associated fabric
102
+ this.#advertiseFabric(session.associatedFabric, "retransmit");
84
103
  });
85
104
  }
86
105
 
@@ -98,146 +117,137 @@ export class DeviceAdvertiser {
98
117
  }
99
118
 
100
119
  /**
101
- * Emitted when the advertising window closes with no response.
120
+ * Advertise the device as commissionable.
102
121
  */
103
- get timedOut() {
104
- return this.#timedOut;
122
+ enterCommissioningMode(description: ServiceDescription.Commissionable) {
123
+ this.#commissioningService = description;
124
+ this.#startCommissioningAdvertisement();
105
125
  }
106
126
 
107
127
  /**
108
- * Emitted when the device stops advertising due to decommissioning.
128
+ * Begin automatic broadcast for commissioning if in commissionable mode.
109
129
  */
110
- get operationalModeEnded() {
111
- return this.#operationalModeEnded;
112
- }
130
+ #startCommissioningAdvertisement() {
131
+ if (this.#isClosing) {
132
+ return;
133
+ }
113
134
 
114
- /**
115
- * Emitted when the device starts advertising in operational mode.
116
- */
117
- get operationalModeEnabled() {
118
- return this.#operationalModeEnabled;
119
- }
135
+ if (this.#commissioningService === undefined) {
136
+ return;
137
+ }
120
138
 
121
- async enterCommissioningMode(mode: CommissioningMode, deviceData: CommissioningModeInstanceData) {
122
- this.#commissioningMode = mode;
123
- for (const broadcaster of this.#broadcasters) {
124
- await broadcaster.setCommissionMode(mode, deviceData);
139
+ for (const advertiser of this.#advertisers) {
140
+ advertiser.advertise(this.#commissioningService, "startup");
125
141
  }
126
- await this.startAdvertising();
127
142
  }
128
143
 
129
- async exitCommissioningMode() {
130
- this.#commissioningMode = CommissioningMode.NotCommissioning;
131
- this.#interval.stop();
132
- this.#startTime = null;
133
- for (const broadcaster of this.#broadcasters) {
134
- await broadcaster.expireCommissioningAnnouncement();
144
+ /**
145
+ * Cease advertising the device as commissionable.
146
+ */
147
+ exitCommissioningMode() {
148
+ if (!this.#commissioningService) {
149
+ return;
135
150
  }
151
+
152
+ this.#commissioningService = undefined;
153
+ return Advertisement.closeAll(this.#advertisements(ad => ad.isCommissioning()));
136
154
  }
137
155
 
138
- async startAdvertising() {
139
- if (this.#isClosing) return;
140
- if (this.#interval.isRunning) {
141
- this.#interval.stop();
156
+ /**
157
+ * Advertise the device as operational.
158
+ */
159
+ enterOperationalMode() {
160
+ if (this.#isOperational) {
161
+ return;
142
162
  }
143
- this.#startTime = Time.nowMs();
144
- this.#interval.start();
145
- await this.advertise();
146
- }
147
163
 
148
- async advertise(once = false) {
149
- if (!once) {
150
- // Stop announcement if duration is reached
151
- if (this.#startTime !== null && Time.nowMs() - this.#startTime > DEVICE_ANNOUNCEMENT_DURATION_MS) {
152
- logger.debug("Announcement duration reached, stop announcing");
153
- await this.#timedOut.emit();
154
- return;
155
- }
164
+ this.#isOperational = true;
156
165
 
157
- if (this.#commissioningMode !== CommissioningMode.NotCommissioning) {
158
- // Re-Announce but do not reset Fabrics
159
- for (const broadcaster of this.#broadcasters) {
160
- await broadcaster.announce();
161
- }
162
- return;
163
- }
166
+ this.#startOperationalAdvertisement();
167
+ }
168
+
169
+ /**
170
+ * Begin automatic broadcast for fabrics if in operational mode.
171
+ */
172
+ #startOperationalAdvertisement() {
173
+ if (!this.#isOperational) {
174
+ return;
164
175
  }
165
176
 
166
- const fabrics = this.#context.fabrics;
167
-
168
- if (fabrics.length) {
169
- let fabricsWithoutSessions = 0;
170
- for (const fabric of fabrics) {
171
- const session = this.#context.sessions.getSessionForNode(fabric.addressOf(fabric.rootNodeId));
172
- if (session === undefined || !session.isSecure || session.subscriptions.size === 0) {
173
- fabricsWithoutSessions++;
174
- logger.debug(
175
- "Announcing",
176
- Diagnostic.dict({ fabricIndex: fabric.fabricIndex, fabricId: fabric.fabricId }),
177
- );
178
- }
179
- }
180
- for (const broadcaster of this.#broadcasters) {
181
- await broadcaster.setFabrics(fabrics.fabrics);
182
- if (fabricsWithoutSessions > 0 || this.#commissioningMode !== CommissioningMode.NotCommissioning) {
183
- await broadcaster.announce();
184
- }
177
+ const fabricsAdvertised = new Set(
178
+ this.#advertisements(ad => ad.isOperational()).map(
179
+ ad => (ad as Advertisement<ServiceDescription.Operational>).description.fabric,
180
+ ),
181
+ );
182
+
183
+ for (const fabric of this.#context.fabrics) {
184
+ if (!fabricsAdvertised.has(fabric)) {
185
+ this.#advertiseFabric(fabric, "startup");
185
186
  }
186
- } else {
187
- // Expire operational Fabric announcements (if fabric got just deleted)
188
- await this.#exitOperationalMode();
189
- await this.#operationalModeEnded.emit();
190
187
  }
191
188
  }
192
189
 
193
- async advertiseFabrics(fabrics: Fabric[], expireCommissioningAnnouncement = false) {
194
- if (expireCommissioningAnnouncement) {
195
- // TODO: For real "non-ethernet-only" cases like Wifi or Thread devices this might still be too early.
196
- // In these cases we might need an option to (re-)create mdns broadcaster just when interface
197
- // is connected
198
- await this.#operationalModeEnabled.emit();
199
- }
200
- for (const broadcaster of this.#broadcasters) {
201
- await broadcaster.setFabrics(fabrics, expireCommissioningAnnouncement);
202
- await broadcaster.announce();
190
+ /**
191
+ * Cease advertising the device as operational.
192
+ */
193
+ exitOperationalMode() {
194
+ if (!this.#isOperational) {
195
+ return;
203
196
  }
197
+
198
+ this.#isOperational = false;
199
+
200
+ Advertisement.cancelAll(this.#advertisements(ad => ad.isOperational()));
204
201
  }
205
202
 
206
- async #exitOperationalMode() {
207
- for (const broadcaster of this.#broadcasters) {
208
- await broadcaster.expireFabricAnnouncement();
209
- }
203
+ /**
204
+ * Reset automatic advertisement.
205
+ *
206
+ * This is useful when there is a network change.
207
+ */
208
+ restartAdvertisement() {
209
+ this.#startCommissioningAdvertisement();
210
+ this.#startOperationalAdvertisement();
210
211
  }
211
212
 
212
213
  async close() {
213
214
  this.#isClosing = true;
214
- await this.#mutex;
215
215
  this.#observers.close();
216
- this.#interval.stop();
217
- await this.clearBroadcasters();
216
+ await this.clearAdvertisers();
217
+ }
218
+
219
+ hasAdvertiser(advertiser: Advertiser) {
220
+ return this.#advertisers.has(advertiser);
221
+ }
222
+
223
+ addAdvertiser(advertiser: Advertiser) {
224
+ this.#advertisers.add(advertiser);
218
225
  }
219
226
 
220
- hasBroadcaster(broadcaster: InstanceBroadcaster) {
221
- return this.#broadcasters.has(broadcaster);
227
+ async deleteAdvertiser(advertiser: Advertiser) {
228
+ this.#advertisers.delete(advertiser);
229
+ await advertiser.close();
222
230
  }
223
231
 
224
- addBroadcaster(broadcaster: InstanceBroadcaster) {
225
- this.#broadcasters.add(broadcaster);
232
+ async clearAdvertisers() {
233
+ const advertisers = [...this.#advertisers];
234
+ this.#advertisers.clear();
235
+ await MatterAggregateError.allSettled(advertisers.map(advertiser => advertiser.close()));
226
236
  }
227
237
 
228
- async deleteBroadcaster(broadcaster: InstanceBroadcaster) {
229
- if (this.#broadcasters.delete(broadcaster)) {
230
- await broadcaster.expireAllAnnouncements();
238
+ #advertiseFabric(fabric: Fabric, event: Advertiser.BroadcastEvent) {
239
+ if (this.#isClosing) {
240
+ return;
241
+ }
242
+
243
+ for (const advertiser of this.#advertisers) {
244
+ advertiser.advertise(ServiceDescription.Operational({ fabric }), event);
231
245
  }
232
246
  }
233
247
 
234
- async clearBroadcasters() {
235
- const broadcasters = [...this.#broadcasters];
236
- const closed = MatterAggregateError.allSettled(
237
- broadcasters.map(b => b.close()),
238
- "Error closing broadcasters",
239
- ).catch(error => logger.error(error));
240
- this.#broadcasters.clear();
241
- await closed;
248
+ #advertisements(predicate?: (ad: Advertisement) => boolean) {
249
+ return [...this.#advertisers].flatMap(advertiser =>
250
+ predicate ? advertiser.filter(predicate) : [...advertiser.advertisements],
251
+ );
242
252
  }
243
253
  }