@bsv/sdk 2.1.0 → 2.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/README.md +7 -7
  2. package/dist/cjs/package.json +1 -1
  3. package/dist/cjs/src/auth/Peer.js +8 -13
  4. package/dist/cjs/src/auth/Peer.js.map +1 -1
  5. package/dist/cjs/src/auth/SessionManager.js +4 -7
  6. package/dist/cjs/src/auth/SessionManager.js.map +1 -1
  7. package/dist/cjs/src/auth/certificates/MasterCertificate.js +1 -1
  8. package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
  9. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +1 -1
  10. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  11. package/dist/cjs/src/auth/clients/AuthFetch.js +32 -32
  12. package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
  13. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +4 -4
  14. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  15. package/dist/cjs/src/compat/ECIES.js +29 -34
  16. package/dist/cjs/src/compat/ECIES.js.map +1 -1
  17. package/dist/cjs/src/compat/HD.js +9 -4
  18. package/dist/cjs/src/compat/HD.js.map +1 -1
  19. package/dist/cjs/src/compat/Mnemonic.js +12 -12
  20. package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
  21. package/dist/cjs/src/identity/ContactsManager.js +172 -232
  22. package/dist/cjs/src/identity/ContactsManager.js.map +1 -1
  23. package/dist/cjs/src/identity/IdentityClient.js +122 -55
  24. package/dist/cjs/src/identity/IdentityClient.js.map +1 -1
  25. package/dist/cjs/src/kvstore/GlobalKVStore.js +30 -31
  26. package/dist/cjs/src/kvstore/GlobalKVStore.js.map +1 -1
  27. package/dist/cjs/src/kvstore/LocalKVStore.js +9 -9
  28. package/dist/cjs/src/kvstore/LocalKVStore.js.map +1 -1
  29. package/dist/cjs/src/kvstore/kvStoreInterpreter.js +2 -2
  30. package/dist/cjs/src/kvstore/kvStoreInterpreter.js.map +1 -1
  31. package/dist/cjs/src/messages/SignedMessage.js +1 -1
  32. package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
  33. package/dist/cjs/src/overlay-tools/Historian.js +1 -1
  34. package/dist/cjs/src/overlay-tools/Historian.js.map +1 -1
  35. package/dist/cjs/src/overlay-tools/LookupResolver.js +139 -46
  36. package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
  37. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +75 -146
  38. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  39. package/dist/cjs/src/primitives/AESGCM.js +2 -2
  40. package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
  41. package/dist/cjs/src/primitives/BigNumber.js +164 -148
  42. package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
  43. package/dist/cjs/src/primitives/Curve.js +17 -15
  44. package/dist/cjs/src/primitives/Curve.js.map +1 -1
  45. package/dist/cjs/src/primitives/ECDSA.js +12 -7
  46. package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
  47. package/dist/cjs/src/primitives/Hash.js +140 -56
  48. package/dist/cjs/src/primitives/Hash.js.map +1 -1
  49. package/dist/cjs/src/primitives/JacobianPoint.js +8 -8
  50. package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
  51. package/dist/cjs/src/primitives/K256.js +3 -3
  52. package/dist/cjs/src/primitives/K256.js.map +1 -1
  53. package/dist/cjs/src/primitives/Point.js +36 -40
  54. package/dist/cjs/src/primitives/Point.js.map +1 -1
  55. package/dist/cjs/src/primitives/PrivateKey.js +4 -4
  56. package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
  57. package/dist/cjs/src/primitives/PublicKey.js +4 -4
  58. package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
  59. package/dist/cjs/src/primitives/Random.js +10 -14
  60. package/dist/cjs/src/primitives/Random.js.map +1 -1
  61. package/dist/cjs/src/primitives/ReaderUint8Array.js +6 -6
  62. package/dist/cjs/src/primitives/ReaderUint8Array.js.map +1 -1
  63. package/dist/cjs/src/primitives/Schnorr.js +2 -2
  64. package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
  65. package/dist/cjs/src/primitives/Secp256r1.js +2 -1
  66. package/dist/cjs/src/primitives/Secp256r1.js.map +1 -1
  67. package/dist/cjs/src/primitives/Signature.js +8 -8
  68. package/dist/cjs/src/primitives/Signature.js.map +1 -1
  69. package/dist/cjs/src/primitives/TransactionSignature.js +20 -21
  70. package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
  71. package/dist/cjs/src/primitives/utils.js +39 -46
  72. package/dist/cjs/src/primitives/utils.js.map +1 -1
  73. package/dist/cjs/src/registry/RegistryClient.js +31 -23
  74. package/dist/cjs/src/registry/RegistryClient.js.map +1 -1
  75. package/dist/cjs/src/remittance/RemittanceManager.js +19 -18
  76. package/dist/cjs/src/remittance/RemittanceManager.js.map +1 -1
  77. package/dist/cjs/src/remittance/modules/BasicBRC29.js.map +1 -1
  78. package/dist/cjs/src/script/Script.js +93 -170
  79. package/dist/cjs/src/script/Script.js.map +1 -1
  80. package/dist/cjs/src/script/ScriptEvaluationError.js +2 -2
  81. package/dist/cjs/src/script/ScriptEvaluationError.js.map +1 -1
  82. package/dist/cjs/src/script/Spend.js +14 -12
  83. package/dist/cjs/src/script/Spend.js.map +1 -1
  84. package/dist/cjs/src/script/templates/PushDrop.js +22 -18
  85. package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
  86. package/dist/cjs/src/script/templates/RPuzzle.js +2 -4
  87. package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
  88. package/dist/cjs/src/storage/StorageDownloader.js +42 -9
  89. package/dist/cjs/src/storage/StorageDownloader.js.map +1 -1
  90. package/dist/cjs/src/totp/totp.js +1 -1
  91. package/dist/cjs/src/totp/totp.js.map +1 -1
  92. package/dist/cjs/src/transaction/Beef.js +239 -192
  93. package/dist/cjs/src/transaction/Beef.js.map +1 -1
  94. package/dist/cjs/src/transaction/BeefConstants.js +19 -0
  95. package/dist/cjs/src/transaction/BeefConstants.js.map +1 -0
  96. package/dist/cjs/src/transaction/BeefTx.js +12 -12
  97. package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
  98. package/dist/cjs/src/transaction/MerklePath.js +4 -4
  99. package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
  100. package/dist/cjs/src/transaction/Transaction.js +49 -52
  101. package/dist/cjs/src/transaction/Transaction.js.map +1 -1
  102. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js +1 -1
  103. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  104. package/dist/cjs/src/transaction/http/BinaryFetchClient.js +9 -9
  105. package/dist/cjs/src/transaction/http/BinaryFetchClient.js.map +1 -1
  106. package/dist/cjs/src/transaction/http/DefaultHttpClient.js +9 -9
  107. package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
  108. package/dist/cjs/src/wallet/CachedKeyDeriver.js +1 -1
  109. package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
  110. package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
  111. package/dist/cjs/src/wallet/WalletError.js.map +1 -1
  112. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +5 -4
  113. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  114. package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js +9 -9
  115. package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
  116. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +92 -92
  117. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  118. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +387 -711
  119. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  120. package/dist/cjs/src/wallet/substrates/XDM.js +4 -4
  121. package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
  122. package/dist/cjs/src/wallet/substrates/window.CWI.js +2 -2
  123. package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
  124. package/dist/cjs/src/wallet/validationHelpers.js +9 -9
  125. package/dist/cjs/src/wallet/validationHelpers.js.map +1 -1
  126. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  127. package/dist/esm/src/auth/Peer.js +25 -13
  128. package/dist/esm/src/auth/Peer.js.map +1 -1
  129. package/dist/esm/src/auth/SessionManager.js +4 -7
  130. package/dist/esm/src/auth/SessionManager.js.map +1 -1
  131. package/dist/esm/src/auth/certificates/MasterCertificate.js +1 -1
  132. package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
  133. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +1 -1
  134. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  135. package/dist/esm/src/auth/clients/AuthFetch.js +32 -32
  136. package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
  137. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +4 -4
  138. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  139. package/dist/esm/src/compat/ECIES.js +29 -34
  140. package/dist/esm/src/compat/ECIES.js.map +1 -1
  141. package/dist/esm/src/compat/HD.js +9 -4
  142. package/dist/esm/src/compat/HD.js.map +1 -1
  143. package/dist/esm/src/compat/Mnemonic.js +12 -12
  144. package/dist/esm/src/compat/Mnemonic.js.map +1 -1
  145. package/dist/esm/src/identity/ContactsManager.js +172 -232
  146. package/dist/esm/src/identity/ContactsManager.js.map +1 -1
  147. package/dist/esm/src/identity/IdentityClient.js +122 -55
  148. package/dist/esm/src/identity/IdentityClient.js.map +1 -1
  149. package/dist/esm/src/kvstore/GlobalKVStore.js +30 -31
  150. package/dist/esm/src/kvstore/GlobalKVStore.js.map +1 -1
  151. package/dist/esm/src/kvstore/LocalKVStore.js +9 -9
  152. package/dist/esm/src/kvstore/LocalKVStore.js.map +1 -1
  153. package/dist/esm/src/kvstore/kvStoreInterpreter.js +2 -2
  154. package/dist/esm/src/kvstore/kvStoreInterpreter.js.map +1 -1
  155. package/dist/esm/src/messages/SignedMessage.js +1 -1
  156. package/dist/esm/src/messages/SignedMessage.js.map +1 -1
  157. package/dist/esm/src/overlay-tools/Historian.js +1 -1
  158. package/dist/esm/src/overlay-tools/Historian.js.map +1 -1
  159. package/dist/esm/src/overlay-tools/LookupResolver.js +139 -46
  160. package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
  161. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +74 -146
  162. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  163. package/dist/esm/src/primitives/AESGCM.js +2 -2
  164. package/dist/esm/src/primitives/AESGCM.js.map +1 -1
  165. package/dist/esm/src/primitives/BigNumber.js +167 -154
  166. package/dist/esm/src/primitives/BigNumber.js.map +1 -1
  167. package/dist/esm/src/primitives/Curve.js +17 -15
  168. package/dist/esm/src/primitives/Curve.js.map +1 -1
  169. package/dist/esm/src/primitives/ECDSA.js +12 -7
  170. package/dist/esm/src/primitives/ECDSA.js.map +1 -1
  171. package/dist/esm/src/primitives/Hash.js +140 -56
  172. package/dist/esm/src/primitives/Hash.js.map +1 -1
  173. package/dist/esm/src/primitives/JacobianPoint.js +8 -8
  174. package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
  175. package/dist/esm/src/primitives/K256.js +3 -3
  176. package/dist/esm/src/primitives/K256.js.map +1 -1
  177. package/dist/esm/src/primitives/Point.js +36 -40
  178. package/dist/esm/src/primitives/Point.js.map +1 -1
  179. package/dist/esm/src/primitives/PrivateKey.js +4 -4
  180. package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
  181. package/dist/esm/src/primitives/PublicKey.js +4 -4
  182. package/dist/esm/src/primitives/PublicKey.js.map +1 -1
  183. package/dist/esm/src/primitives/Random.js +10 -14
  184. package/dist/esm/src/primitives/Random.js.map +1 -1
  185. package/dist/esm/src/primitives/ReaderUint8Array.js +6 -6
  186. package/dist/esm/src/primitives/ReaderUint8Array.js.map +1 -1
  187. package/dist/esm/src/primitives/Schnorr.js +1 -1
  188. package/dist/esm/src/primitives/Schnorr.js.map +1 -1
  189. package/dist/esm/src/primitives/Secp256r1.js +2 -1
  190. package/dist/esm/src/primitives/Secp256r1.js.map +1 -1
  191. package/dist/esm/src/primitives/Signature.js +8 -8
  192. package/dist/esm/src/primitives/Signature.js.map +1 -1
  193. package/dist/esm/src/primitives/TransactionSignature.js +20 -21
  194. package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
  195. package/dist/esm/src/primitives/utils.js +39 -48
  196. package/dist/esm/src/primitives/utils.js.map +1 -1
  197. package/dist/esm/src/registry/RegistryClient.js +31 -23
  198. package/dist/esm/src/registry/RegistryClient.js.map +1 -1
  199. package/dist/esm/src/remittance/RemittanceManager.js +19 -18
  200. package/dist/esm/src/remittance/RemittanceManager.js.map +1 -1
  201. package/dist/esm/src/remittance/modules/BasicBRC29.js.map +1 -1
  202. package/dist/esm/src/script/Script.js +93 -170
  203. package/dist/esm/src/script/Script.js.map +1 -1
  204. package/dist/esm/src/script/ScriptEvaluationError.js +2 -2
  205. package/dist/esm/src/script/ScriptEvaluationError.js.map +1 -1
  206. package/dist/esm/src/script/Spend.js +14 -12
  207. package/dist/esm/src/script/Spend.js.map +1 -1
  208. package/dist/esm/src/script/templates/PushDrop.js +4 -3
  209. package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
  210. package/dist/esm/src/script/templates/RPuzzle.js +2 -4
  211. package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
  212. package/dist/esm/src/storage/StorageDownloader.js +1 -1
  213. package/dist/esm/src/storage/StorageDownloader.js.map +1 -1
  214. package/dist/esm/src/totp/totp.js +1 -1
  215. package/dist/esm/src/totp/totp.js.map +1 -1
  216. package/dist/esm/src/transaction/Beef.js +229 -186
  217. package/dist/esm/src/transaction/Beef.js.map +1 -1
  218. package/dist/esm/src/transaction/BeefConstants.js +16 -0
  219. package/dist/esm/src/transaction/BeefConstants.js.map +1 -0
  220. package/dist/esm/src/transaction/BeefTx.js +3 -3
  221. package/dist/esm/src/transaction/BeefTx.js.map +1 -1
  222. package/dist/esm/src/transaction/MerklePath.js +4 -4
  223. package/dist/esm/src/transaction/MerklePath.js.map +1 -1
  224. package/dist/esm/src/transaction/Transaction.js +49 -52
  225. package/dist/esm/src/transaction/Transaction.js.map +1 -1
  226. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js +1 -1
  227. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  228. package/dist/esm/src/transaction/http/BinaryFetchClient.js +9 -9
  229. package/dist/esm/src/transaction/http/BinaryFetchClient.js.map +1 -1
  230. package/dist/esm/src/transaction/http/DefaultHttpClient.js +9 -9
  231. package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
  232. package/dist/esm/src/wallet/CachedKeyDeriver.js +1 -1
  233. package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
  234. package/dist/esm/src/wallet/WalletClient.js.map +1 -1
  235. package/dist/esm/src/wallet/WalletError.js.map +1 -1
  236. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +5 -4
  237. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  238. package/dist/esm/src/wallet/substrates/ReactNativeWebView.js +9 -9
  239. package/dist/esm/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
  240. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +92 -92
  241. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  242. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +387 -711
  243. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  244. package/dist/esm/src/wallet/substrates/XDM.js +4 -4
  245. package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
  246. package/dist/esm/src/wallet/substrates/window.CWI.js +2 -2
  247. package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
  248. package/dist/esm/src/wallet/validationHelpers.js +9 -9
  249. package/dist/esm/src/wallet/validationHelpers.js.map +1 -1
  250. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  251. package/dist/types/src/auth/Peer.d.ts +13 -0
  252. package/dist/types/src/auth/Peer.d.ts.map +1 -1
  253. package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
  254. package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
  255. package/dist/types/src/compat/ECIES.d.ts.map +1 -1
  256. package/dist/types/src/compat/HD.d.ts.map +1 -1
  257. package/dist/types/src/identity/ContactsManager.d.ts +18 -0
  258. package/dist/types/src/identity/ContactsManager.d.ts.map +1 -1
  259. package/dist/types/src/identity/IdentityClient.d.ts +47 -8
  260. package/dist/types/src/identity/IdentityClient.d.ts.map +1 -1
  261. package/dist/types/src/kvstore/GlobalKVStore.d.ts.map +1 -1
  262. package/dist/types/src/overlay-tools/LookupResolver.d.ts +59 -1
  263. package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
  264. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +18 -3
  265. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
  266. package/dist/types/src/primitives/BigNumber.d.ts +13 -3
  267. package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
  268. package/dist/types/src/primitives/Curve.d.ts.map +1 -1
  269. package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
  270. package/dist/types/src/primitives/Hash.d.ts +3 -3
  271. package/dist/types/src/primitives/Hash.d.ts.map +1 -1
  272. package/dist/types/src/primitives/JacobianPoint.d.ts +3 -1
  273. package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
  274. package/dist/types/src/primitives/Point.d.ts.map +1 -1
  275. package/dist/types/src/primitives/Random.d.ts +2 -2
  276. package/dist/types/src/primitives/Random.d.ts.map +1 -1
  277. package/dist/types/src/primitives/ReaderUint8Array.d.ts.map +1 -1
  278. package/dist/types/src/primitives/Schnorr.d.ts +2 -1
  279. package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
  280. package/dist/types/src/primitives/Secp256r1.d.ts.map +1 -1
  281. package/dist/types/src/primitives/utils.d.ts +2 -4
  282. package/dist/types/src/primitives/utils.d.ts.map +1 -1
  283. package/dist/types/src/registry/RegistryClient.d.ts.map +1 -1
  284. package/dist/types/src/remittance/RemittanceManager.d.ts.map +1 -1
  285. package/dist/types/src/remittance/modules/BasicBRC29.d.ts.map +1 -1
  286. package/dist/types/src/script/Script.d.ts +15 -8
  287. package/dist/types/src/script/Script.d.ts.map +1 -1
  288. package/dist/types/src/script/Spend.d.ts.map +1 -1
  289. package/dist/types/src/script/templates/PushDrop.d.ts +3 -1
  290. package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
  291. package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -1
  292. package/dist/types/src/transaction/Beef.d.ts +46 -8
  293. package/dist/types/src/transaction/Beef.d.ts.map +1 -1
  294. package/dist/types/src/transaction/BeefConstants.d.ts +15 -0
  295. package/dist/types/src/transaction/BeefConstants.d.ts.map +1 -0
  296. package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
  297. package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
  298. package/dist/types/src/wallet/KeyDeriver.d.ts +1 -1
  299. package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
  300. package/dist/types/src/wallet/Wallet.interfaces.d.ts +2 -2
  301. package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
  302. package/dist/types/src/wallet/WalletClient.d.ts +7 -7
  303. package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
  304. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +7 -7
  305. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
  306. package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts +36 -7
  307. package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
  308. package/dist/types/src/wallet/substrates/window.CWI.d.ts +8 -8
  309. package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -1
  310. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  311. package/dist/umd/bundle.js +3 -3
  312. package/package.json +1 -1
  313. package/src/auth/Peer.ts +26 -13
  314. package/src/auth/SessionManager.ts +4 -7
  315. package/src/auth/certificates/MasterCertificate.ts +1 -1
  316. package/src/auth/certificates/__tests/CompletedProtoWallet.ts +1 -1
  317. package/src/auth/clients/AuthFetch.ts +41 -41
  318. package/src/auth/transports/SimplifiedFetchTransport.ts +4 -4
  319. package/src/compat/ECIES.ts +29 -34
  320. package/src/compat/HD.ts +10 -5
  321. package/src/compat/Mnemonic.ts +11 -11
  322. package/src/compat/__tests/HD.test.ts +19 -0
  323. package/src/identity/ContactsManager.ts +194 -257
  324. package/src/identity/IdentityClient.ts +155 -66
  325. package/src/identity/__tests/IdentityClient.test.ts +25 -1
  326. package/src/kvstore/GlobalKVStore.ts +31 -32
  327. package/src/kvstore/LocalKVStore.ts +8 -8
  328. package/src/kvstore/kvStoreInterpreter.ts +2 -2
  329. package/src/messages/SignedMessage.ts +1 -1
  330. package/src/overlay-tools/Historian.ts +1 -1
  331. package/src/overlay-tools/LookupResolver.ts +182 -45
  332. package/src/overlay-tools/SHIPBroadcaster.ts +92 -168
  333. package/src/primitives/AESGCM.ts +2 -2
  334. package/src/primitives/BigNumber.ts +122 -113
  335. package/src/primitives/Curve.ts +16 -15
  336. package/src/primitives/ECDSA.ts +10 -8
  337. package/src/primitives/Hash.ts +152 -53
  338. package/src/primitives/JacobianPoint.ts +13 -11
  339. package/src/primitives/K256.ts +3 -3
  340. package/src/primitives/Point.ts +35 -38
  341. package/src/primitives/PrivateKey.ts +3 -3
  342. package/src/primitives/PublicKey.ts +3 -3
  343. package/src/primitives/Random.ts +11 -14
  344. package/src/primitives/ReaderUint8Array.ts +7 -7
  345. package/src/primitives/Schnorr.ts +2 -1
  346. package/src/primitives/Secp256r1.ts +2 -1
  347. package/src/primitives/Signature.ts +8 -8
  348. package/src/primitives/TransactionSignature.ts +16 -16
  349. package/src/primitives/utils.ts +37 -47
  350. package/src/registry/RegistryClient.ts +25 -25
  351. package/src/remittance/RemittanceManager.ts +17 -18
  352. package/src/remittance/modules/BasicBRC29.ts +2 -5
  353. package/src/script/Script.ts +114 -170
  354. package/src/script/ScriptEvaluationError.ts +2 -2
  355. package/src/script/Spend.ts +14 -15
  356. package/src/script/templates/PushDrop.ts +5 -3
  357. package/src/script/templates/RPuzzle.ts +2 -4
  358. package/src/storage/StorageDownloader.ts +1 -1
  359. package/src/totp/totp.ts +1 -1
  360. package/src/transaction/Beef.ts +241 -203
  361. package/src/transaction/BeefConstants.ts +16 -0
  362. package/src/transaction/BeefTx.ts +3 -3
  363. package/src/transaction/MerklePath.ts +4 -4
  364. package/src/transaction/Transaction.ts +48 -51
  365. package/src/transaction/fee-models/SatoshisPerKilobyte.ts +1 -1
  366. package/src/transaction/http/BinaryFetchClient.ts +8 -8
  367. package/src/transaction/http/DefaultHttpClient.ts +8 -8
  368. package/src/wallet/CachedKeyDeriver.ts +8 -6
  369. package/src/wallet/KeyDeriver.ts +1 -1
  370. package/src/wallet/Wallet.interfaces.ts +2 -4
  371. package/src/wallet/WalletClient.ts +8 -8
  372. package/src/wallet/WalletError.ts +1 -1
  373. package/src/wallet/__tests/WalletClient.substrate.test.ts +10 -6
  374. package/src/wallet/substrates/HTTPWalletJSON.ts +22 -21
  375. package/src/wallet/substrates/ReactNativeWebView.ts +9 -9
  376. package/src/wallet/substrates/WalletWireProcessor.ts +83 -83
  377. package/src/wallet/substrates/WalletWireTransceiver.ts +528 -938
  378. package/src/wallet/substrates/XDM.ts +4 -4
  379. package/src/wallet/substrates/__tests/HTTPWalletJSON.test.ts +38 -25
  380. package/src/wallet/substrates/__tests/ReactNativeWebView.test.ts +174 -0
  381. package/src/wallet/substrates/__tests/window.CWI.test.ts +256 -0
  382. package/src/wallet/substrates/window.CWI.ts +10 -10
  383. package/src/wallet/validationHelpers.ts +9 -9
@@ -39,53 +39,55 @@ class ContactsManager {
39
39
  * @returns A promise that resolves with an array of contacts
40
40
  */
41
41
  async getContacts(identityKey, forceRefresh = false, limit = 1000) {
42
- // Check in-memory cache first unless forcing refresh
43
42
  if (!forceRefresh) {
44
- const cached = this.cache.getItem(this.CONTACTS_CACHE_KEY);
45
- if (cached != null && cached !== '') {
46
- try {
47
- const cachedContacts = JSON.parse(cached);
48
- return identityKey != null
49
- ? cachedContacts.filter(c => c.identityKey === identityKey)
50
- : cachedContacts;
51
- }
52
- catch (e) {
53
- console.warn('Invalid cached contacts JSON; will reload from chain', e);
54
- }
55
- }
56
- }
57
- const tags = [];
58
- if (identityKey != null) {
59
- // Hash the identity key to use as a tag for quick lookup
60
- const { hmac: hashedIdentityKey } = await this.wallet.createHmac({
61
- protocolID: CONTACT_PROTOCOL_ID,
62
- keyID: identityKey,
63
- counterparty: 'self',
64
- data: index_js_2.Utils.toArray(identityKey, 'utf8')
65
- }, this.originator);
66
- tags.push(`identityKey ${index_js_2.Utils.toHex(hashedIdentityKey)}`);
43
+ const fromCache = this.loadCachedContacts(identityKey);
44
+ if (fromCache !== null)
45
+ return fromCache;
67
46
  }
68
- // Get all contact outputs from the contacts basket
69
- const outputs = await this.wallet.listOutputs({
70
- basket: 'contacts',
71
- include: 'locking scripts',
72
- includeCustomInstructions: true,
73
- tags,
74
- limit
75
- }, this.originator);
47
+ const tags = await this.buildIdentityKeyTags(identityKey);
48
+ const outputs = await this.wallet.listOutputs({ basket: 'contacts', include: 'locking scripts', includeCustomInstructions: true, tags, limit }, this.originator);
76
49
  if (outputs.outputs == null || outputs.outputs.length === 0) {
77
50
  this.cache.setItem(this.CONTACTS_CACHE_KEY, JSON.stringify([]));
78
51
  return [];
79
52
  }
80
- // Pre-process outputs synchronously to extract decode data, then decrypt in parallel
53
+ const contacts = await this.decryptContactOutputs(outputs.outputs);
54
+ this.cache.setItem(this.CONTACTS_CACHE_KEY, JSON.stringify(contacts));
55
+ return identityKey != null ? contacts.filter(c => c.identityKey === identityKey) : contacts;
56
+ }
57
+ /** Returns cached contacts (optionally filtered) or null if cache is missing/invalid. */
58
+ loadCachedContacts(identityKey) {
59
+ const cached = this.cache.getItem(this.CONTACTS_CACHE_KEY);
60
+ if (cached == null || cached === '')
61
+ return null;
62
+ try {
63
+ const cachedContacts = JSON.parse(cached);
64
+ return identityKey != null ? cachedContacts.filter(c => c.identityKey === identityKey) : cachedContacts;
65
+ }
66
+ catch (e) {
67
+ console.warn('Invalid cached contacts JSON; will reload from chain', e);
68
+ return null;
69
+ }
70
+ }
71
+ /** Builds the HMAC-based identity-key tag array; empty array if no identity key is given. */
72
+ async buildIdentityKeyTags(identityKey) {
73
+ if (identityKey == null)
74
+ return [];
75
+ const { hmac: hashedIdentityKey } = await this.wallet.createHmac({
76
+ protocolID: CONTACT_PROTOCOL_ID,
77
+ keyID: identityKey,
78
+ counterparty: 'self',
79
+ data: index_js_2.Utils.toArray(identityKey, 'utf8')
80
+ }, this.originator);
81
+ return [`identityKey ${index_js_2.Utils.toHex(hashedIdentityKey)}`];
82
+ }
83
+ /** Decodes and decrypts all contact outputs in parallel, returning valid Contact objects. */
84
+ async decryptContactOutputs(rawOutputs) {
81
85
  const decryptTasks = [];
82
- for (const output of outputs.outputs) {
86
+ for (const output of rawOutputs) {
83
87
  try {
84
- if (output.lockingScript == null)
88
+ if (output.lockingScript == null || output.customInstructions == null)
85
89
  continue;
86
90
  const decoded = index_js_3.PushDrop.decode(index_js_3.LockingScript.fromHex(output.lockingScript));
87
- if (output.customInstructions == null)
88
- continue;
89
91
  const keyID = JSON.parse(output.customInstructions).keyID;
90
92
  decryptTasks.push({ keyID, ciphertext: decoded.fields[0] });
91
93
  }
@@ -93,20 +95,12 @@ class ContactsManager {
93
95
  console.warn('ContactsManager: Failed to decode contact output:', error);
94
96
  }
95
97
  }
96
- // Decrypt all contacts in parallel each call is a network round-trip over localhost
97
- const decryptResults = await Promise.allSettled(decryptTasks.map(async (task) => await this.wallet.decrypt({
98
- ciphertext: task.ciphertext,
99
- protocolID: CONTACT_PROTOCOL_ID,
100
- keyID: task.keyID,
101
- counterparty: 'self'
102
- }, this.originator)));
98
+ const decryptResults = await Promise.allSettled(decryptTasks.map(async (task) => await this.wallet.decrypt({ ciphertext: task.ciphertext, protocolID: CONTACT_PROTOCOL_ID, keyID: task.keyID, counterparty: 'self' }, this.originator)));
103
99
  const contacts = [];
104
- for (let i = 0; i < decryptResults.length; i++) {
105
- const result = decryptResults[i];
100
+ for (const result of decryptResults) {
106
101
  if (result.status === 'fulfilled') {
107
102
  try {
108
- const contactData = JSON.parse(index_js_2.Utils.toUTF8(result.value.plaintext));
109
- contacts.push(contactData);
103
+ contacts.push(JSON.parse(index_js_2.Utils.toUTF8(result.value.plaintext)));
110
104
  }
111
105
  catch (error) {
112
106
  console.warn('ContactsManager: Failed to parse contact data:', error);
@@ -116,12 +110,7 @@ class ContactsManager {
116
110
  console.warn('ContactsManager: Failed to decrypt contact output:', result.reason);
117
111
  }
118
112
  }
119
- // Cache the loaded contacts
120
- this.cache.setItem(this.CONTACTS_CACHE_KEY, JSON.stringify(contacts));
121
- const filteredContacts = identityKey != null
122
- ? contacts.filter(c => c.identityKey === identityKey)
123
- : contacts;
124
- return filteredContacts;
113
+ return contacts;
125
114
  }
126
115
  /**
127
116
  * Save or update a Metanet contact
@@ -129,136 +118,110 @@ class ContactsManager {
129
118
  * @param metadata Optional metadata to store with the contact (ex. notes, aliases, etc)
130
119
  */
131
120
  async saveContact(contact, metadata) {
132
- // Get current contacts from cache or blockchain
133
121
  const cached = this.cache.getItem(this.CONTACTS_CACHE_KEY);
134
- let contacts;
135
- if (cached != null && cached !== '') {
136
- contacts = JSON.parse(cached);
137
- }
138
- else {
139
- // If cache is empty, get current data from blockchain
140
- contacts = await this.getContacts();
141
- }
122
+ const contacts = (cached != null && cached !== '') ? JSON.parse(cached) : await this.getContacts();
123
+ const contactToStore = { ...contact, metadata };
142
124
  const existingIndex = contacts.findIndex(c => c.identityKey === contact.identityKey);
143
- const contactToStore = {
144
- ...contact,
145
- metadata
146
- };
147
- if (existingIndex >= 0) {
125
+ if (existingIndex >= 0)
148
126
  contacts[existingIndex] = contactToStore;
127
+ else
128
+ contacts.push(contactToStore);
129
+ const hashedIdentityKey = await this.hashIdentityKey(contact.identityKey);
130
+ const outputs = await this.wallet.listOutputs({
131
+ basket: 'contacts', include: 'entire transactions', includeCustomInstructions: true,
132
+ tags: [`identityKey ${index_js_2.Utils.toHex(hashedIdentityKey)}`], limit: 100
133
+ }, this.originator);
134
+ const { existingOutput, keyID } = await this.findExistingOutput(outputs, contact.identityKey);
135
+ const lockingScript = await this.encryptAndLock(contactToStore, keyID);
136
+ if (existingOutput != null) {
137
+ await this.updateContactOutput(outputs, existingOutput, lockingScript, keyID, hashedIdentityKey, contact);
149
138
  }
150
139
  else {
151
- contacts.push(contactToStore);
140
+ await this.createContactOutput(lockingScript, keyID, hashedIdentityKey, contact);
152
141
  }
153
- const { hmac: hashedIdentityKey } = await this.wallet.createHmac({
154
- protocolID: CONTACT_PROTOCOL_ID,
155
- keyID: contact.identityKey,
156
- counterparty: 'self',
157
- data: index_js_2.Utils.toArray(contact.identityKey, 'utf8')
158
- }, this.originator);
159
- // Check if this contact already exists (to update it)
160
- const outputs = await this.wallet.listOutputs({
161
- basket: 'contacts',
162
- include: 'entire transactions',
163
- includeCustomInstructions: true,
164
- tags: [`identityKey ${index_js_2.Utils.toHex(hashedIdentityKey)}`],
165
- limit: 100 // Should only be one contact!
142
+ this.cache.setItem(this.CONTACTS_CACHE_KEY, JSON.stringify(contacts));
143
+ }
144
+ /** Computes the HMAC-based hash of an identity key for tag indexing. */
145
+ async hashIdentityKey(identityKey) {
146
+ const { hmac } = await this.wallet.createHmac({
147
+ protocolID: CONTACT_PROTOCOL_ID, keyID: identityKey, counterparty: 'self',
148
+ data: index_js_2.Utils.toArray(identityKey, 'utf8')
166
149
  }, this.originator);
150
+ return hmac;
151
+ }
152
+ /** Scans existing outputs to find the one matching the given identity key; returns output + keyID. */
153
+ async findExistingOutput(outputs, identityKey) {
167
154
  let existingOutput = null;
168
155
  let keyID = index_js_2.Utils.toBase64((0, index_js_2.Random)(32));
169
- if (outputs.outputs != null) {
170
- // Find output by trying to decrypt and checking identityKey in payload
171
- for (const output of outputs.outputs) {
172
- try {
173
- const [txid, outputIndex] = output.outpoint.split('.');
174
- const tx = index_js_4.Transaction.fromBEEF(outputs.BEEF, txid);
175
- const decoded = index_js_3.PushDrop.decode(tx.outputs[Number(outputIndex)].lockingScript);
176
- if (output.customInstructions == null)
177
- continue;
178
- keyID = JSON.parse(output.customInstructions).keyID;
179
- const { plaintext } = await this.wallet.decrypt({
180
- ciphertext: decoded.fields[0],
181
- protocolID: CONTACT_PROTOCOL_ID,
182
- keyID,
183
- counterparty: 'self'
184
- }, this.originator);
185
- const storedContact = JSON.parse(index_js_2.Utils.toUTF8(plaintext));
186
- if (storedContact.identityKey === contact.identityKey) {
187
- // Found the right output
188
- existingOutput = output;
189
- break;
190
- }
191
- }
192
- catch (e) {
193
- // Skip malformed or undecryptable outputs
156
+ if (outputs.outputs == null)
157
+ return { existingOutput, keyID };
158
+ for (const output of outputs.outputs) {
159
+ try {
160
+ const [txid, outputIndex] = output.outpoint.split('.');
161
+ const tx = index_js_4.Transaction.fromBEEF(outputs.BEEF, txid);
162
+ const decoded = index_js_3.PushDrop.decode(tx.outputs[Number(outputIndex)].lockingScript);
163
+ if (output.customInstructions == null)
164
+ continue;
165
+ keyID = JSON.parse(output.customInstructions).keyID;
166
+ const { plaintext } = await this.wallet.decrypt({ ciphertext: decoded.fields[0], protocolID: CONTACT_PROTOCOL_ID, keyID, counterparty: 'self' }, this.originator);
167
+ const storedContact = JSON.parse(index_js_2.Utils.toUTF8(plaintext));
168
+ if (storedContact.identityKey === identityKey) {
169
+ existingOutput = output;
170
+ break;
194
171
  }
195
172
  }
173
+ catch (_malformedOrUndecryptableOutput) { /* skip */ }
196
174
  }
197
- // Encrypt the contact data directly
198
- const contactWithMetadata = {
199
- ...contact,
200
- metadata
201
- };
175
+ return { existingOutput, keyID };
176
+ }
177
+ /** Encrypts a contact and produces its PushDrop locking script. */
178
+ async encryptAndLock(contactData, keyID) {
202
179
  const { ciphertext } = await this.wallet.encrypt({
203
- plaintext: index_js_2.Utils.toArray(JSON.stringify(contactWithMetadata), 'utf8'),
204
- protocolID: CONTACT_PROTOCOL_ID,
205
- keyID,
206
- counterparty: 'self'
180
+ plaintext: index_js_2.Utils.toArray(JSON.stringify(contactData), 'utf8'),
181
+ protocolID: CONTACT_PROTOCOL_ID, keyID, counterparty: 'self'
207
182
  }, this.originator);
208
- // Create locking script for the new contact token
209
- const lockingScript = await new index_js_3.PushDrop(this.wallet, this.originator).lock([ciphertext], CONTACT_PROTOCOL_ID, keyID, 'self');
210
- if (existingOutput != null) {
211
- // Update existing contact by spending its output
212
- const [txid, outputIndex] = String(existingOutput.outpoint).split('.');
213
- const prevOutpoint = `${txid}.${outputIndex}`;
214
- const pushdrop = new index_js_3.PushDrop(this.wallet, this.originator);
215
- const { signableTransaction } = await this.wallet.createAction({
216
- description: 'Update Contact',
217
- inputBEEF: outputs.BEEF,
218
- inputs: [{
219
- outpoint: prevOutpoint,
220
- unlockingScriptLength: 74,
221
- inputDescription: 'Spend previous contact output'
222
- }],
223
- outputs: [{
224
- basket: 'contacts',
225
- satoshis: 1,
226
- lockingScript: lockingScript.toHex(),
227
- outputDescription: `Updated Contact: ${contact.name ?? contact.identityKey.slice(0, 10)}`,
228
- tags: [`identityKey ${index_js_2.Utils.toHex(hashedIdentityKey)}`],
229
- customInstructions: JSON.stringify({ keyID })
230
- }],
231
- options: { acceptDelayedBroadcast: false, randomizeOutputs: false } // TODO: Support custom config as needed.
232
- }, this.originator);
233
- if (signableTransaction == null)
234
- throw new Error('Unable to update contact');
235
- const unlocker = pushdrop.unlock(CONTACT_PROTOCOL_ID, keyID, 'self');
236
- const unlockingScript = await unlocker.sign(index_js_4.Transaction.fromBEEF(signableTransaction.tx), 0);
237
- const { tx } = await this.wallet.signAction({
238
- reference: signableTransaction.reference,
239
- spends: { 0: { unlockingScript: unlockingScript.toHex() } }
240
- }, this.originator);
241
- if (tx == null)
242
- throw new Error('Failed to update contact output');
243
- }
244
- else {
245
- // Create new contact output
246
- const { tx } = await this.wallet.createAction({
247
- description: 'Add Contact',
248
- outputs: [{
249
- basket: 'contacts',
250
- satoshis: 1,
251
- lockingScript: lockingScript.toHex(),
252
- outputDescription: `Contact: ${contact.name ?? contact.identityKey.slice(0, 10)}`,
253
- tags: [`identityKey ${index_js_2.Utils.toHex(hashedIdentityKey)}`],
254
- customInstructions: JSON.stringify({ keyID })
255
- }],
256
- options: { acceptDelayedBroadcast: false, randomizeOutputs: false } // TODO: Support custom config as needed.
257
- }, this.originator);
258
- if (tx == null)
259
- throw new Error('Failed to create contact output');
260
- }
261
- this.cache.setItem(this.CONTACTS_CACHE_KEY, JSON.stringify(contacts));
183
+ return await new index_js_3.PushDrop(this.wallet, this.originator).lock([ciphertext], CONTACT_PROTOCOL_ID, keyID, 'self');
184
+ }
185
+ /** Spends an existing contact output and creates a replacement with updated data. */
186
+ async updateContactOutput(outputs, existingOutput, lockingScript, keyID, hashedIdentityKey, contact) {
187
+ const [txid, outputIndex] = String(existingOutput.outpoint).split('.');
188
+ const prevOutpoint = `${txid}.${outputIndex}`;
189
+ const pushdrop = new index_js_3.PushDrop(this.wallet, this.originator);
190
+ const { signableTransaction } = await this.wallet.createAction({
191
+ description: 'Update Contact',
192
+ inputBEEF: outputs.BEEF,
193
+ inputs: [{ outpoint: prevOutpoint, unlockingScriptLength: 74, inputDescription: 'Spend previous contact output' }],
194
+ outputs: [{
195
+ basket: 'contacts', satoshis: 1, lockingScript: lockingScript.toHex(),
196
+ outputDescription: `Updated Contact: ${contact.name ?? contact.identityKey.slice(0, 10)}`,
197
+ tags: [`identityKey ${index_js_2.Utils.toHex(hashedIdentityKey)}`], customInstructions: JSON.stringify({ keyID })
198
+ }],
199
+ options: { acceptDelayedBroadcast: false, randomizeOutputs: false }
200
+ }, this.originator);
201
+ if (signableTransaction == null)
202
+ throw new Error('Unable to update contact');
203
+ const unlockingScript = await pushdrop.unlock(CONTACT_PROTOCOL_ID, keyID, 'self')
204
+ .sign(index_js_4.Transaction.fromBEEF(signableTransaction.tx), 0);
205
+ const { tx } = await this.wallet.signAction({
206
+ reference: signableTransaction.reference,
207
+ spends: { 0: { unlockingScript: unlockingScript.toHex() } }
208
+ }, this.originator);
209
+ if (tx == null)
210
+ throw new Error('Failed to update contact output');
211
+ }
212
+ /** Creates a new on-chain contact output. */
213
+ async createContactOutput(lockingScript, keyID, hashedIdentityKey, contact) {
214
+ const { tx } = await this.wallet.createAction({
215
+ description: 'Add Contact',
216
+ outputs: [{
217
+ basket: 'contacts', satoshis: 1, lockingScript: lockingScript.toHex(),
218
+ outputDescription: `Contact: ${contact.name ?? contact.identityKey.slice(0, 10)}`,
219
+ tags: [`identityKey ${index_js_2.Utils.toHex(hashedIdentityKey)}`], customInstructions: JSON.stringify({ keyID })
220
+ }],
221
+ options: { acceptDelayedBroadcast: false, randomizeOutputs: false }
222
+ }, this.originator);
223
+ if (tx == null)
224
+ throw new Error('Failed to create contact output');
262
225
  }
263
226
  /**
264
227
  * Remove a contact from the contacts basket
@@ -270,81 +233,58 @@ class ContactsManager {
270
233
  if (cached != null && cached !== '') {
271
234
  try {
272
235
  const contacts = JSON.parse(cached);
273
- const filteredContacts = contacts.filter(c => c.identityKey !== identityKey);
274
- this.cache.setItem(this.CONTACTS_CACHE_KEY, JSON.stringify(filteredContacts));
236
+ this.cache.setItem(this.CONTACTS_CACHE_KEY, JSON.stringify(contacts.filter(c => c.identityKey !== identityKey)));
275
237
  }
276
238
  catch (e) {
277
239
  console.warn('Failed to update cache after contact removal:', e);
278
240
  }
279
241
  }
280
- // Hash the identity key to use as a tag for quick lookup
281
- const tags = [];
282
- const { hmac: hashedIdentityKey } = await this.wallet.createHmac({
283
- protocolID: CONTACT_PROTOCOL_ID,
284
- keyID: identityKey,
285
- counterparty: 'self',
286
- data: index_js_2.Utils.toArray(identityKey, 'utf8')
287
- }, this.originator);
288
- tags.push(`identityKey ${index_js_2.Utils.toHex(hashedIdentityKey)}`);
289
- // Find and spend the contact's output
290
- const outputs = await this.wallet.listOutputs({
291
- basket: 'contacts',
292
- include: 'entire transactions',
293
- includeCustomInstructions: true,
294
- tags,
295
- limit: 100 // Should only be one contact!
296
- }, this.originator);
242
+ const tags = await this.buildIdentityKeyTags(identityKey);
243
+ const outputs = await this.wallet.listOutputs({ basket: 'contacts', include: 'entire transactions', includeCustomInstructions: true, tags, limit: 100 }, this.originator);
297
244
  if (outputs.outputs == null)
298
245
  return;
299
- // Find the output for this specific contact by decrypting and checking identityKey
300
246
  for (const output of outputs.outputs) {
301
247
  try {
302
- const [txid, outputIndex] = String(output.outpoint).split('.');
303
- const tx = index_js_4.Transaction.fromBEEF(outputs.BEEF, txid);
304
- const decoded = index_js_3.PushDrop.decode(tx.outputs[Number(outputIndex)].lockingScript);
305
- if (output.customInstructions == null)
306
- continue;
307
- const keyID = JSON.parse(output.customInstructions).keyID;
308
- const { plaintext } = await this.wallet.decrypt({
309
- ciphertext: decoded.fields[0],
310
- protocolID: CONTACT_PROTOCOL_ID,
311
- keyID,
312
- counterparty: 'self'
313
- }, this.originator);
314
- const storedContact = JSON.parse(index_js_2.Utils.toUTF8(plaintext));
315
- if (storedContact.identityKey === identityKey) {
316
- // Found the contact's output, spend it without creating a new one
317
- const prevOutpoint = `${txid}.${outputIndex}`;
318
- const pushdrop = new index_js_3.PushDrop(this.wallet, this.originator);
319
- const { signableTransaction } = await this.wallet.createAction({
320
- description: 'Delete Contact',
321
- inputBEEF: outputs.BEEF,
322
- inputs: [{
323
- outpoint: prevOutpoint,
324
- unlockingScriptLength: 74,
325
- inputDescription: 'Spend contact output to delete'
326
- }],
327
- outputs: [], // No outputs = deletion
328
- options: { acceptDelayedBroadcast: false, randomizeOutputs: false } // TODO: Support custom config as needed.
329
- }, this.originator);
330
- if (signableTransaction == null)
331
- throw new Error('Unable to delete contact');
332
- const unlocker = pushdrop.unlock(CONTACT_PROTOCOL_ID, keyID, 'self');
333
- const unlockingScript = await unlocker.sign(index_js_4.Transaction.fromBEEF(signableTransaction.tx), 0);
334
- const { tx: deleteTx } = await this.wallet.signAction({
335
- reference: signableTransaction.reference,
336
- spends: { 0: { unlockingScript: unlockingScript.toHex() } }
337
- }, this.originator);
338
- if (deleteTx == null)
339
- throw new Error('Failed to delete contact output');
248
+ const spent = await this.trySpendContactOutput(output, outputs, identityKey);
249
+ if (spent)
340
250
  return;
341
- }
342
- }
343
- catch (e) {
344
- // Skip malformed or undecryptable outputs
345
251
  }
252
+ catch (_malformedOrUndecryptableOutput) { /* skip */ }
346
253
  }
347
254
  }
255
+ /** Attempts to decrypt and spend a single output if it matches the given identity key. Returns true if spent. */
256
+ async trySpendContactOutput(output, outputs, identityKey) {
257
+ const [txid, outputIndex] = String(output.outpoint).split('.');
258
+ const tx = index_js_4.Transaction.fromBEEF(outputs.BEEF, txid);
259
+ const decoded = index_js_3.PushDrop.decode(tx.outputs[Number(outputIndex)].lockingScript);
260
+ if (output.customInstructions == null)
261
+ return false;
262
+ const keyID = JSON.parse(output.customInstructions).keyID;
263
+ const { plaintext } = await this.wallet.decrypt({ ciphertext: decoded.fields[0], protocolID: CONTACT_PROTOCOL_ID, keyID, counterparty: 'self' }, this.originator);
264
+ const storedContact = JSON.parse(index_js_2.Utils.toUTF8(plaintext));
265
+ if (storedContact.identityKey !== identityKey)
266
+ return false;
267
+ const prevOutpoint = `${txid}.${outputIndex}`;
268
+ const pushdrop = new index_js_3.PushDrop(this.wallet, this.originator);
269
+ const { signableTransaction } = await this.wallet.createAction({
270
+ description: 'Delete Contact',
271
+ inputBEEF: outputs.BEEF,
272
+ inputs: [{ outpoint: prevOutpoint, unlockingScriptLength: 74, inputDescription: 'Spend contact output to delete' }],
273
+ outputs: [],
274
+ options: { acceptDelayedBroadcast: false, randomizeOutputs: false }
275
+ }, this.originator);
276
+ if (signableTransaction == null)
277
+ throw new Error('Unable to delete contact');
278
+ const unlockingScript = await pushdrop.unlock(CONTACT_PROTOCOL_ID, keyID, 'self')
279
+ .sign(index_js_4.Transaction.fromBEEF(signableTransaction.tx), 0);
280
+ const { tx: deleteTx } = await this.wallet.signAction({
281
+ reference: signableTransaction.reference,
282
+ spends: { 0: { unlockingScript: unlockingScript.toHex() } }
283
+ }, this.originator);
284
+ if (deleteTx == null)
285
+ throw new Error('Failed to delete contact output');
286
+ return true;
287
+ }
348
288
  }
349
289
  exports.ContactsManager = ContactsManager;
350
290
  //# sourceMappingURL=ContactsManager.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ContactsManager.js","sourceRoot":"","sources":["../../../../src/identity/ContactsManager.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ContactsManager.js","sourceRoot":"","sources":["../../../../src/identity/ContactsManager.ts"],"names":[],"mappings":"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"}