@arkade-os/sdk 0.4.26 → 0.4.28

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 (522) hide show
  1. package/README.md +36 -125
  2. package/dist/adapters/asyncStorage.cjs +48 -0
  3. package/dist/adapters/asyncStorage.cjs.map +1 -0
  4. package/dist/adapters/asyncStorage.d.cts +16 -0
  5. package/dist/{types/storage → adapters}/asyncStorage.d.ts +5 -2
  6. package/dist/adapters/asyncStorage.js +46 -0
  7. package/dist/adapters/asyncStorage.js.map +1 -0
  8. package/dist/adapters/expo.cjs +19 -0
  9. package/dist/adapters/expo.cjs.map +1 -0
  10. package/dist/adapters/expo.d.cts +48 -0
  11. package/dist/adapters/expo.d.ts +48 -0
  12. package/dist/adapters/expo.js +6 -0
  13. package/dist/adapters/expo.js.map +1 -0
  14. package/dist/adapters/fileSystem.cjs +116 -0
  15. package/dist/adapters/fileSystem.cjs.map +1 -0
  16. package/dist/adapters/fileSystem.d.cts +17 -0
  17. package/dist/{types/storage → adapters}/fileSystem.d.ts +5 -2
  18. package/dist/adapters/fileSystem.js +93 -0
  19. package/dist/adapters/fileSystem.js.map +1 -0
  20. package/dist/adapters/indexedDB.cjs +103 -0
  21. package/dist/adapters/indexedDB.cjs.map +1 -0
  22. package/dist/adapters/indexedDB.d.cts +18 -0
  23. package/dist/{types/storage → adapters}/indexedDB.d.ts +5 -2
  24. package/dist/adapters/indexedDB.js +101 -0
  25. package/dist/adapters/indexedDB.js.map +1 -0
  26. package/dist/adapters/localStorage.cjs +50 -0
  27. package/dist/adapters/localStorage.cjs.map +1 -0
  28. package/dist/{types/storage/inMemory.d.ts → adapters/localStorage.d.cts} +6 -3
  29. package/dist/{types/storage → adapters}/localStorage.d.ts +5 -2
  30. package/dist/adapters/localStorage.js +48 -0
  31. package/dist/adapters/localStorage.js.map +1 -0
  32. package/dist/ark-TZ1gXAXU.d.cts +3880 -0
  33. package/dist/ark-TZ1gXAXU.d.ts +3880 -0
  34. package/dist/{types/worker/expo/asyncStorageTaskQueue.d.ts → asyncStorageTaskQueue-Cb1F_Z9s.d.ts} +6 -3
  35. package/dist/asyncStorageTaskQueue-EFqSmYTg.d.cts +49 -0
  36. package/dist/chunk-5BLDMQED.cjs +18 -0
  37. package/dist/chunk-5BLDMQED.cjs.map +1 -0
  38. package/dist/chunk-5PG7DV7A.cjs +805 -0
  39. package/dist/chunk-5PG7DV7A.cjs.map +1 -0
  40. package/dist/chunk-A3EMF7RN.js +95 -0
  41. package/dist/chunk-A3EMF7RN.js.map +1 -0
  42. package/dist/chunk-ADV27S4N.cjs +2701 -0
  43. package/dist/chunk-ADV27S4N.cjs.map +1 -0
  44. package/dist/chunk-BQLHADL7.js +13805 -0
  45. package/dist/chunk-BQLHADL7.js.map +1 -0
  46. package/dist/chunk-CFZMTDWI.js +209 -0
  47. package/dist/chunk-CFZMTDWI.js.map +1 -0
  48. package/dist/chunk-FG5ACJJW.cjs +212 -0
  49. package/dist/chunk-FG5ACJJW.cjs.map +1 -0
  50. package/dist/chunk-HW3JJ323.js +768 -0
  51. package/dist/chunk-HW3JJ323.js.map +1 -0
  52. package/dist/chunk-I3DGUUCT.cjs +838 -0
  53. package/dist/chunk-I3DGUUCT.cjs.map +1 -0
  54. package/dist/chunk-IPX2R7FR.cjs +100 -0
  55. package/dist/chunk-IPX2R7FR.cjs.map +1 -0
  56. package/dist/chunk-NSBPE2FW.js +15 -0
  57. package/dist/chunk-NSBPE2FW.js.map +1 -0
  58. package/dist/chunk-T64LAI7L.js +829 -0
  59. package/dist/chunk-T64LAI7L.js.map +1 -0
  60. package/dist/chunk-ZBUDLTBO.js +2671 -0
  61. package/dist/chunk-ZBUDLTBO.js.map +1 -0
  62. package/dist/chunk-ZLO6NETT.cjs +13910 -0
  63. package/dist/chunk-ZLO6NETT.cjs.map +1 -0
  64. package/dist/contracts/handlers/index.cjs +26 -0
  65. package/dist/contracts/handlers/index.cjs.map +1 -0
  66. package/dist/contracts/handlers/index.d.cts +7 -0
  67. package/dist/contracts/handlers/index.d.ts +7 -0
  68. package/dist/contracts/handlers/index.js +5 -0
  69. package/dist/contracts/handlers/index.js.map +1 -0
  70. package/dist/delegate-BFZs69hp.d.cts +84 -0
  71. package/dist/delegate-aaVGfWsV.d.ts +84 -0
  72. package/dist/index-B22cA64m.d.cts +199 -0
  73. package/dist/{types/storage/index.d.ts → index-C0IanN1m.d.cts} +3 -1
  74. package/dist/index-C0IanN1m.d.ts +11 -0
  75. package/dist/index-NDla_UoJ.d.ts +199 -0
  76. package/dist/index.cjs +480 -0
  77. package/dist/index.cjs.map +1 -0
  78. package/dist/index.d.cts +3343 -0
  79. package/dist/index.d.ts +3343 -0
  80. package/dist/index.js +7 -0
  81. package/dist/index.js.map +1 -0
  82. package/dist/repositories/realm/index.cjs +513 -0
  83. package/dist/repositories/realm/index.cjs.map +1 -0
  84. package/dist/repositories/realm/index.d.cts +217 -0
  85. package/dist/{types/repositories/realm/schemas.d.ts → repositories/realm/index.d.ts} +80 -112
  86. package/dist/repositories/realm/index.js +507 -0
  87. package/dist/repositories/realm/index.js.map +1 -0
  88. package/dist/repositories/sqlite/index.cjs +588 -0
  89. package/dist/repositories/sqlite/index.cjs.map +1 -0
  90. package/dist/repositories/sqlite/index.d.cts +118 -0
  91. package/dist/{types/repositories/sqlite/walletRepository.d.ts → repositories/sqlite/index.d.ts} +58 -5
  92. package/dist/repositories/sqlite/index.js +585 -0
  93. package/dist/repositories/sqlite/index.js.map +1 -0
  94. package/dist/taskRunner-C6Ff4OaU.d.cts +114 -0
  95. package/dist/taskRunner-yvPN8Z0K.d.ts +114 -0
  96. package/dist/wallet/expo/background.cjs +93 -0
  97. package/dist/wallet/expo/background.cjs.map +1 -0
  98. package/dist/wallet/expo/background.d.cts +84 -0
  99. package/dist/wallet/expo/background.d.ts +84 -0
  100. package/dist/wallet/expo/background.js +68 -0
  101. package/dist/wallet/expo/background.js.map +1 -0
  102. package/dist/wallet/expo/index.cjs +171 -0
  103. package/dist/wallet/expo/index.cjs.map +1 -0
  104. package/dist/wallet/expo/index.d.cts +122 -0
  105. package/dist/{types/wallet/expo/wallet.d.ts → wallet/expo/index.d.ts} +45 -22
  106. package/dist/wallet/expo/index.js +169 -0
  107. package/dist/wallet/expo/index.js.map +1 -0
  108. package/dist/wallet-AF-p-OWj.d.cts +774 -0
  109. package/dist/wallet-D9NBRqvC.d.ts +774 -0
  110. package/dist/worker/expo/index.cjs +140 -0
  111. package/dist/worker/expo/index.cjs.map +1 -0
  112. package/dist/worker/expo/index.d.cts +29 -0
  113. package/dist/worker/expo/index.d.ts +29 -0
  114. package/dist/worker/expo/index.js +121 -0
  115. package/dist/worker/expo/index.js.map +1 -0
  116. package/package.json +110 -76
  117. package/dist/cjs/adapters/asyncStorage.js +0 -5
  118. package/dist/cjs/adapters/expo.js +0 -8
  119. package/dist/cjs/adapters/fileSystem.js +0 -5
  120. package/dist/cjs/adapters/indexedDB.js +0 -5
  121. package/dist/cjs/adapters/localStorage.js +0 -5
  122. package/dist/cjs/arkfee/celenv.js +0 -43
  123. package/dist/cjs/arkfee/estimator.js +0 -143
  124. package/dist/cjs/arkfee/index.js +0 -5
  125. package/dist/cjs/arkfee/types.js +0 -26
  126. package/dist/cjs/arknote/index.js +0 -128
  127. package/dist/cjs/bip322/index.js +0 -270
  128. package/dist/cjs/contracts/arkcontract.js +0 -147
  129. package/dist/cjs/contracts/contractManager.js +0 -629
  130. package/dist/cjs/contracts/contractWatcher.js +0 -598
  131. package/dist/cjs/contracts/handlers/default.js +0 -93
  132. package/dist/cjs/contracts/handlers/delegate.js +0 -90
  133. package/dist/cjs/contracts/handlers/helpers.js +0 -115
  134. package/dist/cjs/contracts/handlers/index.js +0 -19
  135. package/dist/cjs/contracts/handlers/registry.js +0 -89
  136. package/dist/cjs/contracts/handlers/vhtlc.js +0 -194
  137. package/dist/cjs/contracts/index.js +0 -41
  138. package/dist/cjs/contracts/types.js +0 -2
  139. package/dist/cjs/contracts/vtxoOwnership.js +0 -78
  140. package/dist/cjs/extension/asset/assetGroup.js +0 -228
  141. package/dist/cjs/extension/asset/assetId.js +0 -152
  142. package/dist/cjs/extension/asset/assetInput.js +0 -222
  143. package/dist/cjs/extension/asset/assetOutput.js +0 -174
  144. package/dist/cjs/extension/asset/assetRef.js +0 -148
  145. package/dist/cjs/extension/asset/index.js +0 -23
  146. package/dist/cjs/extension/asset/metadata.js +0 -187
  147. package/dist/cjs/extension/asset/packet.js +0 -114
  148. package/dist/cjs/extension/asset/types.js +0 -22
  149. package/dist/cjs/extension/asset/utils.js +0 -105
  150. package/dist/cjs/extension/index.js +0 -254
  151. package/dist/cjs/extension/packet.js +0 -20
  152. package/dist/cjs/forfeit.js +0 -45
  153. package/dist/cjs/identity/descriptor.js +0 -169
  154. package/dist/cjs/identity/descriptorProvider.js +0 -2
  155. package/dist/cjs/identity/hdCapableIdentity.js +0 -2
  156. package/dist/cjs/identity/index.js +0 -38
  157. package/dist/cjs/identity/seedIdentity.js +0 -461
  158. package/dist/cjs/identity/serialize.js +0 -171
  159. package/dist/cjs/identity/singleKey.js +0 -126
  160. package/dist/cjs/identity/staticDescriptorProvider.js +0 -65
  161. package/dist/cjs/index.js +0 -200
  162. package/dist/cjs/intent/index.js +0 -259
  163. package/dist/cjs/musig2/index.js +0 -11
  164. package/dist/cjs/musig2/keys.js +0 -57
  165. package/dist/cjs/musig2/nonces.js +0 -48
  166. package/dist/cjs/musig2/sign.js +0 -102
  167. package/dist/cjs/networks.js +0 -26
  168. package/dist/cjs/package.json +0 -3
  169. package/dist/cjs/providers/ark.js +0 -577
  170. package/dist/cjs/providers/delegator.js +0 -85
  171. package/dist/cjs/providers/electrum.js +0 -869
  172. package/dist/cjs/providers/errors.js +0 -59
  173. package/dist/cjs/providers/expoArk.js +0 -82
  174. package/dist/cjs/providers/expoIndexer.js +0 -111
  175. package/dist/cjs/providers/expoUtils.js +0 -124
  176. package/dist/cjs/providers/indexer.js +0 -630
  177. package/dist/cjs/providers/onchain.js +0 -262
  178. package/dist/cjs/providers/utils.js +0 -121
  179. package/dist/cjs/repositories/contractRepository.js +0 -2
  180. package/dist/cjs/repositories/inMemory/contractRepository.js +0 -55
  181. package/dist/cjs/repositories/inMemory/walletRepository.js +0 -115
  182. package/dist/cjs/repositories/index.js +0 -34
  183. package/dist/cjs/repositories/indexedDB/contractRepository.js +0 -187
  184. package/dist/cjs/repositories/indexedDB/db.js +0 -19
  185. package/dist/cjs/repositories/indexedDB/manager.js +0 -100
  186. package/dist/cjs/repositories/indexedDB/schema.js +0 -204
  187. package/dist/cjs/repositories/indexedDB/walletRepository.js +0 -474
  188. package/dist/cjs/repositories/indexedDB/websqlAdapter.js +0 -144
  189. package/dist/cjs/repositories/migrations/contractRepositoryImpl.js +0 -127
  190. package/dist/cjs/repositories/migrations/fromStorageAdapter.js +0 -66
  191. package/dist/cjs/repositories/migrations/walletRepositoryImpl.js +0 -184
  192. package/dist/cjs/repositories/realm/contractRepository.js +0 -116
  193. package/dist/cjs/repositories/realm/index.js +0 -11
  194. package/dist/cjs/repositories/realm/schemas.js +0 -157
  195. package/dist/cjs/repositories/realm/types.js +0 -7
  196. package/dist/cjs/repositories/realm/walletRepository.js +0 -305
  197. package/dist/cjs/repositories/scriptFromAddress.js +0 -16
  198. package/dist/cjs/repositories/serialization.js +0 -82
  199. package/dist/cjs/repositories/sqlite/contractRepository.js +0 -135
  200. package/dist/cjs/repositories/sqlite/index.js +0 -7
  201. package/dist/cjs/repositories/sqlite/types.js +0 -2
  202. package/dist/cjs/repositories/sqlite/walletRepository.js +0 -441
  203. package/dist/cjs/repositories/walletRepository.js +0 -2
  204. package/dist/cjs/script/address.js +0 -108
  205. package/dist/cjs/script/base.js +0 -185
  206. package/dist/cjs/script/default.js +0 -57
  207. package/dist/cjs/script/delegate.js +0 -53
  208. package/dist/cjs/script/tapscript.js +0 -619
  209. package/dist/cjs/script/vhtlc.js +0 -170
  210. package/dist/cjs/storage/asyncStorage.js +0 -50
  211. package/dist/cjs/storage/fileSystem.js +0 -141
  212. package/dist/cjs/storage/inMemory.js +0 -24
  213. package/dist/cjs/storage/index.js +0 -2
  214. package/dist/cjs/storage/indexedDB.js +0 -101
  215. package/dist/cjs/storage/localStorage.js +0 -51
  216. package/dist/cjs/tree/signingSession.js +0 -229
  217. package/dist/cjs/tree/txTree.js +0 -192
  218. package/dist/cjs/tree/validation.js +0 -107
  219. package/dist/cjs/utils/anchor.js +0 -35
  220. package/dist/cjs/utils/arkTransaction.js +0 -271
  221. package/dist/cjs/utils/bip21.js +0 -127
  222. package/dist/cjs/utils/syncCursors.js +0 -128
  223. package/dist/cjs/utils/timelock.js +0 -59
  224. package/dist/cjs/utils/transaction.js +0 -28
  225. package/dist/cjs/utils/transactionHistory.js +0 -183
  226. package/dist/cjs/utils/txSizeEstimator.js +0 -132
  227. package/dist/cjs/utils/unknownFields.js +0 -174
  228. package/dist/cjs/wallet/asset-manager.js +0 -330
  229. package/dist/cjs/wallet/asset.js +0 -119
  230. package/dist/cjs/wallet/batch.js +0 -183
  231. package/dist/cjs/wallet/delegator.js +0 -302
  232. package/dist/cjs/wallet/expo/background.js +0 -116
  233. package/dist/cjs/wallet/expo/index.js +0 -9
  234. package/dist/cjs/wallet/expo/wallet.js +0 -230
  235. package/dist/cjs/wallet/hdDescriptorProvider.js +0 -159
  236. package/dist/cjs/wallet/index.js +0 -82
  237. package/dist/cjs/wallet/onchain.js +0 -290
  238. package/dist/cjs/wallet/ramps.js +0 -216
  239. package/dist/cjs/wallet/serviceWorker/wallet-message-handler.js +0 -953
  240. package/dist/cjs/wallet/serviceWorker/wallet.js +0 -1173
  241. package/dist/cjs/wallet/unroll.js +0 -289
  242. package/dist/cjs/wallet/utils.js +0 -111
  243. package/dist/cjs/wallet/validation.js +0 -154
  244. package/dist/cjs/wallet/vtxo-manager.js +0 -1142
  245. package/dist/cjs/wallet/wallet.js +0 -2049
  246. package/dist/cjs/worker/browser/service-worker-manager.js +0 -183
  247. package/dist/cjs/worker/browser/utils.js +0 -67
  248. package/dist/cjs/worker/errors.js +0 -16
  249. package/dist/cjs/worker/expo/asyncStorageTaskQueue.js +0 -78
  250. package/dist/cjs/worker/expo/index.js +0 -13
  251. package/dist/cjs/worker/expo/processors/contractPollProcessor.js +0 -62
  252. package/dist/cjs/worker/expo/processors/index.js +0 -6
  253. package/dist/cjs/worker/expo/taskQueue.js +0 -41
  254. package/dist/cjs/worker/expo/taskRunner.js +0 -73
  255. package/dist/cjs/worker/messageBus.js +0 -473
  256. package/dist/esm/adapters/asyncStorage.js +0 -1
  257. package/dist/esm/adapters/expo.js +0 -3
  258. package/dist/esm/adapters/fileSystem.js +0 -1
  259. package/dist/esm/adapters/indexedDB.js +0 -1
  260. package/dist/esm/adapters/localStorage.js +0 -1
  261. package/dist/esm/arkfee/celenv.js +0 -40
  262. package/dist/esm/arkfee/estimator.js +0 -139
  263. package/dist/esm/arkfee/index.js +0 -1
  264. package/dist/esm/arkfee/types.js +0 -22
  265. package/dist/esm/arknote/index.js +0 -124
  266. package/dist/esm/bip322/index.js +0 -267
  267. package/dist/esm/contracts/arkcontract.js +0 -140
  268. package/dist/esm/contracts/contractManager.js +0 -625
  269. package/dist/esm/contracts/contractWatcher.js +0 -594
  270. package/dist/esm/contracts/handlers/default.js +0 -90
  271. package/dist/esm/contracts/handlers/delegate.js +0 -87
  272. package/dist/esm/contracts/handlers/helpers.js +0 -110
  273. package/dist/esm/contracts/handlers/index.js +0 -12
  274. package/dist/esm/contracts/handlers/registry.js +0 -86
  275. package/dist/esm/contracts/handlers/vhtlc.js +0 -191
  276. package/dist/esm/contracts/index.js +0 -13
  277. package/dist/esm/contracts/types.js +0 -1
  278. package/dist/esm/contracts/vtxoOwnership.js +0 -69
  279. package/dist/esm/extension/asset/assetGroup.js +0 -224
  280. package/dist/esm/extension/asset/assetId.js +0 -148
  281. package/dist/esm/extension/asset/assetInput.js +0 -217
  282. package/dist/esm/extension/asset/assetOutput.js +0 -169
  283. package/dist/esm/extension/asset/assetRef.js +0 -144
  284. package/dist/esm/extension/asset/index.js +0 -8
  285. package/dist/esm/extension/asset/metadata.js +0 -182
  286. package/dist/esm/extension/asset/packet.js +0 -110
  287. package/dist/esm/extension/asset/types.js +0 -19
  288. package/dist/esm/extension/asset/utils.js +0 -99
  289. package/dist/esm/extension/index.js +0 -248
  290. package/dist/esm/extension/packet.js +0 -16
  291. package/dist/esm/forfeit.js +0 -41
  292. package/dist/esm/identity/descriptor.js +0 -161
  293. package/dist/esm/identity/descriptorProvider.js +0 -1
  294. package/dist/esm/identity/hdCapableIdentity.js +0 -1
  295. package/dist/esm/identity/index.js +0 -12
  296. package/dist/esm/identity/seedIdentity.js +0 -453
  297. package/dist/esm/identity/serialize.js +0 -164
  298. package/dist/esm/identity/singleKey.js +0 -121
  299. package/dist/esm/identity/staticDescriptorProvider.js +0 -61
  300. package/dist/esm/index.js +0 -87
  301. package/dist/esm/intent/index.js +0 -255
  302. package/dist/esm/musig2/index.js +0 -3
  303. package/dist/esm/musig2/keys.js +0 -21
  304. package/dist/esm/musig2/nonces.js +0 -11
  305. package/dist/esm/musig2/sign.js +0 -63
  306. package/dist/esm/networks.js +0 -22
  307. package/dist/esm/package.json +0 -3
  308. package/dist/esm/providers/ark.js +0 -572
  309. package/dist/esm/providers/delegator.js +0 -81
  310. package/dist/esm/providers/electrum.js +0 -864
  311. package/dist/esm/providers/errors.js +0 -54
  312. package/dist/esm/providers/expoArk.js +0 -78
  313. package/dist/esm/providers/expoIndexer.js +0 -107
  314. package/dist/esm/providers/expoUtils.js +0 -87
  315. package/dist/esm/providers/indexer.js +0 -626
  316. package/dist/esm/providers/onchain.js +0 -258
  317. package/dist/esm/providers/utils.js +0 -117
  318. package/dist/esm/repositories/contractRepository.js +0 -1
  319. package/dist/esm/repositories/inMemory/contractRepository.js +0 -51
  320. package/dist/esm/repositories/inMemory/walletRepository.js +0 -111
  321. package/dist/esm/repositories/index.js +0 -10
  322. package/dist/esm/repositories/indexedDB/contractRepository.js +0 -183
  323. package/dist/esm/repositories/indexedDB/db.js +0 -4
  324. package/dist/esm/repositories/indexedDB/manager.js +0 -95
  325. package/dist/esm/repositories/indexedDB/schema.js +0 -199
  326. package/dist/esm/repositories/indexedDB/walletRepository.js +0 -470
  327. package/dist/esm/repositories/indexedDB/websqlAdapter.js +0 -138
  328. package/dist/esm/repositories/migrations/contractRepositoryImpl.js +0 -121
  329. package/dist/esm/repositories/migrations/fromStorageAdapter.js +0 -58
  330. package/dist/esm/repositories/migrations/walletRepositoryImpl.js +0 -180
  331. package/dist/esm/repositories/realm/contractRepository.js +0 -112
  332. package/dist/esm/repositories/realm/index.js +0 -3
  333. package/dist/esm/repositories/realm/schemas.js +0 -153
  334. package/dist/esm/repositories/realm/types.js +0 -6
  335. package/dist/esm/repositories/realm/walletRepository.js +0 -301
  336. package/dist/esm/repositories/scriptFromAddress.js +0 -13
  337. package/dist/esm/repositories/serialization.js +0 -67
  338. package/dist/esm/repositories/sqlite/contractRepository.js +0 -131
  339. package/dist/esm/repositories/sqlite/index.js +0 -2
  340. package/dist/esm/repositories/sqlite/types.js +0 -1
  341. package/dist/esm/repositories/sqlite/walletRepository.js +0 -437
  342. package/dist/esm/repositories/walletRepository.js +0 -1
  343. package/dist/esm/script/address.js +0 -104
  344. package/dist/esm/script/base.js +0 -179
  345. package/dist/esm/script/default.js +0 -54
  346. package/dist/esm/script/delegate.js +0 -50
  347. package/dist/esm/script/tapscript.js +0 -615
  348. package/dist/esm/script/vhtlc.js +0 -167
  349. package/dist/esm/storage/asyncStorage.js +0 -46
  350. package/dist/esm/storage/fileSystem.js +0 -104
  351. package/dist/esm/storage/inMemory.js +0 -20
  352. package/dist/esm/storage/index.js +0 -1
  353. package/dist/esm/storage/indexedDB.js +0 -97
  354. package/dist/esm/storage/localStorage.js +0 -47
  355. package/dist/esm/tree/signingSession.js +0 -191
  356. package/dist/esm/tree/txTree.js +0 -188
  357. package/dist/esm/tree/validation.js +0 -101
  358. package/dist/esm/utils/anchor.js +0 -31
  359. package/dist/esm/utils/arkTransaction.js +0 -264
  360. package/dist/esm/utils/bip21.js +0 -123
  361. package/dist/esm/utils/syncCursors.js +0 -119
  362. package/dist/esm/utils/timelock.js +0 -22
  363. package/dist/esm/utils/transaction.js +0 -24
  364. package/dist/esm/utils/transactionHistory.js +0 -180
  365. package/dist/esm/utils/txSizeEstimator.js +0 -128
  366. package/dist/esm/utils/unknownFields.js +0 -169
  367. package/dist/esm/wallet/asset-manager.js +0 -325
  368. package/dist/esm/wallet/asset.js +0 -113
  369. package/dist/esm/wallet/batch.js +0 -180
  370. package/dist/esm/wallet/delegator.js +0 -297
  371. package/dist/esm/wallet/expo/background.js +0 -111
  372. package/dist/esm/wallet/expo/index.js +0 -2
  373. package/dist/esm/wallet/expo/wallet.js +0 -193
  374. package/dist/esm/wallet/hdDescriptorProvider.js +0 -155
  375. package/dist/esm/wallet/index.js +0 -75
  376. package/dist/esm/wallet/onchain.js +0 -285
  377. package/dist/esm/wallet/ramps.js +0 -212
  378. package/dist/esm/wallet/serviceWorker/wallet-message-handler.js +0 -946
  379. package/dist/esm/wallet/serviceWorker/wallet.js +0 -1168
  380. package/dist/esm/wallet/unroll.js +0 -285
  381. package/dist/esm/wallet/utils.js +0 -103
  382. package/dist/esm/wallet/validation.js +0 -142
  383. package/dist/esm/wallet/vtxo-manager.js +0 -1136
  384. package/dist/esm/wallet/wallet.js +0 -2041
  385. package/dist/esm/worker/browser/service-worker-manager.js +0 -177
  386. package/dist/esm/worker/browser/utils.js +0 -63
  387. package/dist/esm/worker/errors.js +0 -11
  388. package/dist/esm/worker/expo/asyncStorageTaskQueue.js +0 -74
  389. package/dist/esm/worker/expo/index.js +0 -4
  390. package/dist/esm/worker/expo/processors/contractPollProcessor.js +0 -59
  391. package/dist/esm/worker/expo/processors/index.js +0 -1
  392. package/dist/esm/worker/expo/taskQueue.js +0 -37
  393. package/dist/esm/worker/expo/taskRunner.js +0 -69
  394. package/dist/esm/worker/messageBus.js +0 -469
  395. package/dist/types/adapters/asyncStorage.d.ts +0 -2
  396. package/dist/types/adapters/expo.d.ts +0 -4
  397. package/dist/types/adapters/fileSystem.d.ts +0 -2
  398. package/dist/types/adapters/indexedDB.d.ts +0 -2
  399. package/dist/types/adapters/localStorage.d.ts +0 -2
  400. package/dist/types/arkfee/celenv.d.ts +0 -25
  401. package/dist/types/arkfee/estimator.d.ts +0 -49
  402. package/dist/types/arkfee/index.d.ts +0 -2
  403. package/dist/types/arkfee/types.d.ts +0 -38
  404. package/dist/types/arknote/index.d.ts +0 -84
  405. package/dist/types/bip322/index.d.ts +0 -55
  406. package/dist/types/contracts/arkcontract.d.ts +0 -99
  407. package/dist/types/contracts/contractManager.d.ts +0 -381
  408. package/dist/types/contracts/contractWatcher.d.ts +0 -217
  409. package/dist/types/contracts/handlers/default.d.ts +0 -19
  410. package/dist/types/contracts/handlers/delegate.d.ts +0 -21
  411. package/dist/types/contracts/handlers/helpers.d.ts +0 -19
  412. package/dist/types/contracts/handlers/index.d.ts +0 -7
  413. package/dist/types/contracts/handlers/registry.d.ts +0 -65
  414. package/dist/types/contracts/handlers/vhtlc.d.ts +0 -32
  415. package/dist/types/contracts/index.d.ts +0 -14
  416. package/dist/types/contracts/types.d.ts +0 -233
  417. package/dist/types/contracts/vtxoOwnership.d.ts +0 -33
  418. package/dist/types/extension/asset/assetGroup.d.ts +0 -119
  419. package/dist/types/extension/asset/assetId.d.ts +0 -83
  420. package/dist/types/extension/asset/assetInput.d.ts +0 -64
  421. package/dist/types/extension/asset/assetOutput.d.ts +0 -54
  422. package/dist/types/extension/asset/assetRef.d.ts +0 -91
  423. package/dist/types/extension/asset/index.d.ts +0 -8
  424. package/dist/types/extension/asset/metadata.d.ts +0 -52
  425. package/dist/types/extension/asset/packet.d.ts +0 -41
  426. package/dist/types/extension/asset/types.d.ts +0 -16
  427. package/dist/types/extension/asset/utils.d.ts +0 -21
  428. package/dist/types/extension/index.d.ts +0 -56
  429. package/dist/types/extension/packet.d.ts +0 -21
  430. package/dist/types/forfeit.d.ts +0 -18
  431. package/dist/types/identity/descriptor.d.ts +0 -61
  432. package/dist/types/identity/descriptorProvider.d.ts +0 -35
  433. package/dist/types/identity/hdCapableIdentity.d.ts +0 -44
  434. package/dist/types/identity/index.d.ts +0 -56
  435. package/dist/types/identity/seedIdentity.d.ts +0 -254
  436. package/dist/types/identity/serialize.d.ts +0 -96
  437. package/dist/types/identity/singleKey.d.ts +0 -62
  438. package/dist/types/identity/staticDescriptorProvider.d.ts +0 -18
  439. package/dist/types/index.d.ts +0 -59
  440. package/dist/types/intent/index.d.ts +0 -86
  441. package/dist/types/musig2/index.d.ts +0 -4
  442. package/dist/types/musig2/keys.d.ts +0 -9
  443. package/dist/types/musig2/nonces.d.ts +0 -14
  444. package/dist/types/musig2/sign.d.ts +0 -27
  445. package/dist/types/networks.d.ts +0 -16
  446. package/dist/types/providers/ark.d.ts +0 -369
  447. package/dist/types/providers/delegator.d.ts +0 -82
  448. package/dist/types/providers/electrum.d.ts +0 -312
  449. package/dist/types/providers/errors.d.ts +0 -13
  450. package/dist/types/providers/expoArk.d.ts +0 -22
  451. package/dist/types/providers/expoIndexer.d.ts +0 -18
  452. package/dist/types/providers/expoUtils.d.ts +0 -18
  453. package/dist/types/providers/indexer.d.ts +0 -301
  454. package/dist/types/providers/onchain.d.ts +0 -148
  455. package/dist/types/providers/utils.d.ts +0 -12
  456. package/dist/types/repositories/contractRepository.d.ts +0 -32
  457. package/dist/types/repositories/inMemory/contractRepository.d.ts +0 -17
  458. package/dist/types/repositories/inMemory/walletRepository.d.ts +0 -29
  459. package/dist/types/repositories/index.d.ts +0 -9
  460. package/dist/types/repositories/indexedDB/contractRepository.d.ts +0 -21
  461. package/dist/types/repositories/indexedDB/db.d.ts +0 -4
  462. package/dist/types/repositories/indexedDB/manager.d.ts +0 -25
  463. package/dist/types/repositories/indexedDB/schema.d.ts +0 -9
  464. package/dist/types/repositories/indexedDB/walletRepository.d.ts +0 -28
  465. package/dist/types/repositories/indexedDB/websqlAdapter.d.ts +0 -49
  466. package/dist/types/repositories/migrations/contractRepositoryImpl.d.ts +0 -24
  467. package/dist/types/repositories/migrations/fromStorageAdapter.d.ts +0 -19
  468. package/dist/types/repositories/migrations/walletRepositoryImpl.d.ts +0 -27
  469. package/dist/types/repositories/realm/contractRepository.d.ts +0 -24
  470. package/dist/types/repositories/realm/index.d.ts +0 -4
  471. package/dist/types/repositories/realm/types.d.ts +0 -16
  472. package/dist/types/repositories/realm/walletRepository.d.ts +0 -34
  473. package/dist/types/repositories/scriptFromAddress.d.ts +0 -9
  474. package/dist/types/repositories/serialization.d.ts +0 -65
  475. package/dist/types/repositories/sqlite/contractRepository.d.ts +0 -33
  476. package/dist/types/repositories/sqlite/index.d.ts +0 -3
  477. package/dist/types/repositories/sqlite/types.d.ts +0 -18
  478. package/dist/types/repositories/walletRepository.d.ts +0 -72
  479. package/dist/types/script/address.d.ts +0 -67
  480. package/dist/types/script/base.d.ts +0 -105
  481. package/dist/types/script/default.d.ts +0 -44
  482. package/dist/types/script/delegate.d.ts +0 -40
  483. package/dist/types/script/tapscript.d.ts +0 -169
  484. package/dist/types/script/vhtlc.d.ts +0 -66
  485. package/dist/types/tree/signingSession.d.ts +0 -37
  486. package/dist/types/tree/txTree.d.ts +0 -28
  487. package/dist/types/tree/validation.d.ts +0 -15
  488. package/dist/types/utils/anchor.d.ts +0 -19
  489. package/dist/types/utils/arkTransaction.d.ts +0 -49
  490. package/dist/types/utils/bip21.d.ts +0 -38
  491. package/dist/types/utils/syncCursors.d.ts +0 -60
  492. package/dist/types/utils/timelock.d.ts +0 -9
  493. package/dist/types/utils/transaction.d.ts +0 -13
  494. package/dist/types/utils/transactionHistory.d.ts +0 -15
  495. package/dist/types/utils/txSizeEstimator.d.ts +0 -40
  496. package/dist/types/utils/unknownFields.d.ts +0 -83
  497. package/dist/types/wallet/asset-manager.d.ts +0 -69
  498. package/dist/types/wallet/asset.d.ts +0 -21
  499. package/dist/types/wallet/batch.d.ts +0 -107
  500. package/dist/types/wallet/delegator.d.ts +0 -48
  501. package/dist/types/wallet/expo/background.d.ts +0 -66
  502. package/dist/types/wallet/expo/index.d.ts +0 -4
  503. package/dist/types/wallet/hdDescriptorProvider.d.ts +0 -93
  504. package/dist/types/wallet/index.d.ts +0 -755
  505. package/dist/types/wallet/onchain.d.ts +0 -109
  506. package/dist/types/wallet/ramps.d.ts +0 -64
  507. package/dist/types/wallet/serviceWorker/wallet-message-handler.d.ts +0 -543
  508. package/dist/types/wallet/serviceWorker/wallet.d.ts +0 -238
  509. package/dist/types/wallet/unroll.d.ts +0 -114
  510. package/dist/types/wallet/utils.d.ts +0 -36
  511. package/dist/types/wallet/validation.d.ts +0 -24
  512. package/dist/types/wallet/vtxo-manager.d.ts +0 -476
  513. package/dist/types/wallet/wallet.d.ts +0 -360
  514. package/dist/types/worker/browser/service-worker-manager.d.ts +0 -32
  515. package/dist/types/worker/browser/utils.d.ts +0 -17
  516. package/dist/types/worker/errors.d.ts +0 -7
  517. package/dist/types/worker/expo/index.d.ts +0 -7
  518. package/dist/types/worker/expo/processors/contractPollProcessor.d.ts +0 -19
  519. package/dist/types/worker/expo/processors/index.d.ts +0 -1
  520. package/dist/types/worker/expo/taskQueue.d.ts +0 -50
  521. package/dist/types/worker/expo/taskRunner.d.ts +0 -66
  522. package/dist/types/worker/messageBus.d.ts +0 -188
@@ -1,946 +0,0 @@
1
- import { RestIndexerProvider } from "../../providers/indexer.js";
2
- import { isExpired, isRecoverable, isSpendable, isSubdust, } from "../index.js";
3
- import { extendCoin } from "../utils.js";
4
- import { buildTransactionHistory } from "../../utils/transactionHistory.js";
5
- import { filterVtxosForScript, getVtxosForContract, saveVtxosForContract, warnAndFilterVtxosForScript, } from "../../contracts/vtxoOwnership.js";
6
- import { scriptFromArkAddress } from "../../repositories/scriptFromAddress.js";
7
- export class WalletNotInitializedError extends Error {
8
- constructor() {
9
- super("Wallet handler not initialized");
10
- this.name = "WalletNotInitializedError";
11
- }
12
- }
13
- export class ReadonlyWalletError extends Error {
14
- constructor() {
15
- super("Read-only wallet: operation requires signing");
16
- this.name = "ReadonlyWalletError";
17
- }
18
- }
19
- export class DelegatorNotConfiguredError extends Error {
20
- constructor() {
21
- super("Delegator not configured");
22
- this.name = "DelegatorNotConfiguredError";
23
- }
24
- }
25
- export const DEFAULT_MESSAGE_TAG = "WALLET_UPDATER";
26
- export class WalletMessageHandler {
27
- /**
28
- * Instantiate a new WalletUpdater.
29
- * Can override the default `messageTag` allowing more than one updater to run in parallel.
30
- * Note that the default ServiceWorkerWallet sends messages to the default WalletUpdater tag.
31
- */
32
- constructor(options) {
33
- this.onNextTick = [];
34
- this.messageTag = options?.messageTag ?? DEFAULT_MESSAGE_TAG;
35
- }
36
- // lifecycle methods
37
- async start(...params) {
38
- const [services, repositories] = params;
39
- this.readonlyWallet = services.readonlyWallet;
40
- this.wallet = services.wallet;
41
- this.arkProvider = services.arkProvider;
42
- this.walletRepository = repositories.walletRepository;
43
- }
44
- async stop() {
45
- if (this.incomingFundsSubscription) {
46
- this.incomingFundsSubscription();
47
- this.incomingFundsSubscription = undefined;
48
- }
49
- if (this.contractEventsSubscription) {
50
- this.contractEventsSubscription();
51
- this.contractEventsSubscription = undefined;
52
- }
53
- // Dispose the wallet to stop VtxoManager background tasks
54
- // (auto-renewal, boarding input polling) and ContractWatcher.
55
- try {
56
- if (this.wallet) {
57
- await this.wallet.dispose();
58
- }
59
- else if (this.readonlyWallet) {
60
- await this.readonlyWallet.dispose();
61
- }
62
- }
63
- catch (_) {
64
- // best-effort teardown
65
- }
66
- this.wallet = undefined;
67
- this.readonlyWallet = undefined;
68
- this.arkProvider = undefined;
69
- this.indexerProvider = undefined;
70
- }
71
- async tick(_now) {
72
- const results = await Promise.allSettled(this.onNextTick.map((fn) => fn()));
73
- this.onNextTick = [];
74
- return results
75
- .map((result) => {
76
- if (result.status === "fulfilled") {
77
- return result.value;
78
- }
79
- else {
80
- console.error(`[${this.messageTag}] tick failed`, result.reason);
81
- // TODO: how to deliver errors down the stream? a broadcast?
82
- return null;
83
- }
84
- })
85
- .filter((response) => response !== null);
86
- }
87
- scheduleForNextTick(callback) {
88
- this.onNextTick.push(callback);
89
- }
90
- requireWallet() {
91
- if (!this.wallet) {
92
- throw new ReadonlyWalletError();
93
- }
94
- return this.wallet;
95
- }
96
- tagged(res) {
97
- return {
98
- ...res,
99
- tag: this.messageTag,
100
- };
101
- }
102
- // Flows that surrender control to the Ark server and the other participants
103
- // in a batch round: quiet gaps between protocol events can easily exceed
104
- // the bus-level messageTimeoutMs. Liveness is covered out-of-band by the
105
- // page-side PING / MESSAGE_BUS_NOT_INITIALIZED path triggered by concurrent
106
- // short requests (GET_STATUS, GET_BALANCE, ...).
107
- isLongRunning(message) {
108
- return (message.type === "SETTLE" ||
109
- message.type === "RECOVER_VTXOS" ||
110
- message.type === "RENEW_VTXOS");
111
- }
112
- async handleMessage(message) {
113
- const id = message.id;
114
- if (message.type === "INIT_WALLET") {
115
- await this.handleInitWallet(message);
116
- return this.tagged({
117
- id,
118
- type: "WALLET_INITIALIZED",
119
- });
120
- }
121
- if (!this.readonlyWallet) {
122
- return this.tagged({
123
- id,
124
- error: new WalletNotInitializedError(),
125
- });
126
- }
127
- try {
128
- switch (message.type) {
129
- case "SETTLE": {
130
- const response = await this.handleSettle(message);
131
- return this.tagged({
132
- id,
133
- ...response,
134
- });
135
- }
136
- case "SEND_BITCOIN": {
137
- const response = await this.handleSendBitcoin(message);
138
- return this.tagged({
139
- id,
140
- ...response,
141
- });
142
- }
143
- case "GET_ADDRESS": {
144
- const address = await this.readonlyWallet.getAddress();
145
- return this.tagged({
146
- id,
147
- type: "ADDRESS",
148
- payload: { address },
149
- });
150
- }
151
- case "GET_BOARDING_ADDRESS": {
152
- const address = await this.readonlyWallet.getBoardingAddress();
153
- return this.tagged({
154
- id,
155
- type: "BOARDING_ADDRESS",
156
- payload: { address },
157
- });
158
- }
159
- case "GET_BALANCE": {
160
- const balance = await this.handleGetBalance();
161
- return this.tagged({
162
- id,
163
- type: "BALANCE",
164
- payload: balance,
165
- });
166
- }
167
- case "GET_VTXOS": {
168
- const vtxos = await this.handleGetVtxos(message);
169
- return {
170
- tag: this.messageTag,
171
- id,
172
- type: "VTXOS",
173
- payload: { vtxos },
174
- };
175
- }
176
- case "GET_BOARDING_UTXOS": {
177
- const utxos = await this.getAllBoardingUtxos();
178
- return this.tagged({
179
- id,
180
- type: "BOARDING_UTXOS",
181
- payload: { utxos },
182
- });
183
- }
184
- case "GET_TRANSACTION_HISTORY": {
185
- const allVtxos = await this.getVtxosFromRepo();
186
- const transactions = (await this.buildTransactionHistoryFromCache(allVtxos)) ?? [];
187
- return this.tagged({
188
- id,
189
- type: "TRANSACTION_HISTORY",
190
- payload: { transactions },
191
- });
192
- }
193
- case "GET_STATUS": {
194
- const pubKey = await this.readonlyWallet.identity.xOnlyPublicKey();
195
- return this.tagged({
196
- id,
197
- type: "WALLET_STATUS",
198
- payload: {
199
- walletInitialized: true,
200
- xOnlyPublicKey: pubKey,
201
- },
202
- });
203
- }
204
- case "CLEAR": {
205
- await this.clear();
206
- return this.tagged({
207
- id,
208
- type: "CLEAR_SUCCESS",
209
- payload: { cleared: true },
210
- });
211
- }
212
- case "RELOAD_WALLET": {
213
- await this.reloadWallet();
214
- return this.tagged({
215
- id,
216
- type: "RELOAD_SUCCESS",
217
- payload: { reloaded: true },
218
- });
219
- }
220
- case "SIGN_TRANSACTION": {
221
- const response = await this.handleSignTransaction(message);
222
- return this.tagged({
223
- id,
224
- ...response,
225
- });
226
- }
227
- case "CREATE_CONTRACT": {
228
- const manager = await this.readonlyWallet.getContractManager();
229
- const contract = await manager.createContract(message.payload);
230
- return this.tagged({
231
- id,
232
- type: "CONTRACT_CREATED",
233
- payload: { contract },
234
- });
235
- }
236
- case "GET_CONTRACTS": {
237
- const manager = await this.readonlyWallet.getContractManager();
238
- const contracts = await manager.getContracts(message.payload.filter);
239
- return this.tagged({
240
- id,
241
- type: "CONTRACTS",
242
- payload: { contracts },
243
- });
244
- }
245
- case "GET_CONTRACTS_WITH_VTXOS": {
246
- const manager = await this.readonlyWallet.getContractManager();
247
- const contracts = await manager.getContractsWithVtxos(message.payload.filter);
248
- return this.tagged({
249
- id,
250
- type: "CONTRACTS_WITH_VTXOS",
251
- payload: { contracts },
252
- });
253
- }
254
- case "ANNOTATE_VTXOS": {
255
- const manager = await this.readonlyWallet.getContractManager();
256
- const annotated = await manager.annotateVtxos(message.payload.vtxos);
257
- return this.tagged({
258
- id,
259
- type: "ANNOTATED_VTXOS",
260
- payload: { vtxos: annotated },
261
- });
262
- }
263
- case "UPDATE_CONTRACT": {
264
- const manager = await this.readonlyWallet.getContractManager();
265
- const contract = await manager.updateContract(message.payload.script, message.payload.updates);
266
- return this.tagged({
267
- id,
268
- type: "CONTRACT_UPDATED",
269
- payload: { contract },
270
- });
271
- }
272
- case "DELETE_CONTRACT": {
273
- const manager = await this.readonlyWallet.getContractManager();
274
- await manager.deleteContract(message.payload.script);
275
- return this.tagged({
276
- id,
277
- type: "CONTRACT_DELETED",
278
- payload: { deleted: true },
279
- });
280
- }
281
- case "GET_SPENDABLE_PATHS": {
282
- const manager = await this.readonlyWallet.getContractManager();
283
- const paths = await manager.getSpendablePaths(message.payload.options);
284
- return this.tagged({
285
- id,
286
- type: "SPENDABLE_PATHS",
287
- payload: { paths },
288
- });
289
- }
290
- case "GET_ALL_SPENDING_PATHS": {
291
- const manager = await this.readonlyWallet.getContractManager();
292
- const paths = await manager.getAllSpendingPaths(message.payload.options);
293
- return this.tagged({
294
- id,
295
- type: "ALL_SPENDING_PATHS",
296
- payload: { paths },
297
- });
298
- }
299
- case "IS_CONTRACT_MANAGER_WATCHING": {
300
- const manager = await this.readonlyWallet.getContractManager();
301
- const isWatching = await manager.isWatching();
302
- return this.tagged({
303
- id,
304
- type: "CONTRACT_WATCHING",
305
- payload: { isWatching },
306
- });
307
- }
308
- case "REFRESH_VTXOS": {
309
- const manager = await this.readonlyWallet.getContractManager();
310
- await manager.refreshVtxos(message.payload);
311
- return this.tagged({
312
- id,
313
- type: "REFRESH_VTXOS_SUCCESS",
314
- });
315
- }
316
- case "REFRESH_OUTPOINTS": {
317
- const manager = await this.readonlyWallet.getContractManager();
318
- const { outpoints } = message
319
- .payload;
320
- await manager.refreshOutpoints(outpoints);
321
- return this.tagged({
322
- id,
323
- type: "REFRESH_OUTPOINTS_SUCCESS",
324
- });
325
- }
326
- case "SEND": {
327
- const { recipients } = message.payload;
328
- const txid = await this.wallet.send(...recipients);
329
- return this.tagged({
330
- id,
331
- type: "SEND_SUCCESS",
332
- payload: { txid },
333
- });
334
- }
335
- case "GET_ASSET_DETAILS": {
336
- const { assetId } = message
337
- .payload;
338
- const assetDetails = await this.readonlyWallet.assetManager.getAssetDetails(assetId);
339
- return this.tagged({
340
- id,
341
- type: "ASSET_DETAILS",
342
- payload: { assetDetails },
343
- });
344
- }
345
- case "ISSUE": {
346
- const { params } = message.payload;
347
- const result = await this.wallet.assetManager.issue(params);
348
- return this.tagged({
349
- id,
350
- type: "ISSUE_SUCCESS",
351
- payload: { result },
352
- });
353
- }
354
- case "REISSUE": {
355
- const { params } = message.payload;
356
- const txid = await this.wallet.assetManager.reissue(params);
357
- return this.tagged({
358
- id,
359
- type: "REISSUE_SUCCESS",
360
- payload: { txid },
361
- });
362
- }
363
- case "BURN": {
364
- const { params } = message.payload;
365
- const txid = await this.wallet.assetManager.burn(params);
366
- return this.tagged({
367
- id,
368
- type: "BURN_SUCCESS",
369
- payload: { txid },
370
- });
371
- }
372
- case "DELEGATE": {
373
- const response = await this.handleDelegate(message);
374
- return this.tagged({ id, ...response });
375
- }
376
- case "GET_DELEGATE_INFO": {
377
- const wallet = this.requireWallet();
378
- const delegatorManager = await wallet.getDelegatorManager();
379
- if (!delegatorManager) {
380
- throw new DelegatorNotConfiguredError();
381
- }
382
- const info = await delegatorManager.getDelegateInfo();
383
- return this.tagged({
384
- id,
385
- type: "DELEGATE_INFO",
386
- payload: { info },
387
- });
388
- }
389
- case "RECOVER_VTXOS": {
390
- const wallet = this.requireWallet();
391
- const vtxoManager = await wallet.getVtxoManager();
392
- const txid = await vtxoManager.recoverVtxos((e) => {
393
- this.scheduleForNextTick(() => this.tagged({
394
- id,
395
- type: "RECOVER_VTXOS_EVENT",
396
- payload: e,
397
- }));
398
- });
399
- return this.tagged({
400
- id,
401
- type: "RECOVER_VTXOS_SUCCESS",
402
- payload: { txid },
403
- });
404
- }
405
- case "GET_RECOVERABLE_BALANCE": {
406
- const wallet = this.requireWallet();
407
- const vtxoManager = await wallet.getVtxoManager();
408
- const balance = await vtxoManager.getRecoverableBalance();
409
- return this.tagged({
410
- id,
411
- type: "RECOVERABLE_BALANCE",
412
- payload: {
413
- recoverable: balance.recoverable.toString(),
414
- subdust: balance.subdust.toString(),
415
- includesSubdust: balance.includesSubdust,
416
- vtxoCount: balance.vtxoCount,
417
- },
418
- });
419
- }
420
- case "GET_EXPIRING_VTXOS": {
421
- const wallet = this.requireWallet();
422
- const vtxoManager = await wallet.getVtxoManager();
423
- const vtxos = await vtxoManager.getExpiringVtxos(message.payload.thresholdMs);
424
- return this.tagged({
425
- id,
426
- type: "EXPIRING_VTXOS",
427
- payload: { vtxos },
428
- });
429
- }
430
- case "RENEW_VTXOS": {
431
- const wallet = this.requireWallet();
432
- const vtxoManager = await wallet.getVtxoManager();
433
- const txid = await vtxoManager.renewVtxos((e) => {
434
- this.scheduleForNextTick(() => this.tagged({
435
- id,
436
- type: "RENEW_VTXOS_EVENT",
437
- payload: e,
438
- }));
439
- });
440
- return this.tagged({
441
- id,
442
- type: "RENEW_VTXOS_SUCCESS",
443
- payload: { txid },
444
- });
445
- }
446
- case "GET_EXPIRED_BOARDING_UTXOS": {
447
- const wallet = this.requireWallet();
448
- const vtxoManager = await wallet.getVtxoManager();
449
- const utxos = await vtxoManager.getExpiredBoardingUtxos();
450
- return this.tagged({
451
- id,
452
- type: "EXPIRED_BOARDING_UTXOS",
453
- payload: { utxos },
454
- });
455
- }
456
- case "SWEEP_EXPIRED_BOARDING_UTXOS": {
457
- const wallet = this.requireWallet();
458
- const vtxoManager = await wallet.getVtxoManager();
459
- const txid = await vtxoManager.sweepExpiredBoardingUtxos();
460
- return this.tagged({
461
- id,
462
- type: "SWEEP_EXPIRED_BOARDING_UTXOS_SUCCESS",
463
- payload: { txid },
464
- });
465
- }
466
- default:
467
- console.error("Unknown message type", message);
468
- throw new Error("Unknown message");
469
- }
470
- }
471
- catch (error) {
472
- return this.tagged({ id, error: error });
473
- }
474
- }
475
- // Wallet methods
476
- async handleInitWallet({ payload }) {
477
- const { arkServerUrl } = payload;
478
- this.indexerProvider = new RestIndexerProvider(arkServerUrl);
479
- await this.onWalletInitialized();
480
- }
481
- async handleGetBalance() {
482
- const [boardingUtxos, allVtxos] = await Promise.all([
483
- this.getAllBoardingUtxos(),
484
- this.getVtxosFromRepo(),
485
- ]);
486
- // boarding
487
- let confirmed = 0;
488
- let unconfirmed = 0;
489
- for (const utxo of boardingUtxos) {
490
- if (utxo.status.confirmed) {
491
- confirmed += utxo.value;
492
- }
493
- else {
494
- unconfirmed += utxo.value;
495
- }
496
- }
497
- // offchain — split spendable vs swept from single repo read
498
- const spendableVtxos = allVtxos.filter(isSpendable);
499
- const sweptVtxos = allVtxos.filter((vtxo) => vtxo.virtualStatus.state === "swept");
500
- let settled = 0;
501
- let preconfirmed = 0;
502
- let recoverable = 0;
503
- for (const vtxo of spendableVtxos) {
504
- if (vtxo.virtualStatus.state === "settled") {
505
- settled += vtxo.value;
506
- }
507
- else if (vtxo.virtualStatus.state === "preconfirmed") {
508
- preconfirmed += vtxo.value;
509
- }
510
- }
511
- for (const vtxo of sweptVtxos) {
512
- if (isSpendable(vtxo)) {
513
- recoverable += vtxo.value;
514
- }
515
- }
516
- const totalBoarding = confirmed + unconfirmed;
517
- const totalOffchain = settled + preconfirmed + recoverable;
518
- // aggregate asset balances from spendable virtual outputs
519
- const assetBalances = new Map();
520
- for (const vtxo of spendableVtxos) {
521
- if (vtxo.assets) {
522
- for (const a of vtxo.assets) {
523
- const current = assetBalances.get(a.assetId) ?? 0n;
524
- assetBalances.set(a.assetId, current + a.amount);
525
- }
526
- }
527
- }
528
- const assets = Array.from(assetBalances.entries()).map(([assetId, amount]) => ({ assetId, amount }));
529
- return {
530
- boarding: {
531
- confirmed,
532
- unconfirmed,
533
- total: totalBoarding,
534
- },
535
- settled,
536
- preconfirmed,
537
- available: settled + preconfirmed,
538
- recoverable,
539
- total: totalBoarding + totalOffchain,
540
- assets,
541
- };
542
- }
543
- async getAllBoardingUtxos() {
544
- if (!this.readonlyWallet)
545
- return [];
546
- return this.readonlyWallet.getBoardingUtxos();
547
- }
548
- /**
549
- * Get spendable vtxos from the repository
550
- */
551
- async getSpendableVtxos() {
552
- const vtxos = await this.getVtxosFromRepo();
553
- return vtxos.filter(isSpendable);
554
- }
555
- async onWalletInitialized() {
556
- if (!this.readonlyWallet ||
557
- !this.arkProvider ||
558
- !this.indexerProvider ||
559
- !this.walletRepository) {
560
- return;
561
- }
562
- // Initialize contract manager FIRST — this populates the repository
563
- // with full virtual output history for all contracts (one indexer call per contract)
564
- await this.ensureContractEventBroadcasting();
565
- // Refresh cached data (virtual outputs, boarding inputs, tx history)
566
- await this.refreshCachedData();
567
- // Recover pending transactions (init-only, not on reload).
568
- // Pending txs only exist if a send was interrupted mid-finalization.
569
- if (this.wallet) {
570
- try {
571
- const vtxos = await this.getVtxosFromRepo();
572
- const { pending, finalized } = await this.wallet.finalizePendingTxs(vtxos.filter((vtxo) => vtxo.virtualStatus.state !== "swept" &&
573
- vtxo.virtualStatus.state !== "settled"));
574
- console.info(`Recovered ${finalized.length}/${pending.length} pending transactions: ${finalized.join(", ")}`);
575
- }
576
- catch (error) {
577
- console.error("Error recovering pending transactions:", error);
578
- }
579
- }
580
- // unsubscribe previous subscription if any
581
- if (this.incomingFundsSubscription)
582
- this.incomingFundsSubscription();
583
- const address = await this.readonlyWallet.getAddress();
584
- // subscribe for incoming funds and notify all clients when new funds arrive
585
- this.incomingFundsSubscription =
586
- await this.readonlyWallet.notifyIncomingFunds(async (funds) => {
587
- if (funds.type === "vtxo") {
588
- // `funds.newVtxos` / `funds.spentVtxos` are already
589
- // ExtendedVirtualCoin — annotation happened inside the
590
- // underlying Wallet's subscription handler before this
591
- // callback fired. Re-annotating here would only duplicate
592
- // work and re-expose us to `annotateVtxos` throws.
593
- const { newVtxos, spentVtxos } = funds;
594
- if (newVtxos.length + spentVtxos.length === 0)
595
- return;
596
- // Save virtual outputs using unified repository. The
597
- // event may carry rows for several scripts (other
598
- // contracts the wallet watches), so split by script and
599
- // save each bucket under its own contract address rather
600
- // than saving a mixed-script array under one address.
601
- const byScript = new Map();
602
- for (const v of [...newVtxos, ...spentVtxos]) {
603
- if (!v.script) {
604
- // Without a script we can't route the row to the
605
- // right contract bucket; surface the drop instead
606
- // of silently losing the VTXO.
607
- console.warn(`WalletMessageHandler.notifyIncomingFunds: dropping VTXO without script ${v.txid}:${v.vout}`);
608
- continue;
609
- }
610
- const arr = byScript.get(v.script) ?? [];
611
- arr.push(v);
612
- byScript.set(v.script, arr);
613
- }
614
- let walletScript;
615
- try {
616
- walletScript = scriptFromArkAddress(address);
617
- }
618
- catch {
619
- walletScript = undefined;
620
- }
621
- const cm = await this.readonlyWallet.getContractManager();
622
- const contracts = await cm.getContracts();
623
- const addrByScript = new Map(contracts.map((c) => [c.script, c.address]));
624
- for (const [script, vtxos] of byScript) {
625
- const filtered = warnAndFilterVtxosForScript(vtxos, script, "WalletMessageHandler.notifyIncomingFunds");
626
- if (filtered.length === 0)
627
- continue;
628
- const targetAddress = script === walletScript
629
- ? address
630
- : addrByScript.get(script);
631
- if (!targetAddress)
632
- continue;
633
- if (this.walletRepository) {
634
- await saveVtxosForContract(this.walletRepository, { script, address: targetAddress }, filtered);
635
- }
636
- }
637
- // notify all clients about the virtual output state update
638
- this.scheduleForNextTick(() => this.tagged({
639
- type: "VTXO_UPDATE",
640
- broadcast: true,
641
- payload: { newVtxos, spentVtxos },
642
- }));
643
- }
644
- if (funds.type === "utxo") {
645
- const utxos = funds.coins.map((utxo) => extendCoin(this.readonlyWallet, utxo));
646
- const boardingAddress = await this.readonlyWallet.getBoardingAddress();
647
- // save boarding inputs using unified repository
648
- // TODO: remove UTXOs by address
649
- // await this.walletRepository.clearUtxos(boardingAddress);
650
- await this.walletRepository?.saveUtxos(boardingAddress, utxos);
651
- // notify all clients about the boarding input state update
652
- this.scheduleForNextTick(() => this.tagged({
653
- type: "UTXO_UPDATE",
654
- broadcast: true,
655
- payload: { coins: utxos },
656
- }));
657
- }
658
- });
659
- // Eagerly start the VtxoManager so its background tasks (auto-renewal,
660
- // boarding input polling/sweep) run inside the service worker without
661
- // waiting for a client to send a VtxoManager message first.
662
- if (this.wallet) {
663
- try {
664
- await this.wallet.getVtxoManager();
665
- }
666
- catch (error) {
667
- console.error("Error starting VtxoManager:", error);
668
- }
669
- }
670
- }
671
- /**
672
- * Refresh virtual outputs, boarding inputs, and transaction history from cache.
673
- * Shared by onWalletInitialized (full bootstrap) and reloadWallet
674
- * (post-refresh), avoiding duplicate subscriptions and VtxoManager restarts.
675
- */
676
- async refreshCachedData() {
677
- if (!this.readonlyWallet || !this.walletRepository) {
678
- return;
679
- }
680
- // Read virtual outputs from repository (now populated by contract manager)
681
- const vtxos = await this.getVtxosFromRepo();
682
- // Fetch boarding inputs and save using unified repository
683
- const boardingAddress = await this.readonlyWallet.getBoardingAddress();
684
- const coins = await this.readonlyWallet.onchainProvider.getCoins(boardingAddress);
685
- await this.walletRepository.deleteUtxos(boardingAddress);
686
- await this.walletRepository.saveUtxos(boardingAddress, coins.map((utxo) => extendCoin(this.readonlyWallet, utxo)));
687
- // Build transaction history from cached virtual outputs (no indexer call)
688
- const address = await this.readonlyWallet.getAddress();
689
- const txs = await this.buildTransactionHistoryFromCache(vtxos);
690
- if (txs)
691
- await this.walletRepository.saveTransactions(address, txs);
692
- }
693
- /**
694
- * Force a full VTXO refresh from the indexer, then refresh cached data.
695
- * Used by RELOAD_WALLET to ensure fresh data without re-subscribing
696
- * to incoming funds or restarting the VtxoManager.
697
- */
698
- async reloadWallet() {
699
- if (!this.readonlyWallet)
700
- return;
701
- const manager = await this.readonlyWallet.getContractManager();
702
- await manager.refreshVtxos();
703
- await this.refreshCachedData();
704
- }
705
- async handleSettle(message) {
706
- const wallet = this.requireWallet();
707
- const txid = await wallet.settle(message.payload.params, (e) => {
708
- this.scheduleForNextTick(() => this.tagged({
709
- id: message.id,
710
- type: "SETTLE_EVENT",
711
- payload: e,
712
- }));
713
- });
714
- if (!txid) {
715
- throw new Error("Settlement failed");
716
- }
717
- return { type: "SETTLE_SUCCESS", payload: { txid } };
718
- }
719
- async handleSendBitcoin(message) {
720
- const wallet = this.requireWallet();
721
- const txid = await wallet.sendBitcoin(message.payload);
722
- if (!txid) {
723
- throw new Error("Send bitcoin failed");
724
- }
725
- return {
726
- type: "SEND_BITCOIN_SUCCESS",
727
- payload: { txid },
728
- };
729
- }
730
- async handleSignTransaction(message) {
731
- const wallet = this.requireWallet();
732
- const { tx, inputIndexes } = message.payload;
733
- const signature = await wallet.identity.sign(tx, inputIndexes);
734
- if (!signature) {
735
- throw new Error("Sign transaction failed");
736
- }
737
- return {
738
- type: "SIGN_TRANSACTION",
739
- payload: { tx: signature },
740
- };
741
- }
742
- async handleDelegate(message) {
743
- const wallet = this.requireWallet();
744
- const delegatorManager = await wallet.getDelegatorManager();
745
- if (!delegatorManager) {
746
- throw new DelegatorNotConfiguredError();
747
- }
748
- const { vtxoOutpoints, destination, delegateAt } = message.payload;
749
- const allVtxos = await wallet.getVtxos();
750
- const outpointSet = new Set(vtxoOutpoints.map((o) => `${o.txid}:${o.vout}`));
751
- const filtered = allVtxos
752
- .filter((v) => outpointSet.has(`${v.txid}:${v.vout}`))
753
- .map((v) => ({ ...v, contractScript: v.script }));
754
- const result = await delegatorManager.delegate(filtered, destination, delegateAt !== undefined ? new Date(delegateAt) : undefined);
755
- return {
756
- tag: this.messageTag,
757
- type: "DELEGATE_SUCCESS",
758
- payload: {
759
- delegated: result.delegated.map((o) => ({
760
- txid: o.txid,
761
- vout: o.vout,
762
- })),
763
- failed: result.failed.map((f) => ({
764
- outpoints: f.outpoints.map((o) => ({
765
- txid: o.txid,
766
- vout: o.vout,
767
- })),
768
- error: String(f.error),
769
- })),
770
- },
771
- };
772
- }
773
- async handleGetVtxos(message) {
774
- if (!this.readonlyWallet) {
775
- throw new WalletNotInitializedError();
776
- }
777
- const vtxos = await this.getSpendableVtxos();
778
- const dustAmount = this.readonlyWallet.dustAmount;
779
- const includeRecoverable = message.payload.filter?.withRecoverable ?? false;
780
- const filteredVtxos = includeRecoverable
781
- ? vtxos
782
- : vtxos.filter((v) => {
783
- if (dustAmount != null && isSubdust(v, dustAmount)) {
784
- return false;
785
- }
786
- if (isRecoverable(v)) {
787
- return false;
788
- }
789
- if (isExpired(v)) {
790
- return false;
791
- }
792
- return true;
793
- });
794
- return filteredVtxos;
795
- }
796
- async clear() {
797
- if (!this.readonlyWallet)
798
- return;
799
- if (this.incomingFundsSubscription)
800
- this.incomingFundsSubscription();
801
- if (this.contractEventsSubscription) {
802
- this.contractEventsSubscription();
803
- this.contractEventsSubscription = undefined;
804
- }
805
- // Dispose the wallet to stop the ContractWatcher (and its polling
806
- // intervals) before clearing the repositories, otherwise the poller
807
- // will hit a closing IndexedDB connection.
808
- try {
809
- if (this.wallet) {
810
- await this.wallet.dispose();
811
- }
812
- else {
813
- await this.readonlyWallet.dispose();
814
- }
815
- }
816
- catch (_) {
817
- // best-effort teardown
818
- }
819
- try {
820
- await this.walletRepository?.clear();
821
- }
822
- catch (_) {
823
- console.warn("Failed to clear vtxos from wallet repository");
824
- }
825
- this.wallet = undefined;
826
- this.readonlyWallet = undefined;
827
- this.arkProvider = undefined;
828
- this.indexerProvider = undefined;
829
- }
830
- /**
831
- * Read all virtual outputs from the repository, aggregated across all contract
832
- * addresses and the wallet's primary address, with deduplication.
833
- */
834
- async getVtxosFromRepo() {
835
- if (!this.walletRepository || !this.readonlyWallet)
836
- return [];
837
- const seen = new Set();
838
- const allVtxos = [];
839
- const addVtxos = (vtxos) => {
840
- for (const vtxo of vtxos) {
841
- const key = `${vtxo.txid}:${vtxo.vout}`;
842
- if (!seen.has(key)) {
843
- seen.add(key);
844
- allVtxos.push(vtxo);
845
- }
846
- }
847
- };
848
- // Aggregate virtual outputs from all contract addresses. Address
849
- // buckets may carry legacy duplicate rows from other contracts; gate
850
- // each bucket by its owning contract script before deduplication so a
851
- // wrong-script row never wins the txid:vout race.
852
- const manager = await this.readonlyWallet.getContractManager();
853
- const contracts = await manager.getContracts();
854
- for (const contract of contracts) {
855
- addVtxos(await getVtxosForContract(this.walletRepository, contract));
856
- }
857
- // Also check the wallet's primary address. Decode it to its script
858
- // and apply the same script gate. Failing to decode the wallet's own
859
- // address is a structural bug — surfacing the error is safer than
860
- // silently dropping the primary bucket and zeroing the user's
861
- // visible balance.
862
- const walletAddress = await this.readonlyWallet.getAddress();
863
- let walletScript;
864
- try {
865
- walletScript = scriptFromArkAddress(walletAddress);
866
- }
867
- catch (e) {
868
- throw new Error(`WalletMessageHandler.getVtxosFromRepo: failed to derive script from wallet address ${walletAddress}: ${e instanceof Error ? e.message : String(e)}`);
869
- }
870
- const walletVtxos = await this.walletRepository.getVtxos(walletAddress);
871
- addVtxos(filterVtxosForScript(walletVtxos, walletScript));
872
- return allVtxos;
873
- }
874
- /**
875
- * Build transaction history from cached virtual outputs without hitting the indexer.
876
- * Falls back to indexer only for uncached transaction timestamps.
877
- */
878
- async buildTransactionHistoryFromCache(vtxos) {
879
- if (!this.readonlyWallet)
880
- return null;
881
- const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
882
- // Build a lookup for cached virtual output timestamps, keyed by txid.
883
- // Multiple virtual outputs can share a txid (different vouts) — we keep the
884
- // earliest createdAt so the history ordering is stable.
885
- const vtxoCreatedAt = new Map();
886
- for (const vtxo of vtxos) {
887
- const existing = vtxoCreatedAt.get(vtxo.txid);
888
- const ts = vtxo.createdAt.getTime();
889
- if (existing === undefined || ts < existing) {
890
- vtxoCreatedAt.set(vtxo.txid, ts);
891
- }
892
- }
893
- // Pre-fetch uncached timestamps in a single batched indexer call.
894
- // buildTransactionHistory needs these for spent-offchain virtual outputs with
895
- // no change outputs (i.e. arkTxId is set but no virtual output has txid === arkTxId).
896
- if (this.indexerProvider) {
897
- const uncachedTxids = new Set();
898
- for (const vtxo of vtxos) {
899
- if (vtxo.isSpent &&
900
- vtxo.arkTxId &&
901
- !vtxoCreatedAt.has(vtxo.arkTxId) &&
902
- !vtxos.some((v) => v.txid === vtxo.arkTxId)) {
903
- uncachedTxids.add(vtxo.arkTxId);
904
- }
905
- }
906
- if (uncachedTxids.size > 0) {
907
- const outpoints = [...uncachedTxids].map((txid) => ({
908
- txid,
909
- vout: 0,
910
- }));
911
- const BATCH_SIZE = 100;
912
- for (let i = 0; i < outpoints.length; i += BATCH_SIZE) {
913
- const res = await this.indexerProvider.getVtxos({
914
- outpoints: outpoints.slice(i, i + BATCH_SIZE),
915
- });
916
- for (const v of res.vtxos) {
917
- vtxoCreatedAt.set(v.txid, v.createdAt.getTime());
918
- }
919
- }
920
- }
921
- }
922
- const getTxCreatedAt = async (txid) => {
923
- return vtxoCreatedAt.get(txid);
924
- };
925
- return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, getTxCreatedAt);
926
- }
927
- async ensureContractEventBroadcasting() {
928
- if (!this.readonlyWallet)
929
- return;
930
- if (this.contractEventsSubscription)
931
- return;
932
- try {
933
- const manager = await this.readonlyWallet.getContractManager();
934
- this.contractEventsSubscription = manager.onContractEvent((event) => {
935
- this.scheduleForNextTick(() => this.tagged({
936
- type: "CONTRACT_EVENT",
937
- broadcast: true,
938
- payload: { event },
939
- }));
940
- });
941
- }
942
- catch (error) {
943
- console.error("Error subscribing to contract events:", error);
944
- }
945
- }
946
- }