@bsv/sdk 2.1.0 → 2.1.2

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