@bsv/sdk 2.0.16 → 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 (405) hide show
  1. package/README.md +7 -7
  2. package/dist/cjs/package.json +14 -13
  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/docs/reference/kvstore.md +1 -2
  313. package/docs/reference/primitives.md +0 -1
  314. package/docs/reference/script.md +0 -7
  315. package/docs/reference/transaction.md +2 -2
  316. package/package.json +29 -28
  317. package/src/auth/Peer.ts +26 -13
  318. package/src/auth/SessionManager.ts +4 -7
  319. package/src/auth/certificates/MasterCertificate.ts +1 -1
  320. package/src/auth/certificates/__tests/CompletedProtoWallet.ts +1 -1
  321. package/src/auth/clients/AuthFetch.ts +41 -41
  322. package/src/auth/transports/SimplifiedFetchTransport.ts +4 -4
  323. package/src/compat/ECIES.ts +29 -34
  324. package/src/compat/HD.ts +10 -5
  325. package/src/compat/Mnemonic.ts +11 -11
  326. package/src/compat/__tests/HD.test.ts +19 -0
  327. package/src/identity/ContactsManager.ts +194 -257
  328. package/src/identity/IdentityClient.ts +155 -66
  329. package/src/identity/__tests/IdentityClient.test.ts +25 -1
  330. package/src/kvstore/GlobalKVStore.ts +31 -32
  331. package/src/kvstore/LocalKVStore.ts +8 -8
  332. package/src/kvstore/kvStoreInterpreter.ts +2 -2
  333. package/src/messages/SignedMessage.ts +1 -1
  334. package/src/overlay-tools/Historian.ts +1 -1
  335. package/src/overlay-tools/LookupResolver.ts +182 -45
  336. package/src/overlay-tools/SHIPBroadcaster.ts +92 -168
  337. package/src/primitives/AESGCM.ts +2 -2
  338. package/src/primitives/BigNumber.ts +122 -113
  339. package/src/primitives/Curve.ts +16 -15
  340. package/src/primitives/ECDSA.ts +10 -8
  341. package/src/primitives/Hash.ts +152 -53
  342. package/src/primitives/JacobianPoint.ts +13 -11
  343. package/src/primitives/K256.ts +3 -3
  344. package/src/primitives/Point.ts +35 -38
  345. package/src/primitives/PrivateKey.ts +3 -3
  346. package/src/primitives/PublicKey.ts +3 -3
  347. package/src/primitives/Random.ts +11 -14
  348. package/src/primitives/ReaderUint8Array.ts +7 -7
  349. package/src/primitives/Schnorr.ts +2 -1
  350. package/src/primitives/Secp256r1.ts +2 -1
  351. package/src/primitives/Signature.ts +8 -8
  352. package/src/primitives/TransactionSignature.ts +16 -16
  353. package/src/primitives/utils.ts +37 -47
  354. package/src/registry/RegistryClient.ts +25 -25
  355. package/src/remittance/RemittanceManager.ts +17 -18
  356. package/src/remittance/modules/BasicBRC29.ts +2 -5
  357. package/src/script/Script.ts +114 -170
  358. package/src/script/ScriptEvaluationError.ts +2 -2
  359. package/src/script/Spend.ts +14 -15
  360. package/src/script/templates/PushDrop.ts +5 -3
  361. package/src/script/templates/RPuzzle.ts +2 -4
  362. package/src/storage/StorageDownloader.ts +1 -1
  363. package/src/totp/totp.ts +1 -1
  364. package/src/transaction/Beef.ts +241 -203
  365. package/src/transaction/BeefConstants.ts +16 -0
  366. package/src/transaction/BeefTx.ts +3 -3
  367. package/src/transaction/MerklePath.ts +4 -4
  368. package/src/transaction/Transaction.ts +48 -51
  369. package/src/transaction/fee-models/SatoshisPerKilobyte.ts +1 -1
  370. package/src/transaction/http/BinaryFetchClient.ts +8 -8
  371. package/src/transaction/http/DefaultHttpClient.ts +8 -8
  372. package/src/wallet/CachedKeyDeriver.ts +8 -6
  373. package/src/wallet/KeyDeriver.ts +1 -1
  374. package/src/wallet/Wallet.interfaces.ts +2 -4
  375. package/src/wallet/WalletClient.ts +8 -8
  376. package/src/wallet/WalletError.ts +1 -1
  377. package/src/wallet/__tests/WalletClient.substrate.test.ts +10 -6
  378. package/src/wallet/substrates/HTTPWalletJSON.ts +22 -21
  379. package/src/wallet/substrates/ReactNativeWebView.ts +9 -9
  380. package/src/wallet/substrates/WalletWireProcessor.ts +83 -83
  381. package/src/wallet/substrates/WalletWireTransceiver.ts +528 -938
  382. package/src/wallet/substrates/XDM.ts +4 -4
  383. package/src/wallet/substrates/__tests/HTTPWalletJSON.test.ts +38 -25
  384. package/src/wallet/substrates/__tests/ReactNativeWebView.test.ts +174 -0
  385. package/src/wallet/substrates/__tests/window.CWI.test.ts +256 -0
  386. package/src/wallet/substrates/window.CWI.ts +10 -10
  387. package/src/wallet/validationHelpers.ts +9 -9
  388. package/docs/swagger/dist/LICENSE +0 -21
  389. package/docs/swagger/dist/favicon-16x16.png +0 -0
  390. package/docs/swagger/dist/favicon-32x32.png +0 -0
  391. package/docs/swagger/dist/index.css +0 -16
  392. package/docs/swagger/dist/oauth2-redirect.html +0 -79
  393. package/docs/swagger/dist/swagger-initializer.js +0 -20
  394. package/docs/swagger/dist/swagger-ui-bundle.js +0 -2
  395. package/docs/swagger/dist/swagger-ui-bundle.js.map +0 -1
  396. package/docs/swagger/dist/swagger-ui-es-bundle-core.js +0 -3
  397. package/docs/swagger/dist/swagger-ui-es-bundle-core.js.map +0 -1
  398. package/docs/swagger/dist/swagger-ui-es-bundle.js +0 -2
  399. package/docs/swagger/dist/swagger-ui-es-bundle.js.map +0 -1
  400. package/docs/swagger/dist/swagger-ui-standalone-preset.js +0 -2
  401. package/docs/swagger/dist/swagger-ui-standalone-preset.js.map +0 -1
  402. package/docs/swagger/dist/swagger-ui.css +0 -3
  403. package/docs/swagger/dist/swagger-ui.css.map +0 -1
  404. package/docs/swagger/dist/swagger-ui.js +0 -2
  405. package/docs/swagger/dist/swagger-ui.js.map +0 -1
@@ -249,8 +249,7 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
249
249
  ### Interface: KVStoreQuery
250
250
 
251
251
  Query parameters for KVStore lookups from overlay services.
252
- Must include at least one selector: key, controller, protocolID, or non-empty tags.
253
- Pagination and ordering fields only refine selector-based lookups.
252
+ Used when searching for existing key-value pairs in the network.
254
253
 
255
254
  ```ts
256
255
  export interface KVStoreQuery {
@@ -4948,7 +4948,6 @@ export default class TransactionSignature extends Signature {
4948
4948
  static formatBip143(params: TransactionSignatureFormatParams): Uint8Array
4949
4949
  static format(params: TransactionSignatureFormatParams): number[]
4950
4950
  static formatBytes(params: TransactionSignatureFormatParams): Uint8Array
4951
- static usesOtdaSingleBug(params: TransactionSignatureFormatParams): boolean
4952
4951
  static fromChecksigFormat(buf: number[]): TransactionSignature
4953
4952
  constructor(r: BigNumber, s: BigNumber, scope: number)
4954
4953
  public hasLowS(): boolean
@@ -45,7 +45,6 @@ A representation of a chunk of a script, which includes an opcode. For push oper
45
45
  export default interface ScriptChunk {
46
46
  op: number;
47
47
  data?: number[];
48
- invalidLength?: boolean;
49
48
  }
50
49
  ```
51
50
 
@@ -805,14 +804,10 @@ export default class Spend {
805
804
  stack: number[][];
806
805
  altStack: number[][];
807
806
  ifStack: boolean[];
808
- elseStack: boolean[];
809
807
  memoryLimit: number;
810
808
  stackMem: number;
811
809
  altStackMem: number;
812
810
  isRelaxedOverride: boolean;
813
- verifyFlags?: Set<string>;
814
- executedOpCount: number;
815
- returningFromConditional: boolean;
816
811
  constructor(params: {
817
812
  sourceTXID: string;
818
813
  sourceOutputIndex: number;
@@ -827,7 +822,6 @@ export default class Spend {
827
822
  lockTime: number;
828
823
  memoryLimit?: number;
829
824
  isRelaxed?: boolean;
830
- verifyFlags?: string | string[];
831
825
  })
832
826
  reset(): void
833
827
  step(): boolean
@@ -854,7 +848,6 @@ constructor(params: {
854
848
  lockTime: number;
855
849
  memoryLimit?: number;
856
850
  isRelaxed?: boolean;
857
- verifyFlags?: string | string[];
858
851
  })
859
852
  ```
860
853
  See also: [LockingScript](./script.md#class-lockingscript), [TransactionInput](./transaction.md#interface-transactioninput), [TransactionOutput](./transaction.md#interface-transactionoutput), [UnlockingScript](./script.md#class-unlockingscript)
@@ -2455,8 +2455,8 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
2455
2455
  ### Function: defaultHttpClient
2456
2456
 
2457
2457
  Returns a default HttpClient implementation based on the environment that it is run on.
2458
- This method will attempt to use `window.fetch` if available (in browser environments),
2459
- then `globalThis.fetch` (service workers, Deno, Node 18+), then the Node `https` module.
2458
+ This method will attempt to use `window.fetch` if available (in browser environments).
2459
+ If running in a Node environment, it falls back to using the Node `https` module
2460
2460
 
2461
2461
  ```ts
2462
2462
  export function defaultHttpClient(): HttpClient
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsv/sdk",
3
- "version": "2.0.16",
3
+ "version": "2.1.1",
4
4
  "type": "module",
5
5
  "description": "BSV Blockchain Software Development Kit",
6
6
  "main": "dist/cjs/mod.js",
@@ -218,24 +218,10 @@
218
218
  "import": "./dist/umd/bundle.js"
219
219
  }
220
220
  },
221
- "scripts": {
222
- "test": "npm run build && jest",
223
- "test:watch": "npm run build && jest --watch",
224
- "test:coverage": "npm run build && jest --coverage",
225
- "lint:ci": "ts-standard src/**/*.ts",
226
- "lint": "ts-standard --fix src/**/*.ts",
227
- "build": "npm run build:ts && npm run build:umd",
228
- "build:ts": "tsc -b && tsconfig-to-dual-package tsconfig.cjs.json",
229
- "build:umd": "rspack --config rspack.config.js",
230
- "dev": "tsc -b -w",
231
- "prepublish": "npm run build",
232
- "doc": "ts2md",
233
- "docs:serve": "mkdocs serve",
234
- "docs:build": "mkdocs build"
235
- },
236
221
  "repository": {
237
222
  "type": "git",
238
- "url": "git+https://github.com/bsv-blockchain/ts-sdk.git"
223
+ "url": "git+https://github.com/bsv-blockchain/ts-stack.git",
224
+ "directory": "packages/sdk"
239
225
  },
240
226
  "keywords": [
241
227
  "BSV",
@@ -247,32 +233,47 @@
247
233
  "author": "BSV Blockchain Association",
248
234
  "license": "SEE LICENSE IN LICENSE.txt",
249
235
  "bugs": {
250
- "url": "https://github.com/bsv-blockchain/ts-sdk/issues"
236
+ "url": "https://github.com/bsv-blockchain/ts-stack/issues"
251
237
  },
252
- "homepage": "https://github.com/bsv-blockchain/ts-sdk#readme",
238
+ "homepage": "https://github.com/bsv-blockchain/ts-stack/tree/main/packages/sdk#readme",
253
239
  "devDependencies": {
254
- "@eslint/js": "^10.0.1",
240
+ "@eslint/js": "^9.39.1",
255
241
  "@jest/globals": "^30.3.0",
256
242
  "@rspack/cli": "^2.0.0",
257
- "@rspack/core": "^2.0.0",
243
+ "@rspack/core": "^1.6.1",
258
244
  "@types/jest": "^30.0.0",
259
- "@types/node": "^25.6.0",
260
- "eslint": "^10.2.1",
261
- "globals": "^17.5.0",
245
+ "@types/node": "^24.10.1",
246
+ "eslint": "^9.39.1",
247
+ "globals": "^16.5.0",
262
248
  "jest": "^30.3.0",
263
249
  "jest-environment-jsdom": "^30.3.0",
264
250
  "ts-jest": "^29.4.9",
265
- "ts-loader": "^9.5.7",
251
+ "ts-loader": "^9.5.4",
266
252
  "ts-standard": "^12.0.2",
267
253
  "ts2md": "^0.2.8",
268
254
  "tsconfig-to-dual-package": "^1.2.0",
269
- "typescript": "^6.0.3",
270
- "typescript-eslint": "^8.59.0"
255
+ "typescript": "^5.9.3",
256
+ "typescript-eslint": "^8.46.4"
271
257
  },
272
258
  "ts-standard": {
273
259
  "project": "tsconfig.eslint.json",
274
260
  "ignore": [
275
261
  "dist"
276
262
  ]
263
+ },
264
+ "scripts": {
265
+ "test": "npm run build && jest",
266
+ "test:watch": "npm run build && jest --watch",
267
+ "test:coverage": "npm run build && jest --coverage --watchman=false",
268
+ "lint:ci": "ts-standard src/**/*.ts",
269
+ "lint": "ts-standard --fix src/**/*.ts",
270
+ "build": "npm run build:ts && npm run build:umd",
271
+ "build:ts": "tsc -b && tsconfig-to-dual-package tsconfig.cjs.json",
272
+ "build:umd": "rspack --config rspack.config.js",
273
+ "dev": "tsc -b -w",
274
+ "prepublish": "npm run build",
275
+ "doc": "ts2md",
276
+ "docs:serve": "mkdocs serve",
277
+ "docs:build": "mkdocs build"
277
278
  }
278
- }
279
+ }
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)