@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
@@ -2,6 +2,11 @@ import MerklePath from './MerklePath.js';
2
2
  import BeefTx from './BeefTx.js';
3
3
  import { Reader, Writer, toHex, toArray } from '../primitives/utils.js';
4
4
  import { hash256 } from '../primitives/Hash.js';
5
+ function verifyTruthy(v) {
6
+ if (v == null)
7
+ throw new Error('Expected a valid value, but got undefined.');
8
+ return v;
9
+ }
5
10
  export const BEEF_V1 = 4022206465; // 0100BEEF in LE order
6
11
  export const BEEF_V2 = 4022206466; // 0200BEEF in LE order
7
12
  export const ATOMIC_BEEF = 0x01010101; // 01010101
@@ -73,11 +78,11 @@ export class Beef {
73
78
  this.version = version;
74
79
  }
75
80
  /**
76
- * @param txid of `beefTx` to find
77
- * @returns `BeefTx` in `txs` with `txid`.
78
- */
81
+ * @param txid of `beefTx` to find
82
+ * @returns `BeefTx` in `txs` with `txid`.
83
+ */
79
84
  findTxid(txid) {
80
- return this.txs.find(tx => tx.txid === txid);
85
+ return this.txs.find((tx) => tx.txid === txid);
81
86
  }
82
87
  /**
83
88
  * Replaces `BeefTx` for this txid with txidOnly.
@@ -90,7 +95,7 @@ export class Beef {
90
95
  * @returns undefined if txid is unknown.
91
96
  */
92
97
  makeTxidOnly(txid) {
93
- const i = this.txs.findIndex(tx => tx.txid === txid);
98
+ const i = this.txs.findIndex((tx) => tx.txid === txid);
94
99
  if (i === -1)
95
100
  return undefined;
96
101
  let btx = this.txs[i];
@@ -105,7 +110,8 @@ export class Beef {
105
110
  * @returns `MerklePath` with level zero hash equal to txid or undefined.
106
111
  */
107
112
  findBump(txid) {
108
- return this.bumps.find(b => b.path[0].find(leaf => leaf.hash === txid));
113
+ return this.bumps.find((b) => b.path[0].some((leaf) => leaf.hash === txid) // ✅ Ensure boolean return with `.some()`
114
+ );
109
115
  }
110
116
  /**
111
117
  * Finds a Transaction in this `Beef`
@@ -118,12 +124,12 @@ export class Beef {
118
124
  */
119
125
  findTransactionForSigning(txid) {
120
126
  const beefTx = this.findTxid(txid);
121
- if (!beefTx)
122
- return undefined;
127
+ if ((beefTx == null) || (beefTx.tx == null))
128
+ return undefined; // Ensure beefTx.tx exists before using it
123
129
  for (const i of beefTx.tx.inputs) {
124
- if (!i.sourceTransaction) {
125
- const itx = this.findTxid(i.sourceTXID);
126
- if (itx) {
130
+ if (i.sourceTransaction == null) {
131
+ const itx = this.findTxid(verifyTruthy(i.sourceTXID)); // Ensure sourceTXID is valid
132
+ if (itx != null) {
127
133
  i.sourceTransaction = itx.tx;
128
134
  }
129
135
  }
@@ -140,24 +146,24 @@ export class Beef {
140
146
  */
141
147
  findAtomicTransaction(txid) {
142
148
  const beefTx = this.findTxid(txid);
143
- if (!beefTx)
144
- return undefined;
149
+ if ((beefTx == null) || (beefTx.tx == null))
150
+ return undefined; // Ensure beefTx.tx exists before using it
145
151
  const addInputProof = (beef, tx) => {
146
152
  const mp = beef.findBump(tx.id('hex'));
147
- if (mp) {
153
+ if (mp != null) {
148
154
  tx.merklePath = mp;
149
155
  }
150
156
  else {
151
157
  for (const i of tx.inputs) {
152
- if (!i.sourceTransaction) {
153
- const itx = beef.findTxid(i.sourceTXID);
154
- if (itx) {
158
+ if (i.sourceTransaction == null) {
159
+ const itx = beef.findTxid(verifyTruthy(i.sourceTXID)); // Ensure sourceTXID is valid
160
+ if (itx != null) {
155
161
  i.sourceTransaction = itx.tx;
156
162
  }
157
163
  }
158
- if (i.sourceTransaction) {
164
+ if (i.sourceTransaction != null) {
159
165
  const mp = beef.findBump(i.sourceTransaction.id('hex'));
160
- if (mp) {
166
+ if (mp != null) {
161
167
  i.sourceTransaction.merklePath = mp;
162
168
  }
163
169
  else {
@@ -167,20 +173,21 @@ export class Beef {
167
173
  }
168
174
  }
169
175
  };
170
- addInputProof(this, beefTx.tx);
176
+ addInputProof(this, beefTx.tx); // Safe because we checked that beefTx.tx exists
171
177
  return beefTx.tx;
172
178
  }
173
179
  /**
174
- * Merge a MerklePath that is assumed to be fully valid.
175
- * @param bump
176
- * @returns index of merged bump
177
- */
180
+ * Merge a MerklePath that is assumed to be fully valid.
181
+ * @param bump
182
+ * @returns index of merged bump
183
+ */
178
184
  mergeBump(bump) {
179
185
  let bumpIndex;
180
186
  // 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.
181
187
  for (let i = 0; i < this.bumps.length; i++) {
182
188
  const b = this.bumps[i];
183
- if (b === bump) { // Literally the same
189
+ if (b === bump) {
190
+ // Literally the same
184
191
  return i;
185
192
  }
186
193
  if (b.blockHeight === bump.blockHeight) {
@@ -200,11 +207,11 @@ export class Beef {
200
207
  bumpIndex = this.bumps.length;
201
208
  this.bumps.push(bump);
202
209
  }
203
- // review if any transactions are proven by this bump
210
+ // Review if any transactions are proven by this bump
204
211
  const b = this.bumps[bumpIndex];
205
212
  for (const tx of this.txs) {
206
213
  const txid = tx.txid;
207
- if (!tx.bumpIndex) {
214
+ if (tx.bumpIndex == null) { // ✅ Explicitly check for null or undefined
208
215
  for (const n of b.path[0]) {
209
216
  if (n.hash === txid) {
210
217
  tx.bumpIndex = bumpIndex;
@@ -217,16 +224,16 @@ export class Beef {
217
224
  return bumpIndex;
218
225
  }
219
226
  /**
220
- * Merge a serialized transaction.
221
- *
222
- * Checks that a transaction with the same txid hasn't already been merged.
223
- *
224
- * Replaces existing transaction with same txid.
225
- *
226
- * @param rawTx
227
- * @param bumpIndex Optional. If a number, must be valid index into bumps array.
228
- * @returns txid of rawTx
229
- */
227
+ * Merge a serialized transaction.
228
+ *
229
+ * Checks that a transaction with the same txid hasn't already been merged.
230
+ *
231
+ * Replaces existing transaction with same txid.
232
+ *
233
+ * @param rawTx
234
+ * @param bumpIndex Optional. If a number, must be valid index into bumps array.
235
+ * @returns txid of rawTx
236
+ */
230
237
  mergeRawTx(rawTx, bumpIndex) {
231
238
  const newTx = new BeefTx(rawTx, bumpIndex);
232
239
  this.removeExistingTxid(newTx.txid);
@@ -235,20 +242,20 @@ export class Beef {
235
242
  return newTx;
236
243
  }
237
244
  /**
238
- * Merge a `Transaction` and any referenced `merklePath` and `sourceTransaction`, recursifely.
239
- *
240
- * Replaces existing transaction with same txid.
241
- *
242
- * Attempts to match an existing bump to the new transaction.
243
- *
244
- * @param tx
245
- * @returns txid of tx
246
- */
245
+ * Merge a `Transaction` and any referenced `merklePath` and `sourceTransaction`, recursifely.
246
+ *
247
+ * Replaces existing transaction with same txid.
248
+ *
249
+ * Attempts to match an existing bump to the new transaction.
250
+ *
251
+ * @param tx
252
+ * @returns txid of tx
253
+ */
247
254
  mergeTransaction(tx) {
248
255
  const txid = tx.id('hex');
249
256
  this.removeExistingTxid(txid);
250
257
  let bumpIndex;
251
- if (tx.merklePath) {
258
+ if (tx.merklePath != null) {
252
259
  bumpIndex = this.mergeBump(tx.merklePath);
253
260
  }
254
261
  const newTx = new BeefTx(tx, bumpIndex);
@@ -257,7 +264,7 @@ export class Beef {
257
264
  bumpIndex = newTx.bumpIndex;
258
265
  if (bumpIndex === undefined) {
259
266
  for (const input of tx.inputs) {
260
- if (input.sourceTransaction) {
267
+ if (input.sourceTransaction != null) {
261
268
  this.mergeTransaction(input.sourceTransaction);
262
269
  }
263
270
  }
@@ -265,18 +272,18 @@ export class Beef {
265
272
  return newTx;
266
273
  }
267
274
  /**
268
- * Removes an existing transaction from the BEEF, given its TXID
269
- * @param txid TXID of the transaction to remove
270
- */
275
+ * Removes an existing transaction from the BEEF, given its TXID
276
+ * @param txid TXID of the transaction to remove
277
+ */
271
278
  removeExistingTxid(txid) {
272
- const existingTxIndex = this.txs.findIndex(t => t.txid === txid);
279
+ const existingTxIndex = this.txs.findIndex((t) => t.txid === txid);
273
280
  if (existingTxIndex >= 0) {
274
281
  this.txs.splice(existingTxIndex, 1);
275
282
  }
276
283
  }
277
284
  mergeTxidOnly(txid) {
278
- let tx = this.txs.find(t => t.txid === txid);
279
- if (!tx) {
285
+ let tx = this.txs.find((t) => t.txid === txid);
286
+ if (tx == null) {
280
287
  tx = new BeefTx(txid);
281
288
  this.txs.push(tx);
282
289
  this.tryToValidateBumpIndex(tx);
@@ -285,15 +292,18 @@ export class Beef {
285
292
  }
286
293
  mergeBeefTx(btx) {
287
294
  let beefTx = this.findTxid(btx.txid);
288
- if (btx.isTxidOnly && !beefTx) {
295
+ if (btx.isTxidOnly && (beefTx == null)) {
289
296
  beefTx = this.mergeTxidOnly(btx.txid);
290
297
  }
291
- else if (btx._tx && (!beefTx || beefTx.isTxidOnly)) {
298
+ else if ((btx._tx != null) && ((beefTx == null) || beefTx.isTxidOnly)) {
292
299
  beefTx = this.mergeTransaction(btx._tx);
293
300
  }
294
- else if (btx._rawTx && (!beefTx || beefTx.isTxidOnly)) {
301
+ else if ((btx._rawTx != null) && ((beefTx == null) || beefTx.isTxidOnly)) {
295
302
  beefTx = this.mergeRawTx(btx._rawTx);
296
303
  }
304
+ if (beefTx == null) {
305
+ throw new Error(`Failed to merge BeefTx for txid: ${btx.txid}`);
306
+ }
297
307
  return beefTx;
298
308
  }
299
309
  mergeBeef(beef) {
@@ -306,35 +316,35 @@ export class Beef {
306
316
  }
307
317
  }
308
318
  /**
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
- */
319
+ * Sorts `txs` and checks structural validity of beef.
320
+ *
321
+ * Does NOT verify merkle roots.
322
+ *
323
+ * Validity requirements:
324
+ * 1. No 'known' txids, unless `allowTxidOnly` is true.
325
+ * 2. All transactions have bumps or their inputs chain back to bumps (or are known).
326
+ * 3. Order of transactions satisfies dependencies before dependents.
327
+ * 4. No transactions with duplicate txids.
328
+ *
329
+ * @param allowTxidOnly optional. If true, transaction txid only is assumed valid
330
+ */
321
331
  isValid(allowTxidOnly) {
322
332
  return this.verifyValid(allowTxidOnly).valid;
323
333
  }
324
334
  /**
325
- * Sorts `txs` and confirms validity of transaction data contained in beef
326
- * by validating structure of this beef and confirming computed merkle roots
327
- * using `chainTracker`.
328
- *
329
- * Validity requirements:
330
- * 1. No 'known' txids, unless `allowTxidOnly` is true.
331
- * 2. All transactions have bumps or their inputs chain back to bumps (or are known).
332
- * 3. Order of transactions satisfies dependencies before dependents.
333
- * 4. No transactions with duplicate txids.
334
- *
335
- * @param chainTracker Used to verify computed merkle path roots for all bump txids.
336
- * @param allowTxidOnly optional. If true, transaction txid is assumed valid
337
- */
335
+ * Sorts `txs` and confirms validity of transaction data contained in beef
336
+ * by validating structure of this beef and confirming computed merkle roots
337
+ * using `chainTracker`.
338
+ *
339
+ * Validity requirements:
340
+ * 1. No 'known' txids, unless `allowTxidOnly` is true.
341
+ * 2. All transactions have bumps or their inputs chain back to bumps (or are known).
342
+ * 3. Order of transactions satisfies dependencies before dependents.
343
+ * 4. No transactions with duplicate txids.
344
+ *
345
+ * @param chainTracker Used to verify computed merkle path roots for all bump txids.
346
+ * @param allowTxidOnly optional. If true, transaction txid is assumed valid
347
+ */
338
348
  async verify(chainTracker, allowTxidOnly) {
339
349
  const r = this.verifyValid(allowTxidOnly);
340
350
  if (!r.valid)
@@ -348,20 +358,23 @@ export class Beef {
348
358
  return true;
349
359
  }
350
360
  verifyValid(allowTxidOnly) {
351
- const r = { valid: false, roots: {} };
361
+ const r = {
362
+ valid: false,
363
+ roots: {}
364
+ };
352
365
  this.sortTxs();
353
366
  // valid txids: only txids if allowed, bump txids, then txids with input's in txids
354
367
  const txids = {};
355
368
  for (const tx of this.txs) {
356
369
  if (tx.isTxidOnly) {
357
- if (!allowTxidOnly)
358
- return r;
370
+ if (allowTxidOnly !== true)
371
+ return r; // ✅ Explicit check for `true`
359
372
  txids[tx.txid] = true;
360
373
  }
361
374
  }
362
375
  const confirmComputedRoot = (b, txid) => {
363
376
  const root = b.computeRoot(txid);
364
- if (!r.roots[b.blockHeight]) {
377
+ if (r.roots[b.blockHeight] === undefined || r.roots[b.blockHeight] === '') {
365
378
  // accept the root as valid for this block and reuse for subsequent txids
366
379
  r.roots[b.blockHeight] = root;
367
380
  }
@@ -372,9 +385,9 @@ export class Beef {
372
385
  };
373
386
  for (const b of this.bumps) {
374
387
  for (const n of b.path[0]) {
375
- if (n.txid && n.hash) {
388
+ if (n.txid === true && typeof n.hash === 'string' && n.hash.length > 0) {
376
389
  txids[n.hash] = true;
377
- // all txid hashes in all bumps must have agree on computed merkle path roots
390
+ // All txid hashes in all bumps must agree on computed merkle path roots
378
391
  if (!confirmComputedRoot(b, n.hash)) {
379
392
  return r;
380
393
  }
@@ -382,9 +395,8 @@ export class Beef {
382
395
  }
383
396
  }
384
397
  for (const t of this.txs) {
385
- for (const i of t.inputTxids)
386
398
  // all input txids must be included before they are referenced
387
- {
399
+ for (const i of t.inputTxids) {
388
400
  if (!txids[i])
389
401
  return r;
390
402
  }
@@ -409,9 +421,9 @@ export class Beef {
409
421
  }
410
422
  }
411
423
  /**
412
- * Returns a binary array representing the serialized BEEF
413
- * @returns A binary array representing the BEEF
414
- */
424
+ * Returns a binary array representing the serialized BEEF
425
+ * @returns A binary array representing the BEEF
426
+ */
415
427
  toBinary() {
416
428
  const writer = new Writer();
417
429
  this.toWriter(writer);
@@ -430,13 +442,13 @@ export class Beef {
430
442
  toBinaryAtomic(txid) {
431
443
  this.sortTxs();
432
444
  const tx = this.findTxid(txid);
433
- if (!tx) {
445
+ if (tx == null) {
434
446
  throw new Error(`${txid} does not exist in this Beef`);
435
447
  }
436
- let beef = this;
437
- if (this.txs[this.txs.length - 1] !== tx) {
438
- beef = this.clone();
439
- const i = this.txs.findIndex(t => t.txid === txid);
448
+ // If the transaction is not the last one, clone and modify
449
+ const beef = (this.txs[this.txs.length - 1] === tx) ? this : this.clone();
450
+ if (beef !== this) {
451
+ const i = this.txs.findIndex((t) => t.txid === txid);
440
452
  beef.txs.splice(i + 1);
441
453
  }
442
454
  const writer = new Writer();
@@ -446,9 +458,9 @@ export class Beef {
446
458
  return writer.toArray();
447
459
  }
448
460
  /**
449
- * Returns a hex string representing the serialized BEEF
450
- * @returns A hex string representing the BEEF
451
- */
461
+ * Returns a hex string representing the serialized BEEF
462
+ * @returns A hex string representing the BEEF
463
+ */
452
464
  toHex() {
453
465
  return toHex(this.toBinary());
454
466
  }
@@ -478,39 +490,39 @@ export class Beef {
478
490
  return beef;
479
491
  }
480
492
  /**
481
- * Constructs an instance of the Beef class based on the provided binary array
482
- * @param bin The binary array from which to construct BEEF
483
- * @returns An instance of the Beef class constructed from the binary data
484
- */
493
+ * Constructs an instance of the Beef class based on the provided binary array
494
+ * @param bin The binary array from which to construct BEEF
495
+ * @returns An instance of the Beef class constructed from the binary data
496
+ */
485
497
  static fromBinary(bin) {
486
498
  const br = new Reader(bin);
487
499
  return Beef.fromReader(br);
488
500
  }
489
501
  /**
490
- * Constructs an instance of the Beef class based on the provided string
491
- * @param s The string value from which to construct BEEF
492
- * @param enc The encoding of the string value from which BEEF should be constructed
493
- * @returns An instance of the Beef class constructed from the string
494
- */
502
+ * Constructs an instance of the Beef class based on the provided string
503
+ * @param s The string value from which to construct BEEF
504
+ * @param enc The encoding of the string value from which BEEF should be constructed
505
+ * @returns An instance of the Beef class constructed from the string
506
+ */
495
507
  static fromString(s, enc = 'hex') {
496
508
  const bin = toArray(s, enc);
497
509
  const br = new Reader(bin);
498
510
  return Beef.fromReader(br);
499
511
  }
500
512
  /**
501
- * Try to validate newTx.bumpIndex by looking for an existing bump
502
- * that proves newTx.txid
503
- *
504
- * @param newTx A new `BeefTx` that has been added to this.txs
505
- * @returns true if a bump was found, false otherwise
506
- */
513
+ * Try to validate newTx.bumpIndex by looking for an existing bump
514
+ * that proves newTx.txid
515
+ *
516
+ * @param newTx A new `BeefTx` that has been added to this.txs
517
+ * @returns true if a bump was found, false otherwise
518
+ */
507
519
  tryToValidateBumpIndex(newTx) {
508
520
  if (newTx.bumpIndex !== undefined) {
509
521
  return true;
510
522
  }
511
523
  const txid = newTx.txid;
512
524
  for (let i = 0; i < this.bumps.length; i++) {
513
- const j = this.bumps[i].path[0].findIndex(b => b.hash === txid);
525
+ const j = this.bumps[i].path[0].findIndex((b) => b.hash === txid);
514
526
  if (j >= 0) {
515
527
  newTx.bumpIndex = i;
516
528
  this.bumps[i].path[0][j].txid = true;
@@ -520,15 +532,15 @@ export class Beef {
520
532
  return false;
521
533
  }
522
534
  /**
523
- * Sort the `txs` by input txid dependency order:
524
- * - Oldest Tx Anchored by Path or txid only
525
- * - Newer Txs depending on Older parents
526
- * - Newest Tx
527
- *
528
- * with proof (MerklePath) last, longest chain of dependencies first
529
- *
530
- * @returns `{ missingInputs, notValid, valid, withMissingInputs }`
531
- */
535
+ * Sort the `txs` by input txid dependency order:
536
+ * - Oldest Tx Anchored by Path or txid only
537
+ * - Newer Txs depending on Older parents
538
+ * - Newest Tx
539
+ *
540
+ * with proof (MerklePath) last, longest chain of dependencies first
541
+ *
542
+ * @returns `{ missingInputs, notValid, valid, withMissingInputs }`
543
+ */
532
544
  sortTxs() {
533
545
  // Hashtable of valid txids (with proof or all inputs chain to proof)
534
546
  const validTxids = {};
@@ -568,7 +580,7 @@ export class Beef {
568
580
  // link their inputs that exist in this beef,
569
581
  // make a note of missing inputs.
570
582
  for (const inputTxid of tx.inputTxids) {
571
- if (!txidToTx[inputTxid]) {
583
+ if (txidToTx[inputTxid] === undefined) { // Explicitly check for undefined
572
584
  missingInputs[inputTxid] = true;
573
585
  hasMissingInput = true;
574
586
  }
@@ -587,7 +599,7 @@ export class Beef {
587
599
  // all tx are isValid false, hasProof false.
588
600
  // if isTxidOnly then has inputTxids
589
601
  for (const tx of oldQueue) {
590
- if (tx.inputTxids.every(txid => validTxids[txid])) {
602
+ if (tx.inputTxids.every((txid) => validTxids[txid])) {
591
603
  validTxids[tx.txid] = true;
592
604
  result.push(tx);
593
605
  }
@@ -602,28 +614,32 @@ export class Beef {
602
614
  // transactions that don't have proofs and don't chain to proofs
603
615
  const txsNotValid = queue;
604
616
  // New order of txs is unsortable (missing inputs or depends on missing inputs), txidOnly, sorted (so newest sorted is last)
605
- this.txs = txsMissingInputs.concat(txsNotValid).concat(txidOnly).concat(result);
617
+ this.txs = txsMissingInputs
618
+ .concat(txsNotValid)
619
+ .concat(txidOnly)
620
+ .concat(result);
606
621
  return {
607
622
  missingInputs: Object.keys(missingInputs),
608
- notValid: txsNotValid.map(tx => tx.txid),
623
+ notValid: txsNotValid.map((tx) => tx.txid),
609
624
  valid: Object.keys(validTxids),
610
- withMissingInputs: txsMissingInputs.map(tx => tx.txid),
611
- txidOnly: txidOnly.map(tx => tx.txid)
625
+ withMissingInputs: txsMissingInputs.map((tx) => tx.txid),
626
+ txidOnly: txidOnly.map((tx) => tx.txid)
612
627
  };
613
628
  }
614
629
  /**
615
- * @returns a shallow copy of this beef
616
- */
630
+ * @returns a shallow copy of this beef
631
+ */
617
632
  clone() {
618
633
  const c = new Beef();
634
+ c.version = this.version;
619
635
  c.bumps = Array.from(this.bumps);
620
636
  c.txs = Array.from(this.txs);
621
637
  return c;
622
638
  }
623
639
  /**
624
- * Ensure that all the txids in `knownTxids` are txidOnly
625
- * @param knownTxids
626
- */
640
+ * Ensure that all the txids in `knownTxids` are txidOnly
641
+ * @param knownTxids
642
+ */
627
643
  trimKnownTxids(knownTxids) {
628
644
  for (let i = 0; i < this.txs.length;) {
629
645
  const tx = this.txs[i];
@@ -644,15 +660,18 @@ export class Beef {
644
660
  return r.valid;
645
661
  }
646
662
  /**
647
- * @returns Summary of `Beef` contents as multi-line string.
648
- */
663
+ * @returns Summary of `Beef` contents as multi-line string.
664
+ */
649
665
  toLogString() {
650
666
  let log = '';
651
- log += `BEEF with ${this.bumps.length} BUMPS and ${this.txs.length} Transactions, isValid ${this.isValid()}\n`;
667
+ log += `BEEF with ${this.bumps.length} BUMPS and ${this.txs.length} Transactions, isValid ${this.isValid().toString()}\n`;
652
668
  let i = -1;
653
669
  for (const b of this.bumps) {
654
670
  i++;
655
- 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`;
671
+ log += ` BUMP ${i}\n block: ${b.blockHeight}\n txids: [\n${b.path[0]
672
+ .filter((n) => n.txid === true) // ✅ Explicitly check if txid is `true`
673
+ .map((n) => ` '${n.hash ?? ''}'`)
674
+ .join(',\n')}\n ]\n`;
656
675
  }
657
676
  i = -1;
658
677
  for (const t of this.txs) {
@@ -665,32 +684,35 @@ export class Beef {
665
684
  log += ' txidOnly\n';
666
685
  }
667
686
  else {
668
- log += ` rawTx length=${t.rawTx.length}\n`;
687
+ log += ` rawTx length=${t.rawTx?.length ?? 0}\n`; // ✅ Fix applied here
669
688
  }
670
689
  if (t.inputTxids.length > 0) {
671
- log += ` inputs: [\n${t.inputTxids.map(it => ` '${it}'`).join(',\n')}\n ]\n`;
690
+ log += ` inputs: [\n${t.inputTxids
691
+ .map((it) => ` '${it}'`)
692
+ .join(',\n')}\n ]\n`;
672
693
  }
673
694
  }
674
695
  return log;
675
696
  }
676
697
  /**
677
- * In some circumstances it may be helpful for the BUMP MerkePaths to include
678
- * leaves that can be computed from row zero.
679
- */
698
+ * In some circumstances it may be helpful for the BUMP MerklePaths to include
699
+ * leaves that can be computed from row zero.
700
+ */
680
701
  addComputedLeaves() {
681
- const beef = this;
682
- const hash = (m) => toHex((hash256(toArray(m, 'hex').reverse())).reverse());
683
- for (const bump of beef.bumps) {
702
+ const hash = (m) => toHex(hash256(toArray(m, 'hex').reverse()).reverse());
703
+ for (const bump of this.bumps) { // ✅ Use `this` instead of `beef`
684
704
  for (let row = 1; row < bump.path.length; row++) {
685
705
  for (const leafL of bump.path[row - 1]) {
686
- if (leafL.hash && (leafL.offset & 1) === 0) {
687
- const leafR = bump.path[row - 1].find(l => l.offset === leafL.offset + 1);
706
+ if (typeof leafL.hash === 'string' && (leafL.offset & 1) === 0) {
707
+ const leafR = bump.path[row - 1].find((l) => l.offset === leafL.offset + 1);
688
708
  const offsetOnRow = leafL.offset >> 1;
689
- if (leafR && leafR.hash && bump.path[row].findIndex(l => l.offset === offsetOnRow) === -1) {
690
- // computable leaf is missing... add it.
709
+ if (leafR !== undefined &&
710
+ typeof leafR.hash === 'string' &&
711
+ bump.path[row].every((l) => l.offset !== offsetOnRow)) {
712
+ // Computable leaf is missing... add it.
691
713
  bump.path[row].push({
692
714
  offset: offsetOnRow,
693
- // string concatenation puts the right leaf on the left of the left leaf hash :-)
715
+ // String concatenation puts the right leaf on the left of the left leaf hash
694
716
  hash: hash(leafR.hash + leafL.hash)
695
717
  });
696
718
  }