@matter/protocol 0.16.0-alpha.0-20250809-ee8375bcb → 0.16.0-alpha.0-20250810-5c91a95d2

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 (366) 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/codec/BtpCodec.d.ts +1 -1
  65. package/dist/cjs/codec/BtpCodec.d.ts.map +1 -1
  66. package/dist/cjs/codec/BtpCodec.js +4 -4
  67. package/dist/cjs/codec/BtpCodec.js.map +1 -1
  68. package/dist/cjs/common/Scanner.d.ts +1 -25
  69. package/dist/cjs/common/Scanner.d.ts.map +1 -1
  70. package/dist/cjs/common/Scanner.js +1 -18
  71. package/dist/cjs/common/Scanner.js.map +1 -1
  72. package/dist/cjs/common/SupportedTransportsBitmap.d.ts +33 -0
  73. package/dist/cjs/common/SupportedTransportsBitmap.d.ts.map +1 -0
  74. package/dist/cjs/common/SupportedTransportsBitmap.js +45 -0
  75. package/dist/cjs/common/SupportedTransportsBitmap.js.map +6 -0
  76. package/dist/cjs/common/index.d.ts +1 -1
  77. package/dist/cjs/common/index.d.ts.map +1 -1
  78. package/dist/cjs/common/index.js +1 -1
  79. package/dist/cjs/common/index.js.map +1 -1
  80. package/dist/cjs/fabric/Fabric.d.ts +1 -0
  81. package/dist/cjs/fabric/Fabric.d.ts.map +1 -1
  82. package/dist/cjs/fabric/Fabric.js +7 -0
  83. package/dist/cjs/fabric/Fabric.js.map +1 -1
  84. package/dist/cjs/index.d.ts +1 -0
  85. package/dist/cjs/index.d.ts.map +1 -1
  86. package/dist/cjs/index.js +1 -0
  87. package/dist/cjs/index.js.map +1 -1
  88. package/dist/{esm/mdns/MdnsScanner.d.ts → cjs/mdns/MdnsClient.d.ts} +11 -14
  89. package/dist/cjs/mdns/MdnsClient.d.ts.map +1 -0
  90. package/dist/cjs/mdns/{MdnsScanner.js → MdnsClient.js} +35 -90
  91. package/dist/cjs/mdns/MdnsClient.js.map +6 -0
  92. package/dist/cjs/mdns/MdnsConsts.d.ts +11 -2
  93. package/dist/cjs/mdns/MdnsConsts.d.ts.map +1 -1
  94. package/dist/cjs/mdns/MdnsConsts.js +31 -4
  95. package/dist/cjs/mdns/MdnsConsts.js.map +1 -1
  96. package/dist/cjs/mdns/MdnsServer.d.ts +13 -22
  97. package/dist/cjs/mdns/MdnsServer.d.ts.map +1 -1
  98. package/dist/cjs/mdns/MdnsServer.js +55 -140
  99. package/dist/cjs/mdns/MdnsServer.js.map +2 -2
  100. package/dist/cjs/mdns/MdnsService.d.ts +4 -5
  101. package/dist/cjs/mdns/MdnsService.d.ts.map +1 -1
  102. package/dist/cjs/mdns/MdnsService.js +22 -23
  103. package/dist/cjs/mdns/MdnsService.js.map +1 -1
  104. package/dist/cjs/mdns/MdnsSocket.d.ts +32 -0
  105. package/dist/cjs/mdns/MdnsSocket.d.ts.map +1 -0
  106. package/dist/cjs/mdns/MdnsSocket.js +144 -0
  107. package/dist/cjs/mdns/MdnsSocket.js.map +6 -0
  108. package/dist/cjs/mdns/index.d.ts +2 -3
  109. package/dist/cjs/mdns/index.d.ts.map +1 -1
  110. package/dist/cjs/mdns/index.js +2 -3
  111. package/dist/cjs/mdns/index.js.map +1 -1
  112. package/dist/cjs/peer/ControllerCommissioner.js +2 -2
  113. package/dist/cjs/peer/ControllerCommissioner.js.map +1 -1
  114. package/dist/cjs/peer/ControllerDiscovery.d.ts +3 -3
  115. package/dist/cjs/peer/ControllerDiscovery.d.ts.map +1 -1
  116. package/dist/cjs/peer/ControllerDiscovery.js.map +1 -1
  117. package/dist/cjs/peer/PeerSet.d.ts.map +1 -1
  118. package/dist/cjs/peer/PeerSet.js +10 -5
  119. package/dist/cjs/peer/PeerSet.js.map +1 -1
  120. package/dist/cjs/protocol/DeviceAdvertiser.d.ts +23 -18
  121. package/dist/cjs/protocol/DeviceAdvertiser.d.ts.map +1 -1
  122. package/dist/cjs/protocol/DeviceAdvertiser.js +130 -129
  123. package/dist/cjs/protocol/DeviceAdvertiser.js.map +1 -1
  124. package/dist/cjs/protocol/DeviceCommissioner.d.ts +0 -1
  125. package/dist/cjs/protocol/DeviceCommissioner.d.ts.map +1 -1
  126. package/dist/cjs/protocol/DeviceCommissioner.js +44 -44
  127. package/dist/cjs/protocol/DeviceCommissioner.js.map +1 -1
  128. package/dist/cjs/protocol/ExchangeManager.js +1 -1
  129. package/dist/cjs/protocol/ExchangeManager.js.map +1 -1
  130. package/dist/cjs/protocol/MessageExchange.d.ts +1 -1
  131. package/dist/cjs/protocol/MessageExchange.d.ts.map +1 -1
  132. package/dist/cjs/protocol/MessageExchange.js +6 -8
  133. package/dist/cjs/protocol/MessageExchange.js.map +1 -1
  134. package/dist/cjs/session/NodeSession.d.ts +1 -0
  135. package/dist/cjs/session/NodeSession.d.ts.map +1 -1
  136. package/dist/cjs/session/NodeSession.js +3 -0
  137. package/dist/cjs/session/NodeSession.js.map +1 -1
  138. package/dist/cjs/session/Session.d.ts +3 -33
  139. package/dist/cjs/session/Session.d.ts.map +1 -1
  140. package/dist/cjs/session/Session.js +4 -9
  141. package/dist/cjs/session/Session.js.map +1 -1
  142. package/dist/cjs/session/SessionIntervals.d.ts +36 -0
  143. package/dist/cjs/session/SessionIntervals.d.ts.map +1 -0
  144. package/dist/cjs/session/SessionIntervals.js +51 -0
  145. package/dist/cjs/session/SessionIntervals.js.map +6 -0
  146. package/dist/cjs/session/SessionManager.d.ts +1 -1
  147. package/dist/cjs/session/SessionManager.d.ts.map +1 -1
  148. package/dist/cjs/session/SessionManager.js +11 -12
  149. package/dist/cjs/session/SessionManager.js.map +1 -1
  150. package/dist/cjs/session/pase/PaseMessages.js +2 -2
  151. package/dist/cjs/session/pase/PaseMessages.js.map +1 -1
  152. package/dist/esm/advertisement/Advertisement.d.ts +119 -0
  153. package/dist/esm/advertisement/Advertisement.d.ts.map +1 -0
  154. package/dist/esm/advertisement/Advertisement.js +247 -0
  155. package/dist/esm/advertisement/Advertisement.js.map +6 -0
  156. package/dist/esm/advertisement/Advertiser.d.ts +50 -0
  157. package/dist/esm/advertisement/Advertiser.d.ts.map +1 -0
  158. package/dist/esm/advertisement/Advertiser.js +61 -0
  159. package/dist/esm/advertisement/Advertiser.js.map +6 -0
  160. package/dist/esm/advertisement/CommissioningMode.d.ts +11 -0
  161. package/dist/esm/advertisement/CommissioningMode.d.ts.map +1 -0
  162. package/dist/esm/advertisement/CommissioningMode.js +15 -0
  163. package/dist/esm/advertisement/CommissioningMode.js.map +6 -0
  164. package/dist/esm/{common/InstanceBroadcaster.d.ts → advertisement/PairingHintBitmap.d.ts} +3 -69
  165. package/dist/esm/advertisement/PairingHintBitmap.d.ts.map +1 -0
  166. package/dist/esm/{common/InstanceBroadcaster.js → advertisement/PairingHintBitmap.js} +2 -9
  167. package/dist/esm/{common/InstanceBroadcaster.js.map → advertisement/PairingHintBitmap.js.map} +3 -3
  168. package/dist/esm/advertisement/ServiceDescription.d.ts +70 -0
  169. package/dist/esm/advertisement/ServiceDescription.d.ts.map +1 -0
  170. package/dist/esm/advertisement/ServiceDescription.js +41 -0
  171. package/dist/esm/advertisement/ServiceDescription.js.map +6 -0
  172. package/dist/esm/advertisement/ble/BleAdvertisement.d.ts +16 -0
  173. package/dist/esm/advertisement/ble/BleAdvertisement.d.ts.map +1 -0
  174. package/dist/esm/advertisement/ble/BleAdvertisement.js +65 -0
  175. package/dist/esm/advertisement/ble/BleAdvertisement.js.map +6 -0
  176. package/dist/esm/advertisement/ble/BleAdvertiser.d.ts +66 -0
  177. package/dist/esm/advertisement/ble/BleAdvertiser.d.ts.map +1 -0
  178. package/dist/esm/advertisement/ble/BleAdvertiser.js +63 -0
  179. package/dist/esm/advertisement/ble/BleAdvertiser.js.map +6 -0
  180. package/dist/esm/advertisement/ble/index.d.ts +8 -0
  181. package/dist/esm/advertisement/ble/index.d.ts.map +1 -0
  182. package/dist/esm/advertisement/ble/index.js +8 -0
  183. package/dist/esm/advertisement/ble/index.js.map +6 -0
  184. package/dist/esm/advertisement/index.d.ts +13 -0
  185. package/dist/esm/advertisement/index.d.ts.map +1 -0
  186. package/dist/esm/advertisement/index.js +13 -0
  187. package/dist/esm/advertisement/index.js.map +6 -0
  188. package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts +21 -0
  189. package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.d.ts.map +1 -0
  190. package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.js +95 -0
  191. package/dist/esm/advertisement/mdns/CommissionableMdnsAdvertisement.js.map +6 -0
  192. package/dist/esm/advertisement/mdns/CommissionerMdnsAdvertisement.d.ts +20 -0
  193. package/dist/esm/advertisement/mdns/CommissionerMdnsAdvertisement.d.ts.map +1 -0
  194. package/dist/esm/advertisement/mdns/CommissionerMdnsAdvertisement.js +54 -0
  195. package/dist/esm/advertisement/mdns/CommissionerMdnsAdvertisement.js.map +6 -0
  196. package/dist/esm/advertisement/mdns/MdnsAdvertisement.d.ts +40 -0
  197. package/dist/esm/advertisement/mdns/MdnsAdvertisement.d.ts.map +1 -0
  198. package/dist/esm/advertisement/mdns/MdnsAdvertisement.js +125 -0
  199. package/dist/esm/advertisement/mdns/MdnsAdvertisement.js.map +6 -0
  200. package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts +99 -0
  201. package/dist/esm/advertisement/mdns/MdnsAdvertiser.d.ts.map +1 -0
  202. package/dist/esm/advertisement/mdns/MdnsAdvertiser.js +146 -0
  203. package/dist/esm/advertisement/mdns/MdnsAdvertiser.js.map +6 -0
  204. package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.d.ts +18 -0
  205. package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.d.ts.map +1 -0
  206. package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.js +40 -0
  207. package/dist/esm/advertisement/mdns/OperationalMdnsAdvertisement.js.map +6 -0
  208. package/dist/esm/advertisement/mdns/index.d.ts +11 -0
  209. package/dist/esm/advertisement/mdns/index.d.ts.map +1 -0
  210. package/dist/esm/advertisement/mdns/index.js +11 -0
  211. package/dist/esm/advertisement/mdns/index.js.map +6 -0
  212. package/dist/esm/ble/Ble.d.ts +7 -5
  213. package/dist/esm/ble/Ble.d.ts.map +1 -1
  214. package/dist/esm/ble/Ble.js.map +1 -1
  215. package/dist/esm/codec/BtpCodec.d.ts +1 -1
  216. package/dist/esm/codec/BtpCodec.d.ts.map +1 -1
  217. package/dist/esm/codec/BtpCodec.js +4 -4
  218. package/dist/esm/codec/BtpCodec.js.map +1 -1
  219. package/dist/esm/common/Scanner.d.ts +1 -25
  220. package/dist/esm/common/Scanner.d.ts.map +1 -1
  221. package/dist/esm/common/Scanner.js +1 -18
  222. package/dist/esm/common/Scanner.js.map +1 -1
  223. package/dist/esm/common/SupportedTransportsBitmap.d.ts +33 -0
  224. package/dist/esm/common/SupportedTransportsBitmap.d.ts.map +1 -0
  225. package/dist/esm/common/SupportedTransportsBitmap.js +25 -0
  226. package/dist/esm/common/SupportedTransportsBitmap.js.map +6 -0
  227. package/dist/esm/common/index.d.ts +1 -1
  228. package/dist/esm/common/index.d.ts.map +1 -1
  229. package/dist/esm/common/index.js +1 -1
  230. package/dist/esm/fabric/Fabric.d.ts +1 -0
  231. package/dist/esm/fabric/Fabric.d.ts.map +1 -1
  232. package/dist/esm/fabric/Fabric.js +7 -0
  233. package/dist/esm/fabric/Fabric.js.map +1 -1
  234. package/dist/esm/index.d.ts +1 -0
  235. package/dist/esm/index.d.ts.map +1 -1
  236. package/dist/esm/index.js +1 -0
  237. package/dist/esm/index.js.map +1 -1
  238. package/dist/{cjs/mdns/MdnsScanner.d.ts → esm/mdns/MdnsClient.d.ts} +11 -14
  239. package/dist/esm/mdns/MdnsClient.d.ts.map +1 -0
  240. package/dist/esm/mdns/{MdnsScanner.js → MdnsClient.js} +34 -92
  241. package/dist/esm/mdns/MdnsClient.js.map +6 -0
  242. package/dist/esm/mdns/MdnsConsts.d.ts +11 -2
  243. package/dist/esm/mdns/MdnsConsts.d.ts.map +1 -1
  244. package/dist/esm/mdns/MdnsConsts.js +31 -4
  245. package/dist/esm/mdns/MdnsConsts.js.map +1 -1
  246. package/dist/esm/mdns/MdnsServer.d.ts +13 -22
  247. package/dist/esm/mdns/MdnsServer.d.ts.map +1 -1
  248. package/dist/esm/mdns/MdnsServer.js +57 -145
  249. package/dist/esm/mdns/MdnsServer.js.map +2 -2
  250. package/dist/esm/mdns/MdnsService.d.ts +4 -5
  251. package/dist/esm/mdns/MdnsService.d.ts.map +1 -1
  252. package/dist/esm/mdns/MdnsService.js +22 -24
  253. package/dist/esm/mdns/MdnsService.js.map +1 -1
  254. package/dist/esm/mdns/MdnsSocket.d.ts +32 -0
  255. package/dist/esm/mdns/MdnsSocket.d.ts.map +1 -0
  256. package/dist/esm/mdns/MdnsSocket.js +133 -0
  257. package/dist/esm/mdns/MdnsSocket.js.map +6 -0
  258. package/dist/esm/mdns/index.d.ts +2 -3
  259. package/dist/esm/mdns/index.d.ts.map +1 -1
  260. package/dist/esm/mdns/index.js +2 -3
  261. package/dist/esm/mdns/index.js.map +1 -1
  262. package/dist/esm/peer/ControllerCommissioner.js +2 -2
  263. package/dist/esm/peer/ControllerCommissioner.js.map +1 -1
  264. package/dist/esm/peer/ControllerDiscovery.d.ts +3 -3
  265. package/dist/esm/peer/ControllerDiscovery.d.ts.map +1 -1
  266. package/dist/esm/peer/ControllerDiscovery.js.map +1 -1
  267. package/dist/esm/peer/PeerSet.d.ts.map +1 -1
  268. package/dist/esm/peer/PeerSet.js +10 -5
  269. package/dist/esm/peer/PeerSet.js.map +1 -1
  270. package/dist/esm/protocol/DeviceAdvertiser.d.ts +23 -18
  271. package/dist/esm/protocol/DeviceAdvertiser.d.ts.map +1 -1
  272. package/dist/esm/protocol/DeviceAdvertiser.js +131 -139
  273. package/dist/esm/protocol/DeviceAdvertiser.js.map +1 -1
  274. package/dist/esm/protocol/DeviceCommissioner.d.ts +0 -1
  275. package/dist/esm/protocol/DeviceCommissioner.d.ts.map +1 -1
  276. package/dist/esm/protocol/DeviceCommissioner.js +47 -47
  277. package/dist/esm/protocol/DeviceCommissioner.js.map +1 -1
  278. package/dist/esm/protocol/ExchangeManager.js +1 -1
  279. package/dist/esm/protocol/ExchangeManager.js.map +1 -1
  280. package/dist/esm/protocol/MessageExchange.d.ts +1 -1
  281. package/dist/esm/protocol/MessageExchange.d.ts.map +1 -1
  282. package/dist/esm/protocol/MessageExchange.js +6 -12
  283. package/dist/esm/protocol/MessageExchange.js.map +1 -1
  284. package/dist/esm/session/NodeSession.d.ts +1 -0
  285. package/dist/esm/session/NodeSession.d.ts.map +1 -1
  286. package/dist/esm/session/NodeSession.js +3 -0
  287. package/dist/esm/session/NodeSession.js.map +1 -1
  288. package/dist/esm/session/Session.d.ts +3 -33
  289. package/dist/esm/session/Session.d.ts.map +1 -1
  290. package/dist/esm/session/Session.js +4 -9
  291. package/dist/esm/session/Session.js.map +1 -1
  292. package/dist/esm/session/SessionIntervals.d.ts +36 -0
  293. package/dist/esm/session/SessionIntervals.d.ts.map +1 -0
  294. package/dist/esm/session/SessionIntervals.js +31 -0
  295. package/dist/esm/session/SessionIntervals.js.map +6 -0
  296. package/dist/esm/session/SessionManager.d.ts +1 -1
  297. package/dist/esm/session/SessionManager.d.ts.map +1 -1
  298. package/dist/esm/session/SessionManager.js +10 -14
  299. package/dist/esm/session/SessionManager.js.map +1 -1
  300. package/dist/esm/session/pase/PaseMessages.js +1 -1
  301. package/package.json +6 -6
  302. package/src/advertisement/Advertisement.ts +348 -0
  303. package/src/advertisement/Advertiser.ts +83 -0
  304. package/src/advertisement/CommissioningMode.ts +11 -0
  305. package/src/{common/InstanceBroadcaster.ts → advertisement/PairingHintBitmap.ts} +1 -92
  306. package/src/advertisement/ServiceDescription.ts +110 -0
  307. package/src/advertisement/ble/BleAdvertisement.ts +90 -0
  308. package/src/advertisement/ble/BleAdvertiser.ts +116 -0
  309. package/src/advertisement/ble/index.ts +8 -0
  310. package/src/advertisement/index.ts +13 -0
  311. package/src/advertisement/mdns/CommissionableMdnsAdvertisement.ts +118 -0
  312. package/src/advertisement/mdns/CommissionerMdnsAdvertisement.ts +73 -0
  313. package/src/advertisement/mdns/MdnsAdvertisement.ts +167 -0
  314. package/src/advertisement/mdns/MdnsAdvertiser.ts +248 -0
  315. package/src/advertisement/mdns/OperationalMdnsAdvertisement.ts +50 -0
  316. package/src/advertisement/mdns/index.ts +11 -0
  317. package/src/ble/Ble.ts +8 -5
  318. package/src/codec/BtpCodec.ts +4 -3
  319. package/src/common/Scanner.ts +1 -17
  320. package/src/common/SupportedTransportsBitmap.ts +25 -0
  321. package/src/common/index.ts +1 -1
  322. package/src/fabric/Fabric.ts +8 -0
  323. package/src/index.ts +1 -0
  324. package/src/mdns/{MdnsScanner.ts → MdnsClient.ts} +34 -103
  325. package/src/mdns/MdnsConsts.ts +27 -2
  326. package/src/mdns/MdnsServer.ts +79 -184
  327. package/src/mdns/MdnsService.ts +24 -27
  328. package/src/mdns/MdnsSocket.ts +179 -0
  329. package/src/mdns/index.ts +2 -3
  330. package/src/peer/ControllerCommissioner.ts +2 -2
  331. package/src/peer/ControllerDiscovery.ts +3 -3
  332. package/src/peer/PeerSet.ts +15 -9
  333. package/src/protocol/DeviceAdvertiser.ts +161 -151
  334. package/src/protocol/DeviceCommissioner.ts +65 -75
  335. package/src/protocol/ExchangeManager.ts +1 -1
  336. package/src/protocol/MessageExchange.ts +8 -14
  337. package/src/session/NodeSession.ts +4 -0
  338. package/src/session/Session.ts +6 -42
  339. package/src/session/SessionIntervals.ts +57 -0
  340. package/src/session/SessionManager.ts +9 -13
  341. package/src/session/pase/PaseMessages.ts +1 -1
  342. package/dist/cjs/common/InstanceBroadcaster.d.ts.map +0 -1
  343. package/dist/cjs/common/InstanceBroadcaster.js.map +0 -6
  344. package/dist/cjs/mdns/MdnsBroadcaster.d.ts +0 -34
  345. package/dist/cjs/mdns/MdnsBroadcaster.d.ts.map +0 -1
  346. package/dist/cjs/mdns/MdnsBroadcaster.js +0 -365
  347. package/dist/cjs/mdns/MdnsBroadcaster.js.map +0 -6
  348. package/dist/cjs/mdns/MdnsInstanceBroadcaster.d.ts +0 -28
  349. package/dist/cjs/mdns/MdnsInstanceBroadcaster.d.ts.map +0 -1
  350. package/dist/cjs/mdns/MdnsInstanceBroadcaster.js +0 -87
  351. package/dist/cjs/mdns/MdnsInstanceBroadcaster.js.map +0 -6
  352. package/dist/cjs/mdns/MdnsScanner.d.ts.map +0 -1
  353. package/dist/cjs/mdns/MdnsScanner.js.map +0 -6
  354. package/dist/esm/common/InstanceBroadcaster.d.ts.map +0 -1
  355. package/dist/esm/mdns/MdnsBroadcaster.d.ts +0 -34
  356. package/dist/esm/mdns/MdnsBroadcaster.d.ts.map +0 -1
  357. package/dist/esm/mdns/MdnsBroadcaster.js +0 -378
  358. package/dist/esm/mdns/MdnsBroadcaster.js.map +0 -6
  359. package/dist/esm/mdns/MdnsInstanceBroadcaster.d.ts +0 -28
  360. package/dist/esm/mdns/MdnsInstanceBroadcaster.d.ts.map +0 -1
  361. package/dist/esm/mdns/MdnsInstanceBroadcaster.js +0 -67
  362. package/dist/esm/mdns/MdnsInstanceBroadcaster.js.map +0 -6
  363. package/dist/esm/mdns/MdnsScanner.d.ts.map +0 -1
  364. package/dist/esm/mdns/MdnsScanner.js.map +0 -6
  365. package/src/mdns/MdnsBroadcaster.ts +0 -451
  366. package/src/mdns/MdnsInstanceBroadcaster.ts +0 -88
@@ -0,0 +1,90 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { BtpCodec } from "#codec/BtpCodec.js";
8
+ import { Advertisement } from "../Advertisement.js";
9
+ import { ServiceDescription } from "../ServiceDescription.js";
10
+ import type { BleAdvertiser } from "./BleAdvertiser.js";
11
+
12
+ // Period for "fast" broadcast. See core spec 5.4.2.5.3
13
+ const EARLY_INTERVAL_SLEEP = 30_000;
14
+
15
+ // Period for "medium" broadcast. See core spec 5.4.2.5.3
16
+ const LATE_INTERVAL_SLEEP = 15 * 60_000 - EARLY_INTERVAL_SLEEP;
17
+
18
+ // Period for "extended" broadcast. See core spec 5.4.2.5.3
19
+ const EXTENDED_INTERVAL_SLEEP = 48 * 60 * 60_000 - LATE_INTERVAL_SLEEP;
20
+
21
+ export class BleAdvertisement extends Advertisement<ServiceDescription.Commissionable> {
22
+ declare advertiser: BleAdvertiser;
23
+
24
+ constructor(advertiser: BleAdvertiser, description: ServiceDescription.Commissionable) {
25
+ super(advertiser, "ble:commissioning", description);
26
+ }
27
+
28
+ protected override async run(context: Advertisement.ActivityContext) {
29
+ const {
30
+ peripheral,
31
+ config: { earlyInterval, lateInterval, extendedInterval },
32
+ } = this.advertiser;
33
+
34
+ let aad = this.advertiser.config.aad;
35
+
36
+ let timeout = this.advertiser.config.timeout;
37
+
38
+ let advertisementData = this.#encodedAdvertisement;
39
+
40
+ let isExtended = false;
41
+
42
+ const intervals = [
43
+ { sleepTime: EARLY_INTERVAL_SLEEP, broadcastInterval: earlyInterval },
44
+ { sleepTime: LATE_INTERVAL_SLEEP, broadcastInterval: lateInterval },
45
+ { sleepTime: EXTENDED_INTERVAL_SLEEP, broadcastInterval: extendedInterval },
46
+ ];
47
+
48
+ try {
49
+ for (const { sleepTime, broadcastInterval } of intervals) {
50
+ // Recreate advertisement data for extended announcement
51
+ if (!isExtended && this.isPrivacyMasked) {
52
+ isExtended = true;
53
+ advertisementData = this.#encodedAdvertisement;
54
+ aad = undefined;
55
+ }
56
+
57
+ // Configure BLE peripheral broadcasts at specified interval
58
+ await peripheral.advertise(advertisementData, aad, broadcastInterval);
59
+
60
+ // Wait for timeout at this broadcast interval
61
+ await context.sleep("BLE advertisement interval", Math.min(timeout, sleepTime));
62
+
63
+ timeout -= sleepTime;
64
+ if ((timeout -= sleepTime) <= 0) {
65
+ break;
66
+ }
67
+ }
68
+ } finally {
69
+ await peripheral.stopAdvertising();
70
+ }
71
+ }
72
+
73
+ get #encodedAdvertisement() {
74
+ const { discriminator, vendorId, productId } = this.description;
75
+ const { isPrivacyMasked: isExtendedAnnouncement } = this;
76
+
77
+ return BtpCodec.encodeBleAdvertisementData(
78
+ discriminator,
79
+ isExtendedAnnouncement ? 0 : vendorId,
80
+ isExtendedAnnouncement ? 0 : productId,
81
+ !isExtendedAnnouncement && !!this.advertiser.config.aad?.length,
82
+ isExtendedAnnouncement,
83
+ );
84
+ }
85
+
86
+ isDuplicate() {
87
+ // We only allow a single advertisement per BLE interface
88
+ return true;
89
+ }
90
+ }
@@ -0,0 +1,116 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { BlePeripheralInterface } from "#ble/Ble.js";
8
+ import { ImplementationError } from "#general";
9
+ import { DatatypeModel, FieldElement } from "#model";
10
+ import { MAXIMUM_COMMISSIONING_TIMEOUT_S } from "#types";
11
+ import { Advertisement } from "../Advertisement.js";
12
+ import { Advertiser } from "../Advertiser.js";
13
+ import { CommissioningMode } from "../CommissioningMode.js";
14
+ import { ServiceDescription } from "../ServiceDescription.js";
15
+ import { BleAdvertisement } from "./BleAdvertisement.js";
16
+
17
+ export class BleAdvertiser extends Advertiser {
18
+ #peripheral: BlePeripheralInterface;
19
+ #config: BleAdvertiser.Configuration;
20
+ #isClosed = false;
21
+
22
+ constructor(peripheral: BlePeripheralInterface, options?: BleAdvertiser.Options) {
23
+ super();
24
+
25
+ this.#peripheral = peripheral;
26
+ this.#config = BleAdvertiser.Configuration(options);
27
+ }
28
+
29
+ get peripheral() {
30
+ return this.#peripheral;
31
+ }
32
+
33
+ get config() {
34
+ return this.#config;
35
+ }
36
+
37
+ getAdvertisement(description: ServiceDescription): Advertisement | undefined {
38
+ this.#assertOpen();
39
+
40
+ if (description.kind !== "commissionable" || description.mode !== CommissioningMode.Basic) {
41
+ return;
42
+ }
43
+
44
+ return new BleAdvertisement(this, description);
45
+ }
46
+
47
+ #assertOpen() {
48
+ if (this.#isClosed) {
49
+ throw new ImplementationError("Illegal operation on closed BleBroadcaster");
50
+ }
51
+ }
52
+ }
53
+
54
+ export namespace BleAdvertiser {
55
+ /**
56
+ * Advertisement configuration.
57
+ *
58
+ * All intervals are in milliseconds.
59
+ */
60
+ export interface Configuration {
61
+ /**
62
+ * Additional advertisement data.
63
+ */
64
+ readonly aad?: Uint8Array;
65
+
66
+ /**
67
+ * Advertisement timeout.
68
+ */
69
+ readonly timeout: number;
70
+
71
+ /**
72
+ * Transmission interval for first 30 seconds.
73
+ *
74
+ * Per core spec 5.4.2.5.3 should be 20-60ms.
75
+ */
76
+ readonly earlyInterval: number;
77
+
78
+ /**
79
+ * Transmission interval after first 30 seconds but before 15 minutes.
80
+ *
81
+ * Per core spec 5.4.2.5.3 should be 150-1285ms.
82
+ */
83
+ readonly lateInterval: number;
84
+
85
+ /**
86
+ * Transmission interval after 15 minutes.
87
+ *
88
+ * Per core spec 5.4.2.5.3 should be ~1285ms.
89
+ */
90
+ readonly extendedInterval: number;
91
+ }
92
+
93
+ export interface Options extends Partial<Configuration> {}
94
+
95
+ export function Configuration(options?: Options) {
96
+ return {
97
+ timeout: MAXIMUM_COMMISSIONING_TIMEOUT_S,
98
+ earlyInterval: 20,
99
+ lateInterval: 150,
100
+ extendedInterval: 1285,
101
+ ...options,
102
+ };
103
+ }
104
+
105
+ /**
106
+ * Data model for BLE advertiser configuration.
107
+ */
108
+ export const OptionsSchema = new DatatypeModel(
109
+ { name: "BleAdvertiserOptions", type: "struct" },
110
+ FieldElement({ name: "add", type: "octstr" }),
111
+ FieldElement({ name: "timeout", type: "uint32" }),
112
+ FieldElement({ name: "earlyInterval", type: "uint32" }),
113
+ FieldElement({ name: "lateInterval", type: "uint32" }),
114
+ FieldElement({ name: "extendedInterval", type: "uint32" }),
115
+ );
116
+ }
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ export * from "./BleAdvertisement.js";
8
+ export * from "./BleAdvertiser.js";
@@ -0,0 +1,13 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ export * from "./Advertisement.js";
8
+ export * from "./Advertiser.js";
9
+ export * from "./ble/index.js";
10
+ export * from "./CommissioningMode.js";
11
+ export * from "./mdns/index.js";
12
+ export * from "./PairingHintBitmap.js";
13
+ export * from "./ServiceDescription.js";
@@ -0,0 +1,118 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import type { Advertisement } from "#advertisement/Advertisement.js";
8
+ import { PairingHintBitmapSchema } from "#advertisement/PairingHintBitmap.js";
9
+ import { ServiceDescription } from "#advertisement/ServiceDescription.js";
10
+ import { ImplementationError, PtrRecord } from "#general";
11
+ import {
12
+ DEFAULT_PAIRING_HINT,
13
+ getCommissionableDeviceQname,
14
+ getCommissioningModeQname,
15
+ getDeviceTypeQname,
16
+ getLongDiscriminatorQname,
17
+ getShortDiscriminatorQname,
18
+ getVendorQname,
19
+ MATTER_COMMISSION_SERVICE_QNAME,
20
+ PAIRING_HINTS_REQUIRING_INSTRUCTION,
21
+ SERVICE_DISCOVERY_QNAME,
22
+ } from "#mdns/MdnsConsts.js";
23
+ import { MdnsAdvertisement } from "./MdnsAdvertisement.js";
24
+ import type { MdnsAdvertiser } from "./MdnsAdvertiser.js";
25
+
26
+ /**
27
+ * Advertise a node as commissionable.
28
+ */
29
+ export class CommissionableMdnsAdvertisement extends MdnsAdvertisement<ServiceDescription.Commissionable> {
30
+ instanceId: string;
31
+
32
+ constructor(advertiser: MdnsAdvertiser, description: ServiceDescription.Commissionable) {
33
+ const instanceId = advertiser.createInstanceId();
34
+ const qname = getCommissionableDeviceQname(instanceId);
35
+
36
+ super(advertiser, qname, description);
37
+
38
+ this.instanceId = instanceId;
39
+
40
+ this.#validatePairingInstructions();
41
+ }
42
+
43
+ override get ptrRecords() {
44
+ const { discriminator, deviceType, vendorId } = this.description;
45
+
46
+ const shortDiscriminator = (discriminator >> 8) & 0x0f;
47
+ const vendorQname = getVendorQname(vendorId);
48
+ const deviceTypeQname = getDeviceTypeQname(deviceType);
49
+ const shortDiscriminatorQname = getShortDiscriminatorQname(shortDiscriminator);
50
+ const longDiscriminatorQname = getLongDiscriminatorQname(discriminator);
51
+ const commissionModeQname = getCommissioningModeQname();
52
+
53
+ const records = [
54
+ PtrRecord(SERVICE_DISCOVERY_QNAME, MATTER_COMMISSION_SERVICE_QNAME),
55
+ PtrRecord(SERVICE_DISCOVERY_QNAME, deviceTypeQname),
56
+ PtrRecord(SERVICE_DISCOVERY_QNAME, shortDiscriminatorQname),
57
+ PtrRecord(SERVICE_DISCOVERY_QNAME, longDiscriminatorQname),
58
+ PtrRecord(SERVICE_DISCOVERY_QNAME, commissionModeQname),
59
+ PtrRecord(MATTER_COMMISSION_SERVICE_QNAME, this.qname),
60
+ PtrRecord(deviceTypeQname, this.qname),
61
+ PtrRecord(shortDiscriminatorQname, this.qname),
62
+ PtrRecord(longDiscriminatorQname, this.qname),
63
+ PtrRecord(commissionModeQname, this.qname),
64
+ ];
65
+
66
+ if (!this.isPrivacyMasked) {
67
+ records.push(PtrRecord(SERVICE_DISCOVERY_QNAME, vendorQname), PtrRecord(vendorQname, this.qname));
68
+ }
69
+
70
+ return records;
71
+ }
72
+
73
+ override get txtValues() {
74
+ const {
75
+ vendorId,
76
+ productId,
77
+ deviceType,
78
+ name,
79
+ discriminator,
80
+ mode,
81
+ pairingHint = DEFAULT_PAIRING_HINT,
82
+ pairingInstructions,
83
+ } = this.description;
84
+
85
+ const values: Record<string, unknown> = {
86
+ DN: name /* Device Name */,
87
+ DT: deviceType /* Device Type */,
88
+ D: discriminator /* Discriminator */,
89
+ CM: mode /* Commission Mode */,
90
+ PH: PairingHintBitmapSchema.encode(pairingHint) /* Pairing Hint */,
91
+ PI: pairingInstructions /* Pairing Instruction */,
92
+ };
93
+
94
+ if (!this.isPrivacyMasked) {
95
+ values.VP = `${vendorId}+${productId}`; /* Vendor / Product */
96
+ }
97
+
98
+ return values;
99
+ }
100
+
101
+ override isDuplicate(other: Advertisement) {
102
+ // Only one commissioning advertisement allowed per advertiser
103
+ return other.isCommissioning();
104
+ }
105
+
106
+ #validatePairingInstructions() {
107
+ const { pairingHint, pairingInstructions } = this.description;
108
+
109
+ const needsInstructions =
110
+ pairingHint && PAIRING_HINTS_REQUIRING_INSTRUCTION.find(hint => pairingHint[hint] === true);
111
+
112
+ if (needsInstructions && !pairingInstructions) {
113
+ throw new ImplementationError(
114
+ `Pairing instructions required for pairing hint of type "${needsInstructions}"`,
115
+ );
116
+ }
117
+ }
118
+ }
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import type { Advertisement } from "#advertisement/Advertisement.js";
8
+ import { ServiceDescription } from "#advertisement/ServiceDescription.js";
9
+ import { PtrRecord } from "#general";
10
+ import {
11
+ getCommissionerDeviceQname,
12
+ MATTER_COMMISSIONER_SERVICE_QNAME,
13
+ SERVICE_DISCOVERY_QNAME,
14
+ } from "#mdns/MdnsConsts.js";
15
+ import { MdnsAdvertisement } from "./MdnsAdvertisement.js";
16
+ import type { MdnsAdvertiser } from "./MdnsAdvertiser.js";
17
+
18
+ /**
19
+ * Advertise a node as a commissioner service.
20
+ */
21
+ export class CommissionerMdnsAdvertisement extends MdnsAdvertisement<ServiceDescription.Commissioner> {
22
+ instanceId: string;
23
+
24
+ constructor(advertiser: MdnsAdvertiser, description: ServiceDescription.Commissioner) {
25
+ const instanceId = advertiser.createInstanceId();
26
+ const qname = getCommissionerDeviceQname(instanceId);
27
+
28
+ super(advertiser, qname, description);
29
+
30
+ this.instanceId = instanceId;
31
+ }
32
+
33
+ override get ptrRecords() {
34
+ const { deviceType, vendorId } = this.description;
35
+
36
+ const vendorQname = `_V${vendorId}._sub.${MATTER_COMMISSIONER_SERVICE_QNAME}`;
37
+
38
+ const records = [
39
+ PtrRecord(SERVICE_DISCOVERY_QNAME, MATTER_COMMISSIONER_SERVICE_QNAME),
40
+ PtrRecord(MATTER_COMMISSIONER_SERVICE_QNAME, vendorQname),
41
+ PtrRecord(vendorQname, this.qname),
42
+ ];
43
+
44
+ if (deviceType !== undefined) {
45
+ const deviceTypeQname = `_T${deviceType}._sub.${MATTER_COMMISSIONER_SERVICE_QNAME}`;
46
+
47
+ records.push(PtrRecord(SERVICE_DISCOVERY_QNAME, deviceTypeQname));
48
+ records.push(PtrRecord(deviceTypeQname, this.qname));
49
+ }
50
+
51
+ return records;
52
+ }
53
+
54
+ override get txtValues() {
55
+ const { vendorId, productId, deviceType, name: deviceName } = this.description;
56
+
57
+ const values: Record<string, unknown> = {
58
+ DN: deviceName /* Device Name */,
59
+ DT: deviceType /* Device Type */,
60
+ };
61
+
62
+ if (!this.isPrivacyMasked) {
63
+ values.VP = `${vendorId}+${productId}`; /* Vendor / Product */
64
+ }
65
+
66
+ return values;
67
+ }
68
+
69
+ override isDuplicate(other: Advertisement) {
70
+ // Only one commissioning advertisement allowed per advertiser
71
+ return other.isCommissioning();
72
+ }
73
+ }
@@ -0,0 +1,167 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { Advertisement } from "#advertisement/Advertisement.js";
8
+ import type { Advertiser } from "#advertisement/Advertiser.js";
9
+ import type { ServiceDescription } from "#advertisement/ServiceDescription.js";
10
+ import { SupportedTransportsSchema } from "#common/SupportedTransportsBitmap.js";
11
+ import { AAAARecord, ARecord, DnsRecord, Logger, NetworkInterfaceDetails, SrvRecord, Time, TxtRecord } from "#general";
12
+ import type { MdnsServer } from "#mdns/MdnsServer.js";
13
+ import { SessionIntervals } from "#session/SessionIntervals.js";
14
+ import type { MdnsAdvertiser } from "./MdnsAdvertiser.js";
15
+
16
+ const logger = Logger.get("MdnsAdvertisement");
17
+
18
+ /**
19
+ * Base class for MDNS advertisements.
20
+ *
21
+ * Individual classes specialize for each type of service.
22
+ */
23
+ export abstract class MdnsAdvertisement<T extends ServiceDescription = ServiceDescription> extends Advertisement<T> {
24
+ declare advertiser: MdnsAdvertiser;
25
+
26
+ /**
27
+ * The device qname.
28
+ */
29
+ qname: string;
30
+
31
+ #isPrivacyMasked: boolean;
32
+ #stopAt?: number;
33
+
34
+ constructor(advertiser: MdnsAdvertiser, qname: string, description: T) {
35
+ description = {
36
+ ...description,
37
+ ...SessionIntervals(description),
38
+ };
39
+ super(advertiser, `mdns:${qname}`, description, { omitPrivateDetails: advertiser.omitPrivateDetails });
40
+ this.qname = qname;
41
+ this.#isPrivacyMasked = this.isPrivacyMasked;
42
+ }
43
+
44
+ protected abstract ptrRecords: DnsRecord[];
45
+
46
+ protected get txtValues(): Record<string, unknown> {
47
+ return {};
48
+ }
49
+
50
+ override async run(context: Advertisement.ActivityContext, event: Advertiser.BroadcastEvent = "startup") {
51
+ this.#stopAt = undefined;
52
+ let number = 0;
53
+ for (const retryInterval of this.advertiser.broadcastScheduleFor(this, event)) {
54
+ if (this.#stopAt !== undefined && this.#stopAt <= Time.nowMs()) {
55
+ break;
56
+ }
57
+
58
+ number++;
59
+ logger.debug("Broadcast", this.dict({ number, next: retryInterval }));
60
+ await this.broadcast();
61
+ await context.sleep("MDNS repeat", retryInterval);
62
+ }
63
+ }
64
+
65
+ /**
66
+ * Broadcast a single announcement immediately.
67
+ */
68
+ async broadcast() {
69
+ if (!this.#isPrivacyMasked && this.isPrivacyMasked) {
70
+ this.#isPrivacyMasked = true;
71
+ await this.advertiser.server.setRecordsGenerator(this.service, this.#recordsGenerator);
72
+ }
73
+
74
+ await this.advertiser.server.broadcast(this.service);
75
+ }
76
+
77
+ /**
78
+ * Broadcast expiration announcement immediately.
79
+ */
80
+ async expire() {
81
+ logger.info("Unpublishing", this.dict({ time: this.duration }));
82
+ await this.advertiser.server.expireAnnouncements(this.service);
83
+ }
84
+
85
+ override serviceConnected() {
86
+ const { broadcastAfterConnection } = this.advertiser.broadcastConfigFor(this);
87
+
88
+ if (broadcastAfterConnection === undefined) {
89
+ return;
90
+ }
91
+
92
+ if (broadcastAfterConnection <= 0) {
93
+ this.stop();
94
+ return;
95
+ }
96
+
97
+ this.#stopAt = Time.nowMs() + broadcastAfterConnection;
98
+ }
99
+
100
+ override serviceDisconnected() {
101
+ this.start("reconnect");
102
+ }
103
+
104
+ protected override async onCreate() {
105
+ // Use Promise.resolve() to initialize on next microtick so the constructor completes before invocation
106
+ await Promise.resolve().then(() => {
107
+ // Install the records generator. This will be used for broadcast and to respond to queries
108
+ logger.info("Publishing", this.dict());
109
+ return this.advertiser.server.setRecordsGenerator(this.service, this.#recordsGenerator);
110
+ });
111
+ }
112
+
113
+ protected override async onClose() {
114
+ // The MDNS server doesn't currently track which answers have been sent so just expire unconditionally
115
+ await this.expire();
116
+ }
117
+
118
+ get #recordsGenerator(): MdnsServer.RecordGenerator {
119
+ return (_intf, addrs) => this.#recordsFor(addrs);
120
+ }
121
+
122
+ #recordsFor(addrs: NetworkInterfaceDetails) {
123
+ const hostname = addrs.mac.replace(/:/g, "").toUpperCase() + "0000.local";
124
+
125
+ const records: DnsRecord[] = [
126
+ ...this.ptrRecords,
127
+ SrvRecord(this.qname, { priority: 0, weight: 0, port: this.advertiser.port, target: hostname }),
128
+ TxtRecord(
129
+ this.qname,
130
+ Object.entries(this.#txtValues)
131
+ .filter(([, v]) => v !== undefined)
132
+ .map(([k, v]) => `${k}=${v}`),
133
+ ),
134
+ ];
135
+
136
+ for (const addr of addrs.ipV6) {
137
+ records.push(AAAARecord(hostname, addr));
138
+ }
139
+
140
+ if (this.advertiser.server.supportsIpv4) {
141
+ for (const addr of addrs.ipV4) {
142
+ records.push(ARecord(hostname, addr));
143
+ }
144
+ }
145
+
146
+ return records;
147
+ }
148
+
149
+ get #txtValues() {
150
+ const values: Record<string, unknown> = {
151
+ SII: this.description.idleIntervalMs /* Session Idle Interval */,
152
+ SAI: this.description.activeIntervalMs /* Session Active Interval */,
153
+ SAT: this.description.activeThresholdMs /* Session Active Threshold */,
154
+ ...this.txtValues,
155
+ };
156
+
157
+ if (this.description.tcp !== undefined) {
158
+ values.T = SupportedTransportsSchema.encode(this.description.tcp); /* TCP support */
159
+ }
160
+
161
+ if (this.description.icd !== undefined) {
162
+ values.ICD = this.description.icd; /* ICD support */
163
+ }
164
+
165
+ return values;
166
+ }
167
+ }