@matter/thread-br-client 0.0.1 → 0.17.5-alpha.0-20260706-fd4c49e2e

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 (575) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +5 -5
  3. package/dist/cjs/coap/CoapClient.d.ts +2 -2
  4. package/dist/cjs/coap/CoapClient.d.ts.map +1 -1
  5. package/dist/cjs/coap/CoapClient.js +9 -16
  6. package/dist/cjs/coap/CoapClient.js.map +1 -1
  7. package/dist/cjs/coap/CoapMessage.d.ts +11 -6
  8. package/dist/cjs/coap/CoapMessage.d.ts.map +1 -1
  9. package/dist/cjs/coap/CoapMessage.js +8 -5
  10. package/dist/cjs/coap/CoapMessage.js.map +1 -1
  11. package/dist/cjs/commissioner/Commissioner.d.ts.map +1 -1
  12. package/dist/cjs/commissioner/Commissioner.js +5 -2
  13. package/dist/cjs/commissioner/Commissioner.js.map +1 -1
  14. package/dist/cjs/commissioner/LeadKa.d.ts +3 -3
  15. package/dist/cjs/commissioner/LeadKa.d.ts.map +1 -1
  16. package/dist/cjs/commissioner/LeadKa.js +1 -1
  17. package/dist/cjs/commissioner/LeadKa.js.map +1 -1
  18. package/dist/cjs/commissioner/LeadPet.d.ts +3 -2
  19. package/dist/cjs/commissioner/LeadPet.d.ts.map +1 -1
  20. package/dist/cjs/commissioner/LeadPet.js +4 -3
  21. package/dist/cjs/commissioner/LeadPet.js.map +1 -1
  22. package/dist/cjs/credentials/ThreadCredentialsRegistry.d.ts +5 -5
  23. package/dist/cjs/credentials/ThreadCredentialsRegistry.d.ts.map +1 -1
  24. package/dist/cjs/credentials/ThreadCredentialsRegistry.js +10 -9
  25. package/dist/cjs/credentials/ThreadCredentialsRegistry.js.map +1 -1
  26. package/dist/cjs/credentials/ThreadNetworkCredentials.d.ts +4 -3
  27. package/dist/cjs/credentials/ThreadNetworkCredentials.d.ts.map +1 -1
  28. package/dist/cjs/crypto/AesCmacPrf128.d.ts +4 -14
  29. package/dist/cjs/crypto/AesCmacPrf128.d.ts.map +1 -1
  30. package/dist/cjs/crypto/AesCmacPrf128.js +7 -71
  31. package/dist/cjs/crypto/AesCmacPrf128.js.map +2 -2
  32. package/dist/cjs/crypto/Pbkdf2AesCmac.d.ts +5 -4
  33. package/dist/cjs/crypto/Pbkdf2AesCmac.d.ts.map +1 -1
  34. package/dist/cjs/crypto/Pbkdf2AesCmac.js +5 -4
  35. package/dist/cjs/crypto/Pbkdf2AesCmac.js.map +1 -1
  36. package/dist/cjs/crypto/Pskc.d.ts +4 -3
  37. package/dist/cjs/crypto/Pskc.d.ts.map +1 -1
  38. package/dist/cjs/crypto/Pskc.js +6 -5
  39. package/dist/cjs/crypto/Pskc.js.map +1 -1
  40. package/dist/cjs/crypto/index.d.ts +1 -1
  41. package/dist/cjs/crypto/index.d.ts.map +1 -1
  42. package/dist/cjs/crypto/index.js +0 -1
  43. package/dist/cjs/crypto/index.js.map +1 -1
  44. package/dist/cjs/dataset/OperationalDataset.d.ts +10 -10
  45. package/dist/cjs/dataset/OperationalDataset.d.ts.map +1 -1
  46. package/dist/cjs/dataset/OperationalDataset.js +32 -31
  47. package/dist/cjs/dataset/OperationalDataset.js.map +1 -1
  48. package/dist/cjs/dataset/SecurityPolicy.d.ts +3 -2
  49. package/dist/cjs/dataset/SecurityPolicy.d.ts.map +1 -1
  50. package/dist/cjs/dataset/SecurityPolicy.js +5 -4
  51. package/dist/cjs/dataset/SecurityPolicy.js.map +1 -1
  52. package/dist/cjs/diagnostic/DiagnosticResponse.d.ts +5 -4
  53. package/dist/cjs/diagnostic/DiagnosticResponse.d.ts.map +1 -1
  54. package/dist/cjs/diagnostic/DiagnosticSource.d.ts +2 -2
  55. package/dist/cjs/diagnostic/DiagnosticSource.d.ts.map +1 -1
  56. package/dist/cjs/diagnostic/MeshCopDiagnosticSource.d.ts +7 -3
  57. package/dist/cjs/diagnostic/MeshCopDiagnosticSource.d.ts.map +1 -1
  58. package/dist/cjs/diagnostic/MeshCopDiagnosticSource.js +48 -43
  59. package/dist/cjs/diagnostic/MeshCopDiagnosticSource.js.map +1 -1
  60. package/dist/cjs/diagnostic/connectMeshcop.d.ts.map +1 -1
  61. package/dist/cjs/diagnostic/connectMeshcop.js +5 -12
  62. package/dist/cjs/diagnostic/connectMeshcop.js.map +1 -1
  63. package/dist/cjs/diagnostic/errors.d.ts +1 -1
  64. package/dist/cjs/diagnostic/errors.d.ts.map +1 -1
  65. package/dist/cjs/discovery/BorderRouterRegistry.d.ts.map +1 -1
  66. package/dist/cjs/discovery/BorderRouterRegistry.js +2 -4
  67. package/dist/cjs/discovery/BorderRouterRegistry.js.map +1 -1
  68. package/dist/cjs/dtls/channel/DtlsConnectOpts.d.ts +3 -3
  69. package/dist/cjs/dtls/channel/DtlsConnectOpts.d.ts.map +1 -1
  70. package/dist/cjs/dtls/channel/NobleDtlsChannel.d.ts.map +1 -1
  71. package/dist/cjs/dtls/channel/NobleDtlsChannel.js +89 -58
  72. package/dist/cjs/dtls/channel/NobleDtlsChannel.js.map +1 -1
  73. package/dist/cjs/dtls/ecjpake/EcJpakePms.d.ts +5 -4
  74. package/dist/cjs/dtls/ecjpake/EcJpakePms.d.ts.map +1 -1
  75. package/dist/cjs/dtls/ecjpake/EcJpakePms.js +4 -5
  76. package/dist/cjs/dtls/ecjpake/EcJpakePms.js.map +1 -1
  77. package/dist/cjs/dtls/ecjpake/EcJpakeRound.d.ts +16 -15
  78. package/dist/cjs/dtls/ecjpake/EcJpakeRound.d.ts.map +1 -1
  79. package/dist/cjs/dtls/ecjpake/EcJpakeRound.js +40 -29
  80. package/dist/cjs/dtls/ecjpake/EcJpakeRound.js.map +1 -1
  81. package/dist/cjs/dtls/ecjpake/SchnorrZkp.d.ts +10 -9
  82. package/dist/cjs/dtls/ecjpake/SchnorrZkp.d.ts.map +1 -1
  83. package/dist/cjs/dtls/ecjpake/SchnorrZkp.js +17 -13
  84. package/dist/cjs/dtls/ecjpake/SchnorrZkp.js.map +1 -1
  85. package/dist/cjs/dtls/handshake/ChangeCipherSpec.d.ts +2 -1
  86. package/dist/cjs/dtls/handshake/ChangeCipherSpec.d.ts.map +1 -1
  87. package/dist/cjs/dtls/handshake/ChangeCipherSpec.js +3 -1
  88. package/dist/cjs/dtls/handshake/ChangeCipherSpec.js.map +1 -1
  89. package/dist/cjs/dtls/handshake/ClientHelloMessage.d.ts +27 -4
  90. package/dist/cjs/dtls/handshake/ClientHelloMessage.d.ts.map +1 -1
  91. package/dist/cjs/dtls/handshake/ClientHelloMessage.js +3 -1
  92. package/dist/cjs/dtls/handshake/ClientHelloMessage.js.map +1 -1
  93. package/dist/cjs/dtls/handshake/ClientKeyExchangeMessage.d.ts +2 -1
  94. package/dist/cjs/dtls/handshake/ClientKeyExchangeMessage.d.ts.map +1 -1
  95. package/dist/cjs/dtls/handshake/ClientKeyExchangeMessage.js.map +1 -1
  96. package/dist/cjs/dtls/handshake/DtlsClient.d.ts +9 -6
  97. package/dist/cjs/dtls/handshake/DtlsClient.d.ts.map +1 -1
  98. package/dist/cjs/dtls/handshake/DtlsClient.js +99 -77
  99. package/dist/cjs/dtls/handshake/DtlsClient.js.map +1 -1
  100. package/dist/cjs/dtls/handshake/FinishedMessage.d.ts +10 -3
  101. package/dist/cjs/dtls/handshake/FinishedMessage.d.ts.map +1 -1
  102. package/dist/cjs/dtls/handshake/FinishedMessage.js +4 -2
  103. package/dist/cjs/dtls/handshake/FinishedMessage.js.map +1 -1
  104. package/dist/cjs/dtls/handshake/HandshakeMessage.d.ts +5 -4
  105. package/dist/cjs/dtls/handshake/HandshakeMessage.d.ts.map +1 -1
  106. package/dist/cjs/dtls/handshake/HandshakeMessage.js +13 -11
  107. package/dist/cjs/dtls/handshake/HandshakeMessage.js.map +1 -1
  108. package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.d.ts +19 -2
  109. package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.d.ts.map +1 -1
  110. package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.js +3 -1
  111. package/dist/cjs/dtls/handshake/HelloVerifyRequestMessage.js.map +1 -1
  112. package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.d.ts +2 -1
  113. package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.d.ts.map +1 -1
  114. package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.js +3 -2
  115. package/dist/cjs/dtls/handshake/ServerHelloDoneMessage.js.map +1 -1
  116. package/dist/cjs/dtls/handshake/ServerHelloMessage.d.ts +4 -3
  117. package/dist/cjs/dtls/handshake/ServerHelloMessage.d.ts.map +1 -1
  118. package/dist/cjs/dtls/handshake/ServerHelloMessage.js +3 -1
  119. package/dist/cjs/dtls/handshake/ServerHelloMessage.js.map +1 -1
  120. package/dist/cjs/dtls/handshake/ServerKeyExchangeMessage.d.ts +2 -1
  121. package/dist/cjs/dtls/handshake/ServerKeyExchangeMessage.d.ts.map +1 -1
  122. package/dist/cjs/dtls/handshake/ServerKeyExchangeMessage.js.map +1 -1
  123. package/dist/cjs/dtls/prf/HandshakeTranscript.d.ts +7 -5
  124. package/dist/cjs/dtls/prf/HandshakeTranscript.d.ts.map +1 -1
  125. package/dist/cjs/dtls/prf/HandshakeTranscript.js +14 -9
  126. package/dist/cjs/dtls/prf/HandshakeTranscript.js.map +1 -1
  127. package/dist/cjs/dtls/prf/TlsPrf.d.ts +23 -22
  128. package/dist/cjs/dtls/prf/TlsPrf.d.ts.map +1 -1
  129. package/dist/cjs/dtls/prf/TlsPrf.js +33 -30
  130. package/dist/cjs/dtls/prf/TlsPrf.js.map +1 -1
  131. package/dist/cjs/dtls/record/AesCcm8.d.ts +13 -12
  132. package/dist/cjs/dtls/record/AesCcm8.d.ts.map +1 -1
  133. package/dist/cjs/dtls/record/AesCcm8.js +12 -34
  134. package/dist/cjs/dtls/record/AesCcm8.js.map +1 -1
  135. package/dist/cjs/dtls/record/DtlsCipherState.d.ts +11 -10
  136. package/dist/cjs/dtls/record/DtlsCipherState.d.ts.map +1 -1
  137. package/dist/cjs/dtls/record/DtlsCipherState.js +10 -6
  138. package/dist/cjs/dtls/record/DtlsCipherState.js.map +1 -1
  139. package/dist/cjs/dtls/record/DtlsRecord.d.ts +10 -10
  140. package/dist/cjs/dtls/record/DtlsRecord.d.ts.map +1 -1
  141. package/dist/cjs/dtls/record/DtlsRecord.js +10 -8
  142. package/dist/cjs/dtls/record/DtlsRecord.js.map +1 -1
  143. package/dist/cjs/otbr-rest/OtbrRestCapability.d.ts +3 -4
  144. package/dist/cjs/otbr-rest/OtbrRestCapability.d.ts.map +1 -1
  145. package/dist/cjs/otbr-rest/OtbrRestClient.d.ts +27 -8
  146. package/dist/cjs/otbr-rest/OtbrRestClient.d.ts.map +1 -1
  147. package/dist/cjs/otbr-rest/OtbrRestClient.js +50 -20
  148. package/dist/cjs/otbr-rest/OtbrRestClient.js.map +1 -1
  149. package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.d.ts +2 -1
  150. package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.d.ts.map +1 -1
  151. package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.js +3 -3
  152. package/dist/cjs/otbr-rest/OtbrRestDiagnosticSource.js.map +1 -1
  153. package/dist/cjs/otbr-rest/OtbrRestProbe.d.ts +6 -4
  154. package/dist/cjs/otbr-rest/OtbrRestProbe.d.ts.map +1 -1
  155. package/dist/cjs/otbr-rest/OtbrRestProbe.js +11 -43
  156. package/dist/cjs/otbr-rest/OtbrRestProbe.js.map +1 -1
  157. package/dist/cjs/otbr-rest/caseNormalizer.d.ts +7 -0
  158. package/dist/cjs/otbr-rest/caseNormalizer.d.ts.map +1 -1
  159. package/dist/cjs/otbr-rest/caseNormalizer.js +11 -0
  160. package/dist/cjs/otbr-rest/caseNormalizer.js.map +1 -1
  161. package/dist/cjs/otbr-rest/parseHexBytes.d.ts +22 -0
  162. package/dist/cjs/otbr-rest/parseHexBytes.d.ts.map +1 -0
  163. package/dist/cjs/otbr-rest/parseHexBytes.js +50 -0
  164. package/dist/cjs/otbr-rest/parseHexBytes.js.map +6 -0
  165. package/dist/cjs/otbr-rest/translation.d.ts +2 -1
  166. package/dist/cjs/otbr-rest/translation.d.ts.map +1 -1
  167. package/dist/cjs/otbr-rest/translation.js +20 -22
  168. package/dist/cjs/otbr-rest/translation.js.map +1 -1
  169. package/dist/cjs/selection/selectBr.d.ts +8 -4
  170. package/dist/cjs/selection/selectBr.d.ts.map +1 -1
  171. package/dist/cjs/selection/selectBr.js +6 -5
  172. package/dist/cjs/selection/selectBr.js.map +1 -1
  173. package/dist/cjs/selection/withExtPanIdLock.d.ts +2 -1
  174. package/dist/cjs/selection/withExtPanIdLock.d.ts.map +1 -1
  175. package/dist/cjs/selection/withExtPanIdLock.js.map +1 -1
  176. package/dist/cjs/tlv/BasicTlvCodec.d.ts +4 -4
  177. package/dist/cjs/tlv/BasicTlvCodec.d.ts.map +1 -1
  178. package/dist/cjs/tlv/BasicTlvCodec.js +13 -11
  179. package/dist/cjs/tlv/BasicTlvCodec.js.map +1 -1
  180. package/dist/cjs/tlv/NetworkDiagnosticTlv.d.ts +3 -2
  181. package/dist/cjs/tlv/NetworkDiagnosticTlv.d.ts.map +1 -1
  182. package/dist/cjs/tlv/NetworkDiagnosticTlv.js.map +1 -1
  183. package/dist/cjs/tlv/TypeListTlv.d.ts +3 -2
  184. package/dist/cjs/tlv/TypeListTlv.d.ts.map +1 -1
  185. package/dist/cjs/tlv/TypeListTlv.js +1 -1
  186. package/dist/cjs/tlv/TypeListTlv.js.map +1 -1
  187. package/dist/cjs/tlv/diag/ChildIpv6AddressList.d.ts +3 -2
  188. package/dist/cjs/tlv/diag/ChildIpv6AddressList.d.ts.map +1 -1
  189. package/dist/cjs/tlv/diag/ChildIpv6AddressList.js +5 -3
  190. package/dist/cjs/tlv/diag/ChildIpv6AddressList.js.map +1 -1
  191. package/dist/cjs/tlv/diag/ChildTable.d.ts +3 -2
  192. package/dist/cjs/tlv/diag/ChildTable.d.ts.map +1 -1
  193. package/dist/cjs/tlv/diag/ChildTable.js +7 -6
  194. package/dist/cjs/tlv/diag/ChildTable.js.map +1 -1
  195. package/dist/cjs/tlv/diag/Connectivity.d.ts +3 -2
  196. package/dist/cjs/tlv/diag/Connectivity.d.ts.map +1 -1
  197. package/dist/cjs/tlv/diag/Connectivity.js +14 -14
  198. package/dist/cjs/tlv/diag/Connectivity.js.map +1 -1
  199. package/dist/cjs/tlv/diag/Ipv6AddressList.d.ts +3 -2
  200. package/dist/cjs/tlv/diag/Ipv6AddressList.d.ts.map +1 -1
  201. package/dist/cjs/tlv/diag/Ipv6AddressList.js +6 -5
  202. package/dist/cjs/tlv/diag/Ipv6AddressList.js.map +1 -1
  203. package/dist/cjs/tlv/diag/LeaderData.d.ts +3 -2
  204. package/dist/cjs/tlv/diag/LeaderData.d.ts.map +1 -1
  205. package/dist/cjs/tlv/diag/LeaderData.js +8 -7
  206. package/dist/cjs/tlv/diag/LeaderData.js.map +1 -1
  207. package/dist/cjs/tlv/diag/MacCounters.d.ts +3 -2
  208. package/dist/cjs/tlv/diag/MacCounters.d.ts.map +1 -1
  209. package/dist/cjs/tlv/diag/MacCounters.js +12 -11
  210. package/dist/cjs/tlv/diag/MacCounters.js.map +1 -1
  211. package/dist/cjs/tlv/diag/MleCounters.d.ts +3 -2
  212. package/dist/cjs/tlv/diag/MleCounters.d.ts.map +1 -1
  213. package/dist/cjs/tlv/diag/MleCounters.js +18 -17
  214. package/dist/cjs/tlv/diag/MleCounters.js.map +1 -1
  215. package/dist/cjs/tlv/diag/Mode.d.ts +3 -2
  216. package/dist/cjs/tlv/diag/Mode.d.ts.map +1 -1
  217. package/dist/cjs/tlv/diag/Mode.js +5 -3
  218. package/dist/cjs/tlv/diag/Mode.js.map +1 -1
  219. package/dist/cjs/tlv/diag/NetworkData.d.ts +7 -6
  220. package/dist/cjs/tlv/diag/NetworkData.d.ts.map +1 -1
  221. package/dist/cjs/tlv/diag/NetworkData.js +23 -18
  222. package/dist/cjs/tlv/diag/NetworkData.js.map +1 -1
  223. package/dist/cjs/tlv/diag/Primitives.d.ts +15 -14
  224. package/dist/cjs/tlv/diag/Primitives.d.ts.map +1 -1
  225. package/dist/cjs/tlv/diag/Primitives.js +25 -19
  226. package/dist/cjs/tlv/diag/Primitives.js.map +1 -1
  227. package/dist/cjs/tlv/diag/Route64.d.ts +3 -2
  228. package/dist/cjs/tlv/diag/Route64.d.ts.map +1 -1
  229. package/dist/cjs/tlv/diag/Route64.js +8 -7
  230. package/dist/cjs/tlv/diag/Route64.js.map +1 -1
  231. package/dist/cjs/tlv/diag/RouterNeighbor.d.ts +3 -2
  232. package/dist/cjs/tlv/diag/RouterNeighbor.d.ts.map +1 -1
  233. package/dist/cjs/tlv/diag/RouterNeighbor.js +13 -11
  234. package/dist/cjs/tlv/diag/RouterNeighbor.js.map +1 -1
  235. package/dist/cjs/tlv/diag/Timeout.d.ts +3 -2
  236. package/dist/cjs/tlv/diag/Timeout.d.ts.map +1 -1
  237. package/dist/cjs/tlv/diag/Timeout.js +4 -3
  238. package/dist/cjs/tlv/diag/Timeout.js.map +1 -1
  239. package/dist/cjs/tlv/diag/VendorInfo.d.ts +13 -12
  240. package/dist/cjs/tlv/diag/VendorInfo.d.ts.map +1 -1
  241. package/dist/cjs/tlv/diag/VendorInfo.js +4 -3
  242. package/dist/cjs/tlv/diag/VendorInfo.js.map +1 -1
  243. package/dist/cjs/tlv/meshcop/Ip6AddressTlv.d.ts +3 -2
  244. package/dist/cjs/tlv/meshcop/Ip6AddressTlv.d.ts.map +1 -1
  245. package/dist/cjs/tlv/meshcop/Ip6AddressTlv.js +7 -4
  246. package/dist/cjs/tlv/meshcop/Ip6AddressTlv.js.map +1 -1
  247. package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.d.ts +4 -3
  248. package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.d.ts.map +1 -1
  249. package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.js +9 -7
  250. package/dist/cjs/tlv/meshcop/UdpEncapsulationTlv.js.map +1 -1
  251. package/dist/cjs/util/meshLocalAddr.d.ts +5 -4
  252. package/dist/cjs/util/meshLocalAddr.d.ts.map +1 -1
  253. package/dist/cjs/util/meshLocalAddr.js +6 -4
  254. package/dist/cjs/util/meshLocalAddr.js.map +1 -1
  255. package/dist/esm/coap/CoapClient.d.ts +2 -2
  256. package/dist/esm/coap/CoapClient.d.ts.map +1 -1
  257. package/dist/esm/coap/CoapClient.js +11 -17
  258. package/dist/esm/coap/CoapClient.js.map +1 -1
  259. package/dist/esm/coap/CoapMessage.d.ts +11 -6
  260. package/dist/esm/coap/CoapMessage.d.ts.map +1 -1
  261. package/dist/esm/coap/CoapMessage.js +8 -5
  262. package/dist/esm/coap/CoapMessage.js.map +1 -1
  263. package/dist/esm/commissioner/Commissioner.d.ts.map +1 -1
  264. package/dist/esm/commissioner/Commissioner.js +5 -2
  265. package/dist/esm/commissioner/Commissioner.js.map +1 -1
  266. package/dist/esm/commissioner/LeadKa.d.ts +3 -3
  267. package/dist/esm/commissioner/LeadKa.d.ts.map +1 -1
  268. package/dist/esm/commissioner/LeadKa.js +2 -2
  269. package/dist/esm/commissioner/LeadKa.js.map +1 -1
  270. package/dist/esm/commissioner/LeadPet.d.ts +3 -2
  271. package/dist/esm/commissioner/LeadPet.d.ts.map +1 -1
  272. package/dist/esm/commissioner/LeadPet.js +4 -3
  273. package/dist/esm/commissioner/LeadPet.js.map +1 -1
  274. package/dist/esm/credentials/ThreadCredentialsRegistry.d.ts +5 -5
  275. package/dist/esm/credentials/ThreadCredentialsRegistry.d.ts.map +1 -1
  276. package/dist/esm/credentials/ThreadCredentialsRegistry.js +10 -9
  277. package/dist/esm/credentials/ThreadCredentialsRegistry.js.map +1 -1
  278. package/dist/esm/credentials/ThreadNetworkCredentials.d.ts +4 -3
  279. package/dist/esm/credentials/ThreadNetworkCredentials.d.ts.map +1 -1
  280. package/dist/esm/crypto/AesCmacPrf128.d.ts +4 -14
  281. package/dist/esm/crypto/AesCmacPrf128.d.ts.map +1 -1
  282. package/dist/esm/crypto/AesCmacPrf128.js +8 -72
  283. package/dist/esm/crypto/AesCmacPrf128.js.map +2 -2
  284. package/dist/esm/crypto/Pbkdf2AesCmac.d.ts +5 -4
  285. package/dist/esm/crypto/Pbkdf2AesCmac.d.ts.map +1 -1
  286. package/dist/esm/crypto/Pbkdf2AesCmac.js +6 -5
  287. package/dist/esm/crypto/Pbkdf2AesCmac.js.map +1 -1
  288. package/dist/esm/crypto/Pskc.d.ts +4 -3
  289. package/dist/esm/crypto/Pskc.d.ts.map +1 -1
  290. package/dist/esm/crypto/Pskc.js +7 -6
  291. package/dist/esm/crypto/Pskc.js.map +1 -1
  292. package/dist/esm/crypto/index.d.ts +1 -1
  293. package/dist/esm/crypto/index.d.ts.map +1 -1
  294. package/dist/esm/crypto/index.js +1 -2
  295. package/dist/esm/crypto/index.js.map +1 -1
  296. package/dist/esm/dataset/OperationalDataset.d.ts +10 -10
  297. package/dist/esm/dataset/OperationalDataset.d.ts.map +1 -1
  298. package/dist/esm/dataset/OperationalDataset.js +32 -31
  299. package/dist/esm/dataset/OperationalDataset.js.map +1 -1
  300. package/dist/esm/dataset/SecurityPolicy.d.ts +3 -2
  301. package/dist/esm/dataset/SecurityPolicy.d.ts.map +1 -1
  302. package/dist/esm/dataset/SecurityPolicy.js +6 -5
  303. package/dist/esm/dataset/SecurityPolicy.js.map +1 -1
  304. package/dist/esm/diagnostic/DiagnosticResponse.d.ts +5 -4
  305. package/dist/esm/diagnostic/DiagnosticResponse.d.ts.map +1 -1
  306. package/dist/esm/diagnostic/DiagnosticSource.d.ts +2 -2
  307. package/dist/esm/diagnostic/DiagnosticSource.d.ts.map +1 -1
  308. package/dist/esm/diagnostic/MeshCopDiagnosticSource.d.ts +7 -3
  309. package/dist/esm/diagnostic/MeshCopDiagnosticSource.d.ts.map +1 -1
  310. package/dist/esm/diagnostic/MeshCopDiagnosticSource.js +49 -43
  311. package/dist/esm/diagnostic/MeshCopDiagnosticSource.js.map +1 -1
  312. package/dist/esm/diagnostic/connectMeshcop.d.ts.map +1 -1
  313. package/dist/esm/diagnostic/connectMeshcop.js +6 -13
  314. package/dist/esm/diagnostic/connectMeshcop.js.map +1 -1
  315. package/dist/esm/diagnostic/errors.d.ts +1 -1
  316. package/dist/esm/diagnostic/errors.d.ts.map +1 -1
  317. package/dist/esm/discovery/BorderRouterRegistry.d.ts.map +1 -1
  318. package/dist/esm/discovery/BorderRouterRegistry.js +2 -4
  319. package/dist/esm/discovery/BorderRouterRegistry.js.map +1 -1
  320. package/dist/esm/dtls/channel/DtlsConnectOpts.d.ts +3 -3
  321. package/dist/esm/dtls/channel/DtlsConnectOpts.d.ts.map +1 -1
  322. package/dist/esm/dtls/channel/NobleDtlsChannel.d.ts.map +1 -1
  323. package/dist/esm/dtls/channel/NobleDtlsChannel.js +90 -58
  324. package/dist/esm/dtls/channel/NobleDtlsChannel.js.map +1 -1
  325. package/dist/esm/dtls/ecjpake/EcJpakePms.d.ts +5 -4
  326. package/dist/esm/dtls/ecjpake/EcJpakePms.d.ts.map +1 -1
  327. package/dist/esm/dtls/ecjpake/EcJpakePms.js +5 -6
  328. package/dist/esm/dtls/ecjpake/EcJpakePms.js.map +1 -1
  329. package/dist/esm/dtls/ecjpake/EcJpakeRound.d.ts +16 -15
  330. package/dist/esm/dtls/ecjpake/EcJpakeRound.d.ts.map +1 -1
  331. package/dist/esm/dtls/ecjpake/EcJpakeRound.js +41 -30
  332. package/dist/esm/dtls/ecjpake/EcJpakeRound.js.map +1 -1
  333. package/dist/esm/dtls/ecjpake/SchnorrZkp.d.ts +10 -9
  334. package/dist/esm/dtls/ecjpake/SchnorrZkp.d.ts.map +1 -1
  335. package/dist/esm/dtls/ecjpake/SchnorrZkp.js +18 -14
  336. package/dist/esm/dtls/ecjpake/SchnorrZkp.js.map +1 -1
  337. package/dist/esm/dtls/handshake/ChangeCipherSpec.d.ts +2 -1
  338. package/dist/esm/dtls/handshake/ChangeCipherSpec.d.ts.map +1 -1
  339. package/dist/esm/dtls/handshake/ChangeCipherSpec.js +3 -1
  340. package/dist/esm/dtls/handshake/ChangeCipherSpec.js.map +1 -1
  341. package/dist/esm/dtls/handshake/ClientHelloMessage.d.ts +27 -4
  342. package/dist/esm/dtls/handshake/ClientHelloMessage.d.ts.map +1 -1
  343. package/dist/esm/dtls/handshake/ClientHelloMessage.js +4 -2
  344. package/dist/esm/dtls/handshake/ClientHelloMessage.js.map +1 -1
  345. package/dist/esm/dtls/handshake/ClientKeyExchangeMessage.d.ts +2 -1
  346. package/dist/esm/dtls/handshake/ClientKeyExchangeMessage.d.ts.map +1 -1
  347. package/dist/esm/dtls/handshake/ClientKeyExchangeMessage.js.map +1 -1
  348. package/dist/esm/dtls/handshake/DtlsClient.d.ts +9 -6
  349. package/dist/esm/dtls/handshake/DtlsClient.d.ts.map +1 -1
  350. package/dist/esm/dtls/handshake/DtlsClient.js +100 -78
  351. package/dist/esm/dtls/handshake/DtlsClient.js.map +1 -1
  352. package/dist/esm/dtls/handshake/FinishedMessage.d.ts +10 -3
  353. package/dist/esm/dtls/handshake/FinishedMessage.d.ts.map +1 -1
  354. package/dist/esm/dtls/handshake/FinishedMessage.js +5 -3
  355. package/dist/esm/dtls/handshake/FinishedMessage.js.map +1 -1
  356. package/dist/esm/dtls/handshake/HandshakeMessage.d.ts +5 -4
  357. package/dist/esm/dtls/handshake/HandshakeMessage.d.ts.map +1 -1
  358. package/dist/esm/dtls/handshake/HandshakeMessage.js +14 -12
  359. package/dist/esm/dtls/handshake/HandshakeMessage.js.map +1 -1
  360. package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.d.ts +19 -2
  361. package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.d.ts.map +1 -1
  362. package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.js +3 -1
  363. package/dist/esm/dtls/handshake/HelloVerifyRequestMessage.js.map +1 -1
  364. package/dist/esm/dtls/handshake/ServerHelloDoneMessage.d.ts +2 -1
  365. package/dist/esm/dtls/handshake/ServerHelloDoneMessage.d.ts.map +1 -1
  366. package/dist/esm/dtls/handshake/ServerHelloDoneMessage.js +3 -2
  367. package/dist/esm/dtls/handshake/ServerHelloDoneMessage.js.map +1 -1
  368. package/dist/esm/dtls/handshake/ServerHelloMessage.d.ts +4 -3
  369. package/dist/esm/dtls/handshake/ServerHelloMessage.d.ts.map +1 -1
  370. package/dist/esm/dtls/handshake/ServerHelloMessage.js +3 -1
  371. package/dist/esm/dtls/handshake/ServerHelloMessage.js.map +1 -1
  372. package/dist/esm/dtls/handshake/ServerKeyExchangeMessage.d.ts +2 -1
  373. package/dist/esm/dtls/handshake/ServerKeyExchangeMessage.d.ts.map +1 -1
  374. package/dist/esm/dtls/handshake/ServerKeyExchangeMessage.js.map +1 -1
  375. package/dist/esm/dtls/prf/HandshakeTranscript.d.ts +7 -5
  376. package/dist/esm/dtls/prf/HandshakeTranscript.d.ts.map +1 -1
  377. package/dist/esm/dtls/prf/HandshakeTranscript.js +15 -10
  378. package/dist/esm/dtls/prf/HandshakeTranscript.js.map +1 -1
  379. package/dist/esm/dtls/prf/TlsPrf.d.ts +23 -22
  380. package/dist/esm/dtls/prf/TlsPrf.d.ts.map +1 -1
  381. package/dist/esm/dtls/prf/TlsPrf.js +34 -31
  382. package/dist/esm/dtls/prf/TlsPrf.js.map +1 -1
  383. package/dist/esm/dtls/record/AesCcm8.d.ts +13 -12
  384. package/dist/esm/dtls/record/AesCcm8.d.ts.map +1 -1
  385. package/dist/esm/dtls/record/AesCcm8.js +13 -35
  386. package/dist/esm/dtls/record/AesCcm8.js.map +1 -1
  387. package/dist/esm/dtls/record/DtlsCipherState.d.ts +11 -10
  388. package/dist/esm/dtls/record/DtlsCipherState.d.ts.map +1 -1
  389. package/dist/esm/dtls/record/DtlsCipherState.js +11 -7
  390. package/dist/esm/dtls/record/DtlsCipherState.js.map +1 -1
  391. package/dist/esm/dtls/record/DtlsRecord.d.ts +10 -10
  392. package/dist/esm/dtls/record/DtlsRecord.d.ts.map +1 -1
  393. package/dist/esm/dtls/record/DtlsRecord.js +11 -9
  394. package/dist/esm/dtls/record/DtlsRecord.js.map +1 -1
  395. package/dist/esm/otbr-rest/OtbrRestCapability.d.ts +3 -4
  396. package/dist/esm/otbr-rest/OtbrRestCapability.d.ts.map +1 -1
  397. package/dist/esm/otbr-rest/OtbrRestClient.d.ts +27 -8
  398. package/dist/esm/otbr-rest/OtbrRestClient.d.ts.map +1 -1
  399. package/dist/esm/otbr-rest/OtbrRestClient.js +51 -21
  400. package/dist/esm/otbr-rest/OtbrRestClient.js.map +1 -1
  401. package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.d.ts +2 -1
  402. package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.d.ts.map +1 -1
  403. package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.js +4 -4
  404. package/dist/esm/otbr-rest/OtbrRestDiagnosticSource.js.map +1 -1
  405. package/dist/esm/otbr-rest/OtbrRestProbe.d.ts +6 -4
  406. package/dist/esm/otbr-rest/OtbrRestProbe.d.ts.map +1 -1
  407. package/dist/esm/otbr-rest/OtbrRestProbe.js +12 -44
  408. package/dist/esm/otbr-rest/OtbrRestProbe.js.map +1 -1
  409. package/dist/esm/otbr-rest/caseNormalizer.d.ts +7 -0
  410. package/dist/esm/otbr-rest/caseNormalizer.d.ts.map +1 -1
  411. package/dist/esm/otbr-rest/caseNormalizer.js +11 -0
  412. package/dist/esm/otbr-rest/caseNormalizer.js.map +1 -1
  413. package/dist/esm/otbr-rest/parseHexBytes.d.ts +22 -0
  414. package/dist/esm/otbr-rest/parseHexBytes.d.ts.map +1 -0
  415. package/dist/esm/otbr-rest/parseHexBytes.js +30 -0
  416. package/dist/esm/otbr-rest/parseHexBytes.js.map +6 -0
  417. package/dist/esm/otbr-rest/translation.d.ts +2 -1
  418. package/dist/esm/otbr-rest/translation.d.ts.map +1 -1
  419. package/dist/esm/otbr-rest/translation.js +16 -18
  420. package/dist/esm/otbr-rest/translation.js.map +1 -1
  421. package/dist/esm/selection/selectBr.d.ts +8 -4
  422. package/dist/esm/selection/selectBr.d.ts.map +1 -1
  423. package/dist/esm/selection/selectBr.js +6 -5
  424. package/dist/esm/selection/selectBr.js.map +1 -1
  425. package/dist/esm/selection/withExtPanIdLock.d.ts +2 -1
  426. package/dist/esm/selection/withExtPanIdLock.d.ts.map +1 -1
  427. package/dist/esm/selection/withExtPanIdLock.js.map +1 -1
  428. package/dist/esm/tlv/BasicTlvCodec.d.ts +4 -4
  429. package/dist/esm/tlv/BasicTlvCodec.d.ts.map +1 -1
  430. package/dist/esm/tlv/BasicTlvCodec.js +14 -12
  431. package/dist/esm/tlv/BasicTlvCodec.js.map +1 -1
  432. package/dist/esm/tlv/NetworkDiagnosticTlv.d.ts +3 -2
  433. package/dist/esm/tlv/NetworkDiagnosticTlv.d.ts.map +1 -1
  434. package/dist/esm/tlv/NetworkDiagnosticTlv.js.map +1 -1
  435. package/dist/esm/tlv/TypeListTlv.d.ts +3 -2
  436. package/dist/esm/tlv/TypeListTlv.d.ts.map +1 -1
  437. package/dist/esm/tlv/TypeListTlv.js +2 -2
  438. package/dist/esm/tlv/TypeListTlv.js.map +1 -1
  439. package/dist/esm/tlv/diag/ChildIpv6AddressList.d.ts +3 -2
  440. package/dist/esm/tlv/diag/ChildIpv6AddressList.d.ts.map +1 -1
  441. package/dist/esm/tlv/diag/ChildIpv6AddressList.js +5 -3
  442. package/dist/esm/tlv/diag/ChildIpv6AddressList.js.map +1 -1
  443. package/dist/esm/tlv/diag/ChildTable.d.ts +3 -2
  444. package/dist/esm/tlv/diag/ChildTable.d.ts.map +1 -1
  445. package/dist/esm/tlv/diag/ChildTable.js +8 -7
  446. package/dist/esm/tlv/diag/ChildTable.js.map +1 -1
  447. package/dist/esm/tlv/diag/Connectivity.d.ts +3 -2
  448. package/dist/esm/tlv/diag/Connectivity.d.ts.map +1 -1
  449. package/dist/esm/tlv/diag/Connectivity.js +14 -14
  450. package/dist/esm/tlv/diag/Connectivity.js.map +1 -1
  451. package/dist/esm/tlv/diag/Ipv6AddressList.d.ts +3 -2
  452. package/dist/esm/tlv/diag/Ipv6AddressList.d.ts.map +1 -1
  453. package/dist/esm/tlv/diag/Ipv6AddressList.js +7 -6
  454. package/dist/esm/tlv/diag/Ipv6AddressList.js.map +1 -1
  455. package/dist/esm/tlv/diag/LeaderData.d.ts +3 -2
  456. package/dist/esm/tlv/diag/LeaderData.d.ts.map +1 -1
  457. package/dist/esm/tlv/diag/LeaderData.js +9 -8
  458. package/dist/esm/tlv/diag/LeaderData.js.map +1 -1
  459. package/dist/esm/tlv/diag/MacCounters.d.ts +3 -2
  460. package/dist/esm/tlv/diag/MacCounters.d.ts.map +1 -1
  461. package/dist/esm/tlv/diag/MacCounters.js +13 -12
  462. package/dist/esm/tlv/diag/MacCounters.js.map +1 -1
  463. package/dist/esm/tlv/diag/MleCounters.d.ts +3 -2
  464. package/dist/esm/tlv/diag/MleCounters.d.ts.map +1 -1
  465. package/dist/esm/tlv/diag/MleCounters.js +19 -18
  466. package/dist/esm/tlv/diag/MleCounters.js.map +1 -1
  467. package/dist/esm/tlv/diag/Mode.d.ts +3 -2
  468. package/dist/esm/tlv/diag/Mode.d.ts.map +1 -1
  469. package/dist/esm/tlv/diag/Mode.js +5 -3
  470. package/dist/esm/tlv/diag/Mode.js.map +1 -1
  471. package/dist/esm/tlv/diag/NetworkData.d.ts +7 -6
  472. package/dist/esm/tlv/diag/NetworkData.d.ts.map +1 -1
  473. package/dist/esm/tlv/diag/NetworkData.js +23 -18
  474. package/dist/esm/tlv/diag/NetworkData.js.map +1 -1
  475. package/dist/esm/tlv/diag/Primitives.d.ts +15 -14
  476. package/dist/esm/tlv/diag/Primitives.d.ts.map +1 -1
  477. package/dist/esm/tlv/diag/Primitives.js +26 -20
  478. package/dist/esm/tlv/diag/Primitives.js.map +1 -1
  479. package/dist/esm/tlv/diag/Route64.d.ts +3 -2
  480. package/dist/esm/tlv/diag/Route64.d.ts.map +1 -1
  481. package/dist/esm/tlv/diag/Route64.js +9 -8
  482. package/dist/esm/tlv/diag/Route64.js.map +1 -1
  483. package/dist/esm/tlv/diag/RouterNeighbor.d.ts +3 -2
  484. package/dist/esm/tlv/diag/RouterNeighbor.d.ts.map +1 -1
  485. package/dist/esm/tlv/diag/RouterNeighbor.js +13 -11
  486. package/dist/esm/tlv/diag/RouterNeighbor.js.map +1 -1
  487. package/dist/esm/tlv/diag/Timeout.d.ts +3 -2
  488. package/dist/esm/tlv/diag/Timeout.d.ts.map +1 -1
  489. package/dist/esm/tlv/diag/Timeout.js +5 -4
  490. package/dist/esm/tlv/diag/Timeout.js.map +1 -1
  491. package/dist/esm/tlv/diag/VendorInfo.d.ts +13 -12
  492. package/dist/esm/tlv/diag/VendorInfo.d.ts.map +1 -1
  493. package/dist/esm/tlv/diag/VendorInfo.js +5 -4
  494. package/dist/esm/tlv/diag/VendorInfo.js.map +1 -1
  495. package/dist/esm/tlv/meshcop/Ip6AddressTlv.d.ts +3 -2
  496. package/dist/esm/tlv/meshcop/Ip6AddressTlv.d.ts.map +1 -1
  497. package/dist/esm/tlv/meshcop/Ip6AddressTlv.js +7 -4
  498. package/dist/esm/tlv/meshcop/Ip6AddressTlv.js.map +1 -1
  499. package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.d.ts +4 -3
  500. package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.d.ts.map +1 -1
  501. package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.js +10 -8
  502. package/dist/esm/tlv/meshcop/UdpEncapsulationTlv.js.map +1 -1
  503. package/dist/esm/util/meshLocalAddr.d.ts +5 -4
  504. package/dist/esm/util/meshLocalAddr.d.ts.map +1 -1
  505. package/dist/esm/util/meshLocalAddr.js +7 -5
  506. package/dist/esm/util/meshLocalAddr.js.map +1 -1
  507. package/package.json +5 -5
  508. package/src/coap/CoapClient.ts +13 -20
  509. package/src/coap/CoapMessage.ts +17 -9
  510. package/src/commissioner/Commissioner.ts +5 -2
  511. package/src/commissioner/LeadKa.ts +4 -4
  512. package/src/commissioner/LeadPet.ts +6 -5
  513. package/src/credentials/ThreadCredentialsRegistry.ts +14 -13
  514. package/src/credentials/ThreadNetworkCredentials.ts +5 -3
  515. package/src/crypto/AesCmacPrf128.ts +10 -87
  516. package/src/crypto/Pbkdf2AesCmac.ts +14 -10
  517. package/src/crypto/Pskc.ts +7 -6
  518. package/src/crypto/index.ts +1 -1
  519. package/src/dataset/OperationalDataset.ts +48 -47
  520. package/src/dataset/SecurityPolicy.ts +8 -7
  521. package/src/diagnostic/DiagnosticResponse.ts +5 -4
  522. package/src/diagnostic/DiagnosticSource.ts +2 -2
  523. package/src/diagnostic/MeshCopDiagnosticSource.ts +80 -64
  524. package/src/diagnostic/connectMeshcop.ts +6 -14
  525. package/src/diagnostic/errors.ts +1 -1
  526. package/src/discovery/BorderRouterRegistry.ts +2 -4
  527. package/src/dtls/channel/DtlsConnectOpts.ts +3 -3
  528. package/src/dtls/channel/NobleDtlsChannel.ts +96 -60
  529. package/src/dtls/ecjpake/EcJpakePms.ts +5 -6
  530. package/src/dtls/ecjpake/EcJpakeRound.ts +57 -37
  531. package/src/dtls/ecjpake/SchnorrZkp.ts +43 -30
  532. package/src/dtls/handshake/ChangeCipherSpec.ts +3 -1
  533. package/src/dtls/handshake/ClientHelloMessage.ts +8 -6
  534. package/src/dtls/handshake/ClientKeyExchangeMessage.ts +2 -1
  535. package/src/dtls/handshake/DtlsClient.ts +119 -95
  536. package/src/dtls/handshake/FinishedMessage.ts +5 -3
  537. package/src/dtls/handshake/HandshakeMessage.ts +18 -16
  538. package/src/dtls/handshake/HelloVerifyRequestMessage.ts +3 -1
  539. package/src/dtls/handshake/ServerHelloDoneMessage.ts +5 -3
  540. package/src/dtls/handshake/ServerHelloMessage.ts +5 -3
  541. package/src/dtls/handshake/ServerKeyExchangeMessage.ts +2 -1
  542. package/src/dtls/prf/HandshakeTranscript.ts +18 -11
  543. package/src/dtls/prf/TlsPrf.ts +68 -54
  544. package/src/dtls/record/AesCcm8.ts +23 -49
  545. package/src/dtls/record/DtlsCipherState.ts +20 -16
  546. package/src/dtls/record/DtlsRecord.ts +17 -15
  547. package/src/otbr-rest/OtbrRestCapability.ts +4 -4
  548. package/src/otbr-rest/OtbrRestClient.ts +64 -29
  549. package/src/otbr-rest/OtbrRestDiagnosticSource.ts +5 -5
  550. package/src/otbr-rest/OtbrRestProbe.ts +12 -47
  551. package/src/otbr-rest/caseNormalizer.ts +17 -0
  552. package/src/otbr-rest/parseHexBytes.ts +47 -0
  553. package/src/otbr-rest/translation.ts +24 -22
  554. package/src/selection/selectBr.ts +26 -13
  555. package/src/selection/withExtPanIdLock.ts +1 -1
  556. package/src/tlv/BasicTlvCodec.ts +17 -15
  557. package/src/tlv/NetworkDiagnosticTlv.ts +3 -2
  558. package/src/tlv/TypeListTlv.ts +4 -4
  559. package/src/tlv/diag/ChildIpv6AddressList.ts +8 -5
  560. package/src/tlv/diag/ChildTable.ts +10 -9
  561. package/src/tlv/diag/Connectivity.ts +16 -16
  562. package/src/tlv/diag/Ipv6AddressList.ts +9 -8
  563. package/src/tlv/diag/LeaderData.ts +11 -10
  564. package/src/tlv/diag/MacCounters.ts +15 -14
  565. package/src/tlv/diag/MleCounters.ts +21 -20
  566. package/src/tlv/diag/Mode.ts +7 -5
  567. package/src/tlv/diag/NetworkData.ts +31 -26
  568. package/src/tlv/diag/Primitives.ts +42 -36
  569. package/src/tlv/diag/Route64.ts +11 -10
  570. package/src/tlv/diag/RouterNeighbor.ts +16 -13
  571. package/src/tlv/diag/Timeout.ts +7 -6
  572. package/src/tlv/diag/VendorInfo.ts +19 -18
  573. package/src/tlv/meshcop/Ip6AddressTlv.ts +9 -6
  574. package/src/tlv/meshcop/UdpEncapsulationTlv.ts +13 -11
  575. package/src/util/meshLocalAddr.ts +10 -8
@@ -6,8 +6,9 @@
6
6
 
7
7
  import { Bytes, type Duration, ImplementationError, Millis, Seconds, Time, Timer } from "@matter/general";
8
8
  import { OperationalDataset } from "../dataset/OperationalDataset.js";
9
- import { normalizeKeys } from "./caseNormalizer.js";
9
+ import { detectKeyFormat, normalizeKeys } from "./caseNormalizer.js";
10
10
  import { OtbrRestError, type OtbrRestErrorCode } from "./OtbrRestError.js";
11
+ import { parseHexBytes, parseRloc16 } from "./parseHexBytes.js";
11
12
 
12
13
  export interface OtbrLeaderData {
13
14
  partitionId: number;
@@ -18,15 +19,16 @@ export interface OtbrLeaderData {
18
19
  }
19
20
 
20
21
  export interface OtbrNodeInfo {
21
- baId: Uint8Array;
22
+ baId: Bytes;
22
23
  state: string;
23
- numOfRouter: number;
24
+ /** Router count. Undefined on builds that omit both `numOfRouter` and its post-2024 alias `routerCount`. */
25
+ numOfRouter?: number;
24
26
  rlocAddress: string;
25
- extAddress: Uint8Array;
27
+ extAddress: Bytes;
26
28
  networkName: string;
27
29
  rloc16: number;
28
30
  leaderData: OtbrLeaderData;
29
- extPanId: Uint8Array;
31
+ extPanId: Bytes;
30
32
  }
31
33
 
32
34
  export interface OtbrDatasetHex {
@@ -80,6 +82,7 @@ function errorCodeForStatus(status: number): OtbrRestErrorCode {
80
82
  interface FetchedJson {
81
83
  status: number;
82
84
  body: unknown;
85
+ keyFormat: "camel" | "pascal" | null;
83
86
  }
84
87
 
85
88
  function isRecord(value: unknown): value is Record<string, unknown> {
@@ -102,6 +105,23 @@ function expectNumber(record: Record<string, unknown>, key: string, where: strin
102
105
  return value;
103
106
  }
104
107
 
108
+ /** First finite number found under any of `keys`, else `undefined`. */
109
+ function optionalNumber(record: Record<string, unknown>, ...keys: string[]): number | undefined {
110
+ for (const key of keys) {
111
+ const value = record[key];
112
+ if (typeof value === "number" && Number.isFinite(value)) return value;
113
+ }
114
+ return undefined;
115
+ }
116
+
117
+ function expectRloc16(record: Record<string, unknown>, where: string): number {
118
+ const parsed = parseRloc16(record["rloc16"]);
119
+ if (parsed === undefined) {
120
+ throw new OtbrRestError("rest_protocol", `${where}: missing or invalid field rloc16`);
121
+ }
122
+ return parsed;
123
+ }
124
+
105
125
  function expectRecord(record: Record<string, unknown>, key: string, where: string): Record<string, unknown> {
106
126
  const value = record[key];
107
127
  if (!isRecord(value)) {
@@ -110,16 +130,6 @@ function expectRecord(record: Record<string, unknown>, key: string, where: strin
110
130
  return value;
111
131
  }
112
132
 
113
- function parseHexBytes(hex: string, expectedLen: number, where: string): Uint8Array {
114
- if (!/^[0-9a-fA-F]*$/.test(hex)) {
115
- throw new OtbrRestError("rest_protocol", `${where}: not hex`);
116
- }
117
- if (hex.length !== expectedLen * 2) {
118
- throw new OtbrRestError("rest_protocol", `${where}: expected ${expectedLen} bytes, got ${hex.length / 2}`);
119
- }
120
- return Bytes.of(Bytes.fromHex(hex));
121
- }
122
-
123
133
  /**
124
134
  * Thin HTTP client for the OpenThread Border Router (OTBR) REST API.
125
135
  *
@@ -155,7 +165,7 @@ export class OtbrRestClient {
155
165
  /**
156
166
  * Fetch the current node summary from the OTBR `/node` endpoint.
157
167
  *
158
- * @returns Parsed node info with typed fields (binary fields as `Uint8Array`).
168
+ * @returns Parsed node info with typed fields (binary fields as `Bytes`).
159
169
  * @throws {@link OtbrRestError} with code `"rest_unreachable"` on network error or timeout.
160
170
  * @throws {@link OtbrRestError} with code `"rest_protocol"` when the response is
161
171
  * not a valid JSON object or a required field is missing or has the wrong type.
@@ -175,15 +185,39 @@ export class OtbrRestClient {
175
185
  leaderRouterId: expectNumber(leaderRaw, "leaderRouterId", `${where}.leaderData`),
176
186
  };
177
187
  return {
178
- baId: parseHexBytes(expectString(body, "baId", where), 16, `${where}.baId`),
188
+ baId: parseHexBytes(expectString(body, "baId", where), `${where}.baId`, 16),
179
189
  state: expectString(body, "state", where),
180
- numOfRouter: expectNumber(body, "numOfRouter", where),
190
+ numOfRouter: optionalNumber(body, "numOfRouter", "routerCount"),
181
191
  rlocAddress: expectString(body, "rlocAddress", where),
182
- extAddress: parseHexBytes(expectString(body, "extAddress", where), 8, `${where}.extAddress`),
192
+ extAddress: parseHexBytes(expectString(body, "extAddress", where), `${where}.extAddress`, 8),
183
193
  networkName: expectString(body, "networkName", where),
184
- rloc16: expectNumber(body, "rloc16", where),
194
+ rloc16: expectRloc16(body, where),
185
195
  leaderData,
186
- extPanId: parseHexBytes(expectString(body, "extPanId", where), 8, `${where}.extPanId`),
196
+ extPanId: parseHexBytes(expectString(body, "extPanId", where), `${where}.extPanId`, 8),
197
+ };
198
+ }
199
+
200
+ /**
201
+ * Lightweight probe of the `/node` endpoint for {@link OtbrRestProbe}.
202
+ *
203
+ * Fetches `/node` once and returns only the fields needed to identify an
204
+ * OTBR REST surface — the observed key casing plus the network name and
205
+ * Extended PAN ID. Unlike {@link getNode} it does not validate the full
206
+ * node schema, so a build that reshapes non-essential fields still probes
207
+ * cleanly.
208
+ *
209
+ * @throws {@link OtbrRestError} `"rest_protocol"` when the response is not an
210
+ * OTBR node object or lacks `networkName`/`extPanId`.
211
+ */
212
+ async probeNode(): Promise<{ keyFormat: "camel" | "pascal"; networkName: string; extPanId: Bytes }> {
213
+ const { body, keyFormat } = await this.#fetchJson("/node");
214
+ if (!isRecord(body) || keyFormat === null) {
215
+ throw new OtbrRestError("rest_protocol", "/node did not return an OTBR node object");
216
+ }
217
+ return {
218
+ keyFormat,
219
+ networkName: expectString(body, "networkName", "/node"),
220
+ extPanId: parseHexBytes(expectString(body, "extPanId", "/node"), "/node.extPanId", 8),
187
221
  };
188
222
  }
189
223
 
@@ -268,15 +302,15 @@ export class OtbrRestClient {
268
302
  /**
269
303
  * Fetch the 8-byte IEEE EUI-64 extended address from `/node/ext-address`.
270
304
  */
271
- async getExtAddress(): Promise<Uint8Array> {
272
- return parseHexBytes(await this.#getJsonString("/node/ext-address"), 8, "/node/ext-address");
305
+ async getExtAddress(): Promise<Bytes> {
306
+ return parseHexBytes(await this.#getJsonString("/node/ext-address"), "/node/ext-address", 8);
273
307
  }
274
308
 
275
309
  /**
276
310
  * Fetch the 8-byte Extended PAN ID from `/node/ext-panid`.
277
311
  */
278
- async getExtPanId(): Promise<Uint8Array> {
279
- return parseHexBytes(await this.#getJsonString("/node/ext-panid"), 8, "/node/ext-panid");
312
+ async getExtPanId(): Promise<Bytes> {
313
+ return parseHexBytes(await this.#getJsonString("/node/ext-panid"), "/node/ext-panid", 8);
280
314
  }
281
315
 
282
316
  /**
@@ -284,8 +318,8 @@ export class OtbrRestClient {
284
318
  *
285
319
  * @throws {@link OtbrRestError} `"rest_unsupported"` on older firmware that lacks this endpoint (404).
286
320
  */
287
- async getBorderAgentId(): Promise<Uint8Array> {
288
- return parseHexBytes(await this.#getJsonString("/node/ba-id"), 16, "/node/ba-id");
321
+ async getBorderAgentId(): Promise<Bytes> {
322
+ return parseHexBytes(await this.#getJsonString("/node/ba-id"), "/node/ba-id", 16);
289
323
  }
290
324
 
291
325
  /**
@@ -555,7 +589,7 @@ export class OtbrRestClient {
555
589
  async #fetchJson(path: string): Promise<FetchedJson> {
556
590
  const response = await this.#doFetch(path, "application/json");
557
591
  if (response.status === HTTP_NO_CONTENT) {
558
- return { status: response.status, body: null };
592
+ return { status: response.status, body: null, keyFormat: null };
559
593
  }
560
594
  if (!response.ok) {
561
595
  throw new OtbrRestError(errorCodeForStatus(response.status), `GET ${path} returned ${response.status}`, {
@@ -570,7 +604,8 @@ export class OtbrRestClient {
570
604
  cause: err instanceof Error ? err : undefined,
571
605
  });
572
606
  }
573
- return { status: response.status, body: normalizeKeys(parsed) };
607
+ const keyFormat = isRecord(parsed) ? detectKeyFormat(parsed) : null;
608
+ return { status: response.status, body: normalizeKeys(parsed), keyFormat };
574
609
  }
575
610
 
576
611
  async #fetchText(path: string): Promise<string | undefined> {
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import { Bytes, Logger, Observable } from "@matter/general";
7
+ import { Bytes, errorOf, Logger, Observable } from "@matter/general";
8
8
  import type { DiagnosticResponse } from "../diagnostic/DiagnosticResponse.js";
9
9
  import type { DiagnosticSource, QueryMulticastHandle, QueryMulticastOptions } from "../diagnostic/DiagnosticSource.js";
10
10
  import { DEFAULT_RESET_TLV_TYPES } from "../diagnostic/DiagnosticSource.js";
@@ -49,7 +49,7 @@ export class OtbrRestDiagnosticSource implements DiagnosticSource {
49
49
  *
50
50
  * @param extPanId - 8-byte Extended PAN ID of the network to query.
51
51
  */
52
- canQuery(extPanId: Uint8Array): boolean {
52
+ canQuery(extPanId: Bytes): boolean {
53
53
  return Bytes.areEqual(extPanId, this.#capability.extPanId);
54
54
  }
55
55
 
@@ -116,17 +116,17 @@ export class OtbrRestDiagnosticSource implements DiagnosticSource {
116
116
  });
117
117
 
118
118
  const start = Date.now();
119
- logger.debug(`[ThreadDiag] REST GET /diagnostics ${this.#capability.baseUrl}`);
119
+ logger.debug(`REST GET /diagnostics ${this.#capability.baseUrl}`);
120
120
  void (async () => {
121
121
  try {
122
122
  const list = await this.#client.getDiagnostics();
123
123
  for (const entry of list) {
124
124
  onNode.emit(translateNodeJson(entry));
125
125
  }
126
- logger.debug(`[ThreadDiag] REST /diagnostics OK nodes=${list.length} duration=${Date.now() - start}ms`);
126
+ logger.debug(`REST /diagnostics OK nodes=${list.length} duration=${Date.now() - start}ms`);
127
127
  resolveDone();
128
128
  } catch (err) {
129
- const e = err instanceof Error ? err : new Error(String(err));
129
+ const e = errorOf(err);
130
130
  onError.emit(e);
131
131
  rejectDone(e);
132
132
  }
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import { Bytes, Logger, Millis, Seconds, Time, Timer } from "@matter/general";
7
+ import { Bytes, Logger, Seconds } from "@matter/general";
8
8
  import type { OtbrRestCapability } from "./OtbrRestCapability.js";
9
9
  import { OtbrRestClient } from "./OtbrRestClient.js";
10
10
  import { OtbrRestError } from "./OtbrRestError.js";
@@ -14,16 +14,15 @@ const logger = Logger.get("OtbrRestProbe");
14
14
  const DEFAULT_PROBE_PORT = 8081;
15
15
  const DEFAULT_PROBE_TIMEOUT = Seconds(1);
16
16
 
17
- const HTTP_OK = 200;
18
- const HTTP_NOT_FOUND = 404;
19
-
20
17
  export class OtbrRestProbe {
21
18
  /**
22
19
  * Probe a host:port for OTBR REST. Returns the detected capability or
23
- * `null` if the endpoint is not OTBR or not reachable within
24
- * `timeoutMs`. Detection mirrors python-otbr-api: a 200 on
25
- * `/api/actions` indicates the modern camelCase backend, a 404 the
26
- * legacy pascalCase backend; everything else is "not OTBR".
20
+ * `null` if the endpoint is not OTBR or not reachable within `timeoutMs`.
21
+ *
22
+ * A single `GET /node` both confirms the endpoint is OTBR and reveals its
23
+ * key casing: legacy builds emit PascalCase keys, post-2024 builds
24
+ * camelCase. Anything that is not a JSON object carrying `networkName` and
25
+ * `extPanId` is treated as "not OTBR".
27
26
  */
28
27
  static async probe(
29
28
  host: string,
@@ -32,54 +31,20 @@ export class OtbrRestProbe {
32
31
  ): Promise<OtbrRestCapability | null> {
33
32
  const client = new OtbrRestClient({ host, port, timeoutMs });
34
33
  const baseUrl = client.baseUrl;
35
- logger.debug(`[ThreadDiag] probe START ${baseUrl} timeout=${timeoutMs}ms`);
36
-
37
- const keyFormat = await detectCase(baseUrl, timeoutMs);
38
- if (keyFormat === null) {
39
- logger.debug(`[ThreadDiag] probe MISS ${baseUrl} (case detect failed)`);
40
- return null;
41
- }
34
+ logger.debug(`probe START ${baseUrl} timeout=${timeoutMs}ms`);
42
35
 
43
36
  try {
44
- const node = await client.getNode();
37
+ const { keyFormat, networkName, extPanId } = await client.probeNode();
45
38
  logger.debug(
46
- `[ThreadDiag] probe OK ${baseUrl} keyFormat=${keyFormat} xp=${Bytes.toHex(node.extPanId).toUpperCase()} network="${node.networkName}"`,
39
+ `probe OK ${baseUrl} keyFormat=${keyFormat} xp=${Bytes.toHex(extPanId).toUpperCase()} network="${networkName}"`,
47
40
  );
48
- return {
49
- baseUrl,
50
- keyFormat,
51
- probedAt: Date.now(),
52
- networkName: node.networkName,
53
- extPanId: node.extPanId,
54
- };
41
+ return { baseUrl, keyFormat, probedAt: Date.now(), networkName, extPanId };
55
42
  } catch (err) {
56
43
  if (err instanceof OtbrRestError) {
57
- logger.debug(`[ThreadDiag] probe MISS ${baseUrl} /node ${err.code} (${err.message})`);
44
+ logger.debug(`probe MISS ${baseUrl} /node ${err.code} (${err.message})`);
58
45
  return null;
59
46
  }
60
47
  throw err;
61
48
  }
62
49
  }
63
50
  }
64
-
65
- async function detectCase(baseUrl: string, timeoutMs: number): Promise<"camel" | "pascal" | null> {
66
- const controller = new AbortController();
67
- const timer: Timer = Time.getTimer("otbr-probe-timeout", Millis(timeoutMs), () => controller.abort()).start();
68
- try {
69
- const response = await fetch(`${baseUrl}/api/actions`, {
70
- method: "GET",
71
- headers: { Accept: "application/json" },
72
- signal: controller.signal,
73
- });
74
- if (response.status === HTTP_OK) return "camel";
75
- if (response.status === HTTP_NOT_FOUND) return "pascal";
76
- logger.debug(`probe of ${baseUrl} rejected: /api/actions returned ${response.status}`);
77
- return null;
78
- } catch (err) {
79
- const message = err instanceof Error ? err.message : String(err);
80
- logger.debug(`probe of ${baseUrl} rejected: /api/actions ${message}`);
81
- return null;
82
- } finally {
83
- timer.stop();
84
- }
85
- }
@@ -29,6 +29,23 @@ function isPlainObject(value: unknown): value is Record<string, unknown> {
29
29
  return proto === Object.prototype || proto === null;
30
30
  }
31
31
 
32
+ /**
33
+ * Classify an OTBR REST response object by its key casing: legacy builds emit
34
+ * PascalCase (`NetworkName`), post-2024 builds camelCase (`networkName`). Any
35
+ * uppercase-first key marks the object as pascal; a non-empty object with only
36
+ * lowercase-first keys is camel. An empty object yields `null` — no signal.
37
+ */
38
+ export function detectKeyFormat(raw: Record<string, unknown>): "camel" | "pascal" | null {
39
+ let sawKey = false;
40
+ for (const key of Object.keys(raw)) {
41
+ if (key.length === 0) continue;
42
+ sawKey = true;
43
+ const first = key.charCodeAt(0);
44
+ if (first >= 65 && first <= 90) return "pascal";
45
+ }
46
+ return sawKey ? "camel" : null;
47
+ }
48
+
32
49
  /**
33
50
  * Recursively rewrites object keys from PascalCase (or already-camelCase) to
34
51
  * camelCase. Idempotent — running it twice yields identical output. Arrays,
@@ -0,0 +1,47 @@
1
+ /**
2
+ * @license
3
+ * Copyright 2022-2026 Matter.js Authors
4
+ * SPDX-License-Identifier: Apache-2.0
5
+ */
6
+
7
+ import { Bytes } from "@matter/general";
8
+ import { OtbrRestError } from "./OtbrRestError.js";
9
+
10
+ /**
11
+ * Decode a hex string into {@link Bytes}, rejecting non-hex characters, odd
12
+ * length, and (if `expectedLen` is given) a wrong byte count.
13
+ *
14
+ * `Bytes.fromHex` does not itself reject non-hex characters, so this
15
+ * validation is load-bearing.
16
+ */
17
+ export function parseHexBytes(hex: string, where: string, expectedLen?: number): Bytes {
18
+ if (!/^[0-9a-fA-F]*$/.test(hex)) {
19
+ throw new OtbrRestError("rest_protocol", `${where}: not hex`);
20
+ }
21
+ if (hex.length % 2 !== 0) {
22
+ throw new OtbrRestError("rest_protocol", `${where}: odd hex length`);
23
+ }
24
+ if (expectedLen !== undefined && hex.length !== expectedLen * 2) {
25
+ throw new OtbrRestError("rest_protocol", `${where}: expected ${expectedLen} bytes, got ${hex.length / 2}`);
26
+ }
27
+ return Bytes.fromHex(hex);
28
+ }
29
+
30
+ const RLOC16_MAX = 0xffff;
31
+ const RLOC16_STRING = /^(?:0x[0-9a-fA-F]{1,4}|[0-9]{1,5})$/;
32
+
33
+ /**
34
+ * Parse a 16-bit RLOC, accepting either a JSON number (legacy builds) or a hex
35
+ * string like `"0x4800"` (post-2024 builds). Returns `undefined` for absent,
36
+ * malformed, or out-of-16-bit-range input — callers decide whether that is an
37
+ * error (`/node`) or a skippable field (`/diagnostics`).
38
+ */
39
+ export function parseRloc16(value: unknown): number | undefined {
40
+ const parsed =
41
+ typeof value === "number"
42
+ ? value
43
+ : typeof value === "string" && RLOC16_STRING.test(value)
44
+ ? Number(value)
45
+ : NaN;
46
+ return Number.isInteger(parsed) && parsed >= 0 && parsed <= RLOC16_MAX ? parsed : undefined;
47
+ }
@@ -15,6 +15,7 @@ import type { Mode } from "../tlv/diag/Mode.js";
15
15
  import { NetworkData } from "../tlv/diag/NetworkData.js";
16
16
  import type { Route64, Route64Entry } from "../tlv/diag/Route64.js";
17
17
  import { OtbrRestError } from "./OtbrRestError.js";
18
+ import { parseHexBytes, parseRloc16 } from "./parseHexBytes.js";
18
19
 
19
20
  const TIMEOUT_EXP_MIN = 4;
20
21
  const IPV6_BYTES = 16;
@@ -46,19 +47,6 @@ function requireNumber(record: Record<string, unknown>, key: string, where: stri
46
47
  return v;
47
48
  }
48
49
 
49
- function parseHexBytes(hex: string, where: string, expectedLen?: number): Uint8Array {
50
- if (!/^[0-9a-fA-F]*$/.test(hex)) {
51
- throw new OtbrRestError("rest_protocol", `${where}: not hex`);
52
- }
53
- if (hex.length % 2 !== 0) {
54
- throw new OtbrRestError("rest_protocol", `${where}: odd hex length`);
55
- }
56
- if (expectedLen !== undefined && hex.length !== expectedLen * 2) {
57
- throw new OtbrRestError("rest_protocol", `${where}: expected ${expectedLen} bytes, got ${hex.length / 2}`);
58
- }
59
- return Bytes.of(Bytes.fromHex(hex));
60
- }
61
-
62
50
  function translateMode(input: Record<string, unknown>): Mode {
63
51
  return {
64
52
  rxOnWhenIdle: requireNumber(input, "rxOnWhenIdle", "mode") !== 0,
@@ -133,12 +121,26 @@ function translateMacCounters(input: Record<string, unknown>): MacCounters {
133
121
  };
134
122
  }
135
123
 
124
+ const UINT64_MAX = 18446744073709551615n;
125
+
136
126
  function requireBigInt(record: Record<string, unknown>, key: string, where: string): bigint {
137
127
  const v = record[key];
138
- if (typeof v === "bigint") return v;
139
- const n = asNumber(v);
140
- if (n === undefined) throw new OtbrRestError("rest_protocol", `${where}: missing numeric ${key}`);
141
- return BigInt(Math.trunc(n));
128
+ let n: bigint;
129
+ if (typeof v === "bigint") {
130
+ n = v;
131
+ } else if (typeof v === "string" && /^\d+$/.test(v)) {
132
+ // 64-bit counters exceed 2^53, so some producers emit them as decimal
133
+ // strings; decode those directly to preserve full precision.
134
+ n = BigInt(v);
135
+ } else {
136
+ const num = asNumber(v);
137
+ if (num === undefined) throw new OtbrRestError("rest_protocol", `${where}: missing numeric ${key}`);
138
+ n = BigInt(Math.trunc(num));
139
+ }
140
+ // These fields are defined as uint64; reject anything outside that range
141
+ // regardless of how it was encoded.
142
+ if (n < 0n || n > UINT64_MAX) throw new OtbrRestError("rest_protocol", `${where}: ${key} outside uint64 range`);
143
+ return n;
142
144
  }
143
145
 
144
146
  function translateMleCounters(input: Record<string, unknown>): MleCounters {
@@ -192,7 +194,7 @@ function translateChildTable(input: unknown[]): ChildTableEntry[] {
192
194
  * compression. Does not handle IPv4-mapped (`::ffff:1.2.3.4`) or zone IDs
193
195
  * (`%`); OTBR `IP6AddressList` never returns either.
194
196
  */
195
- function parseIpv6(text: string): Uint8Array {
197
+ function parseIpv6(text: string): Bytes {
196
198
  if (text.includes("%")) {
197
199
  throw new OtbrRestError("rest_protocol", `ipv6: zone ID not supported in ${text}`);
198
200
  }
@@ -250,14 +252,14 @@ export function translateNodeJson(json: unknown): DiagnosticResponse {
250
252
  if (!isRecord(json)) {
251
253
  throw new OtbrRestError("rest_protocol", "translateNodeJson: input is not an object");
252
254
  }
253
- const result: DiagnosticResponse = { unknown: new Array<{ type: number; value: Uint8Array }>() };
255
+ const result: DiagnosticResponse = { unknown: new Array<{ type: number; value: Bytes }>() };
254
256
 
255
257
  const extAddress = asString(json["extAddress"]);
256
258
  if (extAddress !== undefined) {
257
259
  result.extMacAddress = parseHexBytes(extAddress, "extAddress", 8);
258
260
  }
259
261
 
260
- const rloc16 = asNumber(json["rloc16"]);
262
+ const rloc16 = parseRloc16(json["rloc16"]);
261
263
  if (rloc16 !== undefined) result.rloc16 = rloc16;
262
264
 
263
265
  const mode = asRecord(json["mode"]);
@@ -282,7 +284,7 @@ export function translateNodeJson(json: unknown): DiagnosticResponse {
282
284
 
283
285
  const ip6Addresses = asArray(json["ip6AddressList"]);
284
286
  if (ip6Addresses !== undefined) {
285
- const list = new Array<Uint8Array>();
287
+ const list = new Array<Bytes>();
286
288
  for (const entry of ip6Addresses) {
287
289
  const text = asString(entry);
288
290
  if (text === undefined) {
@@ -305,7 +307,7 @@ export function translateNodeJson(json: unknown): DiagnosticResponse {
305
307
  const channelPages = asString(json["channelPages"]);
306
308
  if (channelPages !== undefined) {
307
309
  const bytes = parseHexBytes(channelPages, "channelPages");
308
- result.channelPages = Array.from(bytes);
310
+ result.channelPages = Array.from(Bytes.of(bytes));
309
311
  }
310
312
 
311
313
  const maxChildTimeout = asNumber(json["maxChildTimeout"]);
@@ -4,6 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
+ import { ServerAddress } from "@matter/general";
7
8
  import type { BorderRouterEntry } from "../discovery/BorderRouterEntry.js";
8
9
 
9
10
  /**
@@ -38,10 +39,16 @@ export function decodeStateBitmap(hex: string | undefined): DecodedStateBitmap {
38
39
  }
39
40
 
40
41
  function hasLinkLocal(addresses: ReadonlyArray<string>): boolean {
41
- for (const addr of addresses) {
42
- if (addr.toLowerCase().startsWith("fe80:")) return true;
43
- }
44
- return false;
42
+ return addresses.some(ServerAddress.isIpv6LinkLocal);
43
+ }
44
+
45
+ /**
46
+ * A BR is dialable only if it exposes at least one non-link-local address:
47
+ * `connectMeshcop` rejects link-local-only BRs (scope IDs are not preserved
48
+ * through every mDNS resolver path).
49
+ */
50
+ function hasDialableAddress(addresses: ReadonlyArray<string>): boolean {
51
+ return addresses.some(addr => !ServerAddress.isIpv6LinkLocal(addr));
45
52
  }
46
53
 
47
54
  function scoreOf(br: BorderRouterEntry): number {
@@ -54,10 +61,11 @@ function scoreOf(br: BorderRouterEntry): number {
54
61
  }
55
62
 
56
63
  /**
57
- * Pick the best BR per spec FR-12 priority:
64
+ * Pick the best dialable BR. BRs without a non-link-local address are excluded
65
+ * (see {@link rankBrs}); the rest are ordered by spec FR-12 priority:
58
66
  * 1. State bitmap "BBR Active + Primary" (bits 7 and 8) wins.
59
67
  * 2. Then BBR Active but not Primary.
60
- * 3. Among equals: BR with at least one IPv6 link-local (`fe80:`) address wins.
68
+ * 3. Among equals: BR with at least one IPv6 link-local (`fe80::/10`) address wins.
61
69
  * 4. Among equals: alphabetical `extAddressHex` ascending (deterministic tie-break).
62
70
  */
63
71
  export function selectBr(brs: ReadonlyArray<BorderRouterEntry>): BorderRouterEntry | undefined {
@@ -65,13 +73,18 @@ export function selectBr(brs: ReadonlyArray<BorderRouterEntry>): BorderRouterEnt
65
73
  }
66
74
 
67
75
  /**
68
- * Rank all candidate BRs best-first using the same priority as {@link selectBr}.
69
- * Callers fall back to later entries when the preferred BR is unreachable.
76
+ * Rank dialable candidate BRs best-first using the same priority as
77
+ * {@link selectBr}. BRs without a non-link-local address are dropped they
78
+ * can never be dialed (see {@link hasDialableAddress}), so returning them would
79
+ * only waste a connect attempt. Callers fall back to later entries when the
80
+ * preferred BR is unreachable.
70
81
  */
71
82
  export function rankBrs(brs: ReadonlyArray<BorderRouterEntry>): BorderRouterEntry[] {
72
- return [...brs].sort((a, b) => {
73
- const byScore = scoreOf(b) - scoreOf(a);
74
- if (byScore !== 0) return byScore;
75
- return a.extAddressHex < b.extAddressHex ? -1 : a.extAddressHex > b.extAddressHex ? 1 : 0;
76
- });
83
+ return brs
84
+ .filter(br => hasDialableAddress(br.addresses))
85
+ .sort((a, b) => {
86
+ const byScore = scoreOf(b) - scoreOf(a);
87
+ if (byScore !== 0) return byScore;
88
+ return a.extAddressHex < b.extAddressHex ? -1 : a.extAddressHex > b.extAddressHex ? 1 : 0;
89
+ });
77
90
  }
@@ -22,7 +22,7 @@ export class ExtPanIdLockManager {
22
22
  * Errors thrown by `fn` propagate to the caller but never poison the queue —
23
23
  * the next caller for the same key still runs.
24
24
  */
25
- withLock<T>(extPanId: Uint8Array, fn: () => Promise<T>): Promise<T> {
25
+ withLock<T>(extPanId: Bytes, fn: () => Promise<T>): Promise<T> {
26
26
  const key = Bytes.toHex(extPanId);
27
27
  const previous = this.#queues.get(key) ?? Promise.resolve();
28
28
  const result = previous.then(() => fn());
@@ -4,7 +4,7 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
 
7
- import { InternalError, MatterError } from "@matter/general";
7
+ import { Bytes, InternalError, MatterError } from "@matter/general";
8
8
 
9
9
  /** Low-level MeshCoP/base TLV codec parse failure (truncated stream, bad length, ...). */
10
10
  export class ThreadTlvError extends MatterError {}
@@ -15,48 +15,49 @@ export class ThreadTlvError extends MatterError {}
15
15
  */
16
16
  export interface BasicTlvEntry {
17
17
  type: number;
18
- value: Uint8Array;
18
+ value: Bytes;
19
19
  }
20
20
 
21
21
  export namespace BasicTlv {
22
- export function walk(blob: Uint8Array): BasicTlvEntry[] {
22
+ export function walk(blob: Bytes): BasicTlvEntry[] {
23
+ const buf = Bytes.of(blob);
23
24
  const out = new Array<BasicTlvEntry>();
24
25
  let offset = 0;
25
- while (offset < blob.length) {
26
- if (offset + 2 > blob.length) {
26
+ while (offset < buf.length) {
27
+ if (offset + 2 > buf.length) {
27
28
  throw new ThreadTlvError(`Truncated TLV header at offset ${offset}`);
28
29
  }
29
- const type = blob[offset];
30
- const lenByte = blob[offset + 1];
30
+ const type = buf[offset];
31
+ const lenByte = buf[offset + 1];
31
32
  let length: number;
32
33
  let valueStart: number;
33
34
  if (lenByte === 0xff) {
34
- if (offset + 4 > blob.length) {
35
+ if (offset + 4 > buf.length) {
35
36
  throw new ThreadTlvError(`Truncated extended-length TLV header at offset ${offset}`);
36
37
  }
37
- length = (blob[offset + 2] << 8) | blob[offset + 3];
38
+ length = (buf[offset + 2] << 8) | buf[offset + 3];
38
39
  valueStart = offset + 4;
39
40
  } else {
40
41
  length = lenByte;
41
42
  valueStart = offset + 2;
42
43
  }
43
44
  const valueEnd = valueStart + length;
44
- if (valueEnd > blob.length) {
45
+ if (valueEnd > buf.length) {
45
46
  throw new ThreadTlvError(`Truncated TLV value at offset ${offset} (type=${type}, length=${length})`);
46
47
  }
47
- out.push({ type, value: blob.slice(valueStart, valueEnd) });
48
+ out.push({ type, value: buf.slice(valueStart, valueEnd) });
48
49
  offset = valueEnd;
49
50
  }
50
51
  return out;
51
52
  }
52
53
 
53
- export function encode(entries: ReadonlyArray<BasicTlvEntry>): Uint8Array {
54
+ export function encode(entries: ReadonlyArray<BasicTlvEntry>): Bytes {
54
55
  let totalLength = 0;
55
56
  for (const entry of entries) {
56
57
  if (!Number.isInteger(entry.type) || entry.type < 0 || entry.type > 0xff) {
57
58
  throw new InternalError(`Invalid TLV type ${entry.type}: must be 0..255`);
58
59
  }
59
- const valueLen = entry.value.length;
60
+ const valueLen = entry.value.byteLength;
60
61
  if (valueLen > 0xffff) {
61
62
  throw new InternalError(`Invalid TLV length ${valueLen}: must be <= 0xFFFF`);
62
63
  }
@@ -66,7 +67,8 @@ export namespace BasicTlv {
66
67
  const out = new Uint8Array(totalLength);
67
68
  let offset = 0;
68
69
  for (const entry of entries) {
69
- const valueLen = entry.value.length;
70
+ const value = Bytes.of(entry.value);
71
+ const valueLen = value.length;
70
72
  out[offset++] = entry.type;
71
73
  if (valueLen >= 0xff) {
72
74
  out[offset++] = 0xff;
@@ -75,7 +77,7 @@ export namespace BasicTlv {
75
77
  } else {
76
78
  out[offset++] = valueLen;
77
79
  }
78
- out.set(entry.value, offset);
80
+ out.set(value, offset);
79
81
  offset += valueLen;
80
82
  }
81
83
  return out;