@arkade-os/sdk 0.3.13 → 0.4.0-next.1

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 (270) hide show
  1. package/README.md +586 -54
  2. package/dist/cjs/asset/assetGroup.js +141 -0
  3. package/dist/cjs/asset/assetId.js +88 -0
  4. package/dist/cjs/asset/assetInput.js +204 -0
  5. package/dist/cjs/asset/assetOutput.js +159 -0
  6. package/dist/cjs/asset/assetRef.js +82 -0
  7. package/dist/cjs/asset/index.js +24 -0
  8. package/dist/cjs/asset/metadata.js +172 -0
  9. package/dist/cjs/asset/packet.js +164 -0
  10. package/dist/cjs/asset/types.js +25 -0
  11. package/dist/cjs/asset/utils.js +105 -0
  12. package/dist/cjs/bip322/index.js +270 -0
  13. package/dist/cjs/contracts/arkcontract.js +148 -0
  14. package/dist/cjs/contracts/contractManager.js +436 -0
  15. package/dist/cjs/contracts/contractWatcher.js +567 -0
  16. package/dist/cjs/contracts/handlers/default.js +85 -0
  17. package/dist/cjs/contracts/handlers/delegate.js +89 -0
  18. package/dist/cjs/contracts/handlers/helpers.js +105 -0
  19. package/dist/cjs/contracts/handlers/index.js +19 -0
  20. package/dist/cjs/contracts/handlers/registry.js +89 -0
  21. package/dist/cjs/contracts/handlers/vhtlc.js +193 -0
  22. package/dist/cjs/contracts/index.js +41 -0
  23. package/dist/cjs/contracts/types.js +2 -0
  24. package/dist/cjs/forfeit.js +12 -8
  25. package/dist/cjs/identity/index.js +1 -0
  26. package/dist/cjs/identity/seedIdentity.js +255 -0
  27. package/dist/cjs/index.js +72 -14
  28. package/dist/cjs/intent/index.js +47 -11
  29. package/dist/cjs/providers/ark.js +7 -0
  30. package/dist/cjs/providers/delegator.js +66 -0
  31. package/dist/cjs/providers/expoIndexer.js +5 -0
  32. package/dist/cjs/providers/indexer.js +68 -1
  33. package/dist/cjs/providers/utils.js +1 -0
  34. package/dist/cjs/repositories/contractRepository.js +0 -103
  35. package/dist/cjs/repositories/inMemory/contractRepository.js +55 -0
  36. package/dist/cjs/repositories/inMemory/walletRepository.js +80 -0
  37. package/dist/cjs/repositories/index.js +16 -0
  38. package/dist/cjs/repositories/indexedDB/contractRepository.js +187 -0
  39. package/dist/cjs/repositories/indexedDB/db.js +19 -0
  40. package/dist/cjs/repositories/indexedDB/manager.js +97 -0
  41. package/dist/cjs/repositories/indexedDB/schema.js +159 -0
  42. package/dist/cjs/repositories/indexedDB/walletRepository.js +338 -0
  43. package/dist/cjs/repositories/indexedDB/websqlAdapter.js +144 -0
  44. package/dist/cjs/repositories/migrations/contractRepositoryImpl.js +127 -0
  45. package/dist/cjs/repositories/migrations/fromStorageAdapter.js +66 -0
  46. package/dist/cjs/repositories/migrations/walletRepositoryImpl.js +180 -0
  47. package/dist/cjs/repositories/realm/contractRepository.js +120 -0
  48. package/dist/cjs/repositories/realm/index.js +9 -0
  49. package/dist/cjs/repositories/realm/schemas.js +108 -0
  50. package/dist/cjs/repositories/realm/types.js +7 -0
  51. package/dist/cjs/repositories/realm/walletRepository.js +273 -0
  52. package/dist/cjs/repositories/serialization.js +49 -0
  53. package/dist/cjs/repositories/sqlite/contractRepository.js +139 -0
  54. package/dist/cjs/repositories/sqlite/index.js +7 -0
  55. package/dist/cjs/repositories/sqlite/types.js +2 -0
  56. package/dist/cjs/repositories/sqlite/walletRepository.js +328 -0
  57. package/dist/cjs/repositories/walletRepository.js +0 -169
  58. package/dist/cjs/script/base.js +54 -0
  59. package/dist/cjs/script/delegate.js +49 -0
  60. package/dist/cjs/storage/asyncStorage.js +4 -1
  61. package/dist/cjs/storage/fileSystem.js +3 -0
  62. package/dist/cjs/storage/inMemory.js +3 -0
  63. package/dist/cjs/storage/indexedDB.js +5 -1
  64. package/dist/cjs/storage/localStorage.js +3 -0
  65. package/dist/cjs/utils/arkTransaction.js +16 -0
  66. package/dist/cjs/utils/transactionHistory.js +50 -0
  67. package/dist/cjs/wallet/asset-manager.js +338 -0
  68. package/dist/cjs/wallet/asset.js +117 -0
  69. package/dist/cjs/wallet/batch.js +1 -1
  70. package/dist/cjs/wallet/delegator.js +235 -0
  71. package/dist/cjs/wallet/expo/background.js +133 -0
  72. package/dist/cjs/wallet/expo/index.js +9 -0
  73. package/dist/cjs/wallet/expo/wallet.js +231 -0
  74. package/dist/cjs/wallet/serviceWorker/wallet-message-handler.js +568 -0
  75. package/dist/cjs/wallet/serviceWorker/wallet.js +383 -102
  76. package/dist/cjs/wallet/utils.js +58 -0
  77. package/dist/cjs/wallet/validation.js +151 -0
  78. package/dist/cjs/wallet/vtxo-manager.js +8 -1
  79. package/dist/cjs/wallet/wallet.js +702 -260
  80. package/dist/cjs/worker/browser/service-worker-manager.js +82 -0
  81. package/dist/cjs/{wallet/serviceWorker → worker/browser}/utils.js +2 -1
  82. package/dist/cjs/worker/expo/asyncStorageTaskQueue.js +78 -0
  83. package/dist/cjs/worker/expo/index.js +12 -0
  84. package/dist/cjs/worker/expo/processors/contractPollProcessor.js +61 -0
  85. package/dist/cjs/worker/expo/processors/index.js +6 -0
  86. package/dist/cjs/worker/expo/taskQueue.js +41 -0
  87. package/dist/cjs/worker/expo/taskRunner.js +57 -0
  88. package/dist/cjs/worker/messageBus.js +252 -0
  89. package/dist/esm/asset/assetGroup.js +137 -0
  90. package/dist/esm/asset/assetId.js +84 -0
  91. package/dist/esm/asset/assetInput.js +199 -0
  92. package/dist/esm/asset/assetOutput.js +154 -0
  93. package/dist/esm/asset/assetRef.js +78 -0
  94. package/dist/esm/asset/index.js +8 -0
  95. package/dist/esm/asset/metadata.js +167 -0
  96. package/dist/esm/asset/packet.js +159 -0
  97. package/dist/esm/asset/types.js +22 -0
  98. package/dist/esm/asset/utils.js +99 -0
  99. package/dist/esm/bip322/index.js +267 -0
  100. package/dist/esm/contracts/arkcontract.js +141 -0
  101. package/dist/esm/contracts/contractManager.js +432 -0
  102. package/dist/esm/contracts/contractWatcher.js +563 -0
  103. package/dist/esm/contracts/handlers/default.js +82 -0
  104. package/dist/esm/contracts/handlers/delegate.js +86 -0
  105. package/dist/esm/contracts/handlers/helpers.js +66 -0
  106. package/dist/esm/contracts/handlers/index.js +12 -0
  107. package/dist/esm/contracts/handlers/registry.js +86 -0
  108. package/dist/esm/contracts/handlers/vhtlc.js +190 -0
  109. package/dist/esm/contracts/index.js +13 -0
  110. package/dist/esm/contracts/types.js +1 -0
  111. package/dist/esm/forfeit.js +11 -8
  112. package/dist/esm/identity/index.js +1 -0
  113. package/dist/esm/identity/seedIdentity.js +249 -0
  114. package/dist/esm/index.js +28 -15
  115. package/dist/esm/intent/index.js +44 -9
  116. package/dist/esm/providers/ark.js +7 -0
  117. package/dist/esm/providers/delegator.js +62 -0
  118. package/dist/esm/providers/expoIndexer.js +5 -0
  119. package/dist/esm/providers/indexer.js +68 -1
  120. package/dist/esm/providers/utils.js +1 -0
  121. package/dist/esm/repositories/contractRepository.js +1 -101
  122. package/dist/esm/repositories/inMemory/contractRepository.js +51 -0
  123. package/dist/esm/repositories/inMemory/walletRepository.js +76 -0
  124. package/dist/esm/repositories/index.js +8 -0
  125. package/dist/esm/repositories/indexedDB/contractRepository.js +183 -0
  126. package/dist/esm/repositories/indexedDB/db.js +4 -0
  127. package/dist/esm/repositories/indexedDB/manager.js +92 -0
  128. package/dist/esm/repositories/indexedDB/schema.js +155 -0
  129. package/dist/esm/repositories/indexedDB/walletRepository.js +334 -0
  130. package/dist/esm/repositories/indexedDB/websqlAdapter.js +138 -0
  131. package/dist/esm/repositories/migrations/contractRepositoryImpl.js +121 -0
  132. package/dist/esm/repositories/migrations/fromStorageAdapter.js +58 -0
  133. package/dist/esm/repositories/migrations/walletRepositoryImpl.js +176 -0
  134. package/dist/esm/repositories/realm/contractRepository.js +116 -0
  135. package/dist/esm/repositories/realm/index.js +3 -0
  136. package/dist/esm/repositories/realm/schemas.js +105 -0
  137. package/dist/esm/repositories/realm/types.js +6 -0
  138. package/dist/esm/repositories/realm/walletRepository.js +269 -0
  139. package/dist/esm/repositories/serialization.js +40 -0
  140. package/dist/esm/repositories/sqlite/contractRepository.js +135 -0
  141. package/dist/esm/repositories/sqlite/index.js +2 -0
  142. package/dist/esm/repositories/sqlite/types.js +1 -0
  143. package/dist/esm/repositories/sqlite/walletRepository.js +324 -0
  144. package/dist/esm/repositories/walletRepository.js +1 -167
  145. package/dist/esm/script/base.js +21 -1
  146. package/dist/esm/script/delegate.js +46 -0
  147. package/dist/esm/storage/asyncStorage.js +4 -1
  148. package/dist/esm/storage/fileSystem.js +3 -0
  149. package/dist/esm/storage/inMemory.js +3 -0
  150. package/dist/esm/storage/indexedDB.js +5 -1
  151. package/dist/esm/storage/localStorage.js +3 -0
  152. package/dist/esm/utils/arkTransaction.js +15 -0
  153. package/dist/esm/utils/transactionHistory.js +50 -0
  154. package/dist/esm/wallet/asset-manager.js +333 -0
  155. package/dist/esm/wallet/asset.js +111 -0
  156. package/dist/esm/wallet/batch.js +1 -1
  157. package/dist/esm/wallet/delegator.js +231 -0
  158. package/dist/esm/wallet/expo/background.js +128 -0
  159. package/dist/esm/wallet/expo/index.js +2 -0
  160. package/dist/esm/wallet/expo/wallet.js +194 -0
  161. package/dist/esm/wallet/serviceWorker/wallet-message-handler.js +564 -0
  162. package/dist/esm/wallet/serviceWorker/wallet.js +382 -101
  163. package/dist/esm/wallet/utils.js +54 -0
  164. package/dist/esm/wallet/validation.js +139 -0
  165. package/dist/esm/wallet/vtxo-manager.js +8 -1
  166. package/dist/esm/wallet/wallet.js +704 -229
  167. package/dist/esm/worker/browser/service-worker-manager.js +76 -0
  168. package/dist/esm/{wallet/serviceWorker → worker/browser}/utils.js +2 -1
  169. package/dist/esm/worker/expo/asyncStorageTaskQueue.js +74 -0
  170. package/dist/esm/worker/expo/index.js +4 -0
  171. package/dist/esm/worker/expo/processors/contractPollProcessor.js +58 -0
  172. package/dist/esm/worker/expo/processors/index.js +1 -0
  173. package/dist/esm/worker/expo/taskQueue.js +37 -0
  174. package/dist/esm/worker/expo/taskRunner.js +54 -0
  175. package/dist/esm/worker/messageBus.js +248 -0
  176. package/dist/types/asset/assetGroup.d.ts +28 -0
  177. package/dist/types/asset/assetId.d.ts +19 -0
  178. package/dist/types/asset/assetInput.d.ts +46 -0
  179. package/dist/types/asset/assetOutput.d.ts +39 -0
  180. package/dist/types/asset/assetRef.d.ts +25 -0
  181. package/dist/types/asset/index.d.ts +8 -0
  182. package/dist/types/asset/metadata.d.ts +37 -0
  183. package/dist/types/asset/packet.d.ts +27 -0
  184. package/dist/types/asset/types.d.ts +18 -0
  185. package/dist/types/asset/utils.d.ts +21 -0
  186. package/dist/types/bip322/index.d.ts +55 -0
  187. package/dist/types/contracts/arkcontract.d.ts +101 -0
  188. package/dist/types/contracts/contractManager.d.ts +331 -0
  189. package/dist/types/contracts/contractWatcher.d.ts +192 -0
  190. package/dist/types/contracts/handlers/default.d.ts +19 -0
  191. package/dist/types/contracts/handlers/delegate.d.ts +21 -0
  192. package/dist/types/contracts/handlers/helpers.d.ts +18 -0
  193. package/dist/types/contracts/handlers/index.d.ts +7 -0
  194. package/dist/types/contracts/handlers/registry.d.ts +65 -0
  195. package/dist/types/contracts/handlers/vhtlc.d.ts +32 -0
  196. package/dist/types/contracts/index.d.ts +14 -0
  197. package/dist/types/contracts/types.d.ts +222 -0
  198. package/dist/types/forfeit.d.ts +2 -1
  199. package/dist/types/identity/index.d.ts +1 -0
  200. package/dist/types/identity/seedIdentity.d.ts +128 -0
  201. package/dist/types/index.d.ts +22 -12
  202. package/dist/types/intent/index.d.ts +15 -1
  203. package/dist/types/providers/ark.d.ts +11 -2
  204. package/dist/types/providers/delegator.d.ts +29 -0
  205. package/dist/types/providers/indexer.d.ts +11 -1
  206. package/dist/types/repositories/contractRepository.d.ts +30 -19
  207. package/dist/types/repositories/inMemory/contractRepository.d.ts +17 -0
  208. package/dist/types/repositories/inMemory/walletRepository.d.ts +26 -0
  209. package/dist/types/repositories/index.d.ts +7 -0
  210. package/dist/types/repositories/indexedDB/contractRepository.d.ts +21 -0
  211. package/dist/types/repositories/indexedDB/db.d.ts +4 -0
  212. package/dist/types/repositories/indexedDB/manager.d.ts +22 -0
  213. package/dist/types/repositories/indexedDB/schema.d.ts +8 -0
  214. package/dist/types/repositories/indexedDB/walletRepository.d.ts +25 -0
  215. package/dist/types/repositories/indexedDB/websqlAdapter.d.ts +49 -0
  216. package/dist/types/repositories/migrations/contractRepositoryImpl.d.ts +24 -0
  217. package/dist/types/repositories/migrations/fromStorageAdapter.d.ts +19 -0
  218. package/dist/types/repositories/migrations/walletRepositoryImpl.d.ts +27 -0
  219. package/dist/types/repositories/realm/contractRepository.d.ts +24 -0
  220. package/dist/types/repositories/realm/index.d.ts +4 -0
  221. package/dist/types/repositories/realm/schemas.d.ts +208 -0
  222. package/dist/types/repositories/realm/types.d.ts +16 -0
  223. package/dist/types/repositories/realm/walletRepository.d.ts +31 -0
  224. package/dist/types/repositories/serialization.d.ts +40 -0
  225. package/dist/types/repositories/sqlite/contractRepository.d.ts +33 -0
  226. package/dist/types/repositories/sqlite/index.d.ts +3 -0
  227. package/dist/types/repositories/sqlite/types.d.ts +18 -0
  228. package/dist/types/repositories/sqlite/walletRepository.d.ts +40 -0
  229. package/dist/types/repositories/walletRepository.d.ts +13 -24
  230. package/dist/types/script/base.d.ts +1 -0
  231. package/dist/types/script/delegate.d.ts +36 -0
  232. package/dist/types/storage/asyncStorage.d.ts +4 -0
  233. package/dist/types/storage/fileSystem.d.ts +3 -0
  234. package/dist/types/storage/inMemory.d.ts +3 -0
  235. package/dist/types/storage/index.d.ts +3 -0
  236. package/dist/types/storage/indexedDB.d.ts +3 -0
  237. package/dist/types/storage/localStorage.d.ts +3 -0
  238. package/dist/types/utils/arkTransaction.d.ts +6 -0
  239. package/dist/types/wallet/asset-manager.d.ts +78 -0
  240. package/dist/types/wallet/asset.d.ts +21 -0
  241. package/dist/types/wallet/batch.d.ts +1 -1
  242. package/dist/types/wallet/delegator.d.ts +24 -0
  243. package/dist/types/wallet/expo/background.d.ts +66 -0
  244. package/dist/types/wallet/expo/index.d.ts +4 -0
  245. package/dist/types/wallet/expo/wallet.d.ts +97 -0
  246. package/dist/types/wallet/index.d.ts +75 -2
  247. package/dist/types/wallet/serviceWorker/wallet-message-handler.d.ts +366 -0
  248. package/dist/types/wallet/serviceWorker/wallet.d.ts +20 -11
  249. package/dist/types/wallet/utils.d.ts +12 -1
  250. package/dist/types/wallet/validation.d.ts +24 -0
  251. package/dist/types/wallet/wallet.d.ts +111 -17
  252. package/dist/types/worker/browser/service-worker-manager.d.ts +21 -0
  253. package/dist/types/{wallet/serviceWorker → worker/browser}/utils.d.ts +2 -1
  254. package/dist/types/worker/expo/asyncStorageTaskQueue.d.ts +46 -0
  255. package/dist/types/worker/expo/index.d.ts +7 -0
  256. package/dist/types/worker/expo/processors/contractPollProcessor.d.ts +14 -0
  257. package/dist/types/worker/expo/processors/index.d.ts +1 -0
  258. package/dist/types/worker/expo/taskQueue.d.ts +50 -0
  259. package/dist/types/worker/expo/taskRunner.d.ts +42 -0
  260. package/dist/types/worker/messageBus.d.ts +109 -0
  261. package/package.json +69 -11
  262. package/dist/cjs/wallet/serviceWorker/request.js +0 -78
  263. package/dist/cjs/wallet/serviceWorker/response.js +0 -222
  264. package/dist/cjs/wallet/serviceWorker/worker.js +0 -655
  265. package/dist/esm/wallet/serviceWorker/request.js +0 -75
  266. package/dist/esm/wallet/serviceWorker/response.js +0 -219
  267. package/dist/esm/wallet/serviceWorker/worker.js +0 -651
  268. package/dist/types/wallet/serviceWorker/request.d.ts +0 -74
  269. package/dist/types/wallet/serviceWorker/response.d.ts +0 -123
  270. package/dist/types/wallet/serviceWorker/worker.d.ts +0 -53
@@ -4,17 +4,20 @@ import { ArkAddress } from "../script/address";
4
4
  import { DefaultVtxo } from "../script/default";
5
5
  import { Network, NetworkName } from "../networks";
6
6
  import { OnchainProvider } from "../providers/onchain";
7
- import { SettlementEvent, ArkProvider, SignedIntent } from "../providers/ark";
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, Coin, ExtendedCoin, ExtendedVirtualCoin, GetVtxosFilter, IReadonlyWallet, IWallet, ReadonlyWalletConfig, SendBitcoinParams, SettleParams, VirtualCoin, WalletBalance, WalletConfig } from ".";
11
- import { TapLeafScript } from "../script/base";
10
+ import { ArkTransaction, Recipient, Coin, ExtendedCoin, ExtendedVirtualCoin, GetVtxosFilter, IReadonlyWallet, IWallet, ReadonlyWalletConfig, SendBitcoinParams, SettleParams, VirtualCoin, WalletBalance, WalletConfig, IAssetManager, IReadonlyAssetManager } from ".";
12
11
  import { CSVMultisigTapscript } from "../script/tapscript";
13
12
  import { Intent } from "../intent";
14
13
  import { IndexerProvider } from "../providers/indexer";
15
- import { WalletRepository, WalletRepositoryImpl } from "../repositories/walletRepository";
16
- import { ContractRepository, ContractRepositoryImpl } from "../repositories/contractRepository";
14
+ import { WalletRepository } from "../repositories/walletRepository";
15
+ import { ContractRepository } from "../repositories/contractRepository";
17
16
  import { Batch } from "./batch";
17
+ import { DelegatorProvider } from "../providers/delegator";
18
+ import { DelegateVtxo } from "../script/delegate";
19
+ import { DelegatorManager } from "./delegator";
20
+ import { ContractManager } from "../contracts/contractManager";
18
21
  export type IncomingFunds = {
19
22
  type: "utxo";
20
23
  coins: Coin[];
@@ -29,32 +32,44 @@ export declare class ReadonlyWallet implements IReadonlyWallet {
29
32
  readonly onchainProvider: OnchainProvider;
30
33
  readonly indexerProvider: IndexerProvider;
31
34
  readonly arkServerPublicKey: Bytes;
32
- readonly offchainTapscript: DefaultVtxo.Script;
35
+ readonly offchainTapscript: DefaultVtxo.Script | DelegateVtxo.Script;
33
36
  readonly boardingTapscript: DefaultVtxo.Script;
34
37
  readonly dustAmount: bigint;
35
38
  readonly walletRepository: WalletRepository;
36
39
  readonly contractRepository: ContractRepository;
37
- protected constructor(identity: ReadonlyIdentity, network: Network, onchainProvider: OnchainProvider, indexerProvider: IndexerProvider, arkServerPublicKey: Bytes, offchainTapscript: DefaultVtxo.Script, boardingTapscript: DefaultVtxo.Script, dustAmount: bigint, walletRepository: WalletRepository, contractRepository: ContractRepository);
40
+ readonly delegatorProvider?: DelegatorProvider | undefined;
41
+ private _contractManager?;
42
+ private _contractManagerInitializing?;
43
+ protected readonly watcherConfig?: ReadonlyWalletConfig["watcherConfig"];
44
+ private readonly _assetManager;
45
+ get assetManager(): IReadonlyAssetManager;
46
+ protected constructor(identity: ReadonlyIdentity, network: Network, onchainProvider: OnchainProvider, indexerProvider: IndexerProvider, arkServerPublicKey: Bytes, offchainTapscript: DefaultVtxo.Script | DelegateVtxo.Script, boardingTapscript: DefaultVtxo.Script, dustAmount: bigint, walletRepository: WalletRepository, contractRepository: ContractRepository, delegatorProvider?: DelegatorProvider | undefined, watcherConfig?: ReadonlyWalletConfig["watcherConfig"]);
38
47
  /**
39
48
  * Protected helper to set up shared wallet configuration.
40
49
  * Extracts common logic used by both ReadonlyWallet.create() and Wallet.create().
41
50
  */
42
- protected static setupWalletConfig(config: ReadonlyWalletConfig, pubkey: Uint8Array): Promise<{
51
+ protected static setupWalletConfig(config: ReadonlyWalletConfig, pubKey: Uint8Array): Promise<{
43
52
  arkProvider: ArkProvider;
44
53
  indexerProvider: IndexerProvider;
45
54
  onchainProvider: OnchainProvider;
46
55
  network: Network;
47
56
  networkName: NetworkName;
48
57
  serverPubKey: Uint8Array<ArrayBuffer>;
49
- offchainTapscript: DefaultVtxo.Script;
58
+ offchainTapscript: DefaultVtxo.Script | DelegateVtxo.Script;
50
59
  boardingTapscript: DefaultVtxo.Script;
51
60
  dustAmount: bigint;
52
- walletRepository: WalletRepositoryImpl;
53
- contractRepository: ContractRepositoryImpl;
61
+ walletRepository: WalletRepository;
62
+ contractRepository: ContractRepository;
54
63
  info: import("../providers/ark").ArkInfo;
64
+ delegatorProvider: DelegatorProvider | undefined;
55
65
  }>;
56
66
  static create(config: ReadonlyWalletConfig): Promise<ReadonlyWallet>;
57
67
  get arkAddress(): ArkAddress;
68
+ /**
69
+ * Get the contract script for the wallet's default address.
70
+ * This is the pkScript hex, used to identify the wallet in ContractManager.
71
+ */
72
+ get defaultContractScript(): string;
58
73
  getAddress(): Promise<string>;
59
74
  getBoardingAddress(): Promise<string>;
60
75
  getBalance(): Promise<WalletBalance>;
@@ -68,6 +83,46 @@ export declare class ReadonlyWallet implements IReadonlyWallet {
68
83
  getBoardingUtxos(): Promise<ExtendedCoin[]>;
69
84
  notifyIncomingFunds(eventCallback: (coins: IncomingFunds) => void): Promise<() => void>;
70
85
  fetchPendingTxs(): Promise<string[]>;
86
+ /**
87
+ * Get all pkScript hex strings for the wallet's own addresses
88
+ * (both delegate and non-delegate, current and historical).
89
+ * Falls back to only the current script if ContractManager is not yet initialized.
90
+ */
91
+ getWalletScripts(): Promise<string[]>;
92
+ /**
93
+ * Build a map of scriptHex → VtxoScript for all wallet contracts,
94
+ * so VTXOs can be extended with the correct tapscript per contract.
95
+ */
96
+ getScriptMap(): Promise<Map<string, DefaultVtxo.Script | DelegateVtxo.Script>>;
97
+ /**
98
+ * Get the ContractManager for managing contracts including the wallet's default address.
99
+ *
100
+ * The ContractManager handles:
101
+ * - The wallet's default receiving address (as a "default" contract)
102
+ * - External contracts (Boltz swaps, HTLCs, etc.)
103
+ * - Multi-contract watching with resilient connections
104
+ *
105
+ * @example
106
+ * ```typescript
107
+ * const manager = await wallet.getContractManager();
108
+ *
109
+ * // Create a contract for a Boltz swap
110
+ * const contract = await manager.createContract({
111
+ * label: "Boltz Swap",
112
+ * type: "vhtlc",
113
+ * params: { ... },
114
+ * script: swapScript,
115
+ * address: swapAddress,
116
+ * });
117
+ *
118
+ * // Start watching for events (includes wallet's default address)
119
+ * const stop = await manager.onContractEvent((event) => {
120
+ * console.log(`${event.type} on ${event.contractScript}`);
121
+ * });
122
+ * ```
123
+ */
124
+ getContractManager(): Promise<ContractManager>;
125
+ private initializeContractManager;
71
126
  }
72
127
  /**
73
128
  * Main wallet implementation for Bitcoin transactions with Ark protocol support.
@@ -110,11 +165,14 @@ export declare class Wallet extends ReadonlyWallet implements IWallet {
110
165
  readonly forfeitPubkey: Bytes;
111
166
  static MIN_FEE_RATE: number;
112
167
  readonly identity: Identity;
168
+ readonly delegatorManager?: DelegatorManager;
169
+ private _walletAssetManager?;
113
170
  readonly renewalConfig: Required<Omit<WalletConfig["renewalConfig"], "enabled">> & {
114
171
  enabled: boolean;
115
172
  thresholdMs: number;
116
173
  };
117
- protected constructor(identity: Identity, network: Network, networkName: NetworkName, onchainProvider: OnchainProvider, arkProvider: ArkProvider, indexerProvider: IndexerProvider, arkServerPublicKey: Bytes, offchainTapscript: DefaultVtxo.Script, boardingTapscript: DefaultVtxo.Script, serverUnrollScript: CSVMultisigTapscript.Type, forfeitOutputScript: Bytes, forfeitPubkey: Bytes, dustAmount: bigint, walletRepository: WalletRepository, contractRepository: ContractRepository, renewalConfig?: WalletConfig["renewalConfig"]);
174
+ 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, renewalConfig?: WalletConfig["renewalConfig"], delegatorProvider?: DelegatorProvider, watcherConfig?: WalletConfig["watcherConfig"]);
175
+ get assetManager(): IAssetManager;
118
176
  static create(config: WalletConfig): Promise<Wallet>;
119
177
  /**
120
178
  * Convert this wallet to a readonly wallet.
@@ -142,12 +200,13 @@ export declare class Wallet extends ReadonlyWallet implements IWallet {
142
200
  * @param intentId - The intent ID.
143
201
  * @param inputs - The inputs of the intent.
144
202
  * @param session - The musig2 signing session, if not provided, the signing will be skipped.
203
+ * @param expectedRecipients - Expected recipients to validate in the vtxo tree.
145
204
  */
146
- createBatchHandler(intentId: string, inputs: ExtendedCoin[], session?: SignerSession): Batch.Handler;
205
+ createBatchHandler(intentId: string, inputs: ExtendedCoin[], expectedRecipients: Recipient[], session?: SignerSession): Batch.Handler;
147
206
  safeRegisterIntent(intent: SignedIntent<Intent.RegisterMessage>): Promise<string>;
148
- makeRegisterIntentSignature(coins: ExtendedCoin[], outputs: TransactionOutput[], onchainOutputsIndexes: number[], cosignerPubKeys: string[]): Promise<SignedIntent<Intent.RegisterMessage>>;
207
+ makeRegisterIntentSignature(coins: ExtendedCoin[], outputs: TransactionOutput[], onchainOutputsIndexes: number[], cosignerPubKeys: string[], validAt?: number): Promise<SignedIntent<Intent.RegisterMessage>>;
149
208
  makeDeleteIntentSignature(coins: ExtendedCoin[]): Promise<SignedIntent<Intent.DeleteMessage>>;
150
- makeGetPendingTxIntentSignature(vtxos: ExtendedVirtualCoin[]): Promise<SignedIntent<Intent.GetPendingTxMessage>>;
209
+ makeGetPendingTxIntentSignature(coins: ExtendedVirtualCoin[]): Promise<SignedIntent<Intent.GetPendingTxMessage>>;
151
210
  /**
152
211
  * Finalizes pending transactions by retrieving them from the server and finalizing each one.
153
212
  * @param vtxos - Optional list of VTXOs to use instead of retrieving them from the server
@@ -157,9 +216,44 @@ export declare class Wallet extends ReadonlyWallet implements IWallet {
157
216
  finalized: string[];
158
217
  pending: string[];
159
218
  }>;
160
- private prepareIntentProofInputs;
219
+ /**
220
+ * Send BTC and/or assets to one or more recipients.
221
+ *
222
+ * @param recipients - Array of recipients with their addresses, BTC amounts, and assets
223
+ * @returns Promise resolving to the ark transaction ID
224
+ *
225
+ * @example
226
+ * ```typescript
227
+ * const txid = await wallet.send({
228
+ * address: 'ark1...',
229
+ * amount: 1000, // (optional, default to dust) btc amount to send to the output
230
+ * assets: [{ assetId: 'abc123...', amount: 50 }] // (optional) list of assets to send
231
+ * });
232
+ * ```
233
+ */
234
+ send(...args: Recipient[]): Promise<string>;
235
+ /**
236
+ * Build an offchain transaction from the given inputs and outputs,
237
+ * sign it, submit to the ark provider, and finalize.
238
+ * @returns The ark transaction id and server-signed checkpoint PSBTs (for bookkeeping)
239
+ */
240
+ buildAndSubmitOffchainTx(inputs: VirtualCoin[], outputs: TransactionOutput[]): Promise<{
241
+ arkTxid: string;
242
+ signedCheckpointTxs: string[];
243
+ }>;
244
+ private updateDbAfterOffchainTx;
245
+ private updateDbAfterSettle;
161
246
  }
162
- export declare function getSequence(tapLeafScript: TapLeafScript): number | undefined;
247
+ /**
248
+ * Select virtual coins to reach a target amount, prioritizing those closer to expiry
249
+ * @param coins List of virtual coins to select from
250
+ * @param targetAmount Target amount to reach in satoshis
251
+ * @returns Selected coins and change amount
252
+ */
253
+ export declare function selectVirtualCoins(coins: VirtualCoin[], targetAmount: number): {
254
+ inputs: VirtualCoin[];
255
+ changeAmount: bigint;
256
+ };
163
257
  /**
164
258
  * Wait for incoming funds to the wallet
165
259
  * @param wallet - The wallet to wait for incoming funds
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Registers a service worker for the given path only once and caches the
3
+ * registration promise for subsequent calls.
4
+ *
5
+ * @param path - Service worker script path to register.
6
+ * @throws if service workers are not supported or registration fails.
7
+ */
8
+ export declare function setupServiceWorkerOnce(path: string): Promise<ServiceWorkerRegistration>;
9
+ /**
10
+ * Returns an active service worker instance, optionally ensuring a specific
11
+ * script path is registered before resolving.
12
+ *
13
+ * @param path - Optional service worker script path to register and prefer.
14
+ * @throws if service workers are not supported or no active worker is available.
15
+ */
16
+ export declare function getActiveServiceWorker(path?: string): Promise<ServiceWorker>;
17
+ /**
18
+ * Clears the cached registration promises.
19
+ * Intended for tests to reset state between runs.
20
+ */
21
+ export declare const __resetServiceWorkerManager: () => void;
@@ -2,9 +2,10 @@ export declare const DEFAULT_DB_NAME = "arkade-service-worker";
2
2
  /**
3
3
  * setupServiceWorker sets up the service worker.
4
4
  * @param path - the path to the service worker script
5
+ * @throws if service workers are not supported or activation fails
5
6
  * @example
6
7
  * ```typescript
7
- * const serviceWorker = await setupServiceWorker("/service-worker.js");
8
+ * const worker = await setupServiceWorker("/service-worker.js");
8
9
  * ```
9
10
  */
10
11
  export declare function setupServiceWorker(path: string): Promise<ServiceWorker>;
@@ -0,0 +1,46 @@
1
+ import type { TaskItem, TaskResult, TaskQueue } from "./taskQueue";
2
+ /**
3
+ * Minimal async key-value storage interface.
4
+ *
5
+ * Compatible with `@react-native-async-storage/async-storage` and
6
+ * any other storage that exposes the same three methods.
7
+ */
8
+ export interface AsyncStorageLike {
9
+ getItem(key: string): Promise<string | null>;
10
+ setItem(key: string, value: string): Promise<void>;
11
+ removeItem(key: string): Promise<void>;
12
+ }
13
+ /**
14
+ * AsyncStorage-backed TaskQueue for Expo/React Native.
15
+ *
16
+ * Persists inbox, outbox, and an optional config blob to AsyncStorage
17
+ * so that data survives process restarts and can be shared between
18
+ * foreground and background execution contexts.
19
+ */
20
+ export declare class AsyncStorageTaskQueue implements TaskQueue {
21
+ private readonly storage;
22
+ private readonly inboxKey;
23
+ private readonly outboxKey;
24
+ private readonly configKey;
25
+ constructor(storage: AsyncStorageLike, prefix?: string);
26
+ addTask(task: TaskItem): Promise<void>;
27
+ removeTask(id: string): Promise<void>;
28
+ getTasks(type?: string): Promise<TaskItem[]>;
29
+ clearTasks(): Promise<void>;
30
+ pushResult(result: TaskResult): Promise<void>;
31
+ getResults(): Promise<TaskResult[]>;
32
+ acknowledgeResults(ids: string[]): Promise<void>;
33
+ /**
34
+ * Persist a config blob alongside the queue data.
35
+ * Used by {@link ExpoWallet.setup} to store the wallet parameters
36
+ * that the background handler needs to reconstruct providers.
37
+ */
38
+ persistConfig(config: Record<string, unknown> | object): Promise<void>;
39
+ /**
40
+ * Load the persisted config blob.
41
+ * Used by the background handler to rehydrate wallet dependencies.
42
+ */
43
+ loadConfig<T = Record<string, unknown>>(): Promise<T | null>;
44
+ private readList;
45
+ private writeList;
46
+ }
@@ -0,0 +1,7 @@
1
+ export type { TaskItem, TaskResult, TaskQueue } from "./taskQueue";
2
+ export { InMemoryTaskQueue } from "./taskQueue";
3
+ export type { AsyncStorageLike } from "./asyncStorageTaskQueue";
4
+ export { AsyncStorageTaskQueue } from "./asyncStorageTaskQueue";
5
+ export type { TaskProcessor, TaskDependencies } from "./taskRunner";
6
+ export { runTasks } from "./taskRunner";
7
+ export { contractPollProcessor, CONTRACT_POLL_TASK_TYPE } from "./processors";
@@ -0,0 +1,14 @@
1
+ import type { TaskProcessor } from "../taskRunner";
2
+ export declare const CONTRACT_POLL_TASK_TYPE = "contract-poll";
3
+ /**
4
+ * Polls the indexer for the latest VTXO state of every contract and
5
+ * persists the results to the wallet repository.
6
+ *
7
+ * Replicates the polling subset of {@link ContractManager.initialize}:
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.
13
+ */
14
+ export declare const contractPollProcessor: TaskProcessor;
@@ -0,0 +1 @@
1
+ export { contractPollProcessor, CONTRACT_POLL_TASK_TYPE, } from "./contractPollProcessor";
@@ -0,0 +1,50 @@
1
+ /**
2
+ * A task item represents a unit of work in the inbox.
3
+ */
4
+ export interface TaskItem {
5
+ id: string;
6
+ type: string;
7
+ data: Record<string, unknown>;
8
+ createdAt: number;
9
+ }
10
+ /**
11
+ * A task result represents the outcome of processing a task item.
12
+ */
13
+ export interface TaskResult {
14
+ id: string;
15
+ taskItemId: string;
16
+ type: string;
17
+ status: "success" | "failed" | "noop";
18
+ data?: Record<string, unknown>;
19
+ executedAt: number;
20
+ }
21
+ /**
22
+ * Persistence layer for handing off work between foreground and background.
23
+ *
24
+ * - **Inbox**: tasks waiting to be processed.
25
+ * - **Outbox**: results produced by processors, waiting to be consumed.
26
+ */
27
+ export interface TaskQueue {
28
+ addTask(task: TaskItem): Promise<void>;
29
+ removeTask(id: string): Promise<void>;
30
+ getTasks(type?: string): Promise<TaskItem[]>;
31
+ clearTasks(): Promise<void>;
32
+ pushResult(result: TaskResult): Promise<void>;
33
+ getResults(): Promise<TaskResult[]>;
34
+ acknowledgeResults(ids: string[]): Promise<void>;
35
+ }
36
+ /**
37
+ * In-memory TaskQueue for testing and lightweight use.
38
+ * State is lost when the process exits.
39
+ */
40
+ export declare class InMemoryTaskQueue implements TaskQueue {
41
+ private inbox;
42
+ private outbox;
43
+ addTask(task: TaskItem): Promise<void>;
44
+ removeTask(id: string): Promise<void>;
45
+ getTasks(type?: string): Promise<TaskItem[]>;
46
+ clearTasks(): Promise<void>;
47
+ pushResult(result: TaskResult): Promise<void>;
48
+ getResults(): Promise<TaskResult[]>;
49
+ acknowledgeResults(ids: string[]): Promise<void>;
50
+ }
@@ -0,0 +1,42 @@
1
+ import type { TaskItem, TaskResult, TaskQueue } from "./taskQueue";
2
+ import type { WalletRepository } from "../../repositories/walletRepository";
3
+ import type { ContractRepository } from "../../repositories/contractRepository";
4
+ import type { IndexerProvider } from "../../providers/indexer";
5
+ import type { ArkProvider } from "../../providers/ark";
6
+ import type { ExtendedVirtualCoin, VirtualCoin } from "../../wallet";
7
+ import type { Contract } from "../../contracts/types";
8
+ /**
9
+ * Shared dependencies injected into every processor at runtime.
10
+ */
11
+ export interface TaskDependencies {
12
+ walletRepository: WalletRepository;
13
+ contractRepository: ContractRepository;
14
+ indexerProvider: IndexerProvider;
15
+ arkProvider: ArkProvider;
16
+ extendVtxo: (vtxo: VirtualCoin, contract?: Contract) => ExtendedVirtualCoin;
17
+ }
18
+ /**
19
+ * A stateless unit that handles one type of task item.
20
+ *
21
+ * Processors must not keep in-memory state across invocations —
22
+ * all coordination lives in the {@link TaskQueue} and repositories.
23
+ *
24
+ * The `TDeps` parameter defaults to {@link TaskDependencies} but
25
+ * can be overridden for domain-specific processors (e.g. swap processing).
26
+ */
27
+ export interface TaskProcessor<TDeps = TaskDependencies> {
28
+ readonly taskType: string;
29
+ execute(item: TaskItem, deps: TDeps): Promise<Omit<TaskResult, "id" | "executedAt">>;
30
+ }
31
+ /**
32
+ * Run all pending tasks from the queue through matching processors.
33
+ *
34
+ * For each task in the inbox:
35
+ * 1. Find the processor whose `taskType` matches `task.type`.
36
+ * 2. Execute it, producing a {@link TaskResult}.
37
+ * 3. Push the result to the outbox and remove the task from the inbox.
38
+ *
39
+ * Tasks with no matching processor produce a `"noop"` result.
40
+ * Processor errors produce a `"failed"` result with the error message.
41
+ */
42
+ export declare function runTasks<TDeps = TaskDependencies>(queue: TaskQueue, processors: TaskProcessor<TDeps>[], deps: TDeps): Promise<TaskResult[]>;
@@ -0,0 +1,109 @@
1
+ import { ArkProvider } from "../providers/ark";
2
+ import { ReadonlyWallet, Wallet } from "../wallet/wallet";
3
+ import { ContractRepository, WalletRepository } from "../repositories";
4
+ export type RequestEnvelope = {
5
+ tag: string;
6
+ id: string;
7
+ broadcast?: boolean;
8
+ };
9
+ export type ResponseEnvelope = {
10
+ tag: string;
11
+ id?: string;
12
+ error?: Error;
13
+ broadcast?: boolean;
14
+ };
15
+ export interface MessageHandler<REQ extends RequestEnvelope = RequestEnvelope, RES extends ResponseEnvelope = ResponseEnvelope> {
16
+ /**
17
+ * A unique identifier for the updater.
18
+ * This is used to route messages to the correct updater.
19
+ */
20
+ readonly messageTag: string;
21
+ /**
22
+ * Called once when the SW is starting up
23
+ * @param opts.arkProvider
24
+ * @param opts.wallet Wallet with signature cababilities
25
+ * @param opts.readonlyWallet Read-only Wallet
26
+ **/
27
+ start(services: {
28
+ arkProvider: ArkProvider;
29
+ wallet?: Wallet;
30
+ readonlyWallet: ReadonlyWallet;
31
+ }, repositories: {
32
+ walletRepository: WalletRepository;
33
+ }): Promise<void>;
34
+ /** Called once when the SW is shutting down */
35
+ stop(): Promise<void>;
36
+ /**
37
+ * Called by the scheduler to perform a tick.
38
+ * Can be used by the updater to perform periodic tasks or return
39
+ * delayed responses (eg: subscriptions).
40
+ * @param now The current time in milliseconds since the epoch.
41
+ **/
42
+ tick(now: number): Promise<RES[]>;
43
+ /**
44
+ * Handle routed messages from the clients
45
+ **/
46
+ handleMessage(message: REQ): Promise<RES | null>;
47
+ }
48
+ type Options = {
49
+ messageHandlers: MessageHandler[];
50
+ tickIntervalMs?: number;
51
+ debug?: boolean;
52
+ buildServices?: (config: Initialize["config"]) => Promise<{
53
+ arkProvider: ArkProvider;
54
+ wallet?: Wallet;
55
+ readonlyWallet: ReadonlyWallet;
56
+ }>;
57
+ };
58
+ type Initialize = {
59
+ type: "INITIALIZE_MESSAGE_BUS";
60
+ id: string;
61
+ config: {
62
+ wallet: {
63
+ privateKey: string;
64
+ } | {
65
+ publicKey: string;
66
+ };
67
+ arkServer: {
68
+ url: string;
69
+ publicKey?: string;
70
+ };
71
+ };
72
+ };
73
+ export declare class MessageBus {
74
+ private readonly walletRepository;
75
+ private readonly contractRepository;
76
+ private handlers;
77
+ private tickIntervalMs;
78
+ private running;
79
+ private tickTimeout;
80
+ private tickInProgress;
81
+ private debug;
82
+ private initialized;
83
+ private readonly buildServicesFn;
84
+ constructor(walletRepository: WalletRepository, contractRepository: ContractRepository, { messageHandlers, tickIntervalMs, debug, buildServices, }: Options);
85
+ start(): Promise<void>;
86
+ stop(): Promise<void>;
87
+ private scheduleNextTick;
88
+ private runTick;
89
+ private waitForInit;
90
+ private buildServices;
91
+ private onMessage;
92
+ /**
93
+ * Returns the registered SW for the path.
94
+ * It uses the functions in `service-worker-manager.ts` module.
95
+ * @param path
96
+ * @return the Service Worker
97
+ * @throws if not running in a browser environment
98
+ */
99
+ static getServiceWorker(path?: string): Promise<ServiceWorker>;
100
+ /**
101
+ * Set up and register the Service Worker, ensuring it's done once at most.
102
+ * It uses the functions in `service-worker-manager.ts` module.
103
+ * @param path
104
+ * @return the Service Worker
105
+ * @throws if not running in a browser environment
106
+ */
107
+ static setup(path: string): Promise<ServiceWorker>;
108
+ }
109
+ export {};