@arkade-os/sdk 0.4.25 → 0.4.27

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 (222) hide show
  1. package/README.md +5 -25
  2. package/dist/cjs/contracts/contractManager.js +31 -11
  3. package/dist/cjs/contracts/contractWatcher.js +2 -2
  4. package/dist/cjs/identity/hdCapableIdentity.js +18 -0
  5. package/dist/cjs/identity/index.js +3 -1
  6. package/dist/cjs/identity/seedIdentity.js +16 -0
  7. package/dist/cjs/index.js +4 -2
  8. package/dist/cjs/script/address.js +2 -2
  9. package/dist/cjs/wallet/delegator.js +10 -4
  10. package/dist/cjs/wallet/hdDescriptorProvider.js +29 -0
  11. package/dist/cjs/wallet/inputSignerRouter.js +98 -0
  12. package/dist/cjs/wallet/serviceWorker/wallet.js +1 -0
  13. package/dist/cjs/wallet/signingErrors.js +32 -0
  14. package/dist/cjs/wallet/unroll.js +5 -1
  15. package/dist/cjs/wallet/wallet.js +232 -86
  16. package/dist/cjs/wallet/walletReceiveRotator.js +547 -0
  17. package/dist/cjs/worker/messageBus.js +1 -0
  18. package/dist/esm/adapters/asyncStorage.js +1 -1
  19. package/dist/esm/adapters/expo.js +2 -2
  20. package/dist/esm/adapters/fileSystem.js +1 -1
  21. package/dist/esm/adapters/indexedDB.js +1 -1
  22. package/dist/esm/adapters/localStorage.js +1 -1
  23. package/dist/esm/arkfee/index.js +1 -1
  24. package/dist/esm/arknote/index.js +1 -1
  25. package/dist/esm/bip322/index.js +2 -2
  26. package/dist/esm/contracts/arkcontract.js +2 -2
  27. package/dist/esm/contracts/contractManager.js +36 -16
  28. package/dist/esm/contracts/contractWatcher.js +5 -5
  29. package/dist/esm/contracts/handlers/default.js +4 -4
  30. package/dist/esm/contracts/handlers/delegate.js +4 -4
  31. package/dist/esm/contracts/handlers/helpers.js +2 -2
  32. package/dist/esm/contracts/handlers/index.js +8 -8
  33. package/dist/esm/contracts/handlers/vhtlc.js +3 -3
  34. package/dist/esm/contracts/index.js +8 -8
  35. package/dist/esm/extension/asset/assetGroup.js +7 -7
  36. package/dist/esm/extension/asset/assetId.js +2 -2
  37. package/dist/esm/extension/asset/assetInput.js +2 -2
  38. package/dist/esm/extension/asset/assetOutput.js +1 -1
  39. package/dist/esm/extension/asset/assetRef.js +3 -3
  40. package/dist/esm/extension/asset/index.js +8 -8
  41. package/dist/esm/extension/asset/metadata.js +1 -1
  42. package/dist/esm/extension/asset/packet.js +3 -3
  43. package/dist/esm/extension/index.js +4 -4
  44. package/dist/esm/forfeit.js +2 -2
  45. package/dist/esm/identity/hdCapableIdentity.js +17 -1
  46. package/dist/esm/identity/index.js +6 -5
  47. package/dist/esm/identity/seedIdentity.js +18 -2
  48. package/dist/esm/identity/serialize.js +2 -2
  49. package/dist/esm/identity/singleKey.js +1 -1
  50. package/dist/esm/identity/staticDescriptorProvider.js +2 -2
  51. package/dist/esm/index.js +48 -48
  52. package/dist/esm/intent/index.js +3 -3
  53. package/dist/esm/musig2/index.js +3 -3
  54. package/dist/esm/musig2/sign.js +1 -1
  55. package/dist/esm/providers/ark.js +3 -3
  56. package/dist/esm/providers/delegator.js +1 -1
  57. package/dist/esm/providers/electrum.js +2 -2
  58. package/dist/esm/providers/expoArk.js +2 -2
  59. package/dist/esm/providers/expoIndexer.js +3 -3
  60. package/dist/esm/providers/indexer.js +3 -3
  61. package/dist/esm/repositories/inMemory/walletRepository.js +1 -1
  62. package/dist/esm/repositories/index.js +9 -9
  63. package/dist/esm/repositories/indexedDB/contractRepository.js +4 -4
  64. package/dist/esm/repositories/indexedDB/db.js +2 -2
  65. package/dist/esm/repositories/indexedDB/schema.js +1 -1
  66. package/dist/esm/repositories/indexedDB/walletRepository.js +6 -6
  67. package/dist/esm/repositories/migrations/fromStorageAdapter.js +1 -1
  68. package/dist/esm/repositories/migrations/walletRepositoryImpl.js +1 -1
  69. package/dist/esm/repositories/realm/index.js +3 -3
  70. package/dist/esm/repositories/realm/schemas.js +1 -1
  71. package/dist/esm/repositories/realm/walletRepository.js +3 -3
  72. package/dist/esm/repositories/scriptFromAddress.js +1 -1
  73. package/dist/esm/repositories/sqlite/index.js +2 -2
  74. package/dist/esm/repositories/sqlite/walletRepository.js +3 -3
  75. package/dist/esm/script/address.js +3 -3
  76. package/dist/esm/script/base.js +3 -3
  77. package/dist/esm/script/default.js +2 -2
  78. package/dist/esm/script/delegate.js +3 -3
  79. package/dist/esm/script/tapscript.js +1 -1
  80. package/dist/esm/script/vhtlc.js +2 -2
  81. package/dist/esm/storage/indexedDB.js +1 -1
  82. package/dist/esm/tree/signingSession.js +2 -2
  83. package/dist/esm/tree/validation.js +2 -2
  84. package/dist/esm/utils/arkTransaction.js +7 -7
  85. package/dist/esm/utils/transactionHistory.js +1 -1
  86. package/dist/esm/utils/unknownFields.js +1 -1
  87. package/dist/esm/wallet/asset-manager.js +5 -5
  88. package/dist/esm/wallet/asset.js +1 -1
  89. package/dist/esm/wallet/batch.js +2 -2
  90. package/dist/esm/wallet/delegator.js +16 -10
  91. package/dist/esm/wallet/expo/background.js +5 -5
  92. package/dist/esm/wallet/expo/index.js +2 -2
  93. package/dist/esm/wallet/expo/wallet.js +8 -8
  94. package/dist/esm/wallet/hdDescriptorProvider.js +31 -2
  95. package/dist/esm/wallet/inputSignerRouter.js +94 -0
  96. package/dist/esm/wallet/onchain.js +7 -7
  97. package/dist/esm/wallet/ramps.js +3 -3
  98. package/dist/esm/wallet/serviceWorker/wallet-message-handler.js +6 -6
  99. package/dist/esm/wallet/serviceWorker/wallet.js +8 -7
  100. package/dist/esm/wallet/signingErrors.js +27 -0
  101. package/dist/esm/wallet/unroll.js +12 -8
  102. package/dist/esm/wallet/utils.js +2 -2
  103. package/dist/esm/wallet/validation.js +2 -2
  104. package/dist/esm/wallet/vtxo-manager.js +9 -9
  105. package/dist/esm/wallet/wallet.js +262 -117
  106. package/dist/esm/wallet/walletReceiveRotator.js +540 -0
  107. package/dist/esm/worker/expo/index.js +4 -4
  108. package/dist/esm/worker/expo/processors/contractPollProcessor.js +1 -1
  109. package/dist/esm/worker/expo/processors/index.js +1 -1
  110. package/dist/esm/worker/expo/taskRunner.js +1 -1
  111. package/dist/esm/worker/messageBus.js +7 -6
  112. package/dist/types/adapters/asyncStorage.d.ts +2 -2
  113. package/dist/types/adapters/expo.d.ts +4 -4
  114. package/dist/types/adapters/fileSystem.d.ts +2 -2
  115. package/dist/types/adapters/indexedDB.d.ts +2 -2
  116. package/dist/types/adapters/localStorage.d.ts +2 -2
  117. package/dist/types/arkfee/index.d.ts +2 -2
  118. package/dist/types/arknote/index.d.ts +2 -2
  119. package/dist/types/bip322/index.d.ts +1 -1
  120. package/dist/types/contracts/arkcontract.d.ts +1 -1
  121. package/dist/types/contracts/contractManager.d.ts +39 -9
  122. package/dist/types/contracts/contractWatcher.d.ts +3 -3
  123. package/dist/types/contracts/handlers/default.d.ts +3 -3
  124. package/dist/types/contracts/handlers/delegate.d.ts +3 -3
  125. package/dist/types/contracts/handlers/helpers.d.ts +1 -1
  126. package/dist/types/contracts/handlers/index.d.ts +7 -7
  127. package/dist/types/contracts/handlers/registry.d.ts +1 -1
  128. package/dist/types/contracts/handlers/vhtlc.d.ts +3 -3
  129. package/dist/types/contracts/index.d.ts +14 -14
  130. package/dist/types/contracts/types.d.ts +21 -4
  131. package/dist/types/contracts/vtxoOwnership.d.ts +3 -3
  132. package/dist/types/extension/asset/assetGroup.d.ts +6 -6
  133. package/dist/types/extension/asset/assetId.d.ts +1 -1
  134. package/dist/types/extension/asset/assetInput.d.ts +2 -2
  135. package/dist/types/extension/asset/assetOutput.d.ts +1 -1
  136. package/dist/types/extension/asset/assetRef.d.ts +3 -3
  137. package/dist/types/extension/asset/index.d.ts +8 -8
  138. package/dist/types/extension/asset/metadata.d.ts +1 -1
  139. package/dist/types/extension/asset/packet.d.ts +2 -2
  140. package/dist/types/extension/index.d.ts +6 -6
  141. package/dist/types/forfeit.d.ts +1 -1
  142. package/dist/types/identity/descriptorProvider.d.ts +8 -1
  143. package/dist/types/identity/hdCapableIdentity.d.ts +33 -6
  144. package/dist/types/identity/index.d.ts +12 -11
  145. package/dist/types/identity/seedIdentity.d.ts +21 -5
  146. package/dist/types/identity/serialize.d.ts +1 -1
  147. package/dist/types/identity/singleKey.d.ts +3 -3
  148. package/dist/types/identity/staticDescriptorProvider.d.ts +3 -3
  149. package/dist/types/index.d.ts +59 -59
  150. package/dist/types/intent/index.d.ts +2 -2
  151. package/dist/types/musig2/index.d.ts +4 -4
  152. package/dist/types/providers/ark.d.ts +5 -5
  153. package/dist/types/providers/delegator.d.ts +2 -2
  154. package/dist/types/providers/electrum.d.ts +5 -5
  155. package/dist/types/providers/expoArk.d.ts +1 -1
  156. package/dist/types/providers/expoIndexer.d.ts +1 -1
  157. package/dist/types/providers/indexer.d.ts +1 -1
  158. package/dist/types/providers/onchain.d.ts +2 -2
  159. package/dist/types/repositories/contractRepository.d.ts +1 -1
  160. package/dist/types/repositories/inMemory/contractRepository.d.ts +2 -2
  161. package/dist/types/repositories/inMemory/walletRepository.d.ts +2 -2
  162. package/dist/types/repositories/index.d.ts +9 -9
  163. package/dist/types/repositories/indexedDB/contractRepository.d.ts +2 -2
  164. package/dist/types/repositories/indexedDB/db.d.ts +3 -3
  165. package/dist/types/repositories/indexedDB/walletRepository.d.ts +2 -2
  166. package/dist/types/repositories/migrations/contractRepositoryImpl.d.ts +3 -3
  167. package/dist/types/repositories/migrations/fromStorageAdapter.d.ts +2 -2
  168. package/dist/types/repositories/migrations/walletRepositoryImpl.d.ts +3 -3
  169. package/dist/types/repositories/realm/contractRepository.d.ts +3 -3
  170. package/dist/types/repositories/realm/index.d.ts +4 -4
  171. package/dist/types/repositories/realm/walletRepository.d.ts +3 -3
  172. package/dist/types/repositories/serialization.d.ts +11 -11
  173. package/dist/types/repositories/sqlite/contractRepository.d.ts +3 -3
  174. package/dist/types/repositories/sqlite/index.d.ts +3 -3
  175. package/dist/types/repositories/sqlite/walletRepository.d.ts +3 -3
  176. package/dist/types/repositories/walletRepository.d.ts +1 -1
  177. package/dist/types/script/address.d.ts +2 -2
  178. package/dist/types/script/base.d.ts +2 -2
  179. package/dist/types/script/default.d.ts +2 -2
  180. package/dist/types/script/delegate.d.ts +3 -3
  181. package/dist/types/script/vhtlc.d.ts +2 -2
  182. package/dist/types/storage/asyncStorage.d.ts +1 -1
  183. package/dist/types/storage/fileSystem.d.ts +1 -1
  184. package/dist/types/storage/inMemory.d.ts +1 -1
  185. package/dist/types/storage/indexedDB.d.ts +1 -1
  186. package/dist/types/storage/localStorage.d.ts +1 -1
  187. package/dist/types/tree/signingSession.d.ts +2 -2
  188. package/dist/types/tree/validation.d.ts +1 -1
  189. package/dist/types/utils/arkTransaction.d.ts +5 -5
  190. package/dist/types/utils/syncCursors.d.ts +1 -1
  191. package/dist/types/utils/timelock.d.ts +1 -1
  192. package/dist/types/utils/transaction.d.ts +2 -2
  193. package/dist/types/utils/transactionHistory.d.ts +1 -1
  194. package/dist/types/utils/txSizeEstimator.d.ts +1 -1
  195. package/dist/types/wallet/asset-manager.d.ts +3 -3
  196. package/dist/types/wallet/asset.d.ts +2 -2
  197. package/dist/types/wallet/batch.d.ts +2 -2
  198. package/dist/types/wallet/delegator.d.ts +5 -5
  199. package/dist/types/wallet/expo/background.d.ts +4 -4
  200. package/dist/types/wallet/expo/index.d.ts +4 -4
  201. package/dist/types/wallet/expo/wallet.d.ts +8 -8
  202. package/dist/types/wallet/hdDescriptorProvider.d.ts +26 -5
  203. package/dist/types/wallet/index.d.ts +63 -26
  204. package/dist/types/wallet/inputSignerRouter.d.ts +35 -0
  205. package/dist/types/wallet/onchain.d.ts +6 -6
  206. package/dist/types/wallet/ramps.d.ts +2 -2
  207. package/dist/types/wallet/serviceWorker/wallet-message-handler.d.ts +7 -7
  208. package/dist/types/wallet/serviceWorker/wallet.d.ts +20 -10
  209. package/dist/types/wallet/signingErrors.d.ts +19 -0
  210. package/dist/types/wallet/unroll.d.ts +6 -6
  211. package/dist/types/wallet/utils.d.ts +5 -5
  212. package/dist/types/wallet/validation.d.ts +3 -3
  213. package/dist/types/wallet/vtxo-manager.d.ts +2 -2
  214. package/dist/types/wallet/wallet.d.ts +71 -22
  215. package/dist/types/wallet/walletReceiveRotator.d.ts +306 -0
  216. package/dist/types/worker/expo/asyncStorageTaskQueue.d.ts +1 -1
  217. package/dist/types/worker/expo/index.d.ts +7 -7
  218. package/dist/types/worker/expo/processors/contractPollProcessor.d.ts +1 -1
  219. package/dist/types/worker/expo/processors/index.d.ts +1 -1
  220. package/dist/types/worker/expo/taskRunner.d.ts +7 -7
  221. package/dist/types/worker/messageBus.d.ts +7 -6
  222. package/package.json +2 -2
@@ -1,4 +1,4 @@
1
- import { WalletRepository, WalletState } from "../repositories/walletRepository";
1
+ import { WalletRepository, WalletState } from "../repositories/walletRepository.js";
2
2
  /** Lag behind real-time to avoid racing with indexer writes. */
3
3
  export declare const SAFETY_LAG_MS = 30000;
4
4
  /** Overlap window so boundary virtual outputs are never missed. */
@@ -1,4 +1,4 @@
1
- import type { RelativeTimelock } from "../script/tapscript";
1
+ import type { RelativeTimelock } from "../script/tapscript.js";
2
2
  /**
3
3
  * Convert RelativeTimelock to BIP68 sequence number.
4
4
  */
@@ -1,6 +1,6 @@
1
1
  import { Transaction as BtcSignerTransaction } from "@scure/btc-signer";
2
- import { TxOpts } from "@scure/btc-signer/transaction";
3
- import { Bytes } from "@scure/btc-signer/utils";
2
+ import { TxOpts } from "@scure/btc-signer/transaction.js";
3
+ import { Bytes } from "@scure/btc-signer/utils.js";
4
4
  /**
5
5
  * Transaction is a wrapper around the @scure/btc-signer Transaction class.
6
6
  * It adds the Arkade protocol specific options to the transaction.
@@ -1,4 +1,4 @@
1
- import { ArkTransaction, VirtualCoin } from "../wallet";
1
+ import { ArkTransaction, VirtualCoin } from "../wallet/index.js";
2
2
  type ExtendedArkTransaction = ArkTransaction & {
3
3
  tag: "offchain" | "boarding" | "exit" | "batch";
4
4
  };
@@ -1,4 +1,4 @@
1
- import { Network } from "../networks";
1
+ import { Network } from "../networks.js";
2
2
  export type VSize = {
3
3
  value: bigint;
4
4
  fee(feeRate: bigint): bigint;
@@ -1,6 +1,6 @@
1
- import { AssetDetails, BurnParams, IAssetManager, IReadonlyAssetManager, IssuanceParams, IssuanceResult, ReissuanceParams } from ".";
2
- import { IndexerProvider } from "../providers/indexer";
3
- import { Wallet } from "./wallet";
1
+ import { AssetDetails, BurnParams, IAssetManager, IReadonlyAssetManager, IssuanceParams, IssuanceResult, ReissuanceParams } from "./index.js";
2
+ import { IndexerProvider } from "../providers/indexer.js";
3
+ import { Wallet } from "./wallet.js";
4
4
  export declare class ReadonlyAssetManager implements IReadonlyAssetManager {
5
5
  readonly indexer: IndexerProvider;
6
6
  constructor(indexer: IndexerProvider);
@@ -1,5 +1,5 @@
1
- import { Packet } from "../extension/asset";
2
- import { Asset, ExtendedVirtualCoin, Recipient, VirtualCoin } from "./index";
1
+ import { Packet } from "../extension/asset/index.js";
2
+ import { Asset, ExtendedVirtualCoin, Recipient, VirtualCoin } from "./index.js";
3
3
  /**
4
4
  * Creates an asset packet from asset inputs and receivers.
5
5
  * Groups inputs and outputs by asset ID and creates the Packet object
@@ -1,5 +1,5 @@
1
- import type { BatchStartedEvent, BatchFinalizedEvent, BatchFailedEvent, TreeTxEvent, TreeSignatureEvent, TreeSigningStartedEvent, TreeNoncesEvent, BatchFinalizationEvent, SettlementEvent } from "../providers/ark";
2
- import { TxTree } from "../tree/txTree";
1
+ import type { BatchStartedEvent, BatchFinalizedEvent, BatchFailedEvent, TreeTxEvent, TreeSignatureEvent, TreeSigningStartedEvent, TreeNoncesEvent, BatchFinalizationEvent, SettlementEvent } from "../providers/ark.js";
2
+ import { TxTree } from "../tree/txTree.js";
3
3
  /**
4
4
  * Batch namespace provides utilities for joining and processing batch session.
5
5
  * The batch settlement process involves multiple events, this namespace provides abstractions and types to handle them.
@@ -1,8 +1,8 @@
1
- import { TransactionOutput } from "@scure/btc-signer/psbt";
2
- import { ArkProvider, DelegateInfo, Identity, Outpoint } from "..";
3
- import { ContractVtxo } from "../contracts/types";
4
- import { DelegatorProvider } from "../providers/delegator";
5
- import { Bytes } from "@scure/btc-signer/utils";
1
+ import { TransactionOutput } from "@scure/btc-signer/psbt.js";
2
+ import { ArkProvider, DelegateInfo, Identity, Outpoint } from "../index.js";
3
+ import { ContractVtxo } from "../contracts/types.js";
4
+ import { DelegatorProvider } from "../providers/delegator.js";
5
+ import { Bytes } from "@scure/btc-signer/utils.js";
6
6
  export interface IDelegatorManager {
7
7
  /**
8
8
  * Delegate virtual outputs to the remote delegation service.
@@ -1,7 +1,7 @@
1
- import type { WalletRepository } from "../../repositories/walletRepository";
2
- import type { ContractRepository } from "../../repositories/contractRepository";
3
- import type { AsyncStorageTaskQueue } from "../../worker/expo/asyncStorageTaskQueue";
4
- import type { TaskProcessor } from "../../worker/expo/taskRunner";
1
+ import type { WalletRepository } from "../../repositories/walletRepository.js";
2
+ import type { ContractRepository } from "../../repositories/contractRepository.js";
3
+ import type { AsyncStorageTaskQueue } from "../../worker/expo/asyncStorageTaskQueue.js";
4
+ import type { TaskProcessor } from "../../worker/expo/taskRunner.js";
5
5
  /**
6
6
  * Wallet parameters persisted by @see ExpoWallet.setup and read
7
7
  * by the background handler to reconstruct providers and `extendVtxo`
@@ -1,4 +1,4 @@
1
- export { ExpoWallet } from "./wallet";
2
- export type { ExpoWalletConfig, ExpoBackgroundConfig } from "./wallet";
3
- export { defineExpoBackgroundTask, registerExpoBackgroundTask, unregisterExpoBackgroundTask, } from "./background";
4
- export type { DefineBackgroundTaskOptions, PersistedBackgroundConfig, } from "./background";
1
+ export { ExpoWallet } from "./wallet.js";
2
+ export type { ExpoWalletConfig, ExpoBackgroundConfig } from "./wallet.js";
3
+ export { defineExpoBackgroundTask, registerExpoBackgroundTask, unregisterExpoBackgroundTask, } from "./background.js";
4
+ export type { DefineBackgroundTaskOptions, PersistedBackgroundConfig, } from "./background.js";
@@ -1,11 +1,11 @@
1
- import { Wallet } from "../wallet";
2
- import type { IWallet, IAssetManager, WalletBalance, WalletConfig, SendBitcoinParams, SettleParams, GetVtxosFilter, ArkTransaction, ExtendedCoin, ExtendedVirtualCoin, Recipient } from "..";
3
- import type { SettlementEvent } from "../../providers/ark";
4
- import type { Identity } from "../../identity";
5
- import type { IContractManager } from "../../contracts/contractManager";
6
- import type { IDelegatorManager } from "../delegator";
7
- import type { TaskQueue } from "../../worker/expo/taskQueue";
8
- import type { TaskProcessor } from "../../worker/expo/taskRunner";
1
+ import { Wallet } from "../wallet.js";
2
+ import type { IWallet, IAssetManager, WalletBalance, WalletConfig, SendBitcoinParams, SettleParams, GetVtxosFilter, ArkTransaction, ExtendedCoin, ExtendedVirtualCoin, Recipient } from "../index.js";
3
+ import type { SettlementEvent } from "../../providers/ark.js";
4
+ import type { Identity } from "../../identity/index.js";
5
+ import type { IContractManager } from "../../contracts/contractManager.js";
6
+ import type { IDelegatorManager } from "../delegator.js";
7
+ import type { TaskQueue } from "../../worker/expo/taskQueue.js";
8
+ import type { TaskProcessor } from "../../worker/expo/taskRunner.js";
9
9
  /**
10
10
  * Background processing configuration for @see ExpoWallet.
11
11
  */
@@ -1,7 +1,8 @@
1
- import { DescriptorProvider, DescriptorSigningRequest } from "../identity/descriptorProvider";
2
- import { HDCapableIdentity } from "../identity/hdCapableIdentity";
3
- import { WalletRepository } from "../repositories/walletRepository";
4
- import { Transaction } from "../utils/transaction";
1
+ import { DescriptorProvider, DescriptorSigningRequest } from "../identity/descriptorProvider.js";
2
+ import { HDCapableIdentity } from "../identity/hdCapableIdentity.js";
3
+ import { WalletRepository } from "../repositories/walletRepository.js";
4
+ import { Transaction } from "../utils/transaction.js";
5
+ import { ReceiveRotatorBoot, ReceiveRotatorBootOpts, ReceiveRotatorFactory } from "./walletReceiveRotator.js";
5
6
  /**
6
7
  * HD-wallet {@link DescriptorProvider} that allocates a fresh signing
7
8
  * descriptor on every call. The provider holds no notion of "current" — it
@@ -29,7 +30,7 @@ import { Transaction } from "../utils/transaction";
29
30
  * // next: tr([fp/86'/0'/0']xpub/0/1)
30
31
  * ```
31
32
  */
32
- export declare class HDDescriptorProvider implements DescriptorProvider {
33
+ export declare class HDDescriptorProvider implements DescriptorProvider, ReceiveRotatorFactory {
33
34
  private readonly identity;
34
35
  private readonly walletRepository;
35
36
  private constructor();
@@ -48,6 +49,19 @@ export declare class HDDescriptorProvider implements DescriptorProvider {
48
49
  * index.
49
50
  */
50
51
  getNextSigningDescriptor(): Promise<string>;
52
+ /**
53
+ * Re-derive the descriptor at the most recently allocated index
54
+ * WITHOUT advancing — i.e. read the same descriptor
55
+ * `getNextSigningDescriptor` last returned. Returns `undefined`
56
+ * when no descriptor has ever been allocated on this repo.
57
+ *
58
+ * Used by the boot path to keep the wallet's display address
59
+ * stable across restarts: when no tagged display contract exists
60
+ * (e.g. a fresh wallet that hasn't rotated yet, or a wallet whose
61
+ * baseline-only repo carries no rotation history), the boot should
62
+ * re-derive the existing index rather than burn a new one.
63
+ */
64
+ getCurrentSigningDescriptor(): Promise<string | undefined>;
51
65
  /**
52
66
  * Returns true when the given descriptor is derivable from this wallet's
53
67
  * seed. Delegates to the underlying identity, which handles both HD and
@@ -62,6 +76,13 @@ export declare class HDDescriptorProvider implements DescriptorProvider {
62
76
  signWithDescriptor(requests: DescriptorSigningRequest[]): Promise<Transaction[]>;
63
77
  /** Signs a message using the key derived from `descriptor`. */
64
78
  signMessageWithDescriptor(descriptor: string, message: Uint8Array, signatureType?: "schnorr" | "ecdsa"): Promise<Uint8Array>;
79
+ /**
80
+ * HD providers participate in receive rotation. The default
81
+ * factory boot (contract-repo lookup → allocate fresh descriptor)
82
+ * is exactly what we want, so this just delegates to
83
+ * {@link WalletReceiveRotator.defaultBoot}.
84
+ */
85
+ createReceiveRotator(opts: ReceiveRotatorBootOpts): Promise<ReceiveRotatorBoot | undefined>;
65
86
  /**
66
87
  * Substitute the wildcard in the identity's account-descriptor template
67
88
  * with a concrete index, going through the descriptors-scure parser
@@ -1,20 +1,45 @@
1
1
  import { Bytes } from "@scure/btc-signer/utils.js";
2
- import { ArkProvider, Output, SettlementEvent } from "../providers/ark";
3
- import { Identity, ReadonlyIdentity } from "../identity";
4
- import { RelativeTimelock } from "../script/tapscript";
5
- import { EncodedVtxoScript, TapLeafScript } from "../script/base";
6
- import { RenewalConfig, SettlementConfig } from "./vtxo-manager";
7
- import { IndexerProvider } from "../providers/indexer";
8
- import { OnchainProvider } from "../providers/onchain";
9
- import { ContractWatcherConfig } from "../contracts/contractWatcher";
10
- import { ContractRepository, WalletRepository } from "../repositories";
11
- import { IContractManager } from "../contracts/contractManager";
12
- import { IDelegatorManager } from "./delegator";
13
- import { DelegatorProvider } from "../providers/delegator";
2
+ import { ArkProvider, Output, SettlementEvent } from "../providers/ark.js";
3
+ import { Identity, ReadonlyIdentity } from "../identity/index.js";
4
+ import { DescriptorProvider } from "../identity/descriptorProvider.js";
5
+ import { RelativeTimelock } from "../script/tapscript.js";
6
+ import { EncodedVtxoScript, TapLeafScript } from "../script/base.js";
7
+ import { RenewalConfig, SettlementConfig } from "./vtxo-manager.js";
8
+ import { IndexerProvider } from "../providers/indexer.js";
9
+ import { OnchainProvider } from "../providers/onchain.js";
10
+ import { ContractWatcherConfig } from "../contracts/contractWatcher.js";
11
+ import { ContractRepository, WalletRepository } from "../repositories/index.js";
12
+ import { IContractManager } from "../contracts/contractManager.js";
13
+ import { IDelegatorManager } from "./delegator.js";
14
+ import { DelegatorProvider } from "../providers/delegator.js";
14
15
  /** Defaults */
15
16
  export declare const DEFAULT_ARKADE_SERVER_URL: "https://arkade.computer";
16
- export declare const DEFAULT_ARKADE_HRP = "ark";
17
- export declare const DEFAULT_NETWORK_NAME = "bitcoin";
17
+ export declare const DEFAULT_ARKADE_HRP: "ark";
18
+ export declare const DEFAULT_NETWORK_NAME: "bitcoin";
19
+ /**
20
+ * Wallet receive-address strategy.
21
+ *
22
+ * - `'auto'` *(default)*: **short-term** — currently identical to
23
+ * `'static'`. The `'auto'` name is reserved for a future change that
24
+ * will re-enable identity-probing once HD rotation has matured in
25
+ * the field. Until then, opt into HD explicitly via `'hd'` or a
26
+ * {@link DescriptorProvider}.
27
+ * *(See `TODO(hd-maturation)` in
28
+ * `src/wallet/walletReceiveRotator.ts:resolveDescriptorProvider` for
29
+ * the flip-back criteria.)*
30
+ * - `'static'`: never rotate. The wallet uses one receive address derived
31
+ * from `identity.xOnlyPublicKey()`.
32
+ * - `'hd'`: must rotate, using the built-in HD provider derived from the
33
+ * identity. Throws at `Wallet.create` if the identity isn't HD-capable
34
+ * or its descriptor isn't rangeable — no silent fallback.
35
+ * - A {@link DescriptorProvider} instance: rotate via the supplied
36
+ * provider on every incoming VTXO. The wallet does not probe the
37
+ * identity; the caller is responsible for ensuring the identity can
38
+ * sign for whatever pubkey the provider returns. Errors thrown by the
39
+ * provider propagate — there is no silent fallback for an explicit
40
+ * provider.
41
+ */
42
+ export type WalletMode = "auto" | "static" | "hd" | DescriptorProvider;
18
43
  /**
19
44
  * Base configuration options shared by all wallet types.
20
45
  *
@@ -164,6 +189,15 @@ export interface WalletConfig extends ReadonlyWalletConfig {
164
189
  * @see SettlementConfig
165
190
  */
166
191
  settlementConfig?: SettlementConfig | false;
192
+ /**
193
+ * Receive-address strategy. Pass `'static'`, `'hd'`, or a
194
+ * {@link DescriptorProvider} instance to drive rotation; omit (or
195
+ * pass `'auto'`) for the built-in auto-detect behaviour. See
196
+ * {@link WalletMode}.
197
+ *
198
+ * @defaultValue `'auto'`
199
+ */
200
+ walletMode?: WalletMode;
167
201
  }
168
202
  /**
169
203
  * Repository implementations used to store wallet and contract state.
@@ -472,24 +506,27 @@ export interface Coin extends Outpoint {
472
506
  * @see VirtualStatus
473
507
  */
474
508
  export interface VirtualCoin extends Coin {
475
- /** Virtual output status */
476
- virtualStatus: VirtualStatus;
477
- /** Transaction id that spent this virtual output, when known. */
478
- spentBy?: string;
479
- /** Settlement transaction associated with this virtual output, when known. */
480
- settledBy?: string;
481
- /** Arkade transaction id that created or spent this virtual output, when known. */
482
- arkTxId?: string;
483
509
  /** Creation time of the virtual output. */
484
510
  createdAt: Date;
485
- /** Whether this virtual output has been unrolled to onchain outputs. */
511
+ /** The scriptPubKey (hex) locking this virtual output, as returned by the indexer. */
512
+ script: string;
513
+ /** Whether this virtual output has been broadcasted onchain via an unroll (unilateral exit). */
486
514
  isUnrolled: boolean;
487
- /** Whether this virtual output is already spent. */
515
+ /**
516
+ * Whether this virtual output is already spent (boolean helper for `spentBy`).
517
+ * This is not set to true if the virtual output is unrolled or swept, only when it's spent offchain.
518
+ */
488
519
  isSpent?: boolean;
520
+ /** ID of the onchain commitment transaction that settled this output, if applicable. */
521
+ settledBy?: string;
522
+ /** ID of the offchain checkpoint transaction that spent this output, if applicable. */
523
+ spentBy?: string;
524
+ /** ID of the offchain Arkade transaction that spent the above checkpoint output, if applicable. */
525
+ arkTxId?: string;
526
+ /** Virtual output status */
527
+ virtualStatus: VirtualStatus;
489
528
  /** Assets carried by this virtual output, if any. */
490
529
  assets?: Asset[];
491
- /** The scriptPubKey (hex) locking this virtual output, as returned by the indexer. */
492
- script: string;
493
530
  }
494
531
  /** Wallet transaction direction. */
495
532
  export declare enum TxType {
@@ -0,0 +1,35 @@
1
+ import { Transaction } from "@scure/btc-signer";
2
+ import { Identity } from "../identity/index.js";
3
+ import { ContractRepository } from "../repositories/contractRepository.js";
4
+ import { DescriptorProvider } from "../identity/descriptorProvider.js";
5
+ export interface InputSigningJob {
6
+ /** Index in the source transaction. */
7
+ index: number;
8
+ /**
9
+ * Script used to identify the owning contract. For normal inputs this
10
+ * is the input's witnessUtxo script. For arkTx inputs this is the
11
+ * source VTXO script, because the witnessUtxo carries the checkpoint
12
+ * script instead.
13
+ */
14
+ lookupScript: Uint8Array;
15
+ }
16
+ export interface InputSignerRouterDeps {
17
+ identity: Identity;
18
+ contractRepository: ContractRepository;
19
+ descriptorProvider?: DescriptorProvider;
20
+ boardingPkScript: Uint8Array;
21
+ }
22
+ /**
23
+ * Routes PSBT inputs to the correct signer based on the owning contract.
24
+ * Inputs whose script matches a `default`/`delegate` contract with a
25
+ * non-baseline owner are sent to {@link DescriptorProvider}; everything
26
+ * else (baseline-owned contracts, non-default/non-delegate contracts,
27
+ * and the boarding script) is sent to {@link Identity}. Inputs with no
28
+ * matching contract and no boarding match are silently skipped, matching
29
+ * how the wallet historically handled cosigner/connector inputs.
30
+ */
31
+ export declare class InputSignerRouter {
32
+ private readonly deps;
33
+ constructor(deps: InputSignerRouterDeps);
34
+ sign(tx: Transaction, jobs: InputSigningJob[]): Promise<Transaction>;
35
+ }
@@ -1,10 +1,10 @@
1
1
  import { P2TR } from "@scure/btc-signer/payment.js";
2
- import { Coin, SendBitcoinParams } from ".";
3
- import { Identity } from "../identity";
4
- import { Network, NetworkName } from "../networks";
5
- import { OnchainProvider } from "../providers/onchain";
6
- import { AnchorBumper } from "../utils/anchor";
7
- import { Transaction } from "../utils/transaction";
2
+ import { Coin, SendBitcoinParams } from "./index.js";
3
+ import { Identity } from "../identity/index.js";
4
+ import { Network, NetworkName } from "../networks.js";
5
+ import { OnchainProvider } from "../providers/onchain.js";
6
+ import { AnchorBumper } from "../utils/anchor.js";
7
+ import { Transaction } from "../utils/transaction.js";
8
8
  /**
9
9
  * Onchain Bitcoin wallet implementation for traditional Bitcoin transactions.
10
10
  *
@@ -1,5 +1,5 @@
1
- import { ExtendedCoin, IWallet } from ".";
2
- import { FeeInfo, SettlementEvent } from "../providers/ark";
1
+ import { ExtendedCoin, IWallet } from "./index.js";
2
+ import { FeeInfo, SettlementEvent } from "../providers/ark.js";
3
3
  /**
4
4
  * Ramps is a class wrapping `settle` method to provide a more convenient interface for onboarding and offboarding operations.
5
5
  *
@@ -1,10 +1,10 @@
1
- import { SettlementEvent } from "../../providers/ark";
2
- import type { Contract, ContractEvent, ContractWithVtxos, GetContractsFilter, PathSelection } from "../../contracts";
3
- import type { CreateContractParams, GetAllSpendingPathsOptions, GetSpendablePathsOptions } from "../../contracts/contractManager";
4
- import { ArkTransaction, AssetDetails, BurnParams, ExtendedCoin, ExtendedVirtualCoin, GetVtxosFilter, IssuanceParams, IssuanceResult, IWallet, Recipient, ReissuanceParams, SendBitcoinParams, SettleParams, VirtualCoin, WalletBalance } from "../index";
5
- import { DelegateInfo } from "../../providers/delegator";
6
- import { MessageHandler, RequestEnvelope, ResponseEnvelope } from "../../worker/messageBus";
7
- import { Transaction } from "../../utils/transaction";
1
+ import { SettlementEvent } from "../../providers/ark.js";
2
+ import type { Contract, ContractEvent, ContractWithVtxos, GetContractsFilter, PathSelection } from "../../contracts/index.js";
3
+ import type { CreateContractParams, GetAllSpendingPathsOptions, GetSpendablePathsOptions } from "../../contracts/contractManager.js";
4
+ import { ArkTransaction, AssetDetails, BurnParams, ExtendedCoin, ExtendedVirtualCoin, GetVtxosFilter, IssuanceParams, IssuanceResult, IWallet, Recipient, ReissuanceParams, SendBitcoinParams, SettleParams, VirtualCoin, WalletBalance } from "../index.js";
5
+ import { DelegateInfo } from "../../providers/delegator.js";
6
+ import { MessageHandler, RequestEnvelope, ResponseEnvelope } from "../../worker/messageBus.js";
7
+ import { Transaction } from "../../utils/transaction.js";
8
8
  export declare class WalletNotInitializedError extends Error {
9
9
  constructor();
10
10
  }
@@ -1,15 +1,16 @@
1
- import { IWallet, WalletBalance, SendBitcoinParams, SettleParams, ArkTransaction, ExtendedCoin, ExtendedVirtualCoin, GetVtxosFilter, StorageConfig, IReadonlyWallet, IReadonlyAssetManager, IAssetManager, Recipient } from "..";
2
- import { SettlementEvent } from "../../providers/ark";
3
- import { Identity, ReadonlyIdentity, type SerializedIdentity, type LegacySerializedIdentity } from "../../identity";
4
- import { WalletRepository } from "../../repositories/walletRepository";
5
- import { ContractRepository } from "../../repositories/contractRepository";
6
- import { RequestInitWallet, ResponseGetStatus, WalletUpdaterRequest, WalletUpdaterResponse } from "./wallet-message-handler";
7
- import type { IContractManager } from "../../contracts/contractManager";
8
- import type { IDelegatorManager } from "../delegator";
9
- import type { IVtxoManager, SettlementConfig } from "../vtxo-manager";
10
- import type { ContractWatcherConfig } from "../../contracts/contractWatcher";
1
+ import { IWallet, WalletBalance, SendBitcoinParams, SettleParams, ArkTransaction, ExtendedCoin, ExtendedVirtualCoin, GetVtxosFilter, StorageConfig, IReadonlyWallet, IReadonlyAssetManager, IAssetManager, Recipient } from "../index.js";
2
+ import { SettlementEvent } from "../../providers/ark.js";
3
+ import { Identity, ReadonlyIdentity, type SerializedIdentity, type LegacySerializedIdentity } from "../../identity/index.js";
4
+ import { WalletRepository } from "../../repositories/walletRepository.js";
5
+ import { ContractRepository } from "../../repositories/contractRepository.js";
6
+ import { RequestInitWallet, ResponseGetStatus, WalletUpdaterRequest, WalletUpdaterResponse } from "./wallet-message-handler.js";
7
+ import type { IContractManager } from "../../contracts/contractManager.js";
8
+ import type { IDelegatorManager } from "../delegator.js";
9
+ import type { IVtxoManager, SettlementConfig } from "../vtxo-manager.js";
10
+ import type { ContractWatcherConfig } from "../../contracts/contractWatcher.js";
11
11
  type RequestType = WalletUpdaterRequest["type"];
12
12
  export type MessageTimeouts = Partial<Record<RequestType, number>>;
13
+ export type ServiceWorkerWalletMode = "auto" | "static" | "hd";
13
14
  export declare const DEFAULT_MESSAGE_TIMEOUTS: Readonly<Record<RequestType, number>>;
14
15
  /**
15
16
  * Service Worker-based wallet implementation for browser environments.
@@ -68,6 +69,14 @@ interface ServiceWorkerWalletOptions {
68
69
  messageBusTimeoutMs?: number;
69
70
  /** Optional settlement configuration forwarded to the worker wallet. */
70
71
  settlementConfig?: SettlementConfig | false;
72
+ /**
73
+ * Receive-address strategy forwarded to the worker wallet.
74
+ *
75
+ * Service workers can only receive serializable configuration, so the
76
+ * descriptor-provider object form accepted by `Wallet.create()` is not
77
+ * supported here.
78
+ */
79
+ walletMode?: ServiceWorkerWalletMode;
71
80
  /** Optional contract watcher configuration forwarded to the worker wallet. */
72
81
  watcherConfig?: Partial<Omit<ContractWatcherConfig, "indexerProvider">>;
73
82
  /**
@@ -109,6 +118,7 @@ type MessageBusInitConfig = {
109
118
  esploraUrl?: string;
110
119
  timeoutMs?: number;
111
120
  settlementConfig?: SettlementConfig | false;
121
+ walletMode?: ServiceWorkerWalletMode;
112
122
  watcherConfig?: Partial<Omit<ContractWatcherConfig, "indexerProvider">>;
113
123
  messageTimeouts?: Record<string, number>;
114
124
  };
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Thrown when a rotated contract (default or delegate) is missing the
3
+ * metadata.signingDescriptor required to route it to a descriptor-aware
4
+ * signer.
5
+ */
6
+ export declare class MissingSigningDescriptorError extends Error {
7
+ readonly contractScript: string;
8
+ readonly contractType: "default" | "delegate";
9
+ readonly name = "MissingSigningDescriptorError";
10
+ constructor(contractScript: string, contractType: "default" | "delegate");
11
+ }
12
+ /**
13
+ * Thrown when an input needs descriptor-aware signing but no
14
+ * DescriptorProvider was wired into the wallet.
15
+ */
16
+ export declare class DescriptorSigningProviderMissingError extends Error {
17
+ readonly name = "DescriptorSigningProviderMissingError";
18
+ constructor();
19
+ }
@@ -1,9 +1,9 @@
1
- import { ChainTx, IndexerProvider } from "../providers/indexer";
2
- import { AnchorBumper } from "../utils/anchor";
3
- import { OnchainProvider } from "../providers/onchain";
4
- import { Outpoint } from ".";
5
- import { Wallet } from "./wallet";
6
- import { Transaction } from "../utils/transaction";
1
+ import { ChainTx, IndexerProvider } from "../providers/indexer.js";
2
+ import { AnchorBumper } from "../utils/anchor.js";
3
+ import { OnchainProvider } from "../providers/onchain.js";
4
+ import { Outpoint } from "./index.js";
5
+ import { Wallet } from "./wallet.js";
6
+ import { Transaction } from "../utils/transaction.js";
7
7
  export declare namespace Unroll {
8
8
  enum StepType {
9
9
  UNROLL = 0,
@@ -1,8 +1,8 @@
1
- import { Recipient } from ".";
2
- import { type Coin, type ExtendedCoin, type ExtendedVirtualCoin, type VirtualCoin } from "..";
3
- import type { Contract } from "../contracts/types";
4
- import { ReadonlyWallet } from "./wallet";
5
- import { Bytes } from "@scure/btc-signer/utils";
1
+ import { Recipient } from "./index.js";
2
+ import { type Coin, type ExtendedCoin, type ExtendedVirtualCoin, type VirtualCoin } from "../index.js";
3
+ import type { Contract } from "../contracts/types.js";
4
+ import { ReadonlyWallet } from "./wallet.js";
5
+ import { Bytes } from "@scure/btc-signer/utils.js";
6
6
  export declare const DUST_AMOUNT = 546;
7
7
  export declare function extendCoin(wallet: {
8
8
  boardingTapscript: ReadonlyWallet["boardingTapscript"];
@@ -1,6 +1,6 @@
1
- import { Recipient } from ".";
2
- import { Transaction } from "../utils/transaction";
3
- import type { Network } from "../networks";
1
+ import { Recipient } from "./index.js";
2
+ import { Transaction } from "../utils/transaction.js";
3
+ import type { Network } from "../networks.js";
4
4
  export declare const ErrOffchainOutputNotFound: (address: string) => Error;
5
5
  export declare const ErrInvalidAssetOutputAmount: (got: bigint, want: bigint, assetId: string) => Error;
6
6
  export declare const ErrAssetGroupNotFound: (assetId: string) => Error;
@@ -1,5 +1,5 @@
1
- import { ExtendedCoin, ExtendedVirtualCoin, IWallet } from ".";
2
- import { SettlementEvent } from "../providers/ark";
1
+ import { ExtendedCoin, ExtendedVirtualCoin, IWallet } from "./index.js";
2
+ import { SettlementEvent } from "../providers/ark.js";
3
3
  /** Default renewal threshold in seconds (3 days). */
4
4
  export declare const DEFAULT_THRESHOLD_SECONDS: number;
5
5
  /**