@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
@@ -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
+ }
@@ -0,0 +1,248 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { Advertiser } from "#advertisement/Advertiser.js";
8
+ import { ServiceDescription } from "#advertisement/ServiceDescription.js";
9
+ import { Bytes, Crypto, ImplementationError, InternalError, RetrySchedule, STANDARD_MATTER_PORT } from "#general";
10
+ import type { MdnsServer } from "#mdns/MdnsServer.js";
11
+ import { DatatypeModel, FieldElement } from "#model";
12
+ import { MAXIMUM_COMMISSIONING_TIMEOUT_S } from "#types";
13
+ import { CommissionableMdnsAdvertisement } from "./CommissionableMdnsAdvertisement.js";
14
+ import { CommissionerMdnsAdvertisement } from "./CommissionerMdnsAdvertisement.js";
15
+ import type { MdnsAdvertisement } from "./MdnsAdvertisement.js";
16
+ import { OperationalMdnsAdvertisement } from "./OperationalMdnsAdvertisement.js";
17
+
18
+ /**
19
+ * An {@link Advertiser} that advertises using an in-process MDNS implementation.
20
+ */
21
+ export class MdnsAdvertiser extends Advertiser {
22
+ readonly port: number;
23
+ readonly omitPrivateDetails: boolean;
24
+
25
+ #schedules = new Array<{ config: MdnsAdvertiser.BroadcastSchedule; schedule?: RetrySchedule }>();
26
+
27
+ constructor(
28
+ readonly crypto: Crypto,
29
+ readonly server: MdnsServer,
30
+ options?: MdnsAdvertiser.Options,
31
+ ) {
32
+ super();
33
+
34
+ this.port = options?.port ?? STANDARD_MATTER_PORT;
35
+ this.omitPrivateDetails = options?.omitPrivateDetails ?? false;
36
+
37
+ let hasDefaultSchedule = false;
38
+ let hasRetransmitSchedule = false;
39
+ if (options?.schedules) {
40
+ for (const schedule of options.schedules) {
41
+ if (schedule.serviceKind === undefined) {
42
+ if (schedule.event === undefined) {
43
+ hasDefaultSchedule = true;
44
+ }
45
+
46
+ if (schedule.event === "retransmit") {
47
+ hasRetransmitSchedule = true;
48
+ }
49
+ }
50
+
51
+ this.#schedules.push({ config: schedule });
52
+ }
53
+ }
54
+
55
+ if (!hasRetransmitSchedule) {
56
+ this.#schedules.push({ config: MdnsAdvertiser.RetransmissionBroadcastSchedule });
57
+ }
58
+
59
+ if (!hasDefaultSchedule) {
60
+ this.#schedules.push({ config: MdnsAdvertiser.DefaultBroadcastSchedule });
61
+ }
62
+ }
63
+
64
+ /**
65
+ * Create an advertisement for the specific service.
66
+ */
67
+ override getAdvertisement(description: ServiceDescription): MdnsAdvertisement | undefined {
68
+ switch (description.kind) {
69
+ case "operational":
70
+ return (
71
+ (this.advertisementForFabric(description.fabric) as MdnsAdvertisement | undefined) ??
72
+ new OperationalMdnsAdvertisement(this, description)
73
+ );
74
+
75
+ case "commissionable":
76
+ return new CommissionableMdnsAdvertisement(this, description);
77
+
78
+ case "commissioner":
79
+ return new CommissionerMdnsAdvertisement(this, description);
80
+
81
+ default:
82
+ throw new ImplementationError(
83
+ `Unsupported service description kind "${(description as ServiceDescription).kind}`,
84
+ );
85
+ }
86
+ }
87
+
88
+ /**
89
+ * Generate a random 8-byte Matter instance identifier.
90
+ */
91
+ createInstanceId() {
92
+ return Bytes.toHex(this.crypto.randomBytes(8)).toUpperCase();
93
+ }
94
+
95
+ /**
96
+ * Retrieve the broadcast schedule for a specific advertisement.
97
+ */
98
+ broadcastScheduleFor(advertisement: MdnsAdvertisement, event?: Advertiser.BroadcastEvent) {
99
+ const entry = this.#scheduleFor(advertisement, event);
100
+
101
+ if (entry.schedule === undefined) {
102
+ entry.schedule = new RetrySchedule(
103
+ this.crypto,
104
+ RetrySchedule.Configuration(MdnsAdvertiser.DefaultBroadcastSchedule, entry.config),
105
+ );
106
+ }
107
+
108
+ return entry.schedule;
109
+ }
110
+
111
+ /**
112
+ * Retrieve broadcast configuration for a specific advertisement.
113
+ */
114
+ broadcastConfigFor(advertisement: MdnsAdvertisement, event?: Advertiser.BroadcastEvent) {
115
+ return this.#scheduleFor(advertisement, event).config;
116
+ }
117
+
118
+ #scheduleFor(advertisement: MdnsAdvertisement, event?: Advertiser.BroadcastEvent) {
119
+ if (!event) {
120
+ event = "startup";
121
+ }
122
+
123
+ for (const entry of this.#schedules) {
124
+ const { serviceKind, event: event2 } = entry.config;
125
+
126
+ if (serviceKind !== undefined && serviceKind !== advertisement.description.kind) {
127
+ continue;
128
+ }
129
+
130
+ if (event2 !== undefined && event2 !== event) {
131
+ continue;
132
+ }
133
+
134
+ return entry;
135
+ }
136
+
137
+ throw new InternalError("Default retry schedule not present");
138
+ }
139
+ }
140
+
141
+ export namespace MdnsAdvertiser {
142
+ /**
143
+ * MDNS advertisement configuration options.
144
+ */
145
+ export interface Options {
146
+ /**
147
+ * The port of the Matter service to advertise.
148
+ *
149
+ * Defaults to 5540.
150
+ */
151
+ readonly port?: number;
152
+
153
+ /**
154
+ * Omit the vendor and product ID from announcements for privacy reasons.
155
+ */
156
+ readonly omitPrivateDetails?: boolean;
157
+
158
+ /**
159
+ * Broadcast schedule.
160
+ *
161
+ * These control the intervals at which the server broadcasts the advertisement. Note that order is important;
162
+ * more specific schedules should appear first.
163
+ *
164
+ * By default all broadcasts are configured using {@link DefaultBroadcastSchedule}.
165
+ */
166
+ readonly schedules?: readonly BroadcastSchedule[];
167
+ }
168
+
169
+ /**
170
+ * Schedule for automatic broadcasts.
171
+ *
172
+ * Schedules apply conditionally with {@link DefaultBroadcastSchedule} as the fallback.
173
+ */
174
+ export interface BroadcastSchedule extends RetrySchedule.Configuration {
175
+ /**
176
+ * Limit this schedule to a particular service kind.
177
+ */
178
+ readonly serviceKind?: ServiceDescription["kind"];
179
+
180
+ /**
181
+ * Limit this schedule to initial broadcast or broadcast when reconnecting.
182
+ */
183
+ readonly event?: Advertiser.BroadcastEvent;
184
+
185
+ /**
186
+ * Extra time to broadcast after establishing an operational connection.
187
+ *
188
+ * Set to zero to terminate broadcast immediately after connection. If undefined broadcasts will continue until
189
+ * terminated by {@link timeout} or {@link maximumCount}.
190
+ */
191
+ readonly broadcastAfterConnection?: number;
192
+ }
193
+
194
+ /**
195
+ * Default schedule for automatic broadcast.
196
+ */
197
+ export const DefaultBroadcastSchedule: BroadcastSchedule = {
198
+ // Mandated by MDNS specification
199
+ initialInterval: 1_000,
200
+
201
+ // Maximum commissioning timeout per Matter specification 5.4.2.3.1, although
202
+ timeout: MAXIMUM_COMMISSIONING_TIMEOUT_S * 1000,
203
+
204
+ // Minimum per MDNS specification
205
+ backoffFactor: 2,
206
+
207
+ // Technically this may result in us emitting more than 8 packets which is the maximum per the MDNS
208
+ // specification but extra packets will only come every 90 seconds
209
+ maximumInterval: 90_000,
210
+
211
+ // Not in any specification AFAIK but common sense to reduce thundering herd
212
+ jitterFactor: 0.25,
213
+
214
+ // Generally operational broadcast is unnecessary once an operational connection is established
215
+ broadcastAfterConnection: 0,
216
+ };
217
+
218
+ /**
219
+ * Default schedule for retransmission broadcast.
220
+ */
221
+ export const RetransmissionBroadcastSchedule: BroadcastSchedule = {
222
+ event: "retransmit",
223
+
224
+ // Retransmission events occur for every packet retry so limit count to 1
225
+ maximumCount: 1,
226
+ };
227
+
228
+ /**
229
+ * Data model for MDNS advertiser configuration.
230
+ */
231
+ export const OptionsSchema = new DatatypeModel(
232
+ { name: "MdnsAdvertiserOptions", type: "struct" },
233
+ FieldElement({ name: "omitPrivateDetails", type: "bool" }),
234
+ FieldElement(
235
+ { name: "schedules", type: "list" },
236
+ FieldElement(
237
+ { name: "entry", type: "struct" },
238
+ FieldElement({ name: "initialInterval", type: "uint32" }),
239
+ FieldElement({ name: "timeout", type: "uint32" }),
240
+ FieldElement({ name: "backoffFactor", type: "uint8" }),
241
+ FieldElement({ name: "maximumInterval", type: "uint32" }),
242
+ FieldElement({ name: "jitterFactor", type: "single" }),
243
+ FieldElement({ name: "serviceKind", type: "string" }),
244
+ FieldElement({ name: "event", type: "string" }),
245
+ ),
246
+ ),
247
+ );
248
+ }
@@ -0,0 +1,50 @@
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 { Bytes, PtrRecord } from "#general";
10
+ import {
11
+ getFabricQname,
12
+ getOperationalDeviceQname,
13
+ MATTER_SERVICE_QNAME,
14
+ SERVICE_DISCOVERY_QNAME,
15
+ } from "#mdns/MdnsConsts.js";
16
+ import { NodeId } from "#types";
17
+ import { MdnsAdvertisement } from "./MdnsAdvertisement.js";
18
+ import type { MdnsAdvertiser } from "./MdnsAdvertiser.js";
19
+
20
+ /**
21
+ * Advertise a node as a fabric member.
22
+ */
23
+ export class OperationalMdnsAdvertisement extends MdnsAdvertisement<ServiceDescription.Operational> {
24
+ constructor(advertiser: MdnsAdvertiser, description: ServiceDescription.Operational) {
25
+ const {
26
+ fabric: { operationalId, nodeId },
27
+ } = description;
28
+
29
+ const qname = getOperationalDeviceQname(Bytes.toHex(operationalId).toUpperCase(), NodeId.toHexString(nodeId));
30
+
31
+ super(advertiser, qname, description);
32
+ }
33
+
34
+ override get ptrRecords() {
35
+ const operationalIdString = Bytes.toHex(this.description.fabric.operationalId).toUpperCase();
36
+ const fabricQname = getFabricQname(operationalIdString);
37
+
38
+ return [
39
+ PtrRecord(SERVICE_DISCOVERY_QNAME, MATTER_SERVICE_QNAME),
40
+ PtrRecord(SERVICE_DISCOVERY_QNAME, fabricQname),
41
+ PtrRecord(MATTER_SERVICE_QNAME, this.qname),
42
+ PtrRecord(fabricQname, this.qname),
43
+ ];
44
+ }
45
+
46
+ override isDuplicate(other: Advertisement) {
47
+ // There may only be one operational advertisement per service per advertiser
48
+ return other.isOperational() && other.service === this.service;
49
+ }
50
+ }
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ export * from "./CommissionableMdnsAdvertisement.js";
8
+ export * from "./CommissionerMdnsAdvertisement.js";
9
+ export * from "./MdnsAdvertisement.js";
10
+ export * from "./MdnsAdvertiser.js";
11
+ export * from "./OperationalMdnsAdvertisement.js";
package/src/ble/Ble.ts CHANGED
@@ -5,7 +5,6 @@
5
5
  */
6
6
 
7
7
  import { Channel, ChannelType, MatterError, NetInterface, NoProviderError, TransportInterface } from "#general";
8
- import { InstanceBroadcaster } from "../common/InstanceBroadcaster.js";
9
8
  import { Scanner } from "../common/Scanner.js";
10
9
  import { BLE_MAX_MATTER_PAYLOAD_SIZE } from "./BleConsts.js";
11
10
 
@@ -23,10 +22,14 @@ export abstract class Ble {
23
22
  return this.get !== BleDisabled;
24
23
  }
25
24
 
26
- abstract getBlePeripheralInterface(): TransportInterface;
27
- abstract getBleCentralInterface(): NetInterface;
28
- abstract getBleBroadcaster(additionalAdvertisementData?: Uint8Array): InstanceBroadcaster;
29
- abstract getBleScanner(): Scanner;
25
+ abstract get peripheralInterface(): BlePeripheralInterface;
26
+ abstract get centralInterface(): NetInterface;
27
+ abstract get scanner(): Scanner;
28
+ }
29
+
30
+ export interface BlePeripheralInterface extends TransportInterface {
31
+ advertise(advertiseData: Uint8Array, additionalAdvertisementData?: Uint8Array, intervalMs?: number): Promise<void>;
32
+ stopAdvertising(): Promise<void>;
30
33
  }
31
34
 
32
35
  export abstract class BleChannel<T> implements Channel<T> {
@@ -7,7 +7,8 @@
7
7
  import { MAX_UDP_MESSAGE_SIZE } from "#general";
8
8
 
9
9
  /** @see {@link MatterSpecification.v11.Core} § 4.17.3.2 */
10
- export const BLE_MATTER_SERVICE_UUID = "fff6";
10
+ export const BLE_MATTER_SERVICE_UUID_SHORT = "fff6";
11
+ export const BLE_MATTER_SERVICE_UUID = "0000FFF6-0000-1000-8000-00805F9B34FB";
11
12
  export const BLE_MATTER_C1_CHARACTERISTIC_UUID = "18EE2EF5-263D-4559-959F-4F9C429F9D11";
12
13
  export const BLE_MATTER_C2_CHARACTERISTIC_UUID = "18EE2EF5-263D-4559-959F-4F9C429F9D12";
13
14
  export const BLE_MATTER_C3_CHARACTERISTIC_UUID = "64630238-8772-45F2-B87D-748A83218F04";
@@ -283,6 +283,7 @@ export class BtpCodec {
283
283
  vendorId: number,
284
284
  productId: number,
285
285
  hasAdditionalAdvertisementData = false,
286
+ isExtendedAnnouncement = false,
286
287
  ) {
287
288
  const writer = new DataWriter(Endian.Little);
288
289
  writer.writeUInt8(0x02);
@@ -293,9 +294,9 @@ export class BtpCodec {
293
294
  writer.writeUInt16(0xfff6);
294
295
  writer.writeUInt8(0x00);
295
296
  writer.writeUInt16(discriminator);
296
- writer.writeUInt16(vendorId);
297
- writer.writeUInt16(productId);
298
- writer.writeUInt8(hasAdditionalAdvertisementData ? 0x01 : 0x00);
297
+ writer.writeUInt16(isExtendedAnnouncement ? 0 : vendorId);
298
+ writer.writeUInt16(isExtendedAnnouncement ? 0 : productId);
299
+ writer.writeUInt8((hasAdditionalAdvertisementData ? 1 : 0) | (isExtendedAnnouncement ? 2 : 0));
299
300
  return writer.toByteArray();
300
301
  }
301
302
 
@@ -5,25 +5,9 @@
5
5
  */
6
6
 
7
7
  import { BasicSet, ChannelType, Environment, Environmental, Lifespan, ServerAddress, ServerAddressIp } from "#general";
8
- import { BitFlag, BitmapSchema, DiscoveryCapabilitiesBitmap, NodeId, TypeFromPartialBitSchema, VendorId } from "#types";
8
+ import { DiscoveryCapabilitiesBitmap, NodeId, TypeFromPartialBitSchema, VendorId } from "#types";
9
9
  import { Fabric } from "../fabric/Fabric.js";
10
10
 
11
- export const SupportedTransportsBitmap = {
12
- // Bit 0 is reserved
13
- /**
14
- * TCP Client
15
- * The advertising Node implements the TCP Client mode and MAY connect to a peer Node that is a TCP Server.
16
- */
17
- tcpClient: BitFlag(1),
18
-
19
- /**
20
- * TCP Server
21
- * The advertising Node implements the TCP Server mode and SHALL listen for incoming TCP connections.
22
- */
23
- tcpServer: BitFlag(2),
24
- };
25
- export const SupportedTransportsSchema = BitmapSchema(SupportedTransportsBitmap);
26
-
27
11
  /**
28
12
  * All information exposed by a commissionable device via announcements.
29
13
  * The properties are named identical as in the Matter specification.
@@ -0,0 +1,25 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2025 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { BitFlag, BitmapSchema, TypeFromBitSchema } from "@matter/types";
8
+
9
+ export const SupportedTransportsBitmap = {
10
+ // Bit 0 is reserved
11
+ /**
12
+ * TCP Client
13
+ * The advertising Node implements the TCP Client mode and MAY connect to a peer Node that is a TCP Server.
14
+ */
15
+ tcpClient: BitFlag(1),
16
+
17
+ /**
18
+ * TCP Server
19
+ * The advertising Node implements the TCP Server mode and SHALL listen for incoming TCP connections.
20
+ */
21
+ tcpServer: BitFlag(2),
22
+ };
23
+ export const SupportedTransportsSchema = BitmapSchema(SupportedTransportsBitmap);
24
+
25
+ export interface SupportedTransportsBitmap extends TypeFromBitSchema<typeof SupportedTransportsBitmap> {}
@@ -8,6 +8,6 @@ export * from "../peer/PeerAddress.js";
8
8
  export * from "./ExpandedPath.js";
9
9
  export * from "./FailsafeContext.js";
10
10
  export * from "./FailsafeTimer.js";
11
- export * from "./InstanceBroadcaster.js";
12
11
  export * from "./OperationalCredentialsTypes.js";
13
12
  export * from "./Scanner.js";
13
+ export * from "./SupportedTransportsBitmap.js";
@@ -214,6 +214,14 @@ export class Fabric {
214
214
  this.#sessions.delete(session);
215
215
  }
216
216
 
217
+ hasSessionForPeer(peerNodeId: NodeId) {
218
+ for (const session of this.#sessions) {
219
+ if (session.peerNodeId === peerNodeId) {
220
+ return true;
221
+ }
222
+ }
223
+ }
224
+
217
225
  addRemoveCallback(callback: () => MaybePromise<void>) {
218
226
  this.#removeCallbacks.push(callback);
219
227
  }