@arkade-os/sdk 0.4.24 → 0.4.26

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 (212) hide show
  1. package/dist/cjs/contracts/contractManager.js +44 -8
  2. package/dist/cjs/contracts/contractWatcher.js +2 -2
  3. package/dist/cjs/contracts/vtxoOwnership.js +18 -0
  4. package/dist/cjs/repositories/inMemory/walletRepository.js +35 -0
  5. package/dist/cjs/repositories/indexedDB/walletRepository.js +117 -0
  6. package/dist/cjs/repositories/realm/walletRepository.js +28 -0
  7. package/dist/cjs/repositories/sqlite/walletRepository.js +23 -0
  8. package/dist/cjs/script/address.js +2 -2
  9. package/dist/cjs/wallet/serviceWorker/wallet-message-handler.js +14 -3
  10. package/dist/cjs/wallet/serviceWorker/wallet.js +10 -0
  11. package/dist/cjs/wallet/vtxo-manager.js +112 -16
  12. package/dist/cjs/wallet/wallet.js +3 -17
  13. package/dist/cjs/worker/expo/processors/contractPollProcessor.js +1 -1
  14. package/dist/esm/adapters/asyncStorage.js +1 -1
  15. package/dist/esm/adapters/expo.js +2 -2
  16. package/dist/esm/adapters/fileSystem.js +1 -1
  17. package/dist/esm/adapters/indexedDB.js +1 -1
  18. package/dist/esm/adapters/localStorage.js +1 -1
  19. package/dist/esm/arkfee/index.js +1 -1
  20. package/dist/esm/arknote/index.js +1 -1
  21. package/dist/esm/bip322/index.js +2 -2
  22. package/dist/esm/contracts/arkcontract.js +2 -2
  23. package/dist/esm/contracts/contractManager.js +49 -13
  24. package/dist/esm/contracts/contractWatcher.js +5 -5
  25. package/dist/esm/contracts/handlers/default.js +4 -4
  26. package/dist/esm/contracts/handlers/delegate.js +4 -4
  27. package/dist/esm/contracts/handlers/helpers.js +2 -2
  28. package/dist/esm/contracts/handlers/index.js +8 -8
  29. package/dist/esm/contracts/handlers/vhtlc.js +3 -3
  30. package/dist/esm/contracts/index.js +8 -8
  31. package/dist/esm/contracts/vtxoOwnership.js +16 -0
  32. package/dist/esm/extension/asset/assetGroup.js +7 -7
  33. package/dist/esm/extension/asset/assetId.js +2 -2
  34. package/dist/esm/extension/asset/assetInput.js +2 -2
  35. package/dist/esm/extension/asset/assetOutput.js +1 -1
  36. package/dist/esm/extension/asset/assetRef.js +3 -3
  37. package/dist/esm/extension/asset/index.js +8 -8
  38. package/dist/esm/extension/asset/metadata.js +1 -1
  39. package/dist/esm/extension/asset/packet.js +3 -3
  40. package/dist/esm/extension/index.js +4 -4
  41. package/dist/esm/forfeit.js +2 -2
  42. package/dist/esm/identity/index.js +5 -5
  43. package/dist/esm/identity/seedIdentity.js +2 -2
  44. package/dist/esm/identity/serialize.js +2 -2
  45. package/dist/esm/identity/singleKey.js +1 -1
  46. package/dist/esm/identity/staticDescriptorProvider.js +2 -2
  47. package/dist/esm/index.js +47 -47
  48. package/dist/esm/intent/index.js +3 -3
  49. package/dist/esm/musig2/index.js +3 -3
  50. package/dist/esm/musig2/sign.js +1 -1
  51. package/dist/esm/providers/ark.js +3 -3
  52. package/dist/esm/providers/delegator.js +1 -1
  53. package/dist/esm/providers/electrum.js +2 -2
  54. package/dist/esm/providers/expoArk.js +2 -2
  55. package/dist/esm/providers/expoIndexer.js +3 -3
  56. package/dist/esm/providers/indexer.js +3 -3
  57. package/dist/esm/repositories/inMemory/walletRepository.js +35 -0
  58. package/dist/esm/repositories/index.js +9 -9
  59. package/dist/esm/repositories/indexedDB/contractRepository.js +4 -4
  60. package/dist/esm/repositories/indexedDB/db.js +2 -2
  61. package/dist/esm/repositories/indexedDB/schema.js +1 -1
  62. package/dist/esm/repositories/indexedDB/walletRepository.js +122 -5
  63. package/dist/esm/repositories/migrations/fromStorageAdapter.js +1 -1
  64. package/dist/esm/repositories/migrations/walletRepositoryImpl.js +1 -1
  65. package/dist/esm/repositories/realm/index.js +3 -3
  66. package/dist/esm/repositories/realm/schemas.js +1 -1
  67. package/dist/esm/repositories/realm/walletRepository.js +30 -2
  68. package/dist/esm/repositories/scriptFromAddress.js +1 -1
  69. package/dist/esm/repositories/sqlite/index.js +2 -2
  70. package/dist/esm/repositories/sqlite/walletRepository.js +25 -2
  71. package/dist/esm/script/address.js +3 -3
  72. package/dist/esm/script/base.js +3 -3
  73. package/dist/esm/script/default.js +2 -2
  74. package/dist/esm/script/delegate.js +3 -3
  75. package/dist/esm/script/tapscript.js +1 -1
  76. package/dist/esm/script/vhtlc.js +2 -2
  77. package/dist/esm/storage/indexedDB.js +1 -1
  78. package/dist/esm/tree/signingSession.js +2 -2
  79. package/dist/esm/tree/validation.js +2 -2
  80. package/dist/esm/utils/arkTransaction.js +7 -7
  81. package/dist/esm/utils/transactionHistory.js +1 -1
  82. package/dist/esm/utils/unknownFields.js +1 -1
  83. package/dist/esm/wallet/asset-manager.js +5 -5
  84. package/dist/esm/wallet/asset.js +1 -1
  85. package/dist/esm/wallet/batch.js +2 -2
  86. package/dist/esm/wallet/delegator.js +6 -6
  87. package/dist/esm/wallet/expo/background.js +5 -5
  88. package/dist/esm/wallet/expo/index.js +2 -2
  89. package/dist/esm/wallet/expo/wallet.js +8 -8
  90. package/dist/esm/wallet/hdDescriptorProvider.js +2 -2
  91. package/dist/esm/wallet/onchain.js +7 -7
  92. package/dist/esm/wallet/ramps.js +3 -3
  93. package/dist/esm/wallet/serviceWorker/wallet-message-handler.js +20 -9
  94. package/dist/esm/wallet/serviceWorker/wallet.js +17 -7
  95. package/dist/esm/wallet/unroll.js +7 -7
  96. package/dist/esm/wallet/utils.js +2 -2
  97. package/dist/esm/wallet/validation.js +2 -2
  98. package/dist/esm/wallet/vtxo-manager.js +120 -24
  99. package/dist/esm/wallet/wallet.js +36 -50
  100. package/dist/esm/worker/expo/index.js +4 -4
  101. package/dist/esm/worker/expo/processors/contractPollProcessor.js +2 -2
  102. package/dist/esm/worker/expo/processors/index.js +1 -1
  103. package/dist/esm/worker/expo/taskRunner.js +1 -1
  104. package/dist/esm/worker/messageBus.js +6 -6
  105. package/dist/types/adapters/asyncStorage.d.ts +2 -2
  106. package/dist/types/adapters/expo.d.ts +4 -4
  107. package/dist/types/adapters/fileSystem.d.ts +2 -2
  108. package/dist/types/adapters/indexedDB.d.ts +2 -2
  109. package/dist/types/adapters/localStorage.d.ts +2 -2
  110. package/dist/types/arkfee/index.d.ts +2 -2
  111. package/dist/types/arknote/index.d.ts +2 -2
  112. package/dist/types/bip322/index.d.ts +1 -1
  113. package/dist/types/contracts/arkcontract.d.ts +1 -1
  114. package/dist/types/contracts/contractManager.d.ts +22 -6
  115. package/dist/types/contracts/contractWatcher.d.ts +3 -3
  116. package/dist/types/contracts/handlers/default.d.ts +3 -3
  117. package/dist/types/contracts/handlers/delegate.d.ts +3 -3
  118. package/dist/types/contracts/handlers/helpers.d.ts +1 -1
  119. package/dist/types/contracts/handlers/index.d.ts +7 -7
  120. package/dist/types/contracts/handlers/registry.d.ts +1 -1
  121. package/dist/types/contracts/handlers/vhtlc.d.ts +3 -3
  122. package/dist/types/contracts/index.d.ts +14 -14
  123. package/dist/types/contracts/types.d.ts +3 -3
  124. package/dist/types/contracts/vtxoOwnership.d.ts +9 -1
  125. package/dist/types/extension/asset/assetGroup.d.ts +6 -6
  126. package/dist/types/extension/asset/assetId.d.ts +1 -1
  127. package/dist/types/extension/asset/assetInput.d.ts +2 -2
  128. package/dist/types/extension/asset/assetOutput.d.ts +1 -1
  129. package/dist/types/extension/asset/assetRef.d.ts +3 -3
  130. package/dist/types/extension/asset/index.d.ts +8 -8
  131. package/dist/types/extension/asset/metadata.d.ts +1 -1
  132. package/dist/types/extension/asset/packet.d.ts +2 -2
  133. package/dist/types/extension/index.d.ts +6 -6
  134. package/dist/types/forfeit.d.ts +1 -1
  135. package/dist/types/identity/descriptorProvider.d.ts +1 -1
  136. package/dist/types/identity/hdCapableIdentity.d.ts +3 -3
  137. package/dist/types/identity/index.d.ts +11 -11
  138. package/dist/types/identity/seedIdentity.d.ts +5 -5
  139. package/dist/types/identity/serialize.d.ts +1 -1
  140. package/dist/types/identity/singleKey.d.ts +3 -3
  141. package/dist/types/identity/staticDescriptorProvider.d.ts +3 -3
  142. package/dist/types/index.d.ts +57 -57
  143. package/dist/types/intent/index.d.ts +2 -2
  144. package/dist/types/musig2/index.d.ts +4 -4
  145. package/dist/types/providers/ark.d.ts +5 -5
  146. package/dist/types/providers/delegator.d.ts +2 -2
  147. package/dist/types/providers/electrum.d.ts +5 -5
  148. package/dist/types/providers/expoArk.d.ts +1 -1
  149. package/dist/types/providers/expoIndexer.d.ts +1 -1
  150. package/dist/types/providers/indexer.d.ts +1 -1
  151. package/dist/types/providers/onchain.d.ts +2 -2
  152. package/dist/types/repositories/contractRepository.d.ts +1 -1
  153. package/dist/types/repositories/inMemory/contractRepository.d.ts +2 -2
  154. package/dist/types/repositories/inMemory/walletRepository.d.ts +5 -2
  155. package/dist/types/repositories/index.d.ts +9 -9
  156. package/dist/types/repositories/indexedDB/contractRepository.d.ts +2 -2
  157. package/dist/types/repositories/indexedDB/db.d.ts +3 -3
  158. package/dist/types/repositories/indexedDB/walletRepository.d.ts +5 -2
  159. package/dist/types/repositories/migrations/contractRepositoryImpl.d.ts +3 -3
  160. package/dist/types/repositories/migrations/fromStorageAdapter.d.ts +2 -2
  161. package/dist/types/repositories/migrations/walletRepositoryImpl.d.ts +3 -3
  162. package/dist/types/repositories/realm/contractRepository.d.ts +3 -3
  163. package/dist/types/repositories/realm/index.d.ts +4 -4
  164. package/dist/types/repositories/realm/walletRepository.d.ts +6 -3
  165. package/dist/types/repositories/serialization.d.ts +11 -11
  166. package/dist/types/repositories/sqlite/contractRepository.d.ts +3 -3
  167. package/dist/types/repositories/sqlite/index.d.ts +3 -3
  168. package/dist/types/repositories/sqlite/walletRepository.d.ts +6 -3
  169. package/dist/types/repositories/walletRepository.d.ts +22 -1
  170. package/dist/types/script/address.d.ts +2 -2
  171. package/dist/types/script/base.d.ts +2 -2
  172. package/dist/types/script/default.d.ts +2 -2
  173. package/dist/types/script/delegate.d.ts +3 -3
  174. package/dist/types/script/vhtlc.d.ts +2 -2
  175. package/dist/types/storage/asyncStorage.d.ts +1 -1
  176. package/dist/types/storage/fileSystem.d.ts +1 -1
  177. package/dist/types/storage/inMemory.d.ts +1 -1
  178. package/dist/types/storage/indexedDB.d.ts +1 -1
  179. package/dist/types/storage/localStorage.d.ts +1 -1
  180. package/dist/types/tree/signingSession.d.ts +2 -2
  181. package/dist/types/tree/validation.d.ts +1 -1
  182. package/dist/types/utils/arkTransaction.d.ts +5 -5
  183. package/dist/types/utils/syncCursors.d.ts +1 -1
  184. package/dist/types/utils/timelock.d.ts +1 -1
  185. package/dist/types/utils/transaction.d.ts +2 -2
  186. package/dist/types/utils/transactionHistory.d.ts +1 -1
  187. package/dist/types/utils/txSizeEstimator.d.ts +1 -1
  188. package/dist/types/wallet/asset-manager.d.ts +3 -3
  189. package/dist/types/wallet/asset.d.ts +2 -2
  190. package/dist/types/wallet/batch.d.ts +2 -2
  191. package/dist/types/wallet/delegator.d.ts +5 -5
  192. package/dist/types/wallet/expo/background.d.ts +4 -4
  193. package/dist/types/wallet/expo/index.d.ts +4 -4
  194. package/dist/types/wallet/expo/wallet.d.ts +8 -8
  195. package/dist/types/wallet/hdDescriptorProvider.d.ts +4 -4
  196. package/dist/types/wallet/index.d.ts +29 -26
  197. package/dist/types/wallet/onchain.d.ts +6 -6
  198. package/dist/types/wallet/ramps.d.ts +2 -2
  199. package/dist/types/wallet/serviceWorker/wallet-message-handler.d.ts +21 -9
  200. package/dist/types/wallet/serviceWorker/wallet.d.ts +10 -10
  201. package/dist/types/wallet/unroll.d.ts +6 -6
  202. package/dist/types/wallet/utils.d.ts +5 -5
  203. package/dist/types/wallet/validation.d.ts +3 -3
  204. package/dist/types/wallet/vtxo-manager.d.ts +34 -7
  205. package/dist/types/wallet/wallet.d.ts +20 -20
  206. package/dist/types/worker/expo/asyncStorageTaskQueue.d.ts +1 -1
  207. package/dist/types/worker/expo/index.d.ts +7 -7
  208. package/dist/types/worker/expo/processors/contractPollProcessor.d.ts +1 -1
  209. package/dist/types/worker/expo/processors/index.d.ts +1 -1
  210. package/dist/types/worker/expo/taskRunner.d.ts +7 -7
  211. package/dist/types/worker/messageBus.d.ts +6 -6
  212. package/package.json +2 -2
@@ -2,39 +2,39 @@ import { base64, hex } from "@scure/base";
2
2
  import { tapLeafHash } from "@scure/btc-signer/payment.js";
3
3
  import { Address, OutScript, SigHash, Transaction } from "@scure/btc-signer";
4
4
  import { sha256 } from "@scure/btc-signer/utils.js";
5
- import { ArkAddress } from '../script/address.js';
6
- import { DefaultVtxo } from '../script/default.js';
7
- import { getNetwork } from '../networks.js';
8
- import { ESPLORA_URL, EsploraProvider, } from '../providers/onchain.js';
9
- import { RestArkProvider, } from '../providers/ark.js';
10
- import { buildForfeitTx } from '../forfeit.js';
11
- import { validateConnectorsTxGraph, validateVtxoTxGraph, } from '../tree/validation.js';
12
- import { validateBatchRecipients } from './validation.js';
13
- import { isBatchSignable } from '../identity/index.js';
14
- import { DEFAULT_ARKADE_SERVER_URL, isExpired, isRecoverable, isSpendable, isSubdust, TxType, } from './index.js';
15
- import { createAssetPacket, selectCoinsWithAsset, selectedCoinsToAssetInputs, } from './asset.js';
16
- import { VtxoScript } from '../script/base.js';
17
- import { CSVMultisigTapscript } from '../script/tapscript.js';
18
- import { buildOffchainTx, combineTapscriptSigs, hasBoardingTxExpired, isValidArkAddress, } from '../utils/arkTransaction.js';
19
- import { DEFAULT_RENEWAL_CONFIG, DEFAULT_SETTLEMENT_CONFIG, VtxoManager, } from './vtxo-manager.js';
20
- import { ArkNote } from '../arknote/index.js';
21
- import { Intent } from '../intent/index.js';
22
- import { RestIndexerProvider } from '../providers/indexer.js';
23
- import { extendCoin, validateRecipients } from './utils.js';
24
- import { ArkError } from '../providers/errors.js';
25
- import { Batch } from './batch.js';
26
- import { Estimator } from '../arkfee/index.js';
27
- import { buildTransactionHistory } from '../utils/transactionHistory.js';
28
- import { AssetManager, ReadonlyAssetManager } from './asset-manager.js';
29
- import { Extension } from '../extension/index.js';
30
- import { DelegateVtxo } from '../script/delegate.js';
31
- import { DelegatorManagerImpl, findDestinationOutputIndex, } from './delegator.js';
32
- import { IndexedDBContractRepository, IndexedDBWalletRepository, } from '../repositories/index.js';
33
- import { ContractManager } from '../contracts/contractManager.js';
34
- import { contractHandlers } from '../contracts/handlers/index.js';
35
- import { timelockToSequence } from '../utils/timelock.js';
36
- import { clearSyncCursor, updateWalletState } from '../utils/syncCursors.js';
37
- import { validateVtxosForScript } from '../contracts/vtxoOwnership.js';
5
+ import { ArkAddress } from "../script/address.js";
6
+ import { DefaultVtxo } from "../script/default.js";
7
+ import { getNetwork } from "../networks.js";
8
+ import { ESPLORA_URL, EsploraProvider, } from "../providers/onchain.js";
9
+ import { RestArkProvider, } from "../providers/ark.js";
10
+ import { buildForfeitTx } from "../forfeit.js";
11
+ import { validateConnectorsTxGraph, validateVtxoTxGraph, } from "../tree/validation.js";
12
+ import { validateBatchRecipients } from "./validation.js";
13
+ import { isBatchSignable } from "../identity/index.js";
14
+ import { DEFAULT_ARKADE_SERVER_URL, isExpired, isRecoverable, isSpendable, isSubdust, TxType, } from "./index.js";
15
+ import { createAssetPacket, selectCoinsWithAsset, selectedCoinsToAssetInputs, } from "./asset.js";
16
+ import { VtxoScript } from "../script/base.js";
17
+ import { CSVMultisigTapscript } from "../script/tapscript.js";
18
+ import { buildOffchainTx, combineTapscriptSigs, hasBoardingTxExpired, isValidArkAddress, } from "../utils/arkTransaction.js";
19
+ import { DEFAULT_RENEWAL_CONFIG, DEFAULT_SETTLEMENT_CONFIG, VtxoManager, } from "./vtxo-manager.js";
20
+ import { ArkNote } from "../arknote/index.js";
21
+ import { Intent } from "../intent/index.js";
22
+ import { RestIndexerProvider } from "../providers/indexer.js";
23
+ import { extendCoin, validateRecipients } from "./utils.js";
24
+ import { ArkError } from "../providers/errors.js";
25
+ import { Batch } from "./batch.js";
26
+ import { Estimator } from "../arkfee/index.js";
27
+ import { buildTransactionHistory } from "../utils/transactionHistory.js";
28
+ import { AssetManager, ReadonlyAssetManager } from "./asset-manager.js";
29
+ import { Extension } from "../extension/index.js";
30
+ import { DelegateVtxo } from "../script/delegate.js";
31
+ import { DelegatorManagerImpl, findDestinationOutputIndex, } from "./delegator.js";
32
+ import { IndexedDBContractRepository, IndexedDBWalletRepository, } from "../repositories/index.js";
33
+ import { ContractManager } from "../contracts/contractManager.js";
34
+ import { contractHandlers } from "../contracts/handlers/index.js";
35
+ import { timelockToSequence } from "../utils/timelock.js";
36
+ import { clearSyncCursor, updateWalletState } from "../utils/syncCursors.js";
37
+ import { validateVtxosForScript, saveVtxosForContract, } from "../contracts/vtxoOwnership.js";
38
38
  export const getArkadeServerUrl = ({ arkServerUrl, }) => arkServerUrl || DEFAULT_ARKADE_SERVER_URL;
39
39
  // Historical unilateral exit delay for mainnet (~7 days in seconds).
40
40
  // Kept so existing wallets can still discover and spend VTXOs sent to the
@@ -1866,7 +1866,6 @@ export class Wallet extends ReadonlyWallet {
1866
1866
  arr.push(v);
1867
1867
  spentByScript.set(v.script, arr);
1868
1868
  }
1869
- const byAddress = new Map();
1870
1869
  for (const [script, vtxos] of spentByScript) {
1871
1870
  // User-initiated send path: a wrong-script row here means the
1872
1871
  // wallet is about to record ownership against the wrong
@@ -1876,18 +1875,11 @@ export class Wallet extends ReadonlyWallet {
1876
1875
  if (!targetAddr) {
1877
1876
  throw new Error(`Wallet.updateDbAfterOffchainTx: no contract owns script ${script}`);
1878
1877
  }
1879
- const bucket = byAddress.get(targetAddr) ?? [];
1880
- bucket.push(...vtxos);
1881
- byAddress.set(targetAddr, bucket);
1878
+ await saveVtxosForContract(this.walletRepository, { script, address: targetAddr }, vtxos);
1882
1879
  }
1883
1880
  // Change is always primary-script by construction.
1884
1881
  if (changeVtxo) {
1885
- const bucket = byAddress.get(primaryAddr) ?? [];
1886
- bucket.push(changeVtxo);
1887
- byAddress.set(primaryAddr, bucket);
1888
- }
1889
- for (const [addr, vtxos] of byAddress) {
1890
- await this.walletRepository.saveVtxos(addr, vtxos);
1882
+ await saveVtxosForContract(this.walletRepository, { script: changeVtxo.script, address: primaryAddr }, [changeVtxo]);
1891
1883
  }
1892
1884
  await this.walletRepository.saveTransactions(primaryAddr, [
1893
1885
  {
@@ -1950,7 +1942,6 @@ export class Wallet extends ReadonlyWallet {
1950
1942
  // alongside the rest.
1951
1943
  const contracts = await cm.getContracts();
1952
1944
  const addrByScript = new Map(contracts.map((c) => [c.script, c.address]));
1953
- const byAddress = new Map();
1954
1945
  const byScript = new Map();
1955
1946
  for (const v of spentVtxos) {
1956
1947
  if (!v.script) {
@@ -1968,12 +1959,7 @@ export class Wallet extends ReadonlyWallet {
1968
1959
  if (!targetAddr) {
1969
1960
  throw new Error(`Wallet.updateDbAfterSettle: no contract owns script ${script}`);
1970
1961
  }
1971
- const bucket = byAddress.get(targetAddr) ?? [];
1972
- bucket.push(...vtxos);
1973
- byAddress.set(targetAddr, bucket);
1974
- }
1975
- for (const [bucketAddr, vtxos] of byAddress) {
1976
- await this.walletRepository.saveVtxos(bucketAddr, vtxos);
1962
+ await saveVtxosForContract(this.walletRepository, { script, address: targetAddr }, vtxos);
1977
1963
  }
1978
1964
  }
1979
1965
  if (boardingUtxoToRemove.size > 0) {
@@ -1,4 +1,4 @@
1
- export { InMemoryTaskQueue } from './taskQueue.js';
2
- export { AsyncStorageTaskQueue } from './asyncStorageTaskQueue.js';
3
- export { runTasks, createTaskDependencies } from './taskRunner.js';
4
- export { contractPollProcessor, CONTRACT_POLL_TASK_TYPE } from './processors/index.js';
1
+ export { InMemoryTaskQueue } from "./taskQueue.js";
2
+ export { AsyncStorageTaskQueue } from "./asyncStorageTaskQueue.js";
3
+ export { runTasks, createTaskDependencies } from "./taskRunner.js";
4
+ export { contractPollProcessor, CONTRACT_POLL_TASK_TYPE } from "./processors/index.js";
@@ -1,4 +1,4 @@
1
- import { warnAndFilterVtxosForScript } from '../../../contracts/vtxoOwnership.js';
1
+ import { warnAndFilterVtxosForScript, saveVtxosForContract, } from "../../../contracts/vtxoOwnership.js";
2
2
  export const CONTRACT_POLL_TASK_TYPE = "contract-poll";
3
3
  /**
4
4
  * Polls the indexer for the latest VTXO state of every contract and
@@ -45,7 +45,7 @@ export const contractPollProcessor = {
45
45
  // before persisting; the loop must keep going for the remaining
46
46
  // contracts even when one row is rejected.
47
47
  const filtered = warnAndFilterVtxosForScript(allVtxos, contract.script, "contractPollProcessor");
48
- await walletRepository.saveVtxos(contract.address, filtered);
48
+ await saveVtxosForContract(walletRepository, contract, filtered);
49
49
  vtxosSaved += filtered.length;
50
50
  contractsProcessed++;
51
51
  }
@@ -1 +1 @@
1
- export { contractPollProcessor, CONTRACT_POLL_TASK_TYPE, } from './contractPollProcessor.js';
1
+ export { contractPollProcessor, CONTRACT_POLL_TASK_TYPE, } from "./contractPollProcessor.js";
@@ -1,4 +1,4 @@
1
- import { getRandomId, extendVirtualCoinForContract } from '../../wallet/utils.js';
1
+ import { getRandomId, extendVirtualCoinForContract } from "../../wallet/utils.js";
2
2
  /**
3
3
  * Run all pending tasks from the queue through matching processors.
4
4
  *
@@ -1,10 +1,10 @@
1
1
  /// <reference lib="webworker" />
2
- import { getActiveServiceWorker, setupServiceWorkerOnce, } from './browser/service-worker-manager.js';
3
- import { RestArkProvider } from '../providers/ark.js';
4
- import { RestDelegatorProvider } from '../providers/delegator.js';
5
- import { hydrateIdentity, isSigningSerialized, normalizeSerializedIdentity, } from '../identity/index.js';
6
- import { ReadonlyWallet, Wallet } from '../wallet/wallet.js';
7
- import { MessageBusNotInitializedError, ServiceWorkerTimeoutError, } from './errors.js';
2
+ import { getActiveServiceWorker, setupServiceWorkerOnce, } from "./browser/service-worker-manager.js";
3
+ import { RestArkProvider } from "../providers/ark.js";
4
+ import { RestDelegatorProvider } from "../providers/delegator.js";
5
+ import { hydrateIdentity, isSigningSerialized, normalizeSerializedIdentity, } from "../identity/index.js";
6
+ import { ReadonlyWallet, Wallet } from "../wallet/wallet.js";
7
+ import { MessageBusNotInitializedError, ServiceWorkerTimeoutError, } from "./errors.js";
8
8
  /**
9
9
  * Grace period after a handler times out during which late handler
10
10
  * completion is still delivered to the client. Once this expires,
@@ -1,2 +1,2 @@
1
- export { AsyncStorageAdapter } from "../storage/asyncStorage";
2
- export type { StorageAdapter } from "../storage";
1
+ export { AsyncStorageAdapter } from "../storage/asyncStorage.js";
2
+ export type { StorageAdapter } from "../storage/index.js";
@@ -1,4 +1,4 @@
1
- export { ExpoArkProvider } from "../providers/expoArk";
2
- export { ExpoIndexerProvider } from "../providers/expoIndexer";
3
- export type { ArkProvider } from "../providers/ark";
4
- export type { IndexerProvider } from "../providers/indexer";
1
+ export { ExpoArkProvider } from "../providers/expoArk.js";
2
+ export { ExpoIndexerProvider } from "../providers/expoIndexer.js";
3
+ export type { ArkProvider } from "../providers/ark.js";
4
+ export type { IndexerProvider } from "../providers/indexer.js";
@@ -1,2 +1,2 @@
1
- export { FileSystemStorageAdapter } from "../storage/fileSystem";
2
- export type { StorageAdapter } from "../storage";
1
+ export { FileSystemStorageAdapter } from "../storage/fileSystem.js";
2
+ export type { StorageAdapter } from "../storage/index.js";
@@ -1,2 +1,2 @@
1
- export { IndexedDBStorageAdapter } from "../storage/indexedDB";
2
- export type { StorageAdapter } from "../storage";
1
+ export { IndexedDBStorageAdapter } from "../storage/indexedDB.js";
2
+ export type { StorageAdapter } from "../storage/index.js";
@@ -1,2 +1,2 @@
1
- export { LocalStorageAdapter } from "../storage/localStorage";
2
- export type { StorageAdapter } from "../storage";
1
+ export { LocalStorageAdapter } from "../storage/localStorage.js";
2
+ export type { StorageAdapter } from "../storage/index.js";
@@ -1,2 +1,2 @@
1
- export { Estimator } from "./estimator";
2
- export type { FeeAmount, IntentFeeConfig, OffchainInput, OnchainInput, FeeOutput, VtxoType, } from "./types";
1
+ export { Estimator } from "./estimator.js";
2
+ export type { FeeAmount, IntentFeeConfig, OffchainInput, OnchainInput, FeeOutput, VtxoType, } from "./types.js";
@@ -1,6 +1,6 @@
1
1
  import { Bytes } from "@scure/btc-signer/utils.js";
2
- import { TapLeafScript, VtxoScript } from "../script/base";
3
- import { ExtendedCoin, Status } from "../wallet";
2
+ import { TapLeafScript, VtxoScript } from "../script/base.js";
3
+ import { ExtendedCoin, Status } from "../wallet/index.js";
4
4
  /**
5
5
  * ArkNotes are special virtual outputs in the Arkade protocol that
6
6
  * can be created and spent without requiring any transactions.
@@ -1,5 +1,5 @@
1
1
  import { type BTC_NETWORK } from "@scure/btc-signer/utils.js";
2
- import type { Identity } from "../identity";
2
+ import type { Identity } from "../identity/index.js";
3
3
  /**
4
4
  * BIP-322 simple message signing and verification.
5
5
  *
@@ -1,4 +1,4 @@
1
- import { Contract } from "./types";
1
+ import { Contract } from "./types.js";
2
2
  /**
3
3
  * Encode a contract to the arkcontract string format.
4
4
  *
@@ -1,9 +1,9 @@
1
- import { IndexerProvider } from "../providers/indexer";
2
- import { WalletRepository } from "../repositories/walletRepository";
3
- import { Contract, ContractEventCallback, ContractState, ContractWithVtxos, GetContractsFilter, PathSelection } from "./types";
4
- import { ContractWatcherConfig } from "./contractWatcher";
5
- import { ExtendedVirtualCoin, VirtualCoin } from "../wallet";
6
- import { ContractRepository } from "../repositories";
1
+ import { IndexerProvider } from "../providers/indexer.js";
2
+ import { WalletRepository } from "../repositories/walletRepository.js";
3
+ import { Contract, ContractEventCallback, ContractState, ContractWithVtxos, GetContractsFilter, PathSelection } from "./types.js";
4
+ import { ContractWatcherConfig } from "./contractWatcher.js";
5
+ import { ExtendedVirtualCoin, Outpoint, VirtualCoin } from "../wallet/index.js";
6
+ import { ContractRepository } from "../repositories/index.js";
7
7
  export type RefreshVtxosOptions = {
8
8
  scripts?: string[];
9
9
  after?: number;
@@ -88,6 +88,21 @@ export interface IContractManager extends Disposable {
88
88
  * With options, narrows the refresh to specific scripts and/or a time window.
89
89
  */
90
90
  refreshVtxos(opts?: RefreshVtxosOptions): Promise<void>;
91
+ /**
92
+ * Reconcile specific outpoints with the indexer's authoritative state and
93
+ * upsert the result into the wallet repository.
94
+ *
95
+ * The cursor-derived delta sync filters by `created_at`, so a VTXO that
96
+ * was created before the cursor but spent recently won't surface in a
97
+ * standard `refreshVtxos()` call. This method is the surgical recovery
98
+ * path for that case: when something hands us a stale outpoint (e.g. the
99
+ * server returns `VTXO_ALREADY_SPENT` with a `vtxo_outpoint` in its
100
+ * error metadata), call this to pull the latest state and unblock the
101
+ * caller — no full re-scan, no cursor change.
102
+ *
103
+ * Outpoints not owned by any tracked contract are silently dropped.
104
+ */
105
+ refreshOutpoints(outpoints: Outpoint[]): Promise<void>;
91
106
  /**
92
107
  * Whether the underlying watcher is currently active.
93
108
  */
@@ -310,6 +325,7 @@ export declare class ContractManager implements IContractManager {
310
325
  * Subset refreshes (scripts filter) intentionally do not advance the cursor.
311
326
  */
312
327
  refreshVtxos(opts?: RefreshVtxosOptions): Promise<void>;
328
+ refreshOutpoints(outpoints: Outpoint[]): Promise<void>;
313
329
  /**
314
330
  * Check if currently watching.
315
331
  */
@@ -1,6 +1,6 @@
1
- import { IndexerProvider } from "../providers/indexer";
2
- import { WalletRepository } from "../repositories/walletRepository";
3
- import { Contract, ContractEventCallback } from "./types";
1
+ import { IndexerProvider } from "../providers/indexer.js";
2
+ import { WalletRepository } from "../repositories/walletRepository.js";
3
+ import { Contract, ContractEventCallback } from "./types.js";
4
4
  /**
5
5
  * Configuration for the ContractWatcher.
6
6
  *
@@ -1,6 +1,6 @@
1
- import { DefaultVtxo } from "../../script/default";
2
- import { RelativeTimelock } from "../../script/tapscript";
3
- import { ContractHandler } from "../types";
1
+ import { DefaultVtxo } from "../../script/default.js";
2
+ import { RelativeTimelock } from "../../script/tapscript.js";
3
+ import { ContractHandler } from "../types.js";
4
4
  /**
5
5
  * Typed parameters for DefaultVtxo contracts.
6
6
  */
@@ -1,6 +1,6 @@
1
- import { DelegateVtxo } from "../../script/delegate";
2
- import { RelativeTimelock } from "../../script/tapscript";
3
- import { ContractHandler } from "../types";
1
+ import { DelegateVtxo } from "../../script/delegate.js";
2
+ import { RelativeTimelock } from "../../script/tapscript.js";
3
+ import { ContractHandler } from "../types.js";
4
4
  /**
5
5
  * Typed parameters for DelegateVtxo contracts.
6
6
  */
@@ -1,4 +1,4 @@
1
- import { Contract, PathContext } from "../types";
1
+ import { Contract, PathContext } from "../types.js";
2
2
  /**
3
3
  * Resolve wallet's role from explicit role or by matching descriptor/pubkey.
4
4
  */
@@ -1,7 +1,7 @@
1
- export { contractHandlers } from "./registry";
2
- export { DefaultContractHandler } from "./default";
3
- export type { DefaultContractParams } from "./default";
4
- export { DelegateContractHandler } from "./delegate";
5
- export type { DelegateContractParams } from "./delegate";
6
- export { VHTLCContractHandler } from "./vhtlc";
7
- export type { VHTLCContractParams } from "./vhtlc";
1
+ export { contractHandlers } from "./registry.js";
2
+ export { DefaultContractHandler } from "./default.js";
3
+ export type { DefaultContractParams } from "./default.js";
4
+ export { DelegateContractHandler } from "./delegate.js";
5
+ export type { DelegateContractParams } from "./delegate.js";
6
+ export { VHTLCContractHandler } from "./vhtlc.js";
7
+ export type { VHTLCContractParams } from "./vhtlc.js";
@@ -1,4 +1,4 @@
1
- import { ContractHandler } from "../types";
1
+ import { ContractHandler } from "../types.js";
2
2
  /**
3
3
  * Registry for contract handlers.
4
4
  *
@@ -1,6 +1,6 @@
1
- import { VHTLC } from "../../script/vhtlc";
2
- import { RelativeTimelock } from "../../script/tapscript";
3
- import { ContractHandler } from "../types";
1
+ import { VHTLC } from "../../script/vhtlc.js";
2
+ import { RelativeTimelock } from "../../script/tapscript.js";
3
+ import { ContractHandler } from "../types.js";
4
4
  /**
5
5
  * Typed parameters for VHTLC contracts.
6
6
  */
@@ -1,14 +1,14 @@
1
- export * from "./types";
2
- export { contractHandlers } from "./handlers";
3
- export { DefaultContractHandler } from "./handlers";
4
- export type { DefaultContractParams } from "./handlers";
5
- export { DelegateContractHandler } from "./handlers";
6
- export type { DelegateContractParams } from "./handlers";
7
- export { VHTLCContractHandler } from "./handlers";
8
- export type { VHTLCContractParams } from "./handlers";
9
- export { encodeArkContract, decodeArkContract, contractFromArkContract, contractFromArkContractWithAddress, isArkContract, } from "./arkcontract";
10
- export type { ParsedArkContract } from "./arkcontract";
11
- export { ContractWatcher } from "./contractWatcher";
12
- export type { ContractWatcherConfig } from "./contractWatcher";
13
- export { ContractManager } from "./contractManager";
14
- export type { ContractManagerConfig, CreateContractParams, RefreshVtxosOptions, } from "./contractManager";
1
+ export * from "./types.js";
2
+ export { contractHandlers } from "./handlers/index.js";
3
+ export { DefaultContractHandler } from "./handlers/index.js";
4
+ export type { DefaultContractParams } from "./handlers/index.js";
5
+ export { DelegateContractHandler } from "./handlers/index.js";
6
+ export type { DelegateContractParams } from "./handlers/index.js";
7
+ export { VHTLCContractHandler } from "./handlers/index.js";
8
+ export type { VHTLCContractParams } from "./handlers/index.js";
9
+ export { encodeArkContract, decodeArkContract, contractFromArkContract, contractFromArkContractWithAddress, isArkContract, } from "./arkcontract.js";
10
+ export type { ParsedArkContract } from "./arkcontract.js";
11
+ export { ContractWatcher } from "./contractWatcher.js";
12
+ export type { ContractWatcherConfig } from "./contractWatcher.js";
13
+ export { ContractManager } from "./contractManager.js";
14
+ export type { ContractManagerConfig, CreateContractParams, RefreshVtxosOptions, } from "./contractManager.js";
@@ -1,7 +1,7 @@
1
1
  import { Bytes } from "@scure/btc-signer/utils.js";
2
- import { EncodedVtxoScript, TapLeafScript, VtxoScript } from "../script/base";
3
- import { VirtualCoin, TapLeaves } from "../wallet";
4
- import { ContractFilter } from "../repositories";
2
+ import { EncodedVtxoScript, TapLeafScript, VtxoScript } from "../script/base.js";
3
+ import { VirtualCoin, TapLeaves } from "../wallet/index.js";
4
+ import { ContractFilter } from "../repositories/index.js";
5
5
  /**
6
6
  * Contract state indicating whether it should be actively monitored.
7
7
  */
@@ -1,4 +1,6 @@
1
- import type { VirtualCoin } from "../wallet";
1
+ import type { ExtendedVirtualCoin, VirtualCoin } from "../wallet/index.js";
2
+ import type { WalletRepository } from "../repositories/walletRepository.js";
3
+ import type { Contract } from "./types.js";
2
4
  /**
3
5
  * Tier 1 helpers that enforce VTXO ownership at call sites that already know
4
6
  * the intended contract script. Address-keyed repositories may still hand back
@@ -23,3 +25,9 @@ export declare function warnAndFilterVtxosForScript<T extends Pick<VirtualCoin,
23
25
  * serious bug in the wallet's spend path.
24
26
  */
25
27
  export declare function validateVtxosForScript(vtxos: Array<Pick<VirtualCoin, "txid" | "vout" | "script">>, script: string, context: string): void;
28
+ /**
29
+ * Tier 2 dispatch helpers: route to script-scoped repository methods when
30
+ * available, falling back to Tier 1 address-based filtering otherwise.
31
+ */
32
+ export declare function getVtxosForContract(repo: WalletRepository, contract: Pick<Contract, "script" | "address">): Promise<ExtendedVirtualCoin[]>;
33
+ export declare function saveVtxosForContract(repo: WalletRepository, contract: Pick<Contract, "script" | "address">, vtxos: ExtendedVirtualCoin[]): Promise<void>;
@@ -1,9 +1,9 @@
1
- import { AssetId } from "./assetId";
2
- import { AssetRef } from "./assetRef";
3
- import { AssetInput } from "./assetInput";
4
- import { AssetOutput } from "./assetOutput";
5
- import { Metadata } from "./metadata";
6
- import { BufferReader, BufferWriter } from "./utils";
1
+ import { AssetId } from "./assetId.js";
2
+ import { AssetRef } from "./assetRef.js";
3
+ import { AssetInput } from "./assetInput.js";
4
+ import { AssetOutput } from "./assetOutput.js";
5
+ import { Metadata } from "./metadata.js";
6
+ import { BufferReader, BufferWriter } from "./utils.js";
7
7
  /**
8
8
  * An asset group contains inputs, outputs, and all data related to a given asset id.
9
9
  *
@@ -1,4 +1,4 @@
1
- import { BufferReader, BufferWriter } from "./utils";
1
+ import { BufferReader, BufferWriter } from "./utils.js";
2
2
  /**
3
3
  * AssetId identifies a specific asset.
4
4
  *
@@ -1,5 +1,5 @@
1
- import { AssetInputType } from "./types";
2
- import { BufferReader, BufferWriter } from "./utils";
1
+ import { AssetInputType } from "./types.js";
2
+ import { BufferReader, BufferWriter } from "./utils.js";
3
3
  type AssetInputLocal = {
4
4
  type: AssetInputType.Local;
5
5
  vin: number;
@@ -1,4 +1,4 @@
1
- import { BufferReader, BufferWriter } from "./utils";
1
+ import { BufferReader, BufferWriter } from "./utils.js";
2
2
  /**
3
3
  * AssetOutput references a real transaction output and specify the amount in satoshis.
4
4
  * it must be present in an AssetGroup.
@@ -1,6 +1,6 @@
1
- import { AssetRefType } from "./types";
2
- import { AssetId } from "./assetId";
3
- import { BufferReader, BufferWriter } from "./utils";
1
+ import { AssetRefType } from "./types.js";
2
+ import { AssetId } from "./assetId.js";
3
+ import { BufferReader, BufferWriter } from "./utils.js";
4
4
  type AssetRefByID = {
5
5
  type: AssetRefType.ByID;
6
6
  assetId: AssetId;
@@ -1,8 +1,8 @@
1
- export { AssetInputType, AssetRefType } from "./types";
2
- export { AssetId } from "./assetId";
3
- export { AssetRef } from "./assetRef";
4
- export { AssetInput, AssetInputs } from "./assetInput";
5
- export { AssetOutput, AssetOutputs } from "./assetOutput";
6
- export { Metadata, MetadataList } from "./metadata";
7
- export { AssetGroup } from "./assetGroup";
8
- export { Packet } from "./packet";
1
+ export { AssetInputType, AssetRefType } from "./types.js";
2
+ export { AssetId } from "./assetId.js";
3
+ export { AssetRef } from "./assetRef.js";
4
+ export { AssetInput, AssetInputs } from "./assetInput.js";
5
+ export { AssetOutput, AssetOutputs } from "./assetOutput.js";
6
+ export { Metadata, MetadataList } from "./metadata.js";
7
+ export { AssetGroup } from "./assetGroup.js";
8
+ export { Packet } from "./packet.js";
@@ -1,5 +1,5 @@
1
1
  import { Bytes } from "@scure/btc-signer/utils.js";
2
- import { BufferReader, BufferWriter } from "./utils";
2
+ import { BufferReader, BufferWriter } from "./utils.js";
3
3
  /**
4
4
  * Metadata represents a key-value pair.
5
5
  * @param key - the key
@@ -1,5 +1,5 @@
1
- import type { ExtensionPacket } from "../packet";
2
- import { AssetGroup } from "./assetGroup";
1
+ import type { ExtensionPacket } from "../packet.js";
2
+ import { AssetGroup } from "./assetGroup.js";
3
3
  /**
4
4
  * Packet represents a collection of asset groups.
5
5
  * It encodes/decodes as raw bytes only — OP_RETURN framing is handled by the Extension module.
@@ -1,9 +1,9 @@
1
- import { Packet } from "./asset/packet";
2
- import { ExtensionPacket } from "./packet";
3
- import type { TransactionOutput } from "@scure/btc-signer/psbt";
4
- import type { Transaction } from "../utils/transaction";
5
- export type { ExtensionPacket } from "./packet";
6
- export { UnknownPacket } from "./packet";
1
+ import { Packet } from "./asset/packet.js";
2
+ import { ExtensionPacket } from "./packet.js";
3
+ import type { TransactionOutput } from "@scure/btc-signer/psbt.js";
4
+ import type { Transaction } from "../utils/transaction.js";
5
+ export type { ExtensionPacket } from "./packet.js";
6
+ export { UnknownPacket } from "./packet.js";
7
7
  /**
8
8
  * ArkadeMagic is the 3-byte magic prefix ("ARK") that identifies an OP_RETURN
9
9
  * output as an Arkade extension blob.
@@ -1,4 +1,4 @@
1
- import { Transaction } from "./utils/transaction";
1
+ import { Transaction } from "./utils/transaction.js";
2
2
  import { TransactionInputUpdate, TransactionOutput } from "@scure/btc-signer/psbt.js";
3
3
  /**
4
4
  * Build a forfeit transaction that spends the provided inputs to a single forfeit output.
@@ -1,4 +1,4 @@
1
- import { Transaction } from "../utils/transaction";
1
+ import { Transaction } from "../utils/transaction.js";
2
2
  /** A signing request that pairs a descriptor with a transaction. */
3
3
  export interface DescriptorSigningRequest {
4
4
  /** Descriptor identifying which key to sign with */
@@ -1,6 +1,6 @@
1
- import { Identity, ReadonlyIdentity } from ".";
2
- import { DescriptorSigningRequest } from "./descriptorProvider";
3
- import { Transaction } from "../utils/transaction";
1
+ import { Identity, ReadonlyIdentity } from "./index.js";
2
+ import { DescriptorSigningRequest } from "./descriptorProvider.js";
3
+ import { Transaction } from "../utils/transaction.js";
4
4
  /**
5
5
  * Read-side HD capability marker. Exposes the wildcard-suffixed account
6
6
  * descriptor *template* and the descriptor-membership predicate, but no
@@ -1,5 +1,5 @@
1
- import { Transaction } from "../utils/transaction";
2
- import { SignerSession } from "../tree/signingSession";
1
+ import { Transaction } from "../utils/transaction.js";
2
+ import { SignerSession } from "../tree/signingSession.js";
3
3
  export interface Identity extends ReadonlyIdentity {
4
4
  /** Returns a signer session used for musig2 tree signing flows. */
5
5
  signerSession(): SignerSession;
@@ -45,12 +45,12 @@ export interface BatchSignableIdentity extends Identity {
45
45
  }
46
46
  /** Type guard for identities that support batch signing. */
47
47
  export declare function isBatchSignable(identity: Identity): identity is BatchSignableIdentity;
48
- export * from "./singleKey";
49
- export type { NetworkOptions, DescriptorOptions, SeedIdentityOptions, MnemonicOptions, } from "./seedIdentity";
50
- export { SeedIdentity, MnemonicIdentity, ReadonlyDescriptorIdentity, } from "./seedIdentity";
51
- export * from "./serialize";
52
- export { isDescriptor, normalizeToDescriptor, extractPubKey, parseHDDescriptor, } from "./descriptor";
53
- export type { ParsedHDDescriptor } from "./descriptor";
54
- export type { DescriptorProvider, DescriptorSigningRequest, } from "./descriptorProvider";
55
- export type { HDCapableIdentity, ReadonlyHDCapableIdentity, } from "./hdCapableIdentity";
56
- export { StaticDescriptorProvider } from "./staticDescriptorProvider";
48
+ export * from "./singleKey.js";
49
+ export type { NetworkOptions, DescriptorOptions, SeedIdentityOptions, MnemonicOptions, } from "./seedIdentity.js";
50
+ export { SeedIdentity, MnemonicIdentity, ReadonlyDescriptorIdentity, } from "./seedIdentity.js";
51
+ export * from "./serialize.js";
52
+ export { isDescriptor, normalizeToDescriptor, extractPubKey, parseHDDescriptor, } from "./descriptor.js";
53
+ export type { ParsedHDDescriptor } from "./descriptor.js";
54
+ export type { DescriptorProvider, DescriptorSigningRequest, } from "./descriptorProvider.js";
55
+ export type { HDCapableIdentity, ReadonlyHDCapableIdentity, } from "./hdCapableIdentity.js";
56
+ export { StaticDescriptorProvider } from "./staticDescriptorProvider.js";