@bsv/sdk 2.1.0 → 2.1.1

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 (383) hide show
  1. package/README.md +7 -7
  2. package/dist/cjs/package.json +1 -1
  3. package/dist/cjs/src/auth/Peer.js +8 -13
  4. package/dist/cjs/src/auth/Peer.js.map +1 -1
  5. package/dist/cjs/src/auth/SessionManager.js +4 -7
  6. package/dist/cjs/src/auth/SessionManager.js.map +1 -1
  7. package/dist/cjs/src/auth/certificates/MasterCertificate.js +1 -1
  8. package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
  9. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +1 -1
  10. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  11. package/dist/cjs/src/auth/clients/AuthFetch.js +32 -32
  12. package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
  13. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +4 -4
  14. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  15. package/dist/cjs/src/compat/ECIES.js +29 -34
  16. package/dist/cjs/src/compat/ECIES.js.map +1 -1
  17. package/dist/cjs/src/compat/HD.js +9 -4
  18. package/dist/cjs/src/compat/HD.js.map +1 -1
  19. package/dist/cjs/src/compat/Mnemonic.js +12 -12
  20. package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
  21. package/dist/cjs/src/identity/ContactsManager.js +172 -232
  22. package/dist/cjs/src/identity/ContactsManager.js.map +1 -1
  23. package/dist/cjs/src/identity/IdentityClient.js +122 -55
  24. package/dist/cjs/src/identity/IdentityClient.js.map +1 -1
  25. package/dist/cjs/src/kvstore/GlobalKVStore.js +30 -31
  26. package/dist/cjs/src/kvstore/GlobalKVStore.js.map +1 -1
  27. package/dist/cjs/src/kvstore/LocalKVStore.js +9 -9
  28. package/dist/cjs/src/kvstore/LocalKVStore.js.map +1 -1
  29. package/dist/cjs/src/kvstore/kvStoreInterpreter.js +2 -2
  30. package/dist/cjs/src/kvstore/kvStoreInterpreter.js.map +1 -1
  31. package/dist/cjs/src/messages/SignedMessage.js +1 -1
  32. package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
  33. package/dist/cjs/src/overlay-tools/Historian.js +1 -1
  34. package/dist/cjs/src/overlay-tools/Historian.js.map +1 -1
  35. package/dist/cjs/src/overlay-tools/LookupResolver.js +139 -46
  36. package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
  37. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +75 -146
  38. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  39. package/dist/cjs/src/primitives/AESGCM.js +2 -2
  40. package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
  41. package/dist/cjs/src/primitives/BigNumber.js +164 -148
  42. package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
  43. package/dist/cjs/src/primitives/Curve.js +17 -15
  44. package/dist/cjs/src/primitives/Curve.js.map +1 -1
  45. package/dist/cjs/src/primitives/ECDSA.js +12 -7
  46. package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
  47. package/dist/cjs/src/primitives/Hash.js +140 -56
  48. package/dist/cjs/src/primitives/Hash.js.map +1 -1
  49. package/dist/cjs/src/primitives/JacobianPoint.js +8 -8
  50. package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
  51. package/dist/cjs/src/primitives/K256.js +3 -3
  52. package/dist/cjs/src/primitives/K256.js.map +1 -1
  53. package/dist/cjs/src/primitives/Point.js +36 -40
  54. package/dist/cjs/src/primitives/Point.js.map +1 -1
  55. package/dist/cjs/src/primitives/PrivateKey.js +4 -4
  56. package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
  57. package/dist/cjs/src/primitives/PublicKey.js +4 -4
  58. package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
  59. package/dist/cjs/src/primitives/Random.js +10 -14
  60. package/dist/cjs/src/primitives/Random.js.map +1 -1
  61. package/dist/cjs/src/primitives/ReaderUint8Array.js +6 -6
  62. package/dist/cjs/src/primitives/ReaderUint8Array.js.map +1 -1
  63. package/dist/cjs/src/primitives/Schnorr.js +2 -2
  64. package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
  65. package/dist/cjs/src/primitives/Secp256r1.js +2 -1
  66. package/dist/cjs/src/primitives/Secp256r1.js.map +1 -1
  67. package/dist/cjs/src/primitives/Signature.js +8 -8
  68. package/dist/cjs/src/primitives/Signature.js.map +1 -1
  69. package/dist/cjs/src/primitives/TransactionSignature.js +20 -21
  70. package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
  71. package/dist/cjs/src/primitives/utils.js +39 -46
  72. package/dist/cjs/src/primitives/utils.js.map +1 -1
  73. package/dist/cjs/src/registry/RegistryClient.js +31 -23
  74. package/dist/cjs/src/registry/RegistryClient.js.map +1 -1
  75. package/dist/cjs/src/remittance/RemittanceManager.js +19 -18
  76. package/dist/cjs/src/remittance/RemittanceManager.js.map +1 -1
  77. package/dist/cjs/src/remittance/modules/BasicBRC29.js.map +1 -1
  78. package/dist/cjs/src/script/Script.js +93 -170
  79. package/dist/cjs/src/script/Script.js.map +1 -1
  80. package/dist/cjs/src/script/ScriptEvaluationError.js +2 -2
  81. package/dist/cjs/src/script/ScriptEvaluationError.js.map +1 -1
  82. package/dist/cjs/src/script/Spend.js +14 -12
  83. package/dist/cjs/src/script/Spend.js.map +1 -1
  84. package/dist/cjs/src/script/templates/PushDrop.js +22 -18
  85. package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
  86. package/dist/cjs/src/script/templates/RPuzzle.js +2 -4
  87. package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
  88. package/dist/cjs/src/storage/StorageDownloader.js +42 -9
  89. package/dist/cjs/src/storage/StorageDownloader.js.map +1 -1
  90. package/dist/cjs/src/totp/totp.js +1 -1
  91. package/dist/cjs/src/totp/totp.js.map +1 -1
  92. package/dist/cjs/src/transaction/Beef.js +239 -192
  93. package/dist/cjs/src/transaction/Beef.js.map +1 -1
  94. package/dist/cjs/src/transaction/BeefConstants.js +19 -0
  95. package/dist/cjs/src/transaction/BeefConstants.js.map +1 -0
  96. package/dist/cjs/src/transaction/BeefTx.js +12 -12
  97. package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
  98. package/dist/cjs/src/transaction/MerklePath.js +4 -4
  99. package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
  100. package/dist/cjs/src/transaction/Transaction.js +49 -52
  101. package/dist/cjs/src/transaction/Transaction.js.map +1 -1
  102. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js +1 -1
  103. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  104. package/dist/cjs/src/transaction/http/BinaryFetchClient.js +9 -9
  105. package/dist/cjs/src/transaction/http/BinaryFetchClient.js.map +1 -1
  106. package/dist/cjs/src/transaction/http/DefaultHttpClient.js +9 -9
  107. package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
  108. package/dist/cjs/src/wallet/CachedKeyDeriver.js +1 -1
  109. package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
  110. package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
  111. package/dist/cjs/src/wallet/WalletError.js.map +1 -1
  112. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +5 -4
  113. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  114. package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js +9 -9
  115. package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
  116. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +92 -92
  117. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  118. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +387 -711
  119. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  120. package/dist/cjs/src/wallet/substrates/XDM.js +4 -4
  121. package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
  122. package/dist/cjs/src/wallet/substrates/window.CWI.js +2 -2
  123. package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
  124. package/dist/cjs/src/wallet/validationHelpers.js +9 -9
  125. package/dist/cjs/src/wallet/validationHelpers.js.map +1 -1
  126. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  127. package/dist/esm/src/auth/Peer.js +25 -13
  128. package/dist/esm/src/auth/Peer.js.map +1 -1
  129. package/dist/esm/src/auth/SessionManager.js +4 -7
  130. package/dist/esm/src/auth/SessionManager.js.map +1 -1
  131. package/dist/esm/src/auth/certificates/MasterCertificate.js +1 -1
  132. package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
  133. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +1 -1
  134. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  135. package/dist/esm/src/auth/clients/AuthFetch.js +32 -32
  136. package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
  137. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +4 -4
  138. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  139. package/dist/esm/src/compat/ECIES.js +29 -34
  140. package/dist/esm/src/compat/ECIES.js.map +1 -1
  141. package/dist/esm/src/compat/HD.js +9 -4
  142. package/dist/esm/src/compat/HD.js.map +1 -1
  143. package/dist/esm/src/compat/Mnemonic.js +12 -12
  144. package/dist/esm/src/compat/Mnemonic.js.map +1 -1
  145. package/dist/esm/src/identity/ContactsManager.js +172 -232
  146. package/dist/esm/src/identity/ContactsManager.js.map +1 -1
  147. package/dist/esm/src/identity/IdentityClient.js +122 -55
  148. package/dist/esm/src/identity/IdentityClient.js.map +1 -1
  149. package/dist/esm/src/kvstore/GlobalKVStore.js +30 -31
  150. package/dist/esm/src/kvstore/GlobalKVStore.js.map +1 -1
  151. package/dist/esm/src/kvstore/LocalKVStore.js +9 -9
  152. package/dist/esm/src/kvstore/LocalKVStore.js.map +1 -1
  153. package/dist/esm/src/kvstore/kvStoreInterpreter.js +2 -2
  154. package/dist/esm/src/kvstore/kvStoreInterpreter.js.map +1 -1
  155. package/dist/esm/src/messages/SignedMessage.js +1 -1
  156. package/dist/esm/src/messages/SignedMessage.js.map +1 -1
  157. package/dist/esm/src/overlay-tools/Historian.js +1 -1
  158. package/dist/esm/src/overlay-tools/Historian.js.map +1 -1
  159. package/dist/esm/src/overlay-tools/LookupResolver.js +139 -46
  160. package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
  161. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +74 -146
  162. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  163. package/dist/esm/src/primitives/AESGCM.js +2 -2
  164. package/dist/esm/src/primitives/AESGCM.js.map +1 -1
  165. package/dist/esm/src/primitives/BigNumber.js +167 -154
  166. package/dist/esm/src/primitives/BigNumber.js.map +1 -1
  167. package/dist/esm/src/primitives/Curve.js +17 -15
  168. package/dist/esm/src/primitives/Curve.js.map +1 -1
  169. package/dist/esm/src/primitives/ECDSA.js +12 -7
  170. package/dist/esm/src/primitives/ECDSA.js.map +1 -1
  171. package/dist/esm/src/primitives/Hash.js +140 -56
  172. package/dist/esm/src/primitives/Hash.js.map +1 -1
  173. package/dist/esm/src/primitives/JacobianPoint.js +8 -8
  174. package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
  175. package/dist/esm/src/primitives/K256.js +3 -3
  176. package/dist/esm/src/primitives/K256.js.map +1 -1
  177. package/dist/esm/src/primitives/Point.js +36 -40
  178. package/dist/esm/src/primitives/Point.js.map +1 -1
  179. package/dist/esm/src/primitives/PrivateKey.js +4 -4
  180. package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
  181. package/dist/esm/src/primitives/PublicKey.js +4 -4
  182. package/dist/esm/src/primitives/PublicKey.js.map +1 -1
  183. package/dist/esm/src/primitives/Random.js +10 -14
  184. package/dist/esm/src/primitives/Random.js.map +1 -1
  185. package/dist/esm/src/primitives/ReaderUint8Array.js +6 -6
  186. package/dist/esm/src/primitives/ReaderUint8Array.js.map +1 -1
  187. package/dist/esm/src/primitives/Schnorr.js +1 -1
  188. package/dist/esm/src/primitives/Schnorr.js.map +1 -1
  189. package/dist/esm/src/primitives/Secp256r1.js +2 -1
  190. package/dist/esm/src/primitives/Secp256r1.js.map +1 -1
  191. package/dist/esm/src/primitives/Signature.js +8 -8
  192. package/dist/esm/src/primitives/Signature.js.map +1 -1
  193. package/dist/esm/src/primitives/TransactionSignature.js +20 -21
  194. package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
  195. package/dist/esm/src/primitives/utils.js +39 -48
  196. package/dist/esm/src/primitives/utils.js.map +1 -1
  197. package/dist/esm/src/registry/RegistryClient.js +31 -23
  198. package/dist/esm/src/registry/RegistryClient.js.map +1 -1
  199. package/dist/esm/src/remittance/RemittanceManager.js +19 -18
  200. package/dist/esm/src/remittance/RemittanceManager.js.map +1 -1
  201. package/dist/esm/src/remittance/modules/BasicBRC29.js.map +1 -1
  202. package/dist/esm/src/script/Script.js +93 -170
  203. package/dist/esm/src/script/Script.js.map +1 -1
  204. package/dist/esm/src/script/ScriptEvaluationError.js +2 -2
  205. package/dist/esm/src/script/ScriptEvaluationError.js.map +1 -1
  206. package/dist/esm/src/script/Spend.js +14 -12
  207. package/dist/esm/src/script/Spend.js.map +1 -1
  208. package/dist/esm/src/script/templates/PushDrop.js +4 -3
  209. package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
  210. package/dist/esm/src/script/templates/RPuzzle.js +2 -4
  211. package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
  212. package/dist/esm/src/storage/StorageDownloader.js +1 -1
  213. package/dist/esm/src/storage/StorageDownloader.js.map +1 -1
  214. package/dist/esm/src/totp/totp.js +1 -1
  215. package/dist/esm/src/totp/totp.js.map +1 -1
  216. package/dist/esm/src/transaction/Beef.js +229 -186
  217. package/dist/esm/src/transaction/Beef.js.map +1 -1
  218. package/dist/esm/src/transaction/BeefConstants.js +16 -0
  219. package/dist/esm/src/transaction/BeefConstants.js.map +1 -0
  220. package/dist/esm/src/transaction/BeefTx.js +3 -3
  221. package/dist/esm/src/transaction/BeefTx.js.map +1 -1
  222. package/dist/esm/src/transaction/MerklePath.js +4 -4
  223. package/dist/esm/src/transaction/MerklePath.js.map +1 -1
  224. package/dist/esm/src/transaction/Transaction.js +49 -52
  225. package/dist/esm/src/transaction/Transaction.js.map +1 -1
  226. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js +1 -1
  227. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  228. package/dist/esm/src/transaction/http/BinaryFetchClient.js +9 -9
  229. package/dist/esm/src/transaction/http/BinaryFetchClient.js.map +1 -1
  230. package/dist/esm/src/transaction/http/DefaultHttpClient.js +9 -9
  231. package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
  232. package/dist/esm/src/wallet/CachedKeyDeriver.js +1 -1
  233. package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
  234. package/dist/esm/src/wallet/WalletClient.js.map +1 -1
  235. package/dist/esm/src/wallet/WalletError.js.map +1 -1
  236. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +5 -4
  237. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  238. package/dist/esm/src/wallet/substrates/ReactNativeWebView.js +9 -9
  239. package/dist/esm/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
  240. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +92 -92
  241. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  242. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +387 -711
  243. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  244. package/dist/esm/src/wallet/substrates/XDM.js +4 -4
  245. package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
  246. package/dist/esm/src/wallet/substrates/window.CWI.js +2 -2
  247. package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
  248. package/dist/esm/src/wallet/validationHelpers.js +9 -9
  249. package/dist/esm/src/wallet/validationHelpers.js.map +1 -1
  250. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  251. package/dist/types/src/auth/Peer.d.ts +13 -0
  252. package/dist/types/src/auth/Peer.d.ts.map +1 -1
  253. package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
  254. package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
  255. package/dist/types/src/compat/ECIES.d.ts.map +1 -1
  256. package/dist/types/src/compat/HD.d.ts.map +1 -1
  257. package/dist/types/src/identity/ContactsManager.d.ts +18 -0
  258. package/dist/types/src/identity/ContactsManager.d.ts.map +1 -1
  259. package/dist/types/src/identity/IdentityClient.d.ts +47 -8
  260. package/dist/types/src/identity/IdentityClient.d.ts.map +1 -1
  261. package/dist/types/src/kvstore/GlobalKVStore.d.ts.map +1 -1
  262. package/dist/types/src/overlay-tools/LookupResolver.d.ts +59 -1
  263. package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
  264. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +18 -3
  265. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
  266. package/dist/types/src/primitives/BigNumber.d.ts +13 -3
  267. package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
  268. package/dist/types/src/primitives/Curve.d.ts.map +1 -1
  269. package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
  270. package/dist/types/src/primitives/Hash.d.ts +3 -3
  271. package/dist/types/src/primitives/Hash.d.ts.map +1 -1
  272. package/dist/types/src/primitives/JacobianPoint.d.ts +3 -1
  273. package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
  274. package/dist/types/src/primitives/Point.d.ts.map +1 -1
  275. package/dist/types/src/primitives/Random.d.ts +2 -2
  276. package/dist/types/src/primitives/Random.d.ts.map +1 -1
  277. package/dist/types/src/primitives/ReaderUint8Array.d.ts.map +1 -1
  278. package/dist/types/src/primitives/Schnorr.d.ts +2 -1
  279. package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
  280. package/dist/types/src/primitives/Secp256r1.d.ts.map +1 -1
  281. package/dist/types/src/primitives/utils.d.ts +2 -4
  282. package/dist/types/src/primitives/utils.d.ts.map +1 -1
  283. package/dist/types/src/registry/RegistryClient.d.ts.map +1 -1
  284. package/dist/types/src/remittance/RemittanceManager.d.ts.map +1 -1
  285. package/dist/types/src/remittance/modules/BasicBRC29.d.ts.map +1 -1
  286. package/dist/types/src/script/Script.d.ts +15 -8
  287. package/dist/types/src/script/Script.d.ts.map +1 -1
  288. package/dist/types/src/script/Spend.d.ts.map +1 -1
  289. package/dist/types/src/script/templates/PushDrop.d.ts +3 -1
  290. package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
  291. package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -1
  292. package/dist/types/src/transaction/Beef.d.ts +46 -8
  293. package/dist/types/src/transaction/Beef.d.ts.map +1 -1
  294. package/dist/types/src/transaction/BeefConstants.d.ts +15 -0
  295. package/dist/types/src/transaction/BeefConstants.d.ts.map +1 -0
  296. package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
  297. package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
  298. package/dist/types/src/wallet/KeyDeriver.d.ts +1 -1
  299. package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
  300. package/dist/types/src/wallet/Wallet.interfaces.d.ts +2 -2
  301. package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
  302. package/dist/types/src/wallet/WalletClient.d.ts +7 -7
  303. package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
  304. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +7 -7
  305. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
  306. package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts +36 -7
  307. package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
  308. package/dist/types/src/wallet/substrates/window.CWI.d.ts +8 -8
  309. package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -1
  310. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  311. package/dist/umd/bundle.js +3 -3
  312. package/package.json +1 -1
  313. package/src/auth/Peer.ts +26 -13
  314. package/src/auth/SessionManager.ts +4 -7
  315. package/src/auth/certificates/MasterCertificate.ts +1 -1
  316. package/src/auth/certificates/__tests/CompletedProtoWallet.ts +1 -1
  317. package/src/auth/clients/AuthFetch.ts +41 -41
  318. package/src/auth/transports/SimplifiedFetchTransport.ts +4 -4
  319. package/src/compat/ECIES.ts +29 -34
  320. package/src/compat/HD.ts +10 -5
  321. package/src/compat/Mnemonic.ts +11 -11
  322. package/src/compat/__tests/HD.test.ts +19 -0
  323. package/src/identity/ContactsManager.ts +194 -257
  324. package/src/identity/IdentityClient.ts +155 -66
  325. package/src/identity/__tests/IdentityClient.test.ts +25 -1
  326. package/src/kvstore/GlobalKVStore.ts +31 -32
  327. package/src/kvstore/LocalKVStore.ts +8 -8
  328. package/src/kvstore/kvStoreInterpreter.ts +2 -2
  329. package/src/messages/SignedMessage.ts +1 -1
  330. package/src/overlay-tools/Historian.ts +1 -1
  331. package/src/overlay-tools/LookupResolver.ts +182 -45
  332. package/src/overlay-tools/SHIPBroadcaster.ts +92 -168
  333. package/src/primitives/AESGCM.ts +2 -2
  334. package/src/primitives/BigNumber.ts +122 -113
  335. package/src/primitives/Curve.ts +16 -15
  336. package/src/primitives/ECDSA.ts +10 -8
  337. package/src/primitives/Hash.ts +152 -53
  338. package/src/primitives/JacobianPoint.ts +13 -11
  339. package/src/primitives/K256.ts +3 -3
  340. package/src/primitives/Point.ts +35 -38
  341. package/src/primitives/PrivateKey.ts +3 -3
  342. package/src/primitives/PublicKey.ts +3 -3
  343. package/src/primitives/Random.ts +11 -14
  344. package/src/primitives/ReaderUint8Array.ts +7 -7
  345. package/src/primitives/Schnorr.ts +2 -1
  346. package/src/primitives/Secp256r1.ts +2 -1
  347. package/src/primitives/Signature.ts +8 -8
  348. package/src/primitives/TransactionSignature.ts +16 -16
  349. package/src/primitives/utils.ts +37 -47
  350. package/src/registry/RegistryClient.ts +25 -25
  351. package/src/remittance/RemittanceManager.ts +17 -18
  352. package/src/remittance/modules/BasicBRC29.ts +2 -5
  353. package/src/script/Script.ts +114 -170
  354. package/src/script/ScriptEvaluationError.ts +2 -2
  355. package/src/script/Spend.ts +14 -15
  356. package/src/script/templates/PushDrop.ts +5 -3
  357. package/src/script/templates/RPuzzle.ts +2 -4
  358. package/src/storage/StorageDownloader.ts +1 -1
  359. package/src/totp/totp.ts +1 -1
  360. package/src/transaction/Beef.ts +241 -203
  361. package/src/transaction/BeefConstants.ts +16 -0
  362. package/src/transaction/BeefTx.ts +3 -3
  363. package/src/transaction/MerklePath.ts +4 -4
  364. package/src/transaction/Transaction.ts +48 -51
  365. package/src/transaction/fee-models/SatoshisPerKilobyte.ts +1 -1
  366. package/src/transaction/http/BinaryFetchClient.ts +8 -8
  367. package/src/transaction/http/DefaultHttpClient.ts +8 -8
  368. package/src/wallet/CachedKeyDeriver.ts +8 -6
  369. package/src/wallet/KeyDeriver.ts +1 -1
  370. package/src/wallet/Wallet.interfaces.ts +2 -4
  371. package/src/wallet/WalletClient.ts +8 -8
  372. package/src/wallet/WalletError.ts +1 -1
  373. package/src/wallet/__tests/WalletClient.substrate.test.ts +10 -6
  374. package/src/wallet/substrates/HTTPWalletJSON.ts +22 -21
  375. package/src/wallet/substrates/ReactNativeWebView.ts +9 -9
  376. package/src/wallet/substrates/WalletWireProcessor.ts +83 -83
  377. package/src/wallet/substrates/WalletWireTransceiver.ts +528 -938
  378. package/src/wallet/substrates/XDM.ts +4 -4
  379. package/src/wallet/substrates/__tests/HTTPWalletJSON.test.ts +38 -25
  380. package/src/wallet/substrates/__tests/ReactNativeWebView.test.ts +174 -0
  381. package/src/wallet/substrates/__tests/window.CWI.test.ts +256 -0
  382. package/src/wallet/substrates/window.CWI.ts +10 -10
  383. package/src/wallet/validationHelpers.ts +9 -9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsv/sdk",
3
- "version": "2.1.0",
3
+ "version": "2.1.1",
4
4
  "type": "module",
5
5
  "description": "BSV Blockchain Software Development Kit",
6
6
  "main": "dist/cjs/mod.js",
package/src/auth/Peer.ts CHANGED
@@ -18,7 +18,7 @@ import { OriginatorDomainNameStringUnder250Bytes, WalletInterface } from '../wal
18
18
 
19
19
  const AUTH_VERSION = '0.1'
20
20
  const BufferCtor =
21
- typeof globalThis !== 'undefined' ? (globalThis as any).Buffer : undefined
21
+ typeof globalThis === 'undefined' ? undefined : (globalThis as any).Buffer
22
22
 
23
23
  /**
24
24
  * Represents a peer capable of performing mutual authentication.
@@ -73,6 +73,24 @@ export class Peer {
73
73
  private readonly originator?: OriginatorDomainNameStringUnder250Bytes
74
74
  private identityPublicKey?: string
75
75
 
76
+ /**
77
+ * Resolves when the transport's `onData` listener has been registered and
78
+ * the peer is ready to send and receive messages. Await this after
79
+ * construction before calling `toPeer` or any other method that requires
80
+ * the transport to be listening.
81
+ *
82
+ * @example
83
+ * const peer = new Peer(wallet, transport)
84
+ * await peer.ready
85
+ * await peer.toPeer(payload)
86
+ */
87
+ /*
88
+ * Listener must register synchronously so paired-peer mocks/transports see
89
+ * onDataCallback set immediately. The returned Promise resolves once registration
90
+ * is fully acknowledged. A lazy getter pattern would break paired-peer test mocks.
91
+ */
92
+ readonly ready: Promise<void>
93
+
76
94
  /**
77
95
  * Creates a new Peer instance
78
96
  *
@@ -81,6 +99,7 @@ export class Peer {
81
99
  * @param {RequestedCertificateSet} [certificatesToRequest] - Optional set of certificates to request from a peer during the initial handshake.
82
100
  * @param {SessionManager} [sessionManager] - Optional SessionManager to be used for managing peer sessions.
83
101
  * @param {boolean} [autoPersistLastSession] - Whether to auto-persist the session with the last-interacted-with peer. Defaults to true.
102
+ * @param {OriginatorDomainNameStringUnder250Bytes} [originator] - Optional originator domain name.
84
103
  */
85
104
  constructor (
86
105
  wallet: WalletInterface,
@@ -97,11 +116,9 @@ export class Peer {
97
116
  certifiers: [],
98
117
  types: {}
99
118
  }
100
- this.transport.onData(this.handleIncomingMessage.bind(this)).catch(e => {
101
- throw e
102
- })
119
+ this.ready = this.transport.onData(this.handleIncomingMessage.bind(this)) // NOSONAR(typescript:S7059): listener must register synchronously — see ready field comment
103
120
  this.sessionManager =
104
- sessionManager != null ? sessionManager : new SessionManager()
121
+ sessionManager ?? new SessionManager()
105
122
  if (autoPersistLastSession === false) {
106
123
  this.autoPersistLastSession = false
107
124
  } else {
@@ -249,12 +266,12 @@ export class Peer {
249
266
  }
250
267
 
251
268
  // If that session doesn't exist or isn't authenticated, initiate handshake
252
- if ((peerSession == null) || !peerSession.isAuthenticated) {
269
+ if (peerSession?.isAuthenticated !== true) {
253
270
  // This will create a brand-new session
254
271
  const sessionNonce = await this.initiateHandshake(identityKey)
255
272
  // Now retrieve it by the sessionNonce
256
273
  peerSession = this.sessionManager.getSession(sessionNonce)
257
- if ((peerSession == null) || !peerSession.isAuthenticated) {
274
+ if (peerSession?.isAuthenticated !== true) {
258
275
  throw new Error('Unable to establish mutual authentication with peer!')
259
276
  }
260
277
  }
@@ -423,9 +440,7 @@ export class Peer {
423
440
  if (peerIdentityKey != null) {
424
441
  const existingDetails = (error as any).details
425
442
  if (existingDetails != null && typeof existingDetails === 'object') {
426
- if (existingDetails.peerIdentityKey == null) {
427
- existingDetails.peerIdentityKey = peerIdentityKey
428
- }
443
+ existingDetails.peerIdentityKey ??= peerIdentityKey
429
444
  } else {
430
445
  (error as any).details = { peerIdentityKey }
431
446
  }
@@ -548,9 +563,7 @@ export class Peer {
548
563
  signature
549
564
  }
550
565
 
551
- if (this.lastInteractedWithPeer === undefined) {
552
- this.lastInteractedWithPeer = message.identityKey
553
- }
566
+ this.lastInteractedWithPeer ??= message.identityKey
554
567
 
555
568
  await this.transport.send(initialResponseMessage)
556
569
  }
@@ -31,7 +31,7 @@ export class SessionManager {
31
31
  */
32
32
  addSession (session: PeerSession): void {
33
33
  if (typeof session.sessionNonce !== 'string') {
34
- throw new Error(
34
+ throw new TypeError(
35
35
  'Invalid session: sessionNonce is required to add a session.'
36
36
  )
37
37
  }
@@ -97,11 +97,8 @@ export class SessionManager {
97
97
  // We can prefer authenticated sessions
98
98
  if (best == null) {
99
99
  best = s
100
- } else {
101
- // If we want the "most recently updated" AND isAuthenticated
102
- if ((s.lastUpdate ?? 0) > (best.lastUpdate ?? 0)) {
103
- best = s
104
- }
100
+ } else if ((s.lastUpdate ?? 0) > (best.lastUpdate ?? 0)) {
101
+ best = s
105
102
  }
106
103
  }
107
104
  // Optionally, you could also filter out isAuthenticated===false if you only want
@@ -140,6 +137,6 @@ export class SessionManager {
140
137
  if (direct) return true
141
138
  // if not directly a nonce, interpret as identityKey
142
139
  const nonces = this.identityKeyToNonces.get(identifier)
143
- return !(nonces == null) && nonces.size > 0
140
+ return (nonces != null) && nonces.size > 0
144
141
  }
145
142
  }
@@ -157,7 +157,7 @@ export class MasterCertificate extends Certificate {
157
157
  privilegedReason?: string
158
158
  ): Promise<Record<CertificateFieldNameUnder50Bytes, string>> {
159
159
  if (!Array.isArray(fieldsToReveal)) {
160
- throw new Error('fieldsToReveal must be an array of strings')
160
+ throw new TypeError('fieldsToReveal must be an array of strings')
161
161
  }
162
162
  const fieldRevelationKeyring = {}
163
163
  for (const fieldName of fieldsToReveal) {
@@ -44,7 +44,7 @@ export class CompletedProtoWallet
44
44
  ) {
45
45
  this.keyDeriver = new CachedKeyDeriver(rootKeyOrKeyDeriver)
46
46
  } else {
47
- throw new Error('Invalid key deriver provided')
47
+ throw new TypeError('Invalid key deriver provided')
48
48
  }
49
49
  }
50
50
 
@@ -117,11 +117,13 @@ export class AuthFetch {
117
117
 
118
118
  // Create a new transport for this base url if needed
119
119
  let peerToUse: AuthPeer
120
- if (typeof this.peers[baseURL] === 'undefined') {
120
+ if (this.peers[baseURL] === undefined) {
121
121
  // Create a peer for the request
122
122
  const newTransport = new SimplifiedFetchTransport(baseURL)
123
+ const newPeer = new Peer(this.wallet, newTransport, this.requestedCertificates, this.sessionManager, undefined, this.originator)
124
+ await newPeer.ready
123
125
  peerToUse = {
124
- peer: new Peer(this.wallet, newTransport, this.requestedCertificates, this.sessionManager, undefined, this.originator),
126
+ peer: newPeer,
125
127
  pendingCertificateRequests: []
126
128
  }
127
129
  this.peers[baseURL] = peerToUse
@@ -315,20 +317,20 @@ export class AuthFetch {
315
317
  const baseURL = parsedUrl.origin
316
318
 
317
319
  let peerToUse: { peer: Peer; identityKey?: string }
318
- if (typeof this.peers[baseURL] !== 'undefined') {
319
- peerToUse = { peer: this.peers[baseURL].peer }
320
- } else {
320
+ if (this.peers[baseURL] === undefined) {
321
321
  const newTransport = new SimplifiedFetchTransport(baseURL)
322
- peerToUse = {
323
- peer: new Peer(
324
- this.wallet,
325
- newTransport,
326
- this.requestedCertificates,
327
- this.sessionManager,
328
- this.originator
329
- )
330
- }
322
+ const newPeer = new Peer(
323
+ this.wallet,
324
+ newTransport,
325
+ this.requestedCertificates,
326
+ this.sessionManager,
327
+ this.originator
328
+ )
329
+ await newPeer.ready
330
+ peerToUse = { peer: newPeer }
331
331
  this.peers[baseURL] = peerToUse
332
+ } else {
333
+ peerToUse = { peer: this.peers[baseURL].peer }
332
334
  }
333
335
 
334
336
  // Return a promise that resolves when certificates are received
@@ -451,14 +453,14 @@ export class AuthFetch {
451
453
 
452
454
  // nHeaders
453
455
  writer.writeVarIntNum(includedHeaders.length)
454
- for (let i = 0; i < includedHeaders.length; i++) {
456
+ for (const [headerKey, headerValue] of includedHeaders) {
455
457
  // headerKeyLength
456
- const headerKeyAsArray = Utils.toArray(includedHeaders[i][0], 'utf8')
458
+ const headerKeyAsArray = Utils.toArray(headerKey, 'utf8')
457
459
  writer.writeVarIntNum(headerKeyAsArray.length)
458
460
  // headerKey
459
461
  writer.write(headerKeyAsArray)
460
462
  // headerValueLength
461
- const headerValueAsArray = Utils.toArray(includedHeaders[i][1], 'utf8')
463
+ const headerValueAsArray = Utils.toArray(headerValue, 'utf8')
462
464
  writer.writeVarIntNum(headerValueAsArray.length)
463
465
  // headerValue
464
466
  writer.write(headerValueAsArray)
@@ -470,7 +472,7 @@ export class AuthFetch {
470
472
  if (methodsThatTypicallyHaveBody.includes(method.toUpperCase()) && body === undefined) {
471
473
  // Check if content-type is application/json
472
474
  const contentTypeHeader = includedHeaders.find(([k]) => k === 'content-type')
473
- if (contentTypeHeader && contentTypeHeader[1].includes('application/json')) {
475
+ if (contentTypeHeader?.[1].includes('application/json') === true) {
474
476
  body = '{}'
475
477
  } else {
476
478
  body = ''
@@ -525,14 +527,14 @@ export class AuthFetch {
525
527
  if (!satoshisRequiredHeader) {
526
528
  throw new Error('Missing x-bsv-payment-satoshis-required response header.')
527
529
  }
528
- const satoshisRequired = parseInt(satoshisRequiredHeader)
529
- if (isNaN(satoshisRequired) || satoshisRequired <= 0) {
530
+ const satoshisRequired = Number.parseInt(satoshisRequiredHeader)
531
+ if (Number.isNaN(satoshisRequired) || satoshisRequired <= 0) {
530
532
  throw new Error('Invalid x-bsv-payment-satoshis-required response header value.')
531
533
  }
532
534
 
533
535
  const serverIdentityKey = originalResponse.headers.get('x-bsv-auth-identity-key')
534
536
  if (typeof serverIdentityKey !== 'string') {
535
- throw new Error('Missing x-bsv-auth-identity-key response header.')
537
+ throw new TypeError('Missing x-bsv-auth-identity-key response header.')
536
538
  }
537
539
 
538
540
  const derivationPrefix = originalResponse.headers.get('x-bsv-payment-derivation-prefix')
@@ -541,7 +543,15 @@ export class AuthFetch {
541
543
  }
542
544
 
543
545
  let paymentContext = config.paymentContext
544
- if (paymentContext != null) {
546
+ if (paymentContext == null) {
547
+ paymentContext = await this.createPaymentContext(
548
+ url,
549
+ config,
550
+ satoshisRequired,
551
+ serverIdentityKey,
552
+ derivationPrefix
553
+ )
554
+ } else {
545
555
  const requirementsChanged = !this.isPaymentContextCompatible(
546
556
  paymentContext,
547
557
  satoshisRequired,
@@ -558,14 +568,6 @@ export class AuthFetch {
558
568
  derivationPrefix
559
569
  )
560
570
  }
561
- } else {
562
- paymentContext = await this.createPaymentContext(
563
- url,
564
- config,
565
- satoshisRequired,
566
- serverIdentityKey,
567
- derivationPrefix
568
- )
569
571
  }
570
572
 
571
573
  if (paymentContext.attempts >= paymentContext.maxAttempts) {
@@ -573,7 +575,7 @@ export class AuthFetch {
573
575
  }
574
576
 
575
577
  const headersWithPayment: Record<string, string> = {
576
- ...(config.headers ?? {})
578
+ ...config.headers
577
579
  }
578
580
  headersWithPayment['x-bsv-payment'] = JSON.stringify({
579
581
  derivationPrefix: paymentContext.derivationPrefix,
@@ -692,7 +694,7 @@ export class AuthFetch {
692
694
  url: string,
693
695
  config: SimplifiedFetchRequestOptions
694
696
  ): PaymentRetryContext['requestSummary'] {
695
- const headers = { ...(config.headers ?? {}) }
697
+ const headers = { ...config.headers }
696
698
  const method = typeof config.method === 'string' ? config.method.toUpperCase() : 'GET'
697
699
  const bodySummary = this.describeRequestBodyForLogging(config.body)
698
700
 
@@ -727,7 +729,7 @@ export class AuthFetch {
727
729
 
728
730
  if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView(body)) {
729
731
  return {
730
- type: body.constructor != null ? body.constructor.name : 'TypedArray',
732
+ type: body.constructor == null ? 'TypedArray' : body.constructor.name,
731
733
  byteLength: body.byteLength
732
734
  }
733
735
  }
@@ -754,8 +756,8 @@ export class AuthFetch {
754
756
  if (typeof serialized === 'string') {
755
757
  return { type: 'object', byteLength: Utils.toArray(serialized, 'utf8').length }
756
758
  }
757
- } catch (_) {
758
- // Ignore JSON serialization issues for logging purposes.
759
+ } catch (_jsonSerializationError) {
760
+ // Ignore JSON serialization issues for logging purposes only
759
761
  }
760
762
 
761
763
  return { type: typeof body, byteLength: 0 }
@@ -791,12 +793,10 @@ export class AuthFetch {
791
793
  console.error(`${prefix} ${message}`, details)
792
794
  } else if (level === 'warn') {
793
795
  console.warn(`${prefix} ${message}`, details)
796
+ } else if (typeof console.info === 'function') {
797
+ console.info(`${prefix} ${message}`, details)
794
798
  } else {
795
- if (typeof console.info === 'function') {
796
- console.info(`${prefix} ${message}`, details)
797
- } else {
798
- console.log(`${prefix} ${message}`, details)
799
- }
799
+ console.log(`${prefix} ${message}`, details)
800
800
  }
801
801
  }
802
802
 
@@ -915,7 +915,7 @@ export class AuthFetch {
915
915
 
916
916
  // 8. ReadableStream
917
917
  if (body instanceof ReadableStream) {
918
- throw new Error('ReadableStream cannot be directly converted to number[].')
918
+ throw new TypeError('ReadableStream cannot be directly converted to number[].')
919
919
  }
920
920
 
921
921
  // 9. Fallback
@@ -24,7 +24,7 @@ export class SimplifiedFetchTransport implements Transport {
24
24
  */
25
25
  constructor(baseUrl: string, fetchClient = defaultFetch) {
26
26
  if (typeof fetchClient !== 'function') {
27
- throw new Error(
27
+ throw new TypeError(
28
28
  'SimplifiedFetchTransport requires a fetch implementation. ' +
29
29
  'In environments without fetch, provide a polyfill or custom implementation.'
30
30
  )
@@ -192,14 +192,14 @@ export class SimplifiedFetchTransport implements Transport {
192
192
 
193
193
  // nHeaders
194
194
  payloadWriter.writeVarIntNum(includedHeaders.length)
195
- for (let i = 0; i < includedHeaders.length; i++) {
195
+ for (const [headerKey, headerValue] of includedHeaders) {
196
196
  // headerKeyLength
197
- const headerKeyAsArray = Utils.toArray(includedHeaders[i][0], 'utf8')
197
+ const headerKeyAsArray = Utils.toArray(headerKey, 'utf8')
198
198
  payloadWriter.writeVarIntNum(headerKeyAsArray.length)
199
199
  // headerKey
200
200
  payloadWriter.write(headerKeyAsArray)
201
201
  // headerValueLength
202
- const headerValueAsArray = Utils.toArray(includedHeaders[i][1], 'utf8')
202
+ const headerValueAsArray = Utils.toArray(headerValue, 'utf8')
203
203
  payloadWriter.writeVarIntNum(headerValueAsArray.length)
204
204
  // headerValue
205
205
  payloadWriter.write(headerValueAsArray)
@@ -9,7 +9,7 @@ import { toArray, toHex, encode } from '../primitives/utils.js'
9
9
  function AES (key): void {
10
10
  if (this._tables[0][0][0] === 0) this._precompute()
11
11
 
12
- let tmp, encKey, decKey
12
+ let tmp
13
13
  const sbox = this._tables[0][4]
14
14
  const decTable = this._tables[1]
15
15
  const keyLen = key.length
@@ -19,7 +19,9 @@ function AES (key): void {
19
19
  throw new Error('invalid aes key size')
20
20
  }
21
21
 
22
- this._key = [(encKey = key.slice(0)), (decKey = [])]
22
+ const encKey = key.slice(0)
23
+ const decKey = []
24
+ this._key = [encKey, decKey]
23
25
 
24
26
  // schedule encryption keys
25
27
  let i: number
@@ -46,7 +48,7 @@ function AES (key): void {
46
48
 
47
49
  // schedule decryption keys
48
50
  for (let j = 0; i > 0; j++, i--) {
49
- tmp = encKey[(j & 3) !== 0 ? i : i - 4]
51
+ tmp = encKey[(j & 3) === 0 ? i - 4 : i]
50
52
  if (i <= 4 || j < 4) {
51
53
  decKey[j] = tmp
52
54
  } else {
@@ -127,10 +129,11 @@ AES.prototype = {
127
129
 
128
130
  // Compute double and third tables
129
131
  for (i = 0; i < 256; i++) {
130
- th[(d[i] = (i << 1) ^ ((i >> 7) * 283)) ^ i] = i
132
+ d[i] = (i << 1) ^ ((i >> 7) * 283)
133
+ th[d[i] ^ i] = i
131
134
  }
132
135
 
133
- for (x = xInv = 0; sbox[x] === 0; x ^= (x2 !== 0 ? x2 : 1), xInv = th[xInv] !== 0 ? th[xInv] : 1) {
136
+ for (x = xInv = 0; sbox[x] === 0; x ^= (x2 === 0 ? 1 : x2), xInv = th[xInv] === 0 ? 1 : th[xInv]) {
134
137
  // Compute sbox
135
138
  s = xInv ^ (xInv << 1) ^ (xInv << 2) ^ (xInv << 3) ^ (xInv << 4)
136
139
  s = (s >> 8) ^ (s & 255) ^ 99
@@ -138,7 +141,9 @@ AES.prototype = {
138
141
  sboxInv[s] = x
139
142
 
140
143
  // Compute MixColumns
141
- x8 = d[(x4 = d[(x2 = d[x])])]
144
+ x2 = d[x]
145
+ x4 = d[x2]
146
+ x8 = d[x4]
142
147
  tDec = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100)
143
148
  tEnc = (d[s] * 0x101) ^ (s * 0x1010100)
144
149
 
@@ -307,7 +312,7 @@ class CBC {
307
312
  }
308
313
 
309
314
  public static blockBufs2Buf (blockBufs: number[][]): number[] {
310
- let last = blockBufs[blockBufs.length - 1]
315
+ let last = blockBufs.at(-1)
311
316
  last = CBC.pkcs7Unpad(last)
312
317
  blockBufs[blockBufs.length - 1] = last
313
318
 
@@ -319,7 +324,7 @@ class CBC {
319
324
  public static encrypt (
320
325
  messageBuf: number[],
321
326
  ivBuf: number[],
322
- blockCipher: any /* TODO: type */,
327
+ blockCipher: any,
323
328
  cipherKeyBuf: number[]
324
329
  ): number[] {
325
330
  const blockSize = ivBuf.length * 8
@@ -337,7 +342,7 @@ class CBC {
337
342
  public static decrypt (
338
343
  encBuf: number[],
339
344
  ivBuf: number[],
340
- blockCipher: any /* TODO: type */,
345
+ blockCipher: any,
341
346
  cipherKeyBuf: number[]
342
347
  ): number[] {
343
348
  const bytesize = ivBuf.length
@@ -358,7 +363,7 @@ class CBC {
358
363
  public static encryptBlock (
359
364
  blockBuf: number[],
360
365
  ivBuf: number[],
361
- blockCipher: any /* TODO: type */,
366
+ blockCipher: any,
362
367
  cipherKeyBuf: number[]
363
368
  ): number[] {
364
369
  const xorbuf = CBC.xorBufs(blockBuf, ivBuf)
@@ -369,7 +374,7 @@ class CBC {
369
374
  public static decryptBlock (
370
375
  encBuf: number[],
371
376
  ivBuf: number[],
372
- blockCipher: any /* TODO: type */,
377
+ blockCipher: any,
373
378
  cipherKeyBuf: number[]
374
379
  ): number[] {
375
380
  const xorbuf = blockCipher.decrypt(encBuf, cipherKeyBuf)
@@ -380,13 +385,12 @@ class CBC {
380
385
  public static encryptBlocks (
381
386
  blockBufs: number[][],
382
387
  ivBuf: number[],
383
- blockCipher: any /* TODO: type */,
388
+ blockCipher: any,
384
389
  cipherKeyBuf: number[]
385
390
  ): number[][] {
386
391
  const encBufs: number[][] = []
387
392
 
388
- for (let i = 0; i < blockBufs.length; i++) {
389
- const blockBuf = blockBufs[i]
393
+ for (const blockBuf of blockBufs) {
390
394
  const encBuf = CBC.encryptBlock(
391
395
  blockBuf,
392
396
  ivBuf,
@@ -405,13 +409,12 @@ class CBC {
405
409
  public static decryptBlocks (
406
410
  encBufs: number[][],
407
411
  ivBuf: number[],
408
- blockCipher: any /* TODO: type */,
412
+ blockCipher: any,
409
413
  cipherKeyBuf: number[]
410
414
  ): number[][] {
411
415
  const blockBufs: number[][] = []
412
416
 
413
- for (let i = 0; i < encBufs.length; i++) {
414
- const encBuf = encBufs[i]
417
+ for (const encBuf of encBufs) {
415
418
  const blockBuf = CBC.decryptBlock(
416
419
  encBuf,
417
420
  ivBuf,
@@ -437,7 +440,7 @@ class CBC {
437
440
  }
438
441
 
439
442
  public static pkcs7Unpad (paddedbuf: number[]): number[] {
440
- const padlength = paddedbuf[paddedbuf.length - 1]
443
+ const padlength = paddedbuf.at(-1)
441
444
  const padbuf = paddedbuf.slice(
442
445
  paddedbuf.length - padlength,
443
446
  paddedbuf.length
@@ -548,9 +551,7 @@ export default class ECIES {
548
551
  noKey = false
549
552
  ): number[] {
550
553
  let Rbuf: string | number[] | null = null
551
- if (fromPrivateKey == null) {
552
- fromPrivateKey = PrivateKey.fromRandom()
553
- }
554
+ fromPrivateKey ??= PrivateKey.fromRandom()
554
555
  if (!noKey) {
555
556
  Rbuf = fromPrivateKey.toPublicKey().encode(true)
556
557
  }
@@ -603,14 +604,12 @@ export default class ECIES {
603
604
  }
604
605
  }
605
606
 
606
- if (Rbuf !== null) {
607
- if (fromPublicKey == null) {
608
- fromPublicKey = PublicKey.fromString(toHex(Rbuf))
609
- }
610
- } else {
607
+ if (Rbuf === null) {
611
608
  if (fromPublicKey == null) {
612
609
  throw new Error('Sender public key is required')
613
610
  }
611
+ } else {
612
+ fromPublicKey ??= PublicKey.fromString(toHex(Rbuf))
614
613
  }
615
614
 
616
615
  const { iv, kE, kM } = ECIES.ivkEkM(toPrivateKey, fromPublicKey)
@@ -644,12 +643,8 @@ export default class ECIES {
644
643
  fromPrivateKey?: PrivateKey,
645
644
  ivBuf?: number[]
646
645
  ): number[] {
647
- if (fromPrivateKey == null) {
648
- fromPrivateKey = PrivateKey.fromRandom()
649
- }
650
- if (ivBuf == null) {
651
- ivBuf = Random(16)
652
- }
646
+ fromPrivateKey ??= PrivateKey.fromRandom()
647
+ ivBuf ??= Random(16)
653
648
  const r = fromPrivateKey
654
649
  const RPublicKey = fromPrivateKey.toPublicKey()
655
650
  const RBuf = RPublicKey.encode(true) as number[]
@@ -689,8 +684,8 @@ export default class ECIES {
689
684
  const kEkM = Hash.sha512(Sbuf)
690
685
  const kE = kEkM.slice(0, 32)
691
686
  const kM = kEkM.slice(32, 64)
692
- const c = encBuf.slice(33, encBuf.length - 32)
693
- const d = encBuf.slice(encBuf.length - 32, encBuf.length)
687
+ const c = encBuf.slice(33, -32)
688
+ const d = encBuf.slice(-32)
694
689
  const d2 = Hash.sha256hmac(kM, c)
695
690
  if (toHex(d) !== toHex(d2)) {
696
691
  throw new Error('Invalid checksum')
package/src/compat/HD.ts CHANGED
@@ -230,13 +230,18 @@ export default class HD {
230
230
  continue
231
231
  }
232
232
 
233
- if (parseInt(c.replace("'", ''), 10).toString() !== c.replace("'", '')) {
233
+ const childMatch = /^(\d+)('?)$/.exec(c)
234
+ if (childMatch === null) {
234
235
  throw new Error('invalid path')
235
236
  }
236
237
 
237
- const usePrivate = c.length > 1 && c[c.length - 1] === "'"
238
- let childIndex =
239
- parseInt(usePrivate ? c.slice(0, c.length - 1) : c, 10) & 0x7fffffff
238
+ const childIndexValue = Number.parseInt(childMatch[1], 10)
239
+ if (childIndexValue > 0x7fffffff) {
240
+ throw new Error('invalid path')
241
+ }
242
+
243
+ const usePrivate = childMatch[2] === "'"
244
+ let childIndex = childIndexValue
240
245
 
241
246
  if (usePrivate) {
242
247
  childIndex += 0x80000000
@@ -256,7 +261,7 @@ export default class HD {
256
261
  */
257
262
  public deriveChild (i: number): HD {
258
263
  if (typeof i !== 'number') {
259
- throw new Error('i must be a number')
264
+ throw new TypeError('i must be a number')
260
265
  }
261
266
 
262
267
  const ibc: number[] = []
@@ -35,12 +35,12 @@ export default class Mnemonic {
35
35
  */
36
36
  public toBinary (): number[] {
37
37
  const bw = new Writer()
38
- if (this.mnemonic !== '') {
38
+ if (this.mnemonic === '') {
39
+ bw.writeVarIntNum(0)
40
+ } else {
39
41
  const buf = toArray(this.mnemonic, 'utf8')
40
42
  bw.writeVarIntNum(buf.length)
41
43
  bw.write(buf)
42
- } else {
43
- bw.writeVarIntNum(0)
44
44
  }
45
45
  if (this.seed.length > 0) {
46
46
  bw.writeVarIntNum(this.seed.length)
@@ -76,7 +76,7 @@ export default class Mnemonic {
76
76
  * @throws {Error} If the bit length is not a multiple of 32 or is less than 128.
77
77
  */
78
78
  public fromRandom (bits?: number): this {
79
- if (bits === undefined || bits === null || isNaN(bits) || bits === 0) {
79
+ if (bits === undefined || bits === null || Number.isNaN(bits) || bits === 0) {
80
80
  bits = 128
81
81
  }
82
82
  if (bits % 32 !== 0) {
@@ -179,8 +179,8 @@ export default class Mnemonic {
179
179
  const hash = Hash.sha256(buf)
180
180
  let bin = ''
181
181
  const bits = buf.length * 8
182
- for (let i = 0; i < buf.length; i++) {
183
- bin = bin + ('00000000' + buf[i].toString(2)).slice(-8)
182
+ for (const byte of buf) {
183
+ bin = bin + ('00000000' + byte.toString(2)).slice(-8)
184
184
  }
185
185
  let hashbits = hash[0].toString(2)
186
186
  hashbits = ('00000000' + hashbits).slice(-8).slice(0, bits / 32)
@@ -198,7 +198,7 @@ export default class Mnemonic {
198
198
  if (mnemonic !== '') {
199
199
  mnemonic = mnemonic + this.Wordlist.space
200
200
  }
201
- const wi = parseInt(bin.slice(i * 11, (i + 1) * 11), 2)
201
+ const wi = Number.parseInt(bin.slice(i * 11, (i + 1) * 11), 2)
202
202
  mnemonic = mnemonic + this.Wordlist.value[wi]
203
203
  }
204
204
 
@@ -218,8 +218,8 @@ export default class Mnemonic {
218
218
  // confirm no invalid words
219
219
  const words = mnemonic.split(this.Wordlist.space)
220
220
  let bin = ''
221
- for (let i = 0; i < words.length; i++) {
222
- const ind = this.Wordlist.value.indexOf(words[i])
221
+ for (const word of words) {
222
+ const ind = this.Wordlist.value.indexOf(word)
223
223
  if (ind < 0) {
224
224
  return false
225
225
  }
@@ -240,7 +240,7 @@ export default class Mnemonic {
240
240
  const buf: number[] = []
241
241
 
242
242
  for (let i = 0; i < nonhashBits.length / 8; i++) {
243
- buf.push(parseInt(bin.slice(i * 8, (i + 1) * 8), 2))
243
+ buf.push(Number.parseInt(bin.slice(i * 8, (i + 1) * 8), 2))
244
244
  }
245
245
  const hash = Hash.sha256(buf.slice(0, nonhashBits.length / 8))
246
246
  let expectedHashBits = hash[0].toString(2)
@@ -266,7 +266,7 @@ export default class Mnemonic {
266
266
  )
267
267
  }
268
268
  if (typeof passphrase !== 'string') {
269
- throw new Error('passphrase must be a string or undefined')
269
+ throw new TypeError('passphrase must be a string or undefined')
270
270
  }
271
271
  mnemonic = mnemonic.normalize('NFKD')
272
272
  passphrase = passphrase.normalize('NFKD')