@arkade-os/sdk 0.4.16 → 0.4.18

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 (68) hide show
  1. package/README.md +16 -6
  2. package/dist/cjs/contracts/arkcontract.js +0 -2
  3. package/dist/cjs/contracts/contractManager.js +111 -199
  4. package/dist/cjs/contracts/contractWatcher.js +86 -115
  5. package/dist/cjs/repositories/indexedDB/manager.js +6 -3
  6. package/dist/cjs/repositories/indexedDB/schema.js +47 -2
  7. package/dist/cjs/repositories/indexedDB/walletRepository.js +21 -2
  8. package/dist/cjs/repositories/realm/contractRepository.js +0 -4
  9. package/dist/cjs/repositories/realm/index.js +3 -1
  10. package/dist/cjs/repositories/realm/schemas.js +50 -1
  11. package/dist/cjs/repositories/realm/walletRepository.js +8 -4
  12. package/dist/cjs/repositories/scriptFromAddress.js +16 -0
  13. package/dist/cjs/repositories/sqlite/contractRepository.js +2 -6
  14. package/dist/cjs/repositories/sqlite/walletRepository.js +121 -33
  15. package/dist/cjs/utils/syncCursors.js +48 -56
  16. package/dist/cjs/wallet/expo/background.js +0 -13
  17. package/dist/cjs/wallet/expo/wallet.js +1 -6
  18. package/dist/cjs/wallet/serviceWorker/wallet-message-handler.js +16 -7
  19. package/dist/cjs/wallet/serviceWorker/wallet.js +19 -0
  20. package/dist/cjs/wallet/utils.js +41 -10
  21. package/dist/cjs/wallet/vtxo-manager.js +153 -39
  22. package/dist/cjs/wallet/wallet.js +84 -202
  23. package/dist/cjs/worker/expo/processors/contractPollProcessor.js +9 -13
  24. package/dist/cjs/worker/expo/taskRunner.js +2 -11
  25. package/dist/esm/contracts/arkcontract.js +0 -2
  26. package/dist/esm/contracts/contractManager.js +113 -201
  27. package/dist/esm/contracts/contractWatcher.js +86 -115
  28. package/dist/esm/repositories/indexedDB/manager.js +6 -3
  29. package/dist/esm/repositories/indexedDB/schema.js +46 -2
  30. package/dist/esm/repositories/indexedDB/walletRepository.js +21 -2
  31. package/dist/esm/repositories/realm/contractRepository.js +0 -4
  32. package/dist/esm/repositories/realm/index.js +1 -1
  33. package/dist/esm/repositories/realm/schemas.js +48 -0
  34. package/dist/esm/repositories/realm/walletRepository.js +8 -4
  35. package/dist/esm/repositories/scriptFromAddress.js +13 -0
  36. package/dist/esm/repositories/sqlite/contractRepository.js +2 -6
  37. package/dist/esm/repositories/sqlite/walletRepository.js +121 -33
  38. package/dist/esm/utils/syncCursors.js +47 -53
  39. package/dist/esm/wallet/expo/background.js +0 -13
  40. package/dist/esm/wallet/expo/wallet.js +2 -7
  41. package/dist/esm/wallet/serviceWorker/wallet-message-handler.js +17 -8
  42. package/dist/esm/wallet/serviceWorker/wallet.js +19 -0
  43. package/dist/esm/wallet/utils.js +41 -9
  44. package/dist/esm/wallet/vtxo-manager.js +153 -39
  45. package/dist/esm/wallet/wallet.js +87 -205
  46. package/dist/esm/worker/expo/processors/contractPollProcessor.js +9 -13
  47. package/dist/esm/worker/expo/taskRunner.js +3 -12
  48. package/dist/types/contracts/arkcontract.d.ts +0 -2
  49. package/dist/types/contracts/contractManager.d.ts +38 -12
  50. package/dist/types/contracts/contractWatcher.d.ts +22 -21
  51. package/dist/types/contracts/types.d.ts +0 -7
  52. package/dist/types/repositories/indexedDB/manager.d.ts +5 -2
  53. package/dist/types/repositories/indexedDB/schema.d.ts +3 -2
  54. package/dist/types/repositories/realm/index.d.ts +1 -1
  55. package/dist/types/repositories/realm/schemas.d.ts +41 -0
  56. package/dist/types/repositories/scriptFromAddress.d.ts +9 -0
  57. package/dist/types/repositories/serialization.d.ts +1 -1
  58. package/dist/types/repositories/sqlite/walletRepository.d.ts +22 -0
  59. package/dist/types/repositories/walletRepository.d.ts +10 -2
  60. package/dist/types/utils/syncCursors.d.ts +25 -23
  61. package/dist/types/wallet/index.d.ts +1 -1
  62. package/dist/types/wallet/serviceWorker/wallet-message-handler.d.ts +15 -3
  63. package/dist/types/wallet/utils.d.ts +20 -4
  64. package/dist/types/wallet/vtxo-manager.d.ts +16 -6
  65. package/dist/types/wallet/wallet.d.ts +5 -17
  66. package/dist/types/worker/expo/processors/contractPollProcessor.d.ts +9 -4
  67. package/dist/types/worker/expo/taskRunner.d.ts +6 -3
  68. package/package.json +1 -1
@@ -7,7 +7,7 @@ import { OnchainProvider } from "../providers/onchain";
7
7
  import { ArkProvider, SettlementEvent, SignedIntent } from "../providers/ark";
8
8
  import { SignerSession } from "../tree/signingSession";
9
9
  import { Identity, ReadonlyIdentity } from "../identity";
10
- import { ArkTransaction, Recipient, Coin, ExtendedCoin, ExtendedVirtualCoin, GetVtxosFilter, IReadonlyWallet, IWallet, ReadonlyWalletConfig, SendBitcoinParams, SettleParams, WalletBalance, WalletConfig, IAssetManager, IReadonlyAssetManager } from ".";
10
+ import { ArkTransaction, Coin, ExtendedCoin, ExtendedVirtualCoin, GetVtxosFilter, IAssetManager, IReadonlyAssetManager, IReadonlyWallet, IWallet, ReadonlyWalletConfig, Recipient, SendBitcoinParams, SettleParams, WalletBalance, WalletConfig } from ".";
11
11
  import { CSVMultisigTapscript } from "../script/tapscript";
12
12
  import { SettlementConfig, VtxoManager } from "./vtxo-manager";
13
13
  import { Intent } from "../intent";
@@ -97,21 +97,10 @@ export declare class ReadonlyWallet implements IReadonlyWallet {
97
97
  */
98
98
  getTransactionHistory(): Promise<ArkTransaction[]>;
99
99
  /**
100
- * Delta-sync wallet virtual outputs: fetch only changed virtual outputs since the last
101
- * cursor, or do a full bootstrap when no cursor exists. Upserts
102
- * the result into the cache and advances the sync cursors.
103
- *
104
- * Concurrent calls are deduplicated: if a sync is already in flight,
105
- * subsequent callers receive the same promise instead of triggering
106
- * a second network round-trip.
107
- */
108
- private syncVtxos;
109
- private doSyncVtxos;
110
- /**
111
- * Clear all virtual output sync cursors, forcing a full re-bootstrap on next sync.
100
+ * Clear the global VTXO sync cursor, forcing a full re-bootstrap on next sync.
112
101
  * Useful for recovery after indexer reprocessing or debugging.
113
102
  */
114
- clearSyncCursors(): Promise<void>;
103
+ clearSyncCursor(): Promise<void>;
115
104
  /**
116
105
  * Build a transaction history view for the wallet's boarding address.
117
106
  */
@@ -211,7 +200,6 @@ export declare class ReadonlyWallet implements IReadonlyWallet {
211
200
  * ```
212
201
  */
213
202
  export declare class Wallet extends ReadonlyWallet implements IWallet {
214
- readonly networkName: NetworkName;
215
203
  readonly arkProvider: ArkProvider;
216
204
  readonly serverUnrollScript: CSVMultisigTapscript.Type;
217
205
  readonly forfeitOutputScript: Bytes;
@@ -236,7 +224,7 @@ export declare class Wallet extends ReadonlyWallet implements IWallet {
236
224
  thresholdMs: number;
237
225
  };
238
226
  readonly settlementConfig: SettlementConfig | false;
239
- protected constructor(identity: Identity, network: Network, networkName: NetworkName, onchainProvider: OnchainProvider, arkProvider: ArkProvider, indexerProvider: IndexerProvider, arkServerPublicKey: Bytes, offchainTapscript: DefaultVtxo.Script | DelegateVtxo.Script, boardingTapscript: DefaultVtxo.Script, serverUnrollScript: CSVMultisigTapscript.Type, forfeitOutputScript: Bytes, forfeitPubkey: Bytes, dustAmount: bigint, walletRepository: WalletRepository, contractRepository: ContractRepository,
227
+ protected constructor(identity: Identity, network: Network, onchainProvider: OnchainProvider, arkProvider: ArkProvider, indexerProvider: IndexerProvider, arkServerPublicKey: Bytes, offchainTapscript: DefaultVtxo.Script | DelegateVtxo.Script, boardingTapscript: DefaultVtxo.Script, serverUnrollScript: CSVMultisigTapscript.Type, forfeitOutputScript: Bytes, forfeitPubkey: Bytes, dustAmount: bigint, walletRepository: WalletRepository, contractRepository: ContractRepository,
240
228
  /** @deprecated Use settlementConfig */
241
229
  renewalConfig?: WalletConfig["renewalConfig"], delegatorProvider?: DelegatorProvider, watcherConfig?: WalletConfig["watcherConfig"], settlementConfig?: WalletConfig["settlementConfig"]);
242
230
  get assetManager(): IAssetManager;
@@ -302,7 +290,7 @@ export declare class Wallet extends ReadonlyWallet implements IWallet {
302
290
  * @param session - Optional musig2 signing session. When omitted, signing steps are skipped.
303
291
  */
304
292
  createBatchHandler(intentId: string, inputs: ExtendedCoin[], expectedRecipients: Recipient[], session?: SignerSession): Batch.Handler;
305
- safeRegisterIntent(intent: SignedIntent<Intent.RegisterMessage>): Promise<string>;
293
+ safeRegisterIntent(intent: SignedIntent<Intent.RegisterMessage>, inputs: ExtendedCoin[]): Promise<string>;
306
294
  makeRegisterIntentSignature(coins: ExtendedCoin[], outputs: TransactionOutput[], onchainOutputsIndexes: number[], cosignerPubKeys: string[], validAt?: number): Promise<SignedIntent<Intent.RegisterMessage>>;
307
295
  makeDeleteIntentSignature(coins: ExtendedCoin[]): Promise<SignedIntent<Intent.DeleteMessage>>;
308
296
  makeGetPendingTxIntentSignature(coins: ExtendedVirtualCoin[]): Promise<SignedIntent<Intent.GetPendingTxMessage>>;
@@ -6,9 +6,14 @@ export declare const CONTRACT_POLL_TASK_TYPE = "contract-poll";
6
6
  *
7
7
  * Replicates the polling subset of @see ContractManager.initialize:
8
8
  * 1. Load all contracts from the contract repository.
9
- * 2. Mark expired active contracts as inactive.
10
- * 3. Paginated fetch of spendable VTXOs from the indexer.
11
- * 4. Extend each VTXO with tapscript data.
12
- * 5. Save to the wallet repository.
9
+ * 2. Paginated fetch of every VTXO (including spent) from the indexer.
10
+ * 3. Extend each VTXO with tapscript data.
11
+ * 4. Save to the wallet repository.
12
+ *
13
+ * NOTE: the indexer query deliberately omits `spendableOnly`. Every
14
+ * repository implements `saveVtxos` as an upsert with no batch delete,
15
+ * so filtering to spendable-only would leave VTXOs that became spent
16
+ * between polls marked as spendable forever. Fetching the full set lets
17
+ * the upsert overwrite stale records with their latest state.
13
18
  */
14
19
  export declare const contractPollProcessor: TaskProcessor;
@@ -5,16 +5,20 @@ import type { IndexerProvider } from "../../providers/indexer";
5
5
  import type { ArkProvider } from "../../providers/ark";
6
6
  import type { ExtendedVirtualCoin, VirtualCoin } from "../../wallet";
7
7
  import type { Contract } from "../../contracts/types";
8
- import type { ReadonlyWallet } from "../../wallet/wallet";
9
8
  /**
10
9
  * Shared dependencies injected into every processor at runtime.
10
+ *
11
+ * `extendVtxo` requires the owning contract — processors must resolve each
12
+ * vtxo's `script` to a known contract (via the contract repository) before
13
+ * calling this. The strict signature prevents the footgun where a missing
14
+ * contract silently falls back to the wallet's default tapscript.
11
15
  */
12
16
  export interface TaskDependencies {
13
17
  walletRepository: WalletRepository;
14
18
  contractRepository: ContractRepository;
15
19
  indexerProvider: IndexerProvider;
16
20
  arkProvider: ArkProvider;
17
- extendVtxo: (vtxo: VirtualCoin, contract?: Contract) => ExtendedVirtualCoin;
21
+ extendVtxo: (vtxo: VirtualCoin, contract: Contract) => ExtendedVirtualCoin;
18
22
  }
19
23
  /**
20
24
  * A stateless unit that handles one type of task item.
@@ -49,7 +53,6 @@ export interface CreateTaskDependenciesOptions {
49
53
  contractRepository: ContractRepository;
50
54
  indexerProvider: IndexerProvider;
51
55
  arkProvider: ArkProvider;
52
- offchainTapscript: ReadonlyWallet["offchainTapscript"];
53
56
  }
54
57
  /**
55
58
  * Build the @see TaskDependencies needed by task processors
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@arkade-os/sdk",
3
- "version": "0.4.16",
3
+ "version": "0.4.18",
4
4
  "description": "TypeScript SDK for building Bitcoin wallets using the Arkade protocol",
5
5
  "type": "module",
6
6
  "main": "./dist/cjs/index.js",