@bsv/sdk 1.3.12 → 1.3.14

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 (607) hide show
  1. package/dist/cjs/package.json +15 -3
  2. package/dist/cjs/src/auth/Peer.js +83 -57
  3. package/dist/cjs/src/auth/Peer.js.map +1 -1
  4. package/dist/cjs/src/auth/SessionManager.js +14 -9
  5. package/dist/cjs/src/auth/SessionManager.js.map +1 -1
  6. package/dist/cjs/src/auth/certificates/Certificate.js +16 -10
  7. package/dist/cjs/src/auth/certificates/Certificate.js.map +1 -1
  8. package/dist/cjs/src/auth/certificates/MasterCertificate.js +25 -23
  9. package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
  10. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js +2 -2
  11. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js.map +1 -1
  12. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +62 -46
  13. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  14. package/dist/cjs/src/auth/clients/AuthFetch.js +1 -0
  15. package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
  16. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +70 -43
  17. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  18. package/dist/cjs/src/auth/utils/createNonce.js +2 -1
  19. package/dist/cjs/src/auth/utils/createNonce.js.map +1 -1
  20. package/dist/cjs/src/auth/utils/getVerifiableCertificates.js.map +1 -1
  21. package/dist/cjs/src/auth/utils/validateCertificates.js +5 -2
  22. package/dist/cjs/src/auth/utils/validateCertificates.js.map +1 -1
  23. package/dist/cjs/src/auth/utils/verifyNonce.js +2 -1
  24. package/dist/cjs/src/auth/utils/verifyNonce.js.map +1 -1
  25. package/dist/cjs/src/compat/BSM.js +7 -17
  26. package/dist/cjs/src/compat/BSM.js.map +1 -1
  27. package/dist/cjs/src/compat/ECIES.js +172 -133
  28. package/dist/cjs/src/compat/ECIES.js.map +1 -1
  29. package/dist/cjs/src/compat/HD.js +63 -73
  30. package/dist/cjs/src/compat/HD.js.map +1 -1
  31. package/dist/cjs/src/compat/Mnemonic.js +102 -106
  32. package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
  33. package/dist/cjs/src/compat/Utxo.js +2 -2
  34. package/dist/cjs/src/compat/Utxo.js.map +1 -1
  35. package/dist/cjs/src/compat/index.js +7 -17
  36. package/dist/cjs/src/compat/index.js.map +1 -1
  37. package/dist/cjs/src/messages/EncryptedMessage.js +3 -1
  38. package/dist/cjs/src/messages/EncryptedMessage.js.map +1 -1
  39. package/dist/cjs/src/messages/SignedMessage.js +1 -0
  40. package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
  41. package/dist/cjs/src/messages/index.js +7 -17
  42. package/dist/cjs/src/messages/index.js.map +1 -1
  43. package/dist/cjs/src/overlay-tools/LookupResolver.js +54 -35
  44. package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
  45. package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
  46. package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
  47. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +40 -28
  48. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  49. package/dist/cjs/src/primitives/AESGCM.js +6 -5
  50. package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
  51. package/dist/cjs/src/primitives/BasePoint.js +1 -1
  52. package/dist/cjs/src/primitives/BasePoint.js.map +1 -1
  53. package/dist/cjs/src/primitives/BigNumber.js +50 -62
  54. package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
  55. package/dist/cjs/src/primitives/Curve.js +46 -22
  56. package/dist/cjs/src/primitives/Curve.js.map +1 -1
  57. package/dist/cjs/src/primitives/DRBG.js +2 -8
  58. package/dist/cjs/src/primitives/DRBG.js.map +1 -1
  59. package/dist/cjs/src/primitives/ECDSA.js +51 -35
  60. package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
  61. package/dist/cjs/src/primitives/Hash.js +191 -216
  62. package/dist/cjs/src/primitives/Hash.js.map +1 -1
  63. package/dist/cjs/src/primitives/JacobianPoint.js +19 -5
  64. package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
  65. package/dist/cjs/src/primitives/K256.js.map +1 -1
  66. package/dist/cjs/src/primitives/Mersenne.js.map +1 -1
  67. package/dist/cjs/src/primitives/MontgomoryMethod.js.map +1 -1
  68. package/dist/cjs/src/primitives/Point.js +117 -88
  69. package/dist/cjs/src/primitives/Point.js.map +1 -1
  70. package/dist/cjs/src/primitives/Polynomial.js +4 -2
  71. package/dist/cjs/src/primitives/Polynomial.js.map +1 -1
  72. package/dist/cjs/src/primitives/PrivateKey.js +32 -33
  73. package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
  74. package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
  75. package/dist/cjs/src/primitives/Random.js +6 -5
  76. package/dist/cjs/src/primitives/Random.js.map +1 -1
  77. package/dist/cjs/src/primitives/ReductionContext.js +1 -1
  78. package/dist/cjs/src/primitives/ReductionContext.js.map +1 -1
  79. package/dist/cjs/src/primitives/Schnorr.js +21 -15
  80. package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
  81. package/dist/cjs/src/primitives/Signature.js +8 -7
  82. package/dist/cjs/src/primitives/Signature.js.map +1 -1
  83. package/dist/cjs/src/primitives/SymmetricKey.js +13 -13
  84. package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
  85. package/dist/cjs/src/primitives/TransactionSignature.js +31 -29
  86. package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
  87. package/dist/cjs/src/primitives/index.js +7 -17
  88. package/dist/cjs/src/primitives/index.js.map +1 -1
  89. package/dist/cjs/src/primitives/utils.js +79 -68
  90. package/dist/cjs/src/primitives/utils.js.map +1 -1
  91. package/dist/cjs/src/script/OP.js +3 -3
  92. package/dist/cjs/src/script/OP.js.map +1 -1
  93. package/dist/cjs/src/script/Script.js +12 -10
  94. package/dist/cjs/src/script/Script.js.map +1 -1
  95. package/dist/cjs/src/script/Spend.js +47 -49
  96. package/dist/cjs/src/script/Spend.js.map +1 -1
  97. package/dist/cjs/src/script/templates/P2PKH.js +24 -12
  98. package/dist/cjs/src/script/templates/P2PKH.js.map +1 -1
  99. package/dist/cjs/src/script/templates/PushDrop.js +28 -23
  100. package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
  101. package/dist/cjs/src/script/templates/RPuzzle.js +10 -6
  102. package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
  103. package/dist/cjs/src/totp/totp.js +2 -1
  104. package/dist/cjs/src/totp/totp.js.map +1 -1
  105. package/dist/cjs/src/transaction/Beef.js +177 -154
  106. package/dist/cjs/src/transaction/Beef.js.map +1 -1
  107. package/dist/cjs/src/transaction/BeefParty.js +24 -24
  108. package/dist/cjs/src/transaction/BeefParty.js.map +1 -1
  109. package/dist/cjs/src/transaction/BeefTx.js +26 -18
  110. package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
  111. package/dist/cjs/src/transaction/Broadcaster.js +3 -2
  112. package/dist/cjs/src/transaction/Broadcaster.js.map +1 -1
  113. package/dist/cjs/src/transaction/MerklePath.js +64 -37
  114. package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
  115. package/dist/cjs/src/transaction/Transaction.js +111 -137
  116. package/dist/cjs/src/transaction/Transaction.js.map +1 -1
  117. package/dist/cjs/src/transaction/broadcasters/ARC.js +25 -16
  118. package/dist/cjs/src/transaction/broadcasters/ARC.js.map +1 -1
  119. package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js +2 -1
  120. package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
  121. package/dist/cjs/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
  122. package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js +2 -1
  123. package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js.map +1 -1
  124. package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
  125. package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
  126. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  127. package/dist/cjs/src/transaction/http/DefaultHttpClient.js +5 -3
  128. package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
  129. package/dist/cjs/src/transaction/http/FetchHttpClient.js +5 -2
  130. package/dist/cjs/src/transaction/http/FetchHttpClient.js.map +1 -1
  131. package/dist/cjs/src/transaction/http/NodejsHttpClient.js +5 -3
  132. package/dist/cjs/src/transaction/http/NodejsHttpClient.js.map +1 -1
  133. package/dist/cjs/src/transaction/http/index.js.map +1 -1
  134. package/dist/cjs/src/transaction/index.js.map +1 -1
  135. package/dist/cjs/src/wallet/CachedKeyDeriver.js +91 -66
  136. package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
  137. package/dist/cjs/src/wallet/KeyDeriver.js +61 -52
  138. package/dist/cjs/src/wallet/KeyDeriver.js.map +1 -1
  139. package/dist/cjs/src/wallet/ProtoWallet.js +79 -29
  140. package/dist/cjs/src/wallet/ProtoWallet.js.map +1 -1
  141. package/dist/cjs/src/wallet/WalletClient.js +7 -2
  142. package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
  143. package/dist/cjs/src/wallet/WalletError.js +2 -2
  144. package/dist/cjs/src/wallet/WalletError.js.map +1 -1
  145. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +4 -3
  146. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  147. package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js +2 -2
  148. package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
  149. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
  150. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  151. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +102 -43
  152. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  153. package/dist/cjs/src/wallet/substrates/XDM.js +8 -3
  154. package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
  155. package/dist/cjs/src/wallet/substrates/window.CWI.js +28 -28
  156. package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
  157. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  158. package/dist/esm/mod.js +15 -15
  159. package/dist/esm/src/auth/Peer.js +75 -54
  160. package/dist/esm/src/auth/Peer.js.map +1 -1
  161. package/dist/esm/src/auth/SessionManager.js +14 -9
  162. package/dist/esm/src/auth/SessionManager.js.map +1 -1
  163. package/dist/esm/src/auth/certificates/Certificate.js +15 -11
  164. package/dist/esm/src/auth/certificates/Certificate.js.map +1 -1
  165. package/dist/esm/src/auth/certificates/MasterCertificate.js +25 -23
  166. package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
  167. package/dist/esm/src/auth/certificates/VerifiableCertificate.js +2 -2
  168. package/dist/esm/src/auth/certificates/VerifiableCertificate.js.map +1 -1
  169. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +64 -47
  170. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  171. package/dist/esm/src/auth/clients/AuthFetch.js +1 -0
  172. package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
  173. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +69 -43
  174. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  175. package/dist/esm/src/auth/utils/createNonce.js.map +1 -1
  176. package/dist/esm/src/auth/utils/getVerifiableCertificates.js +1 -1
  177. package/dist/esm/src/auth/utils/getVerifiableCertificates.js.map +1 -1
  178. package/dist/esm/src/auth/utils/validateCertificates.js +6 -3
  179. package/dist/esm/src/auth/utils/validateCertificates.js.map +1 -1
  180. package/dist/esm/src/auth/utils/verifyNonce.js.map +1 -1
  181. package/dist/esm/src/compat/BSM.js.map +1 -1
  182. package/dist/esm/src/compat/ECIES.js +165 -116
  183. package/dist/esm/src/compat/ECIES.js.map +1 -1
  184. package/dist/esm/src/compat/HD.js +56 -56
  185. package/dist/esm/src/compat/HD.js.map +1 -1
  186. package/dist/esm/src/compat/Mnemonic.js +95 -89
  187. package/dist/esm/src/compat/Mnemonic.js.map +1 -1
  188. package/dist/esm/src/compat/Utxo.js +1 -1
  189. package/dist/esm/src/compat/Utxo.js.map +1 -1
  190. package/dist/esm/src/messages/EncryptedMessage.js +3 -1
  191. package/dist/esm/src/messages/EncryptedMessage.js.map +1 -1
  192. package/dist/esm/src/messages/SignedMessage.js +1 -0
  193. package/dist/esm/src/messages/SignedMessage.js.map +1 -1
  194. package/dist/esm/src/overlay-tools/LookupResolver.js +53 -35
  195. package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
  196. package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
  197. package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
  198. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +40 -28
  199. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  200. package/dist/esm/src/primitives/AESGCM.js +1 -0
  201. package/dist/esm/src/primitives/AESGCM.js.map +1 -1
  202. package/dist/esm/src/primitives/BasePoint.js +1 -1
  203. package/dist/esm/src/primitives/BasePoint.js.map +1 -1
  204. package/dist/esm/src/primitives/BigNumber.js +50 -62
  205. package/dist/esm/src/primitives/BigNumber.js.map +1 -1
  206. package/dist/esm/src/primitives/Curve.js +45 -22
  207. package/dist/esm/src/primitives/Curve.js.map +1 -1
  208. package/dist/esm/src/primitives/DRBG.js +2 -8
  209. package/dist/esm/src/primitives/DRBG.js.map +1 -1
  210. package/dist/esm/src/primitives/ECDSA.js +50 -35
  211. package/dist/esm/src/primitives/ECDSA.js.map +1 -1
  212. package/dist/esm/src/primitives/Hash.js +188 -213
  213. package/dist/esm/src/primitives/Hash.js.map +1 -1
  214. package/dist/esm/src/primitives/JacobianPoint.js +18 -5
  215. package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
  216. package/dist/esm/src/primitives/K256.js.map +1 -1
  217. package/dist/esm/src/primitives/Mersenne.js.map +1 -1
  218. package/dist/esm/src/primitives/MontgomoryMethod.js.map +1 -1
  219. package/dist/esm/src/primitives/Point.js +107 -88
  220. package/dist/esm/src/primitives/Point.js.map +1 -1
  221. package/dist/esm/src/primitives/Polynomial.js +4 -2
  222. package/dist/esm/src/primitives/Polynomial.js.map +1 -1
  223. package/dist/esm/src/primitives/PrivateKey.js +25 -16
  224. package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
  225. package/dist/esm/src/primitives/PublicKey.js.map +1 -1
  226. package/dist/esm/src/primitives/Random.js +7 -6
  227. package/dist/esm/src/primitives/Random.js.map +1 -1
  228. package/dist/esm/src/primitives/ReductionContext.js +1 -1
  229. package/dist/esm/src/primitives/ReductionContext.js.map +1 -1
  230. package/dist/esm/src/primitives/Schnorr.js +21 -15
  231. package/dist/esm/src/primitives/Schnorr.js.map +1 -1
  232. package/dist/esm/src/primitives/Signature.js +8 -7
  233. package/dist/esm/src/primitives/Signature.js.map +1 -1
  234. package/dist/esm/src/primitives/SymmetricKey.js +13 -13
  235. package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
  236. package/dist/esm/src/primitives/TransactionSignature.js +22 -12
  237. package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
  238. package/dist/esm/src/primitives/utils.js +76 -66
  239. package/dist/esm/src/primitives/utils.js.map +1 -1
  240. package/dist/esm/src/script/OP.js +3 -3
  241. package/dist/esm/src/script/OP.js.map +1 -1
  242. package/dist/esm/src/script/Script.js +12 -10
  243. package/dist/esm/src/script/Script.js.map +1 -1
  244. package/dist/esm/src/script/Spend.js +39 -32
  245. package/dist/esm/src/script/Spend.js.map +1 -1
  246. package/dist/esm/src/script/templates/P2PKH.js +26 -11
  247. package/dist/esm/src/script/templates/P2PKH.js.map +1 -1
  248. package/dist/esm/src/script/templates/PushDrop.js +29 -22
  249. package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
  250. package/dist/esm/src/script/templates/RPuzzle.js +11 -6
  251. package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
  252. package/dist/esm/src/totp/totp.js +2 -1
  253. package/dist/esm/src/totp/totp.js.map +1 -1
  254. package/dist/esm/src/transaction/Beef.js +176 -154
  255. package/dist/esm/src/transaction/Beef.js.map +1 -1
  256. package/dist/esm/src/transaction/BeefParty.js +24 -24
  257. package/dist/esm/src/transaction/BeefParty.js.map +1 -1
  258. package/dist/esm/src/transaction/BeefTx.js +26 -18
  259. package/dist/esm/src/transaction/BeefTx.js.map +1 -1
  260. package/dist/esm/src/transaction/Broadcaster.js.map +1 -1
  261. package/dist/esm/src/transaction/MerklePath.js +61 -36
  262. package/dist/esm/src/transaction/MerklePath.js.map +1 -1
  263. package/dist/esm/src/transaction/Transaction.js +105 -138
  264. package/dist/esm/src/transaction/Transaction.js.map +1 -1
  265. package/dist/esm/src/transaction/broadcasters/ARC.js +25 -16
  266. package/dist/esm/src/transaction/broadcasters/ARC.js.map +1 -1
  267. package/dist/esm/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
  268. package/dist/esm/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
  269. package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
  270. package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
  271. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  272. package/dist/esm/src/transaction/http/DefaultHttpClient.js +3 -2
  273. package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
  274. package/dist/esm/src/transaction/http/FetchHttpClient.js +4 -2
  275. package/dist/esm/src/transaction/http/FetchHttpClient.js.map +1 -1
  276. package/dist/esm/src/transaction/http/NodejsHttpClient.js +5 -3
  277. package/dist/esm/src/transaction/http/NodejsHttpClient.js.map +1 -1
  278. package/dist/esm/src/transaction/http/index.js.map +1 -1
  279. package/dist/esm/src/transaction/index.js.map +1 -1
  280. package/dist/esm/src/wallet/CachedKeyDeriver.js +91 -66
  281. package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
  282. package/dist/esm/src/wallet/KeyDeriver.js +60 -52
  283. package/dist/esm/src/wallet/KeyDeriver.js.map +1 -1
  284. package/dist/esm/src/wallet/ProtoWallet.js +75 -29
  285. package/dist/esm/src/wallet/ProtoWallet.js.map +1 -1
  286. package/dist/esm/src/wallet/WalletClient.js +7 -2
  287. package/dist/esm/src/wallet/WalletClient.js.map +1 -1
  288. package/dist/esm/src/wallet/WalletError.js +2 -2
  289. package/dist/esm/src/wallet/WalletError.js.map +1 -1
  290. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +4 -4
  291. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  292. package/dist/esm/src/wallet/substrates/HTTPWalletWire.js +2 -2
  293. package/dist/esm/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
  294. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
  295. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  296. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +95 -43
  297. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  298. package/dist/esm/src/wallet/substrates/XDM.js +8 -3
  299. package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
  300. package/dist/esm/src/wallet/substrates/window.CWI.js +28 -28
  301. package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
  302. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  303. package/dist/types/mod.d.ts +15 -15
  304. package/dist/types/src/auth/Peer.d.ts +10 -10
  305. package/dist/types/src/auth/Peer.d.ts.map +1 -1
  306. package/dist/types/src/auth/SessionManager.d.ts +4 -4
  307. package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
  308. package/dist/types/src/auth/certificates/Certificate.d.ts +6 -6
  309. package/dist/types/src/auth/certificates/Certificate.d.ts.map +1 -1
  310. package/dist/types/src/auth/certificates/MasterCertificate.d.ts +5 -5
  311. package/dist/types/src/auth/certificates/MasterCertificate.d.ts.map +1 -1
  312. package/dist/types/src/auth/certificates/VerifiableCertificate.d.ts.map +1 -1
  313. package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts +23 -22
  314. package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts.map +1 -1
  315. package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
  316. package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts +1 -1
  317. package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts.map +1 -1
  318. package/dist/types/src/auth/utils/createNonce.d.ts.map +1 -1
  319. package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts +3 -3
  320. package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts.map +1 -1
  321. package/dist/types/src/auth/utils/validateCertificates.d.ts +2 -2
  322. package/dist/types/src/auth/utils/validateCertificates.d.ts.map +1 -1
  323. package/dist/types/src/auth/utils/verifyNonce.d.ts +1 -1
  324. package/dist/types/src/auth/utils/verifyNonce.d.ts.map +1 -1
  325. package/dist/types/src/compat/BSM.d.ts +1 -1
  326. package/dist/types/src/compat/BSM.d.ts.map +1 -1
  327. package/dist/types/src/compat/ECIES.d.ts +36 -36
  328. package/dist/types/src/compat/ECIES.d.ts.map +1 -1
  329. package/dist/types/src/compat/HD.d.ts +51 -51
  330. package/dist/types/src/compat/HD.d.ts.map +1 -1
  331. package/dist/types/src/compat/Mnemonic.d.ts +79 -79
  332. package/dist/types/src/compat/Mnemonic.d.ts.map +1 -1
  333. package/dist/types/src/compat/Utxo.d.ts.map +1 -1
  334. package/dist/types/src/messages/EncryptedMessage.d.ts.map +1 -1
  335. package/dist/types/src/messages/SignedMessage.d.ts.map +1 -1
  336. package/dist/types/src/overlay-tools/LookupResolver.d.ts +9 -9
  337. package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
  338. package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts +17 -17
  339. package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts.map +1 -1
  340. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +14 -14
  341. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
  342. package/dist/types/src/primitives/AESGCM.d.ts.map +1 -1
  343. package/dist/types/src/primitives/BasePoint.d.ts +8 -8
  344. package/dist/types/src/primitives/BasePoint.d.ts.map +1 -1
  345. package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
  346. package/dist/types/src/primitives/Curve.d.ts +14 -7
  347. package/dist/types/src/primitives/Curve.d.ts.map +1 -1
  348. package/dist/types/src/primitives/DRBG.d.ts.map +1 -1
  349. package/dist/types/src/primitives/ECDSA.d.ts +1 -1
  350. package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
  351. package/dist/types/src/primitives/Hash.d.ts +11 -11
  352. package/dist/types/src/primitives/Hash.d.ts.map +1 -1
  353. package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
  354. package/dist/types/src/primitives/Point.d.ts +14 -10
  355. package/dist/types/src/primitives/Point.d.ts.map +1 -1
  356. package/dist/types/src/primitives/Polynomial.d.ts.map +1 -1
  357. package/dist/types/src/primitives/PrivateKey.d.ts +2 -2
  358. package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -1
  359. package/dist/types/src/primitives/PublicKey.d.ts.map +1 -1
  360. package/dist/types/src/primitives/Random.d.ts.map +1 -1
  361. package/dist/types/src/primitives/Schnorr.d.ts +14 -14
  362. package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
  363. package/dist/types/src/primitives/Signature.d.ts +1 -1
  364. package/dist/types/src/primitives/Signature.d.ts.map +1 -1
  365. package/dist/types/src/primitives/SymmetricKey.d.ts +13 -13
  366. package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
  367. package/dist/types/src/primitives/TransactionSignature.d.ts +4 -4
  368. package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -1
  369. package/dist/types/src/primitives/utils.d.ts +3 -6
  370. package/dist/types/src/primitives/utils.d.ts.map +1 -1
  371. package/dist/types/src/script/Script.d.ts +3 -3
  372. package/dist/types/src/script/Script.d.ts.map +1 -1
  373. package/dist/types/src/script/ScriptTemplate.d.ts +2 -2
  374. package/dist/types/src/script/ScriptTemplate.d.ts.map +1 -1
  375. package/dist/types/src/script/Spend.d.ts.map +1 -1
  376. package/dist/types/src/script/templates/P2PKH.d.ts.map +1 -1
  377. package/dist/types/src/script/templates/PushDrop.d.ts +1 -2
  378. package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
  379. package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -1
  380. package/dist/types/src/totp/totp.d.ts.map +1 -1
  381. package/dist/types/src/transaction/Beef.d.ts +96 -96
  382. package/dist/types/src/transaction/Beef.d.ts.map +1 -1
  383. package/dist/types/src/transaction/BeefParty.d.ts +22 -22
  384. package/dist/types/src/transaction/BeefParty.d.ts.map +1 -1
  385. package/dist/types/src/transaction/BeefTx.d.ts +5 -5
  386. package/dist/types/src/transaction/BeefTx.d.ts.map +1 -1
  387. package/dist/types/src/transaction/Broadcaster.d.ts.map +1 -1
  388. package/dist/types/src/transaction/ChainTracker.d.ts +2 -2
  389. package/dist/types/src/transaction/FeeModel.d.ts.map +1 -1
  390. package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
  391. package/dist/types/src/transaction/Transaction.d.ts +4 -12
  392. package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
  393. package/dist/types/src/transaction/TransactionOutput.d.ts.map +1 -1
  394. package/dist/types/src/transaction/broadcasters/ARC.d.ts +1 -1
  395. package/dist/types/src/transaction/broadcasters/ARC.d.ts.map +1 -1
  396. package/dist/types/src/transaction/broadcasters/DefaultBroadcaster.d.ts.map +1 -1
  397. package/dist/types/src/transaction/broadcasters/WhatsOnChainBroadcaster.d.ts.map +1 -1
  398. package/dist/types/src/transaction/chaintrackers/DefaultChainTracker.d.ts.map +1 -1
  399. package/dist/types/src/transaction/chaintrackers/WhatsOnChain.d.ts.map +1 -1
  400. package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts.map +1 -1
  401. package/dist/types/src/transaction/http/DefaultHttpClient.d.ts +1 -1
  402. package/dist/types/src/transaction/http/DefaultHttpClient.d.ts.map +1 -1
  403. package/dist/types/src/transaction/http/FetchHttpClient.d.ts +5 -5
  404. package/dist/types/src/transaction/http/FetchHttpClient.d.ts.map +1 -1
  405. package/dist/types/src/transaction/http/HttpClient.d.ts +4 -4
  406. package/dist/types/src/transaction/http/HttpClient.d.ts.map +1 -1
  407. package/dist/types/src/transaction/http/NodejsHttpClient.d.ts +3 -3
  408. package/dist/types/src/transaction/http/NodejsHttpClient.d.ts.map +1 -1
  409. package/dist/types/src/transaction/http/index.d.ts.map +1 -1
  410. package/dist/types/src/transaction/index.d.ts.map +1 -1
  411. package/dist/types/src/wallet/CachedKeyDeriver.d.ts +58 -58
  412. package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
  413. package/dist/types/src/wallet/KeyDeriver.d.ts +78 -78
  414. package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
  415. package/dist/types/src/wallet/ProtoWallet.d.ts +10 -10
  416. package/dist/types/src/wallet/ProtoWallet.d.ts.map +1 -1
  417. package/dist/types/src/wallet/Wallet.interfaces.d.ts +151 -152
  418. package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
  419. package/dist/types/src/wallet/WalletClient.d.ts +5 -5
  420. package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
  421. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +6 -6
  422. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
  423. package/dist/types/src/wallet/substrates/HTTPWalletWire.d.ts.map +1 -1
  424. package/dist/types/src/wallet/substrates/WalletWireProcessor.d.ts.map +1 -1
  425. package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
  426. package/dist/types/src/wallet/substrates/XDM.d.ts +1 -1
  427. package/dist/types/src/wallet/substrates/XDM.d.ts.map +1 -1
  428. package/dist/types/src/wallet/substrates/window.CWI.d.ts +6 -6
  429. package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -1
  430. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  431. package/dist/umd/bundle.js +1 -1
  432. package/docs/auth.md +92 -82
  433. package/docs/compat.md +24 -24
  434. package/docs/messages.md +7 -5
  435. package/docs/overlay-tools.md +21 -21
  436. package/docs/primitives.md +336 -315
  437. package/docs/script.md +35 -35
  438. package/docs/swagger/dist/swagger-initializer.js +7 -7
  439. package/docs/swagger/dist/swagger-ui-bundle.js +1 -1
  440. package/docs/swagger/dist/swagger-ui-es-bundle-core.js +2 -2
  441. package/docs/swagger/dist/swagger-ui-es-bundle.js +1 -1
  442. package/docs/swagger/dist/swagger-ui-standalone-preset.js +1 -1
  443. package/docs/swagger/dist/swagger-ui.js +2 -2
  444. package/docs/totp.md +5 -5
  445. package/docs/transaction.md +103 -105
  446. package/docs/wallet-substrates.md +17 -17
  447. package/docs/wallet.md +202 -204
  448. package/mod.ts +15 -15
  449. package/package.json +15 -3
  450. package/src/auth/Peer.ts +271 -121
  451. package/src/auth/SessionManager.ts +17 -10
  452. package/src/auth/__tests/Peer.test.ts +361 -179
  453. package/src/auth/__tests/SessionManager.test.ts +67 -19
  454. package/src/auth/__tests/build.test.ts +11 -0
  455. package/src/auth/certificates/Certificate.ts +27 -14
  456. package/src/auth/certificates/MasterCertificate.ts +106 -62
  457. package/src/auth/certificates/VerifiableCertificate.ts +30 -8
  458. package/src/auth/certificates/__tests/Certificate.test.ts +32 -17
  459. package/src/auth/certificates/__tests/CompletedProtoWallet.ts +171 -68
  460. package/src/auth/certificates/__tests/MasterCertificate.test.ts +63 -47
  461. package/src/auth/certificates/__tests/VerifiableCertificate.test.ts +42 -31
  462. package/src/auth/certificates/index.ts +1 -1
  463. package/src/auth/clients/AuthFetch.ts +1 -0
  464. package/src/auth/clients/index.ts +1 -1
  465. package/src/auth/transports/SimplifiedFetchTransport.ts +145 -72
  466. package/src/auth/transports/index.ts +1 -1
  467. package/src/auth/utils/__tests/cryptononce.test.ts +52 -23
  468. package/src/auth/utils/__tests/getVerifiableCertificates.test.ts +56 -30
  469. package/src/auth/utils/__tests/validateCertificates.test.ts +53 -31
  470. package/src/auth/utils/createNonce.ts +11 -3
  471. package/src/auth/utils/getVerifiableCertificates.ts +12 -7
  472. package/src/auth/utils/validateCertificates.ts +57 -39
  473. package/src/auth/utils/verifyNonce.ts +6 -2
  474. package/src/compat/BSM.ts +10 -2
  475. package/src/compat/ECIES.ts +265 -141
  476. package/src/compat/HD.ts +81 -63
  477. package/src/compat/Mnemonic.ts +104 -91
  478. package/src/compat/Utxo.ts +8 -5
  479. package/src/compat/__tests/BSM.test.ts +42 -16
  480. package/src/compat/__tests/ECIES.test.ts +117 -52
  481. package/src/compat/__tests/HD.test.ts +55 -42
  482. package/src/compat/__tests/Mnemonic.test.ts +11 -12
  483. package/src/compat/__tests/Mnemonic.vectors.ts +110 -55
  484. package/src/messages/EncryptedMessage.ts +6 -2
  485. package/src/messages/SignedMessage.ts +14 -8
  486. package/src/messages/__tests/EncryptedMessage.test.ts +23 -24
  487. package/src/messages/__tests/SignedMessage.test.ts +17 -11
  488. package/src/overlay-tools/LookupResolver.ts +108 -56
  489. package/src/overlay-tools/OverlayAdminTokenTemplate.ts +52 -23
  490. package/src/overlay-tools/SHIPBroadcaster.ts +135 -59
  491. package/src/overlay-tools/__tests/LookupResolver.test.ts +723 -323
  492. package/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.ts +50 -22
  493. package/src/overlay-tools/__tests/SHIPBroadcaster.test.ts +607 -290
  494. package/src/primitives/AESGCM.ts +2 -0
  495. package/src/primitives/BasePoint.ts +4 -4
  496. package/src/primitives/BigNumber.ts +99 -90
  497. package/src/primitives/Curve.ts +117 -46
  498. package/src/primitives/DRBG.ts +9 -11
  499. package/src/primitives/ECDSA.ts +109 -63
  500. package/src/primitives/Hash.ts +492 -321
  501. package/src/primitives/JacobianPoint.ts +67 -19
  502. package/src/primitives/Point.ts +254 -152
  503. package/src/primitives/Polynomial.ts +8 -3
  504. package/src/primitives/PrivateKey.ts +41 -17
  505. package/src/primitives/PublicKey.ts +13 -3
  506. package/src/primitives/Random.ts +14 -8
  507. package/src/primitives/ReductionContext.ts +1 -1
  508. package/src/primitives/Schnorr.ts +40 -18
  509. package/src/primitives/Signature.ts +26 -16
  510. package/src/primitives/SymmetricKey.ts +14 -14
  511. package/src/primitives/TransactionSignature.ts +41 -17
  512. package/src/primitives/__tests/AESGCM.test.ts +457 -151
  513. package/src/primitives/__tests/BRC42.private.vectors.ts +30 -15
  514. package/src/primitives/__tests/BRC42.public.vectors.ts +30 -15
  515. package/src/primitives/__tests/BigNumber.arithmatic.test.ts +344 -125
  516. package/src/primitives/__tests/BigNumber.binary.test.ts +148 -67
  517. package/src/primitives/__tests/BigNumber.constructor.test.ts +65 -25
  518. package/src/primitives/__tests/BigNumber.dhGroup.test.ts +15 -11
  519. package/src/primitives/__tests/BigNumber.fixtures.ts +16 -8
  520. package/src/primitives/__tests/BigNumber.serializers.test.ts +41 -15
  521. package/src/primitives/__tests/BigNumber.utils.test.ts +132 -42
  522. package/src/primitives/__tests/Curve.unit.test.ts +75 -53
  523. package/src/primitives/__tests/DRBG.test.ts +1 -1
  524. package/src/primitives/__tests/DRBG.vectors.ts +45 -75
  525. package/src/primitives/__tests/ECDH.test.ts +15 -8
  526. package/src/primitives/__tests/ECDSA.test.ts +12 -6
  527. package/src/primitives/__tests/HMAC.test.ts +24 -18
  528. package/src/primitives/__tests/Hash.test.ts +57 -46
  529. package/src/primitives/__tests/PBKDF2.vectors.ts +130 -117
  530. package/src/primitives/__tests/PrivateKey.split.test.ts +33 -11
  531. package/src/primitives/__tests/PrivateKey.test.ts +11 -10
  532. package/src/primitives/__tests/PublicKey.test.ts +64 -53
  533. package/src/primitives/__tests/Random.test.ts +1 -1
  534. package/src/primitives/__tests/Reader.test.ts +240 -219
  535. package/src/primitives/__tests/ReductionContext.test.ts +98 -61
  536. package/src/primitives/__tests/Schnorr.test.ts +249 -237
  537. package/src/primitives/__tests/SymmetricKey.test.ts +18 -15
  538. package/src/primitives/__tests/SymmetricKey.vectors.ts +16 -8
  539. package/src/primitives/__tests/Writer.test.ts +23 -13
  540. package/src/primitives/__tests/bug-31.test.ts +6 -10
  541. package/src/primitives/__tests/utils.test.ts +70 -19
  542. package/src/primitives/utils.ts +103 -79
  543. package/src/script/Script.ts +18 -12
  544. package/src/script/ScriptTemplate.ts +3 -5
  545. package/src/script/Spend.ts +306 -108
  546. package/src/script/__tests/Script.test.ts +73 -55
  547. package/src/script/__tests/Spend.test.ts +208 -83
  548. package/src/script/__tests/SpendComplex.test.ts +19 -13
  549. package/src/script/__tests/script.invalid.vectors.ts +428 -1796
  550. package/src/script/__tests/script.valid.vectors.ts +728 -2764
  551. package/src/script/templates/P2PKH.ts +34 -12
  552. package/src/script/templates/PushDrop.ts +65 -31
  553. package/src/script/templates/RPuzzle.ts +29 -8
  554. package/src/script/templates/__tests/PushDrop.test.ts +146 -41
  555. package/src/totp/__tests/totp.test.ts +45 -44
  556. package/src/totp/totp.ts +3 -2
  557. package/src/transaction/Beef.ts +269 -174
  558. package/src/transaction/BeefParty.ts +41 -31
  559. package/src/transaction/BeefTx.ts +36 -26
  560. package/src/transaction/Broadcaster.ts +10 -6
  561. package/src/transaction/ChainTracker.ts +2 -2
  562. package/src/transaction/FeeModel.ts +0 -1
  563. package/src/transaction/MerklePath.ts +124 -59
  564. package/src/transaction/Transaction.ts +188 -187
  565. package/src/transaction/TransactionOutput.ts +0 -1
  566. package/src/transaction/__tests/Beef.test.ts +390 -287
  567. package/src/transaction/__tests/MerklePath.test.ts +59 -26
  568. package/src/transaction/__tests/Transaction.benchmarks.test.ts +231 -201
  569. package/src/transaction/__tests/Transaction.test.ts +758 -482
  570. package/src/transaction/__tests/bigtx.vectors.ts +2 -1
  571. package/src/transaction/__tests/bump.invalid.vectors.ts +24 -6
  572. package/src/transaction/__tests/bump.valid.vectors.ts +6 -2
  573. package/src/transaction/__tests/tx.invalid.vectors.ts +881 -185
  574. package/src/transaction/__tests/tx.valid.vectors.ts +1210 -257
  575. package/src/transaction/broadcasters/ARC.ts +69 -38
  576. package/src/transaction/broadcasters/DefaultBroadcaster.ts +9 -3
  577. package/src/transaction/broadcasters/WhatsOnChainBroadcaster.ts +20 -7
  578. package/src/transaction/broadcasters/__tests/ARC.test.ts +127 -59
  579. package/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.ts +27 -18
  580. package/src/transaction/chaintrackers/DefaultChainTracker.ts +1 -1
  581. package/src/transaction/chaintrackers/WhatsOnChain.ts +27 -11
  582. package/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.ts +59 -23
  583. package/src/transaction/fee-models/SatoshisPerKilobyte.ts +9 -5
  584. package/src/transaction/http/DefaultHttpClient.ts +5 -4
  585. package/src/transaction/http/FetchHttpClient.ts +18 -9
  586. package/src/transaction/http/HttpClient.ts +27 -22
  587. package/src/transaction/http/NodejsHttpClient.ts +23 -9
  588. package/src/transaction/http/index.ts +5 -1
  589. package/src/transaction/index.ts +5 -1
  590. package/src/wallet/CachedKeyDeriver.ts +151 -82
  591. package/src/wallet/KeyDeriver.ts +186 -105
  592. package/src/wallet/ProtoWallet.ts +121 -52
  593. package/src/wallet/Wallet.interfaces.ts +167 -156
  594. package/src/wallet/WalletClient.ts +314 -59
  595. package/src/wallet/WalletError.ts +2 -2
  596. package/src/wallet/__tests/CachedKeyDeriver.test.ts +86 -27
  597. package/src/wallet/__tests/KeyDeriver.test.ts +136 -33
  598. package/src/wallet/__tests/ProtoWallet.test.ts +190 -102
  599. package/src/wallet/substrates/HTTPWalletJSON.ts +250 -67
  600. package/src/wallet/substrates/HTTPWalletWire.ts +7 -3
  601. package/src/wallet/substrates/WalletWireCalls.ts +2 -2
  602. package/src/wallet/substrates/WalletWireProcessor.ts +1412 -1277
  603. package/src/wallet/substrates/WalletWireTransceiver.ts +713 -138
  604. package/src/wallet/substrates/XDM.ts +425 -36
  605. package/src/wallet/substrates/__tests/WalletWire.integration.test.ts +488 -225
  606. package/src/wallet/substrates/__tests/XDM.test.ts +232 -234
  607. package/src/wallet/substrates/window.CWI.ts +520 -61
@@ -5,6 +5,11 @@ import BeefTx from './BeefTx.js'
5
5
  import { Reader, Writer, toHex, toArray } from '../primitives/utils.js'
6
6
  import { hash256 } from '../primitives/Hash.js'
7
7
 
8
+ function verifyTruthy<T> (v: T | undefined): T {
9
+ if (v == null) throw new Error('Expected a valid value, but got undefined.')
10
+ return v
11
+ }
12
+
8
13
  export const BEEF_V1 = 4022206465 // 0100BEEF in LE order
9
14
  export const BEEF_V2 = 4022206466 // 0200BEEF in LE order
10
15
  export const ATOMIC_BEEF = 0x01010101 // 01010101
@@ -78,11 +83,11 @@ export class Beef {
78
83
  }
79
84
 
80
85
  /**
81
- * @param txid of `beefTx` to find
82
- * @returns `BeefTx` in `txs` with `txid`.
83
- */
86
+ * @param txid of `beefTx` to find
87
+ * @returns `BeefTx` in `txs` with `txid`.
88
+ */
84
89
  findTxid (txid: string): BeefTx | undefined {
85
- return this.txs.find(tx => tx.txid === txid)
90
+ return this.txs.find((tx) => tx.txid === txid)
86
91
  }
87
92
 
88
93
  /**
@@ -96,10 +101,12 @@ export class Beef {
96
101
  * @returns undefined if txid is unknown.
97
102
  */
98
103
  makeTxidOnly (txid: string): BeefTx | undefined {
99
- const i = this.txs.findIndex(tx => tx.txid === txid)
104
+ const i = this.txs.findIndex((tx) => tx.txid === txid)
100
105
  if (i === -1) return undefined
101
106
  let btx = this.txs[i]
102
- if (btx.isTxidOnly) { return btx }
107
+ if (btx.isTxidOnly) {
108
+ return btx
109
+ }
103
110
  this.txs.splice(i, 1)
104
111
  btx = this.mergeTxidOnly(txid)
105
112
  return btx
@@ -109,7 +116,9 @@ export class Beef {
109
116
  * @returns `MerklePath` with level zero hash equal to txid or undefined.
110
117
  */
111
118
  findBump (txid: string): MerklePath | undefined {
112
- return this.bumps.find(b => b.path[0].find(leaf => leaf.hash === txid))
119
+ return this.bumps.find((b) =>
120
+ b.path[0].some((leaf) => leaf.hash === txid) // ✅ Ensure boolean return with `.some()`
121
+ )
113
122
  }
114
123
 
115
124
  /**
@@ -123,12 +132,12 @@ export class Beef {
123
132
  */
124
133
  findTransactionForSigning (txid: string): Transaction | undefined {
125
134
  const beefTx = this.findTxid(txid)
126
- if (!beefTx) return undefined
135
+ if ((beefTx == null) || (beefTx.tx == null)) return undefined // Ensure beefTx.tx exists before using it
127
136
 
128
137
  for (const i of beefTx.tx.inputs) {
129
- if (!i.sourceTransaction) {
130
- const itx = this.findTxid(i.sourceTXID)
131
- if (itx) {
138
+ if (i.sourceTransaction == null) {
139
+ const itx = this.findTxid(verifyTruthy(i.sourceTXID)) // Ensure sourceTXID is valid
140
+ if (itx != null) {
132
141
  i.sourceTransaction = itx.tx
133
142
  }
134
143
  }
@@ -147,21 +156,23 @@ export class Beef {
147
156
  */
148
157
  findAtomicTransaction (txid: string): Transaction | undefined {
149
158
  const beefTx = this.findTxid(txid)
150
- if (!beefTx) return undefined
159
+ if ((beefTx == null) || (beefTx.tx == null)) return undefined // Ensure beefTx.tx exists before using it
151
160
 
152
- const addInputProof = (beef: Beef, tx: Transaction) => {
161
+ const addInputProof = (beef: Beef, tx: Transaction): void => {
153
162
  const mp = beef.findBump(tx.id('hex'))
154
- if (mp) { tx.merklePath = mp } else {
163
+ if (mp != null) {
164
+ tx.merklePath = mp
165
+ } else {
155
166
  for (const i of tx.inputs) {
156
- if (!i.sourceTransaction) {
157
- const itx = beef.findTxid(i.sourceTXID)
158
- if (itx) {
167
+ if (i.sourceTransaction == null) {
168
+ const itx = beef.findTxid(verifyTruthy(i.sourceTXID)) // Ensure sourceTXID is valid
169
+ if (itx != null) {
159
170
  i.sourceTransaction = itx.tx
160
171
  }
161
172
  }
162
- if (i.sourceTransaction) {
173
+ if (i.sourceTransaction != null) {
163
174
  const mp = beef.findBump(i.sourceTransaction.id('hex'))
164
- if (mp) {
175
+ if (mp != null) {
165
176
  i.sourceTransaction.merklePath = mp
166
177
  } else {
167
178
  addInputProof(beef, i.sourceTransaction)
@@ -171,22 +182,23 @@ export class Beef {
171
182
  }
172
183
  }
173
184
 
174
- addInputProof(this, beefTx.tx)
185
+ addInputProof(this, beefTx.tx) // Safe because we checked that beefTx.tx exists
175
186
 
176
187
  return beefTx.tx
177
188
  }
178
189
 
179
190
  /**
180
- * Merge a MerklePath that is assumed to be fully valid.
181
- * @param bump
182
- * @returns index of merged bump
183
- */
191
+ * Merge a MerklePath that is assumed to be fully valid.
192
+ * @param bump
193
+ * @returns index of merged bump
194
+ */
184
195
  mergeBump (bump: MerklePath): number {
185
196
  let bumpIndex: number | undefined
186
197
  // If this proof is identical to another one previously added, we use that first. Otherwise, we try to merge it with proofs from the same block.
187
198
  for (let i = 0; i < this.bumps.length; i++) {
188
199
  const b = this.bumps[i]
189
- if (b === bump) { // Literally the same
200
+ if (b === bump) {
201
+ // Literally the same
190
202
  return i
191
203
  }
192
204
  if (b.blockHeight === bump.blockHeight) {
@@ -208,11 +220,12 @@ export class Beef {
208
220
  this.bumps.push(bump)
209
221
  }
210
222
 
211
- // review if any transactions are proven by this bump
223
+ // Review if any transactions are proven by this bump
212
224
  const b = this.bumps[bumpIndex]
213
225
  for (const tx of this.txs) {
214
226
  const txid = tx.txid
215
- if (!tx.bumpIndex) {
227
+
228
+ if (tx.bumpIndex == null) { // ✅ Explicitly check for null or undefined
216
229
  for (const n of b.path[0]) {
217
230
  if (n.hash === txid) {
218
231
  tx.bumpIndex = bumpIndex
@@ -227,16 +240,16 @@ export class Beef {
227
240
  }
228
241
 
229
242
  /**
230
- * Merge a serialized transaction.
231
- *
232
- * Checks that a transaction with the same txid hasn't already been merged.
233
- *
234
- * Replaces existing transaction with same txid.
235
- *
236
- * @param rawTx
237
- * @param bumpIndex Optional. If a number, must be valid index into bumps array.
238
- * @returns txid of rawTx
239
- */
243
+ * Merge a serialized transaction.
244
+ *
245
+ * Checks that a transaction with the same txid hasn't already been merged.
246
+ *
247
+ * Replaces existing transaction with same txid.
248
+ *
249
+ * @param rawTx
250
+ * @param bumpIndex Optional. If a number, must be valid index into bumps array.
251
+ * @returns txid of rawTx
252
+ */
240
253
  mergeRawTx (rawTx: number[], bumpIndex?: number): BeefTx {
241
254
  const newTx: BeefTx = new BeefTx(rawTx, bumpIndex)
242
255
  this.removeExistingTxid(newTx.txid)
@@ -246,44 +259,50 @@ export class Beef {
246
259
  }
247
260
 
248
261
  /**
249
- * Merge a `Transaction` and any referenced `merklePath` and `sourceTransaction`, recursifely.
250
- *
251
- * Replaces existing transaction with same txid.
252
- *
253
- * Attempts to match an existing bump to the new transaction.
254
- *
255
- * @param tx
256
- * @returns txid of tx
257
- */
262
+ * Merge a `Transaction` and any referenced `merklePath` and `sourceTransaction`, recursifely.
263
+ *
264
+ * Replaces existing transaction with same txid.
265
+ *
266
+ * Attempts to match an existing bump to the new transaction.
267
+ *
268
+ * @param tx
269
+ * @returns txid of tx
270
+ */
258
271
  mergeTransaction (tx: Transaction): BeefTx {
259
272
  const txid = tx.id('hex')
260
273
  this.removeExistingTxid(txid)
261
274
  let bumpIndex: number | undefined
262
- if (tx.merklePath) { bumpIndex = this.mergeBump(tx.merklePath) }
275
+ if (tx.merklePath != null) {
276
+ bumpIndex = this.mergeBump(tx.merklePath)
277
+ }
263
278
  const newTx = new BeefTx(tx, bumpIndex)
264
279
  this.txs.push(newTx)
265
280
  this.tryToValidateBumpIndex(newTx)
266
281
  bumpIndex = newTx.bumpIndex
267
282
  if (bumpIndex === undefined) {
268
283
  for (const input of tx.inputs) {
269
- if (input.sourceTransaction) { this.mergeTransaction(input.sourceTransaction) }
284
+ if (input.sourceTransaction != null) {
285
+ this.mergeTransaction(input.sourceTransaction)
286
+ }
270
287
  }
271
288
  }
272
289
  return newTx
273
290
  }
274
291
 
275
292
  /**
276
- * Removes an existing transaction from the BEEF, given its TXID
277
- * @param txid TXID of the transaction to remove
278
- */
279
- removeExistingTxid (txid: string) {
280
- const existingTxIndex = this.txs.findIndex(t => t.txid === txid)
281
- if (existingTxIndex >= 0) { this.txs.splice(existingTxIndex, 1) }
293
+ * Removes an existing transaction from the BEEF, given its TXID
294
+ * @param txid TXID of the transaction to remove
295
+ */
296
+ removeExistingTxid (txid: string): void {
297
+ const existingTxIndex = this.txs.findIndex((t) => t.txid === txid)
298
+ if (existingTxIndex >= 0) {
299
+ this.txs.splice(existingTxIndex, 1)
300
+ }
282
301
  }
283
302
 
284
303
  mergeTxidOnly (txid: string): BeefTx {
285
- let tx = this.txs.find(t => t.txid === txid)
286
- if (!tx) {
304
+ let tx = this.txs.find((t) => t.txid === txid)
305
+ if (tx == null) {
287
306
  tx = new BeefTx(txid)
288
307
  this.txs.push(tx)
289
308
  this.tryToValidateBumpIndex(tx)
@@ -293,63 +312,93 @@ export class Beef {
293
312
 
294
313
  mergeBeefTx (btx: BeefTx): BeefTx {
295
314
  let beefTx = this.findTxid(btx.txid)
296
- if (btx.isTxidOnly && !beefTx) { beefTx = this.mergeTxidOnly(btx.txid) } else if (btx._tx && (!beefTx || beefTx.isTxidOnly)) { beefTx = this.mergeTransaction(btx._tx) } else if (btx._rawTx && (!beefTx || beefTx.isTxidOnly)) { beefTx = this.mergeRawTx(btx._rawTx) }
315
+
316
+ if (btx.isTxidOnly && (beefTx == null)) {
317
+ beefTx = this.mergeTxidOnly(btx.txid)
318
+ } else if ((btx._tx != null) && ((beefTx == null) || beefTx.isTxidOnly)) {
319
+ beefTx = this.mergeTransaction(btx._tx)
320
+ } else if ((btx._rawTx != null) && ((beefTx == null) || beefTx.isTxidOnly)) {
321
+ beefTx = this.mergeRawTx(btx._rawTx)
322
+ }
323
+
324
+ if (beefTx == null) {
325
+ throw new Error(`Failed to merge BeefTx for txid: ${btx.txid}`)
326
+ }
327
+
297
328
  return beefTx
298
329
  }
299
330
 
300
- mergeBeef (beef: number[] | Beef) {
331
+ mergeBeef (beef: number[] | Beef): void {
301
332
  const b: Beef = Array.isArray(beef) ? Beef.fromBinary(beef) : beef
302
333
 
303
- for (const bump of b.bumps) { this.mergeBump(bump) }
334
+ for (const bump of b.bumps) {
335
+ this.mergeBump(bump)
336
+ }
304
337
 
305
- for (const tx of b.txs) { this.mergeBeefTx(tx) }
338
+ for (const tx of b.txs) {
339
+ this.mergeBeefTx(tx)
340
+ }
306
341
  }
307
342
 
308
343
  /**
309
- * Sorts `txs` and checks structural validity of beef.
310
- *
311
- * Does NOT verify merkle roots.
312
- *
313
- * Validity requirements:
314
- * 1. No 'known' txids, unless `allowTxidOnly` is true.
315
- * 2. All transactions have bumps or their inputs chain back to bumps (or are known).
316
- * 3. Order of transactions satisfies dependencies before dependents.
317
- * 4. No transactions with duplicate txids.
318
- *
319
- * @param allowTxidOnly optional. If true, transaction txid only is assumed valid
320
- */
344
+ * Sorts `txs` and checks structural validity of beef.
345
+ *
346
+ * Does NOT verify merkle roots.
347
+ *
348
+ * Validity requirements:
349
+ * 1. No 'known' txids, unless `allowTxidOnly` is true.
350
+ * 2. All transactions have bumps or their inputs chain back to bumps (or are known).
351
+ * 3. Order of transactions satisfies dependencies before dependents.
352
+ * 4. No transactions with duplicate txids.
353
+ *
354
+ * @param allowTxidOnly optional. If true, transaction txid only is assumed valid
355
+ */
321
356
  isValid (allowTxidOnly?: boolean): boolean {
322
357
  return this.verifyValid(allowTxidOnly).valid
323
358
  }
324
359
 
325
360
  /**
326
- * Sorts `txs` and confirms validity of transaction data contained in beef
327
- * by validating structure of this beef and confirming computed merkle roots
328
- * using `chainTracker`.
329
- *
330
- * Validity requirements:
331
- * 1. No 'known' txids, unless `allowTxidOnly` is true.
332
- * 2. All transactions have bumps or their inputs chain back to bumps (or are known).
333
- * 3. Order of transactions satisfies dependencies before dependents.
334
- * 4. No transactions with duplicate txids.
335
- *
336
- * @param chainTracker Used to verify computed merkle path roots for all bump txids.
337
- * @param allowTxidOnly optional. If true, transaction txid is assumed valid
338
- */
339
- async verify (chainTracker: ChainTracker, allowTxidOnly?: boolean): Promise<boolean> {
361
+ * Sorts `txs` and confirms validity of transaction data contained in beef
362
+ * by validating structure of this beef and confirming computed merkle roots
363
+ * using `chainTracker`.
364
+ *
365
+ * Validity requirements:
366
+ * 1. No 'known' txids, unless `allowTxidOnly` is true.
367
+ * 2. All transactions have bumps or their inputs chain back to bumps (or are known).
368
+ * 3. Order of transactions satisfies dependencies before dependents.
369
+ * 4. No transactions with duplicate txids.
370
+ *
371
+ * @param chainTracker Used to verify computed merkle path roots for all bump txids.
372
+ * @param allowTxidOnly optional. If true, transaction txid is assumed valid
373
+ */
374
+ async verify (
375
+ chainTracker: ChainTracker,
376
+ allowTxidOnly?: boolean
377
+ ): Promise<boolean> {
340
378
  const r = this.verifyValid(allowTxidOnly)
341
379
  if (!r.valid) return false
342
380
 
343
381
  for (const height of Object.keys(r.roots)) {
344
- const isValid = await chainTracker.isValidRootForHeight(r.roots[height], Number(height))
345
- if (!isValid) { return false }
382
+ const isValid = await chainTracker.isValidRootForHeight(
383
+ r.roots[height],
384
+ Number(height)
385
+ )
386
+ if (!isValid) {
387
+ return false
388
+ }
346
389
  }
347
390
 
348
391
  return true
349
392
  }
350
393
 
351
- private verifyValid (allowTxidOnly?: boolean): { valid: boolean, roots: Record<number, string> } {
352
- const r: { valid: boolean, roots: Record<number, string> } = { valid: false, roots: {} }
394
+ private verifyValid (allowTxidOnly?: boolean): {
395
+ valid: boolean
396
+ roots: Record<number, string>
397
+ } {
398
+ const r: { valid: boolean, roots: Record<number, string> } = {
399
+ valid: false,
400
+ roots: {}
401
+ }
353
402
 
354
403
  this.sortTxs()
355
404
 
@@ -358,35 +407,41 @@ export class Beef {
358
407
 
359
408
  for (const tx of this.txs) {
360
409
  if (tx.isTxidOnly) {
361
- if (!allowTxidOnly) return r
410
+ if (allowTxidOnly !== true) return r // ✅ Explicit check for `true`
362
411
  txids[tx.txid] = true
363
412
  }
364
413
  }
365
414
 
366
415
  const confirmComputedRoot = (b: MerklePath, txid: string): boolean => {
367
416
  const root = b.computeRoot(txid)
368
- if (!r.roots[b.blockHeight]) {
417
+ if (r.roots[b.blockHeight] === undefined || r.roots[b.blockHeight] === '') {
369
418
  // accept the root as valid for this block and reuse for subsequent txids
370
419
  r.roots[b.blockHeight] = root
371
420
  }
372
- if (r.roots[b.blockHeight] !== root) { return false }
421
+ if (r.roots[b.blockHeight] !== root) {
422
+ return false
423
+ }
373
424
  return true
374
425
  }
375
426
 
376
427
  for (const b of this.bumps) {
377
428
  for (const n of b.path[0]) {
378
- if (n.txid && n.hash) {
429
+ if (n.txid === true && typeof n.hash === 'string' && n.hash.length > 0) {
379
430
  txids[n.hash] = true
380
- // all txid hashes in all bumps must have agree on computed merkle path roots
381
- if (!confirmComputedRoot(b, n.hash)) { return r }
431
+
432
+ // All txid hashes in all bumps must agree on computed merkle path roots
433
+ if (!confirmComputedRoot(b, n.hash)) {
434
+ return r
435
+ }
382
436
  }
383
437
  }
384
438
  }
385
439
 
386
440
  for (const t of this.txs) {
387
- for (const i of t.inputTxids)
388
441
  // all input txids must be included before they are referenced
389
- { if (!txids[i]) return r }
442
+ for (const i of t.inputTxids) {
443
+ if (!txids[i]) return r
444
+ }
390
445
  txids[t.txid] = true
391
446
  }
392
447
 
@@ -398,7 +453,7 @@ export class Beef {
398
453
  * Serializes this data to `writer`
399
454
  * @param writer
400
455
  */
401
- toWriter (writer: Writer) {
456
+ toWriter (writer: Writer): void {
402
457
  writer.writeUInt32LE(this.version)
403
458
 
404
459
  writer.writeVarIntNum(this.bumps.length)
@@ -413,9 +468,9 @@ export class Beef {
413
468
  }
414
469
 
415
470
  /**
416
- * Returns a binary array representing the serialized BEEF
417
- * @returns A binary array representing the BEEF
418
- */
471
+ * Returns a binary array representing the serialized BEEF
472
+ * @returns A binary array representing the BEEF
473
+ */
419
474
  toBinary (): number[] {
420
475
  const writer = new Writer()
421
476
  this.toWriter(writer)
@@ -432,27 +487,33 @@ export class Beef {
432
487
  * @param txid
433
488
  * @returns serialized contents of this Beef with AtomicBEEF prefix.
434
489
  */
435
- toBinaryAtomic (txid: string) {
490
+ toBinaryAtomic (txid: string): number[] {
436
491
  this.sortTxs()
437
492
  const tx = this.findTxid(txid)
438
- if (!tx) { throw new Error(`${txid} does not exist in this Beef`) }
439
- let beef: Beef = this
440
- if (this.txs[this.txs.length - 1] !== tx) {
441
- beef = this.clone()
442
- const i = this.txs.findIndex(t => t.txid === txid)
493
+ if (tx == null) {
494
+ throw new Error(`${txid} does not exist in this Beef`)
495
+ }
496
+
497
+ // If the transaction is not the last one, clone and modify
498
+ const beef = (this.txs[this.txs.length - 1] === tx) ? this : this.clone()
499
+
500
+ if (beef !== this) {
501
+ const i = this.txs.findIndex((t) => t.txid === txid)
443
502
  beef.txs.splice(i + 1)
444
503
  }
504
+
445
505
  const writer = new Writer()
446
506
  writer.writeUInt32LE(ATOMIC_BEEF)
447
507
  writer.write(toArray(txid, 'hex'))
448
508
  beef.toWriter(writer)
509
+
449
510
  return writer.toArray()
450
511
  }
451
512
 
452
513
  /**
453
- * Returns a hex string representing the serialized BEEF
454
- * @returns A hex string representing the BEEF
455
- */
514
+ * Returns a hex string representing the serialized BEEF
515
+ * @returns A hex string representing the BEEF
516
+ */
456
517
  toHex (): string {
457
518
  return toHex(this.toBinary())
458
519
  }
@@ -465,7 +526,11 @@ export class Beef {
465
526
  atomicTxid = toHex(br.read(32))
466
527
  version = br.readUInt32LE()
467
528
  }
468
- if (version !== BEEF_V1 && version !== BEEF_V2) { throw new Error(`Serialized BEEF must start with ${BEEF_V1} or ${BEEF_V2} but starts with ${version}`) }
529
+ if (version !== BEEF_V1 && version !== BEEF_V2) {
530
+ throw new Error(
531
+ `Serialized BEEF must start with ${BEEF_V1} or ${BEEF_V2} but starts with ${version}`
532
+ )
533
+ }
469
534
  const beef = new Beef(version)
470
535
  const bumpsLength = br.readVarIntNum()
471
536
  for (let i = 0; i < bumpsLength; i++) {
@@ -482,21 +547,21 @@ export class Beef {
482
547
  }
483
548
 
484
549
  /**
485
- * Constructs an instance of the Beef class based on the provided binary array
486
- * @param bin The binary array from which to construct BEEF
487
- * @returns An instance of the Beef class constructed from the binary data
488
- */
550
+ * Constructs an instance of the Beef class based on the provided binary array
551
+ * @param bin The binary array from which to construct BEEF
552
+ * @returns An instance of the Beef class constructed from the binary data
553
+ */
489
554
  static fromBinary (bin: number[]): Beef {
490
555
  const br = new Reader(bin)
491
556
  return Beef.fromReader(br)
492
557
  }
493
558
 
494
559
  /**
495
- * Constructs an instance of the Beef class based on the provided string
496
- * @param s The string value from which to construct BEEF
497
- * @param enc The encoding of the string value from which BEEF should be constructed
498
- * @returns An instance of the Beef class constructed from the string
499
- */
560
+ * Constructs an instance of the Beef class based on the provided string
561
+ * @param s The string value from which to construct BEEF
562
+ * @param enc The encoding of the string value from which BEEF should be constructed
563
+ * @returns An instance of the Beef class constructed from the string
564
+ */
500
565
  static fromString (s: string, enc: 'hex' | 'utf8' | 'base64' = 'hex'): Beef {
501
566
  const bin = toArray(s, enc)
502
567
  const br = new Reader(bin)
@@ -504,17 +569,19 @@ export class Beef {
504
569
  }
505
570
 
506
571
  /**
507
- * Try to validate newTx.bumpIndex by looking for an existing bump
508
- * that proves newTx.txid
509
- *
510
- * @param newTx A new `BeefTx` that has been added to this.txs
511
- * @returns true if a bump was found, false otherwise
512
- */
572
+ * Try to validate newTx.bumpIndex by looking for an existing bump
573
+ * that proves newTx.txid
574
+ *
575
+ * @param newTx A new `BeefTx` that has been added to this.txs
576
+ * @returns true if a bump was found, false otherwise
577
+ */
513
578
  private tryToValidateBumpIndex (newTx: BeefTx): boolean {
514
- if (newTx.bumpIndex !== undefined) { return true }
579
+ if (newTx.bumpIndex !== undefined) {
580
+ return true
581
+ }
515
582
  const txid = newTx.txid
516
583
  for (let i = 0; i < this.bumps.length; i++) {
517
- const j = this.bumps[i].path[0].findIndex(b => b.hash === txid)
584
+ const j = this.bumps[i].path[0].findIndex((b) => b.hash === txid)
518
585
  if (j >= 0) {
519
586
  newTx.bumpIndex = i
520
587
  this.bumps[i].path[0][j].txid = true
@@ -525,15 +592,15 @@ export class Beef {
525
592
  }
526
593
 
527
594
  /**
528
- * Sort the `txs` by input txid dependency order:
529
- * - Oldest Tx Anchored by Path or txid only
530
- * - Newer Txs depending on Older parents
531
- * - Newest Tx
532
- *
533
- * with proof (MerklePath) last, longest chain of dependencies first
534
- *
535
- * @returns `{ missingInputs, notValid, valid, withMissingInputs }`
536
- */
595
+ * Sort the `txs` by input txid dependency order:
596
+ * - Oldest Tx Anchored by Path or txid only
597
+ * - Newer Txs depending on Older parents
598
+ * - Newest Tx
599
+ *
600
+ * with proof (MerklePath) last, longest chain of dependencies first
601
+ *
602
+ * @returns `{ missingInputs, notValid, valid, withMissingInputs }`
603
+ */
537
604
  sortTxs (): {
538
605
  missingInputs: string[]
539
606
  notValid: string[]
@@ -564,7 +631,9 @@ export class Beef {
564
631
  } else if (tx.isTxidOnly && tx.inputTxids.length === 0) {
565
632
  validTxids[tx.txid] = true
566
633
  txidOnly.push(tx)
567
- } else { queue.push(tx) }
634
+ } else {
635
+ queue.push(tx)
636
+ }
568
637
  }
569
638
 
570
639
  // Hashtable of unknown input txids used to fund transactions without their own proof.
@@ -584,12 +653,17 @@ export class Beef {
584
653
  // link their inputs that exist in this beef,
585
654
  // make a note of missing inputs.
586
655
  for (const inputTxid of tx.inputTxids) {
587
- if (!txidToTx[inputTxid]) {
656
+ if (txidToTx[inputTxid] === undefined) { // Explicitly check for undefined
588
657
  missingInputs[inputTxid] = true
589
658
  hasMissingInput = true
590
659
  }
591
660
  }
592
- if (hasMissingInput) { txsMissingInputs.push(tx) } else { queue.push(tx) }
661
+
662
+ if (hasMissingInput) {
663
+ txsMissingInputs.push(tx)
664
+ } else {
665
+ queue.push(tx)
666
+ }
593
667
  }
594
668
 
595
669
  // As long as we have unsorted transactions...
@@ -599,44 +673,52 @@ export class Beef {
599
673
  // all tx are isValid false, hasProof false.
600
674
  // if isTxidOnly then has inputTxids
601
675
  for (const tx of oldQueue) {
602
- if (tx.inputTxids.every(txid => validTxids[txid])) {
676
+ if (tx.inputTxids.every((txid) => validTxids[txid])) {
603
677
  validTxids[tx.txid] = true
604
678
  result.push(tx)
605
- } else { queue.push(tx) }
679
+ } else {
680
+ queue.push(tx)
681
+ }
682
+ }
683
+ if (oldQueue.length === queue.length) {
684
+ break
606
685
  }
607
- if (oldQueue.length === queue.length) { break }
608
686
  }
609
687
 
610
688
  // transactions that don't have proofs and don't chain to proofs
611
689
  const txsNotValid = queue
612
690
 
613
691
  // New order of txs is unsortable (missing inputs or depends on missing inputs), txidOnly, sorted (so newest sorted is last)
614
- this.txs = txsMissingInputs.concat(txsNotValid).concat(txidOnly).concat(result)
692
+ this.txs = txsMissingInputs
693
+ .concat(txsNotValid)
694
+ .concat(txidOnly)
695
+ .concat(result)
615
696
 
616
697
  return {
617
698
  missingInputs: Object.keys(missingInputs),
618
- notValid: txsNotValid.map(tx => tx.txid),
699
+ notValid: txsNotValid.map((tx) => tx.txid),
619
700
  valid: Object.keys(validTxids),
620
- withMissingInputs: txsMissingInputs.map(tx => tx.txid),
621
- txidOnly: txidOnly.map(tx => tx.txid)
701
+ withMissingInputs: txsMissingInputs.map((tx) => tx.txid),
702
+ txidOnly: txidOnly.map((tx) => tx.txid)
622
703
  }
623
704
  }
624
705
 
625
706
  /**
626
- * @returns a shallow copy of this beef
627
- */
707
+ * @returns a shallow copy of this beef
708
+ */
628
709
  clone (): Beef {
629
710
  const c = new Beef()
711
+ c.version = this.version
630
712
  c.bumps = Array.from(this.bumps)
631
713
  c.txs = Array.from(this.txs)
632
714
  return c
633
715
  }
634
716
 
635
717
  /**
636
- * Ensure that all the txids in `knownTxids` are txidOnly
637
- * @param knownTxids
638
- */
639
- trimKnownTxids (knownTxids: string[]) {
718
+ * Ensure that all the txids in `knownTxids` are txidOnly
719
+ * @param knownTxids
720
+ */
721
+ trimKnownTxids (knownTxids: string[]): void {
640
722
  for (let i = 0; i < this.txs.length;) {
641
723
  const tx = this.txs[i]
642
724
  if (tx.isTxidOnly && knownTxids.includes(tx.txid)) {
@@ -657,16 +739,21 @@ export class Beef {
657
739
  }
658
740
 
659
741
  /**
660
- * @returns Summary of `Beef` contents as multi-line string.
661
- */
742
+ * @returns Summary of `Beef` contents as multi-line string.
743
+ */
662
744
  toLogString (): string {
663
745
  let log = ''
664
- log += `BEEF with ${this.bumps.length} BUMPS and ${this.txs.length} Transactions, isValid ${this.isValid()}\n`
746
+ log += `BEEF with ${this.bumps.length} BUMPS and ${this.txs.length} Transactions, isValid ${this.isValid().toString()}\n`
665
747
  let i = -1
748
+
666
749
  for (const b of this.bumps) {
667
750
  i++
668
- log += ` BUMP ${i}\n block: ${b.blockHeight}\n txids: [\n${b.path[0].filter(n => !!n.txid).map(n => ` '${n.hash}'`).join(',\n')}\n ]\n`
751
+ log += ` BUMP ${i}\n block: ${b.blockHeight}\n txids: [\n${b.path[0]
752
+ .filter((n) => n.txid === true) // ✅ Explicitly check if txid is `true`
753
+ .map((n) => ` '${n.hash ?? ''}'`)
754
+ .join(',\n')}\n ]\n`
669
755
  }
756
+
670
757
  i = -1
671
758
  for (const t of this.txs) {
672
759
  i++
@@ -677,36 +764,44 @@ export class Beef {
677
764
  if (t.isTxidOnly) {
678
765
  log += ' txidOnly\n'
679
766
  } else {
680
- log += ` rawTx length=${t.rawTx.length}\n`
767
+ log += ` rawTx length=${t.rawTx?.length ?? 0}\n` // ✅ Fix applied here
681
768
  }
682
769
  if (t.inputTxids.length > 0) {
683
- log += ` inputs: [\n${t.inputTxids.map(it => ` '${it}'`).join(',\n')}\n ]\n`
770
+ log += ` inputs: [\n${t.inputTxids
771
+ .map((it) => ` '${it}'`)
772
+ .join(',\n')}\n ]\n`
684
773
  }
685
774
  }
775
+
686
776
  return log
687
777
  }
688
778
 
689
779
  /**
690
- * In some circumstances it may be helpful for the BUMP MerkePaths to include
691
- * leaves that can be computed from row zero.
692
- */
693
- addComputedLeaves () {
694
- const beef = this
695
- const hash = (m: string): string => toHex((
696
- hash256(toArray(m, 'hex').reverse())
697
- ).reverse())
780
+ * In some circumstances it may be helpful for the BUMP MerklePaths to include
781
+ * leaves that can be computed from row zero.
782
+ */
783
+ addComputedLeaves (): void {
784
+ const hash = (m: string): string =>
785
+ toHex(hash256(toArray(m, 'hex').reverse()).reverse())
698
786
 
699
- for (const bump of beef.bumps) {
787
+ for (const bump of this.bumps) { // ✅ Use `this` instead of `beef`
700
788
  for (let row = 1; row < bump.path.length; row++) {
701
789
  for (const leafL of bump.path[row - 1]) {
702
- if (leafL.hash && (leafL.offset & 1) === 0) {
703
- const leafR = bump.path[row - 1].find(l => l.offset === leafL.offset + 1)
790
+ if (typeof leafL.hash === 'string' && (leafL.offset & 1) === 0) {
791
+ const leafR = bump.path[row - 1].find(
792
+ (l) => l.offset === leafL.offset + 1
793
+ )
704
794
  const offsetOnRow = leafL.offset >> 1
705
- if (leafR && leafR.hash && bump.path[row].findIndex(l => l.offset === offsetOnRow) === -1) {
706
- // computable leaf is missing... add it.
795
+
796
+ if (
797
+ leafR !== undefined &&
798
+ typeof leafR.hash === 'string' &&
799
+ bump.path[row].every((l) => l.offset !== offsetOnRow)
800
+ ) {
801
+ // Computable leaf is missing... add it.
707
802
  bump.path[row].push({
708
803
  offset: offsetOnRow,
709
- // string concatenation puts the right leaf on the left of the left leaf hash :-)
804
+ // String concatenation puts the right leaf on the left of the left leaf hash
710
805
  hash: hash(leafR.hash + leafL.hash)
711
806
  })
712
807
  }