@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
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ReadonlyDescriptorIdentity = exports.MnemonicIdentity = exports.SeedIdentity = void 0;
4
+ const bip39_1 = require("@scure/bip39");
5
+ const english_js_1 = require("@scure/bip39/wordlists/english.js");
6
+ const utils_js_1 = require("@scure/btc-signer/utils.js");
7
+ const btc_signer_1 = require("@scure/btc-signer");
8
+ const signingSession_1 = require("../tree/signingSession");
9
+ const secp256k1_1 = require("@noble/secp256k1");
10
+ const bitcoin_descriptors_1 = require("@kukks/bitcoin-descriptors");
11
+ const { expand } = bitcoin_descriptors_1.defaultFactory;
12
+ const ALL_SIGHASH = Object.values(btc_signer_1.SigHash).filter((x) => typeof x === "number");
13
+ /**
14
+ * Detects the network from a descriptor string by checking for tpub (testnet)
15
+ * vs xpub (mainnet) key prefix.
16
+ * @internal
17
+ */
18
+ function detectNetwork(descriptor) {
19
+ return descriptor.includes("tpub") ? bitcoin_descriptors_1.networks.testnet : bitcoin_descriptors_1.networks.bitcoin;
20
+ }
21
+ function hasDescriptor(opts) {
22
+ return "descriptor" in opts && typeof opts.descriptor === "string";
23
+ }
24
+ /**
25
+ * Builds a BIP86 Taproot output descriptor from a seed and network flag.
26
+ * @internal
27
+ */
28
+ function buildDescriptor(seed, isMainnet) {
29
+ const network = isMainnet ? bitcoin_descriptors_1.networks.bitcoin : bitcoin_descriptors_1.networks.testnet;
30
+ const masterNode = bitcoin_descriptors_1.scureBIP32.fromSeed(seed, network);
31
+ return bitcoin_descriptors_1.scriptExpressions.trBIP32({
32
+ masterNode,
33
+ network,
34
+ account: 0,
35
+ change: 0,
36
+ index: 0,
37
+ });
38
+ }
39
+ /**
40
+ * Seed-based identity derived from a raw seed and an output descriptor.
41
+ *
42
+ * This is the recommended identity type for most applications. It uses
43
+ * standard BIP86 (Taproot) derivation by default and stores an output
44
+ * descriptor for interoperability with other wallets. The descriptor
45
+ * format is HD-ready, allowing future support for multiple addresses
46
+ * and change derivation.
47
+ *
48
+ * Prefer this (or {@link MnemonicIdentity}) over `SingleKey` for new
49
+ * integrations — `SingleKey` exists for backward compatibility with
50
+ * raw nsec-style keys.
51
+ *
52
+ * @example
53
+ * ```typescript
54
+ * const seed = mnemonicToSeedSync(mnemonic);
55
+ *
56
+ * // Testnet (BIP86 path m/86'/1'/0'/0/0)
57
+ * const identity = SeedIdentity.fromSeed(seed, { isMainnet: false });
58
+ *
59
+ * // Mainnet (BIP86 path m/86'/0'/0'/0/0)
60
+ * const identity = SeedIdentity.fromSeed(seed, { isMainnet: true });
61
+ *
62
+ * // Custom descriptor
63
+ * const identity = SeedIdentity.fromSeed(seed, { descriptor });
64
+ * ```
65
+ */
66
+ class SeedIdentity {
67
+ constructor(seed, descriptor) {
68
+ if (seed.length !== 64) {
69
+ throw new Error("Seed must be 64 bytes");
70
+ }
71
+ this.seed = seed;
72
+ this.descriptor = descriptor;
73
+ const network = detectNetwork(descriptor);
74
+ // Parse and validate the descriptor using the library
75
+ const expansion = expand({ descriptor, network });
76
+ const keyInfo = expansion.expansionMap?.["@0"];
77
+ if (!keyInfo?.originPath) {
78
+ throw new Error("Descriptor must include a key origin path");
79
+ }
80
+ // Verify the xpub in the descriptor matches our seed
81
+ const masterNode = bitcoin_descriptors_1.scureBIP32.fromSeed(seed, network);
82
+ const accountNode = masterNode.derivePath(`m${keyInfo.originPath}`);
83
+ if (accountNode.neutered().toBase58() !== keyInfo.bip32?.toBase58()) {
84
+ throw new Error("xpub mismatch: derived key does not match descriptor");
85
+ }
86
+ // Derive the private key using the full path from the descriptor
87
+ if (!keyInfo.path) {
88
+ throw new Error("Descriptor must specify a full derivation path");
89
+ }
90
+ const derivedNode = masterNode.derivePath(keyInfo.path);
91
+ if (!derivedNode.privateKey) {
92
+ throw new Error("Failed to derive private key");
93
+ }
94
+ this.derivedKey = derivedNode.privateKey;
95
+ }
96
+ /**
97
+ * Creates a SeedIdentity from a raw 64-byte seed.
98
+ *
99
+ * Pass `{ isMainnet }` for default BIP86 derivation, or
100
+ * `{ descriptor }` for a custom derivation path.
101
+ *
102
+ * @param seed - 64-byte seed (typically from mnemonicToSeedSync)
103
+ * @param opts - Network selection or custom descriptor.
104
+ */
105
+ static fromSeed(seed, opts) {
106
+ const descriptor = hasDescriptor(opts)
107
+ ? opts.descriptor
108
+ : buildDescriptor(seed, opts.isMainnet);
109
+ return new SeedIdentity(seed, descriptor);
110
+ }
111
+ async xOnlyPublicKey() {
112
+ return (0, utils_js_1.pubSchnorr)(this.derivedKey);
113
+ }
114
+ async compressedPublicKey() {
115
+ return (0, utils_js_1.pubECDSA)(this.derivedKey, true);
116
+ }
117
+ async sign(tx, inputIndexes) {
118
+ const txCpy = tx.clone();
119
+ if (!inputIndexes) {
120
+ try {
121
+ if (!txCpy.sign(this.derivedKey, ALL_SIGHASH)) {
122
+ throw new Error("Failed to sign transaction");
123
+ }
124
+ }
125
+ catch (e) {
126
+ if (e instanceof Error &&
127
+ e.message.includes("No inputs signed")) {
128
+ // ignore
129
+ }
130
+ else {
131
+ throw e;
132
+ }
133
+ }
134
+ return txCpy;
135
+ }
136
+ for (const inputIndex of inputIndexes) {
137
+ if (!txCpy.signIdx(this.derivedKey, inputIndex, ALL_SIGHASH)) {
138
+ throw new Error(`Failed to sign input #${inputIndex}`);
139
+ }
140
+ }
141
+ return txCpy;
142
+ }
143
+ async signMessage(message, signatureType = "schnorr") {
144
+ if (signatureType === "ecdsa") {
145
+ return (0, secp256k1_1.signAsync)(message, this.derivedKey, { prehash: false });
146
+ }
147
+ return secp256k1_1.schnorr.signAsync(message, this.derivedKey);
148
+ }
149
+ signerSession() {
150
+ return signingSession_1.TreeSignerSession.random();
151
+ }
152
+ /**
153
+ * Converts to a watch-only identity that cannot sign.
154
+ */
155
+ async toReadonly() {
156
+ return ReadonlyDescriptorIdentity.fromDescriptor(this.descriptor);
157
+ }
158
+ }
159
+ exports.SeedIdentity = SeedIdentity;
160
+ /**
161
+ * Mnemonic-based identity derived from a BIP39 phrase.
162
+ *
163
+ * This is the most user-friendly identity type — recommended for wallet
164
+ * applications where users manage their own backup phrase. Extends
165
+ * {@link SeedIdentity} with mnemonic validation and optional passphrase
166
+ * support.
167
+ *
168
+ * @example
169
+ * ```typescript
170
+ * const identity = MnemonicIdentity.fromMnemonic(
171
+ * 'abandon abandon abandon ...',
172
+ * { isMainnet: true, passphrase: 'secret' }
173
+ * );
174
+ * ```
175
+ */
176
+ class MnemonicIdentity extends SeedIdentity {
177
+ constructor(seed, descriptor) {
178
+ super(seed, descriptor);
179
+ }
180
+ /**
181
+ * Creates a MnemonicIdentity from a BIP39 mnemonic phrase.
182
+ *
183
+ * Pass `{ isMainnet }` for default BIP86 derivation, or
184
+ * `{ descriptor }` for a custom derivation path.
185
+ *
186
+ * @param phrase - BIP39 mnemonic phrase (12 or 24 words)
187
+ * @param opts - Network selection or custom descriptor, plus optional passphrase
188
+ */
189
+ static fromMnemonic(phrase, opts) {
190
+ if (!(0, bip39_1.validateMnemonic)(phrase, english_js_1.wordlist)) {
191
+ throw new Error("Invalid mnemonic");
192
+ }
193
+ const passphrase = opts.passphrase;
194
+ const seed = (0, bip39_1.mnemonicToSeedSync)(phrase, passphrase);
195
+ const descriptor = hasDescriptor(opts)
196
+ ? opts.descriptor
197
+ : buildDescriptor(seed, opts.isMainnet);
198
+ return new MnemonicIdentity(seed, descriptor);
199
+ }
200
+ }
201
+ exports.MnemonicIdentity = MnemonicIdentity;
202
+ /**
203
+ * Watch-only identity from an output descriptor.
204
+ *
205
+ * Can derive public keys but cannot sign transactions. Use this for
206
+ * watch-only wallets or when sharing identity information without
207
+ * exposing private keys.
208
+ *
209
+ * @example
210
+ * ```typescript
211
+ * const descriptor = "tr([fingerprint/86'/0'/0']xpub.../0/0)";
212
+ * const readonly = ReadonlyDescriptorIdentity.fromDescriptor(descriptor);
213
+ * const pubKey = await readonly.xOnlyPublicKey();
214
+ * ```
215
+ */
216
+ class ReadonlyDescriptorIdentity {
217
+ constructor(descriptor) {
218
+ this.descriptor = descriptor;
219
+ const network = detectNetwork(descriptor);
220
+ const expansion = expand({ descriptor, network });
221
+ const keyInfo = expansion.expansionMap?.["@0"];
222
+ if (!keyInfo?.pubkey) {
223
+ throw new Error("Failed to derive public key from descriptor");
224
+ }
225
+ // For taproot, the library returns 32-byte x-only pubkey
226
+ this.xOnlyPubKey = keyInfo.pubkey;
227
+ // Get 33-byte compressed key with correct parity from the bip32 node
228
+ if (keyInfo.bip32 && keyInfo.keyPath) {
229
+ // Strip leading "/" — the library's derivePath prepends "m/" itself
230
+ const relPath = keyInfo.keyPath.replace(/^\//, "");
231
+ this.compressedPubKey = keyInfo.bip32.derivePath(relPath).publicKey;
232
+ }
233
+ else if (keyInfo.bip32) {
234
+ this.compressedPubKey = keyInfo.bip32.publicKey;
235
+ }
236
+ else {
237
+ throw new Error("Cannot determine compressed public key parity from descriptor");
238
+ }
239
+ }
240
+ /**
241
+ * Creates a ReadonlyDescriptorIdentity from an output descriptor.
242
+ *
243
+ * @param descriptor - Taproot descriptor: tr([fingerprint/path']xpub.../child/path)
244
+ */
245
+ static fromDescriptor(descriptor) {
246
+ return new ReadonlyDescriptorIdentity(descriptor);
247
+ }
248
+ async xOnlyPublicKey() {
249
+ return this.xOnlyPubKey;
250
+ }
251
+ async compressedPublicKey() {
252
+ return this.compressedPubKey;
253
+ }
254
+ }
255
+ exports.ReadonlyDescriptorIdentity = ReadonlyDescriptorIdentity;
package/dist/cjs/index.js CHANGED
@@ -10,26 +10,57 @@ var __createBinding = (this && this.__createBinding) || (Object.create ? (functi
10
10
  if (k2 === undefined) k2 = k;
11
11
  o[k2] = m[k];
12
12
  }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
13
18
  var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
19
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
20
  };
21
+ var __importStar = (this && this.__importStar) || (function () {
22
+ var ownKeys = function(o) {
23
+ ownKeys = Object.getOwnPropertyNames || function (o) {
24
+ var ar = [];
25
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
+ return ar;
27
+ };
28
+ return ownKeys(o);
29
+ };
30
+ return function (mod) {
31
+ if (mod && mod.__esModule) return mod;
32
+ var result = {};
33
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
+ __setModuleDefault(result, mod);
35
+ return result;
36
+ };
37
+ })();
16
38
  Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.ContractRepositoryImpl = exports.WalletRepositoryImpl = exports.networks = exports.ArkNote = exports.isVtxoExpiringSoon = exports.combineTapscriptSigs = exports.hasBoardingTxExpired = exports.waitForIncomingFunds = exports.verifyTapscriptSignatures = exports.buildOffchainTx = exports.ConditionWitness = exports.VtxoTaprootTree = exports.VtxoTreeExpiry = exports.CosignerPublicKey = exports.getArkPsbtFields = exports.setArkPsbtField = exports.ArkPsbtFieldKeyType = exports.ArkPsbtFieldKey = exports.TapTreeCoder = exports.CLTVMultisigTapscript = exports.ConditionMultisigTapscript = exports.ConditionCSVMultisigTapscript = exports.CSVMultisigTapscript = exports.MultisigTapscript = exports.decodeTapscript = exports.Response = exports.Request = exports.ServiceWorkerReadonlyWallet = exports.ServiceWorkerWallet = exports.Worker = exports.setupServiceWorker = exports.SettlementEventType = exports.ChainTxType = exports.IndexerTxType = exports.TxType = exports.VHTLC = exports.VtxoScript = exports.DefaultVtxo = exports.ArkAddress = exports.RestIndexerProvider = exports.RestArkProvider = exports.EsploraProvider = exports.ESPLORA_URL = exports.VtxoManager = exports.Ramps = exports.OnchainWallet = exports.ReadonlySingleKey = exports.SingleKey = exports.ReadonlyWallet = exports.Wallet = void 0;
18
- exports.getSequence = exports.isExpired = exports.isSubdust = exports.isSpendable = exports.isRecoverable = exports.buildForfeitTx = exports.validateConnectorsTxGraph = exports.validateVtxoTxGraph = exports.Batch = exports.maybeArkError = exports.ArkError = exports.Transaction = exports.Unroll = exports.P2A = exports.TxTree = exports.Intent = void 0;
39
+ exports.hasBoardingTxExpired = exports.waitForIncomingFunds = exports.verifyTapscriptSignatures = exports.buildOffchainTx = exports.ConditionWitness = exports.VtxoTaprootTree = exports.VtxoTreeExpiry = exports.CosignerPublicKey = exports.getArkPsbtFields = exports.setArkPsbtField = exports.ArkPsbtFieldKeyType = exports.ArkPsbtFieldKey = exports.TapTreeCoder = exports.CLTVMultisigTapscript = exports.ConditionMultisigTapscript = exports.ConditionCSVMultisigTapscript = exports.CSVMultisigTapscript = exports.MultisigTapscript = exports.decodeTapscript = exports.ServiceWorkerReadonlyWallet = exports.ServiceWorkerWallet = exports.WalletMessageHandler = exports.MessageBus = exports.setupServiceWorker = exports.SettlementEventType = exports.ChainTxType = exports.IndexerTxType = exports.TxType = exports.VHTLC = exports.VtxoScript = exports.DelegateVtxo = exports.DefaultVtxo = exports.ArkAddress = exports.RestIndexerProvider = exports.RestArkProvider = exports.EsploraProvider = exports.ESPLORA_URL = exports.RestDelegatorProvider = exports.DelegatorManagerImpl = exports.VtxoManager = exports.Ramps = exports.OnchainWallet = exports.ReadonlyDescriptorIdentity = exports.MnemonicIdentity = exports.SeedIdentity = exports.ReadonlySingleKey = exports.SingleKey = exports.ReadonlyWallet = exports.Wallet = exports.asset = void 0;
40
+ exports.isArkContract = exports.contractFromArkContractWithAddress = exports.contractFromArkContract = exports.decodeArkContract = exports.encodeArkContract = exports.VHTLCContractHandler = exports.DelegateContractHandler = exports.DefaultContractHandler = exports.contractHandlers = exports.ContractWatcher = exports.ContractManager = exports.getSequence = exports.isExpired = exports.isSubdust = exports.isSpendable = exports.isRecoverable = exports.buildForfeitTx = exports.validateConnectorsTxGraph = exports.validateVtxoTxGraph = exports.Batch = exports.maybeArkError = exports.ArkError = exports.Transaction = exports.Unroll = exports.P2A = exports.TxTree = exports.BIP322 = exports.Intent = exports.ContractRepositoryImpl = exports.WalletRepositoryImpl = exports.rollbackMigration = exports.getMigrationStatus = exports.requiresMigration = exports.migrateWalletRepository = exports.MIGRATION_KEY = exports.InMemoryContractRepository = exports.InMemoryWalletRepository = exports.IndexedDBContractRepository = exports.IndexedDBWalletRepository = exports.openDatabase = exports.closeDatabase = exports.networks = exports.ArkNote = exports.isValidArkAddress = exports.isVtxoExpiringSoon = exports.combineTapscriptSigs = void 0;
19
41
  const transaction_1 = require("./utils/transaction");
20
42
  Object.defineProperty(exports, "Transaction", { enumerable: true, get: function () { return transaction_1.Transaction; } });
21
43
  const singleKey_1 = require("./identity/singleKey");
22
44
  Object.defineProperty(exports, "SingleKey", { enumerable: true, get: function () { return singleKey_1.SingleKey; } });
23
45
  Object.defineProperty(exports, "ReadonlySingleKey", { enumerable: true, get: function () { return singleKey_1.ReadonlySingleKey; } });
46
+ const seedIdentity_1 = require("./identity/seedIdentity");
47
+ Object.defineProperty(exports, "SeedIdentity", { enumerable: true, get: function () { return seedIdentity_1.SeedIdentity; } });
48
+ Object.defineProperty(exports, "MnemonicIdentity", { enumerable: true, get: function () { return seedIdentity_1.MnemonicIdentity; } });
49
+ Object.defineProperty(exports, "ReadonlyDescriptorIdentity", { enumerable: true, get: function () { return seedIdentity_1.ReadonlyDescriptorIdentity; } });
24
50
  const address_1 = require("./script/address");
25
51
  Object.defineProperty(exports, "ArkAddress", { enumerable: true, get: function () { return address_1.ArkAddress; } });
26
52
  const vhtlc_1 = require("./script/vhtlc");
27
53
  Object.defineProperty(exports, "VHTLC", { enumerable: true, get: function () { return vhtlc_1.VHTLC; } });
28
54
  const default_1 = require("./script/default");
29
55
  Object.defineProperty(exports, "DefaultVtxo", { enumerable: true, get: function () { return default_1.DefaultVtxo; } });
56
+ const delegate_1 = require("./script/delegate");
57
+ Object.defineProperty(exports, "DelegateVtxo", { enumerable: true, get: function () { return delegate_1.DelegateVtxo; } });
58
+ const messageBus_1 = require("./worker/messageBus");
59
+ Object.defineProperty(exports, "MessageBus", { enumerable: true, get: function () { return messageBus_1.MessageBus; } });
30
60
  const base_1 = require("./script/base");
31
61
  Object.defineProperty(exports, "VtxoScript", { enumerable: true, get: function () { return base_1.VtxoScript; } });
32
62
  Object.defineProperty(exports, "TapTreeCoder", { enumerable: true, get: function () { return base_1.TapTreeCoder; } });
63
+ Object.defineProperty(exports, "getSequence", { enumerable: true, get: function () { return base_1.getSequence; } });
33
64
  const wallet_1 = require("./wallet");
34
65
  Object.defineProperty(exports, "TxType", { enumerable: true, get: function () { return wallet_1.TxType; } });
35
66
  Object.defineProperty(exports, "isSpendable", { enumerable: true, get: function () { return wallet_1.isSpendable; } });
@@ -42,7 +73,6 @@ const wallet_2 = require("./wallet/wallet");
42
73
  Object.defineProperty(exports, "Wallet", { enumerable: true, get: function () { return wallet_2.Wallet; } });
43
74
  Object.defineProperty(exports, "ReadonlyWallet", { enumerable: true, get: function () { return wallet_2.ReadonlyWallet; } });
44
75
  Object.defineProperty(exports, "waitForIncomingFunds", { enumerable: true, get: function () { return wallet_2.waitForIncomingFunds; } });
45
- Object.defineProperty(exports, "getSequence", { enumerable: true, get: function () { return wallet_2.getSequence; } });
46
76
  const txTree_1 = require("./tree/txTree");
47
77
  Object.defineProperty(exports, "TxTree", { enumerable: true, get: function () { return txTree_1.TxTree; } });
48
78
  const ramps_1 = require("./wallet/ramps");
@@ -55,20 +85,16 @@ Object.defineProperty(exports, "ServiceWorkerWallet", { enumerable: true, get: f
55
85
  Object.defineProperty(exports, "ServiceWorkerReadonlyWallet", { enumerable: true, get: function () { return wallet_3.ServiceWorkerReadonlyWallet; } });
56
86
  const onchain_1 = require("./wallet/onchain");
57
87
  Object.defineProperty(exports, "OnchainWallet", { enumerable: true, get: function () { return onchain_1.OnchainWallet; } });
58
- const utils_1 = require("./wallet/serviceWorker/utils");
88
+ const utils_1 = require("./worker/browser/utils");
59
89
  Object.defineProperty(exports, "setupServiceWorker", { enumerable: true, get: function () { return utils_1.setupServiceWorker; } });
60
- const worker_1 = require("./wallet/serviceWorker/worker");
61
- Object.defineProperty(exports, "Worker", { enumerable: true, get: function () { return worker_1.Worker; } });
62
- const request_1 = require("./wallet/serviceWorker/request");
63
- Object.defineProperty(exports, "Request", { enumerable: true, get: function () { return request_1.Request; } });
64
- const response_1 = require("./wallet/serviceWorker/response");
65
- Object.defineProperty(exports, "Response", { enumerable: true, get: function () { return response_1.Response; } });
66
90
  const onchain_2 = require("./providers/onchain");
67
91
  Object.defineProperty(exports, "ESPLORA_URL", { enumerable: true, get: function () { return onchain_2.ESPLORA_URL; } });
68
92
  Object.defineProperty(exports, "EsploraProvider", { enumerable: true, get: function () { return onchain_2.EsploraProvider; } });
69
93
  const ark_1 = require("./providers/ark");
70
94
  Object.defineProperty(exports, "RestArkProvider", { enumerable: true, get: function () { return ark_1.RestArkProvider; } });
71
95
  Object.defineProperty(exports, "SettlementEventType", { enumerable: true, get: function () { return ark_1.SettlementEventType; } });
96
+ const delegator_1 = require("./providers/delegator");
97
+ Object.defineProperty(exports, "RestDelegatorProvider", { enumerable: true, get: function () { return delegator_1.RestDelegatorProvider; } });
72
98
  const tapscript_1 = require("./script/tapscript");
73
99
  Object.defineProperty(exports, "CLTVMultisigTapscript", { enumerable: true, get: function () { return tapscript_1.CLTVMultisigTapscript; } });
74
100
  Object.defineProperty(exports, "ConditionCSVMultisigTapscript", { enumerable: true, get: function () { return tapscript_1.ConditionCSVMultisigTapscript; } });
@@ -81,6 +107,7 @@ Object.defineProperty(exports, "hasBoardingTxExpired", { enumerable: true, get:
81
107
  Object.defineProperty(exports, "buildOffchainTx", { enumerable: true, get: function () { return arkTransaction_1.buildOffchainTx; } });
82
108
  Object.defineProperty(exports, "verifyTapscriptSignatures", { enumerable: true, get: function () { return arkTransaction_1.verifyTapscriptSignatures; } });
83
109
  Object.defineProperty(exports, "combineTapscriptSigs", { enumerable: true, get: function () { return arkTransaction_1.combineTapscriptSigs; } });
110
+ Object.defineProperty(exports, "isValidArkAddress", { enumerable: true, get: function () { return arkTransaction_1.isValidArkAddress; } });
84
111
  const unknownFields_1 = require("./utils/unknownFields");
85
112
  Object.defineProperty(exports, "VtxoTaprootTree", { enumerable: true, get: function () { return unknownFields_1.VtxoTaprootTree; } });
86
113
  Object.defineProperty(exports, "ConditionWitness", { enumerable: true, get: function () { return unknownFields_1.ConditionWitness; } });
@@ -92,6 +119,8 @@ Object.defineProperty(exports, "CosignerPublicKey", { enumerable: true, get: fun
92
119
  Object.defineProperty(exports, "VtxoTreeExpiry", { enumerable: true, get: function () { return unknownFields_1.VtxoTreeExpiry; } });
93
120
  const intent_1 = require("./intent");
94
121
  Object.defineProperty(exports, "Intent", { enumerable: true, get: function () { return intent_1.Intent; } });
122
+ const bip322_1 = require("./bip322");
123
+ Object.defineProperty(exports, "BIP322", { enumerable: true, get: function () { return bip322_1.BIP322; } });
95
124
  const arknote_1 = require("./arknote");
96
125
  Object.defineProperty(exports, "ArkNote", { enumerable: true, get: function () { return arknote_1.ArkNote; } });
97
126
  const networks_1 = require("./networks");
@@ -104,10 +133,6 @@ const anchor_1 = require("./utils/anchor");
104
133
  Object.defineProperty(exports, "P2A", { enumerable: true, get: function () { return anchor_1.P2A; } });
105
134
  const unroll_1 = require("./wallet/unroll");
106
135
  Object.defineProperty(exports, "Unroll", { enumerable: true, get: function () { return unroll_1.Unroll; } });
107
- const walletRepository_1 = require("./repositories/walletRepository");
108
- Object.defineProperty(exports, "WalletRepositoryImpl", { enumerable: true, get: function () { return walletRepository_1.WalletRepositoryImpl; } });
109
- const contractRepository_1 = require("./repositories/contractRepository");
110
- Object.defineProperty(exports, "ContractRepositoryImpl", { enumerable: true, get: function () { return contractRepository_1.ContractRepositoryImpl; } });
111
136
  const errors_1 = require("./providers/errors");
112
137
  Object.defineProperty(exports, "ArkError", { enumerable: true, get: function () { return errors_1.ArkError; } });
113
138
  Object.defineProperty(exports, "maybeArkError", { enumerable: true, get: function () { return errors_1.maybeArkError; } });
@@ -116,4 +141,37 @@ Object.defineProperty(exports, "validateVtxoTxGraph", { enumerable: true, get: f
116
141
  Object.defineProperty(exports, "validateConnectorsTxGraph", { enumerable: true, get: function () { return validation_1.validateConnectorsTxGraph; } });
117
142
  const forfeit_1 = require("./forfeit");
118
143
  Object.defineProperty(exports, "buildForfeitTx", { enumerable: true, get: function () { return forfeit_1.buildForfeitTx; } });
144
+ const repositories_1 = require("./repositories");
145
+ Object.defineProperty(exports, "IndexedDBWalletRepository", { enumerable: true, get: function () { return repositories_1.IndexedDBWalletRepository; } });
146
+ Object.defineProperty(exports, "IndexedDBContractRepository", { enumerable: true, get: function () { return repositories_1.IndexedDBContractRepository; } });
147
+ Object.defineProperty(exports, "InMemoryWalletRepository", { enumerable: true, get: function () { return repositories_1.InMemoryWalletRepository; } });
148
+ Object.defineProperty(exports, "InMemoryContractRepository", { enumerable: true, get: function () { return repositories_1.InMemoryContractRepository; } });
149
+ Object.defineProperty(exports, "MIGRATION_KEY", { enumerable: true, get: function () { return repositories_1.MIGRATION_KEY; } });
150
+ Object.defineProperty(exports, "migrateWalletRepository", { enumerable: true, get: function () { return repositories_1.migrateWalletRepository; } });
151
+ Object.defineProperty(exports, "requiresMigration", { enumerable: true, get: function () { return repositories_1.requiresMigration; } });
152
+ Object.defineProperty(exports, "getMigrationStatus", { enumerable: true, get: function () { return repositories_1.getMigrationStatus; } });
153
+ Object.defineProperty(exports, "rollbackMigration", { enumerable: true, get: function () { return repositories_1.rollbackMigration; } });
154
+ Object.defineProperty(exports, "WalletRepositoryImpl", { enumerable: true, get: function () { return repositories_1.WalletRepositoryImpl; } });
155
+ Object.defineProperty(exports, "ContractRepositoryImpl", { enumerable: true, get: function () { return repositories_1.ContractRepositoryImpl; } });
156
+ const delegator_2 = require("./wallet/delegator");
157
+ Object.defineProperty(exports, "DelegatorManagerImpl", { enumerable: true, get: function () { return delegator_2.DelegatorManagerImpl; } });
119
158
  __exportStar(require("./arkfee"), exports);
159
+ exports.asset = __importStar(require("./asset"));
160
+ // Contracts
161
+ const contracts_1 = require("./contracts");
162
+ Object.defineProperty(exports, "ContractManager", { enumerable: true, get: function () { return contracts_1.ContractManager; } });
163
+ Object.defineProperty(exports, "ContractWatcher", { enumerable: true, get: function () { return contracts_1.ContractWatcher; } });
164
+ Object.defineProperty(exports, "contractHandlers", { enumerable: true, get: function () { return contracts_1.contractHandlers; } });
165
+ Object.defineProperty(exports, "DefaultContractHandler", { enumerable: true, get: function () { return contracts_1.DefaultContractHandler; } });
166
+ Object.defineProperty(exports, "DelegateContractHandler", { enumerable: true, get: function () { return contracts_1.DelegateContractHandler; } });
167
+ Object.defineProperty(exports, "VHTLCContractHandler", { enumerable: true, get: function () { return contracts_1.VHTLCContractHandler; } });
168
+ Object.defineProperty(exports, "encodeArkContract", { enumerable: true, get: function () { return contracts_1.encodeArkContract; } });
169
+ Object.defineProperty(exports, "decodeArkContract", { enumerable: true, get: function () { return contracts_1.decodeArkContract; } });
170
+ Object.defineProperty(exports, "contractFromArkContract", { enumerable: true, get: function () { return contracts_1.contractFromArkContract; } });
171
+ Object.defineProperty(exports, "contractFromArkContractWithAddress", { enumerable: true, get: function () { return contracts_1.contractFromArkContractWithAddress; } });
172
+ Object.defineProperty(exports, "isArkContract", { enumerable: true, get: function () { return contracts_1.isArkContract; } });
173
+ const manager_1 = require("./repositories/indexedDB/manager");
174
+ Object.defineProperty(exports, "closeDatabase", { enumerable: true, get: function () { return manager_1.closeDatabase; } });
175
+ Object.defineProperty(exports, "openDatabase", { enumerable: true, get: function () { return manager_1.openDatabase; } });
176
+ const wallet_message_handler_1 = require("./wallet/serviceWorker/wallet-message-handler");
177
+ Object.defineProperty(exports, "WalletMessageHandler", { enumerable: true, get: function () { return wallet_message_handler_1.WalletMessageHandler; } });
@@ -1,9 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Intent = void 0;
3
+ exports.TAG_INTENT_PROOF = exports.OP_RETURN_EMPTY_PKSCRIPT = exports.Intent = void 0;
4
+ exports.craftToSpendTx = craftToSpendTx;
4
5
  const btc_signer_1 = require("@scure/btc-signer");
5
6
  const secp256k1_js_1 = require("@noble/curves/secp256k1.js");
6
7
  const transaction_1 = require("../utils/transaction");
8
+ const unknownFields_1 = require("../utils/unknownFields");
9
+ const base_1 = require("@scure/base");
10
+ const base_2 = require("../script/base");
7
11
  /**
8
12
  * Intent proof implementation for Bitcoin message signing.
9
13
  *
@@ -41,12 +45,13 @@ var Intent;
41
45
  * @param outputs - Optional array of transaction outputs
42
46
  * @returns An unsigned Intent proof transaction
43
47
  */
44
- function create(message, inputs, outputs = []) {
48
+ function create(message, ins, outputs = []) {
45
49
  if (typeof message !== "string") {
46
50
  message = encodeMessage(message);
47
51
  }
48
- if (inputs.length == 0)
52
+ if (ins.length == 0)
49
53
  throw new Error("intent proof requires at least one input");
54
+ const inputs = ins.map(prepareCoinAsIntentProofInput);
50
55
  if (!validateInputs(inputs))
51
56
  throw new Error("invalid inputs");
52
57
  if (!validateOutputs(outputs))
@@ -102,10 +107,10 @@ var Intent;
102
107
  }
103
108
  Intent.encodeMessage = encodeMessage;
104
109
  })(Intent || (exports.Intent = Intent = {}));
105
- const OP_RETURN_EMPTY_PKSCRIPT = new Uint8Array([btc_signer_1.OP.RETURN]);
110
+ exports.OP_RETURN_EMPTY_PKSCRIPT = new Uint8Array([btc_signer_1.OP.RETURN]);
106
111
  const ZERO_32 = new Uint8Array(32).fill(0);
107
112
  const MAX_INDEX = 0xffffffff;
108
- const TAG_INTENT_PROOF = "ark-intent-proof-message";
113
+ exports.TAG_INTENT_PROOF = "ark-intent-proof-message";
109
114
  function validateInput(input) {
110
115
  if (input.index === undefined)
111
116
  throw new Error("intent proof input requires index");
@@ -130,9 +135,18 @@ function validateOutputs(outputs) {
130
135
  outputs.forEach(validateOutput);
131
136
  return true;
132
137
  }
133
- // craftToSpendTx creates the initial transaction that will be spent in the proof
134
- function craftToSpendTx(message, pkScript) {
135
- const messageHash = hashMessage(message);
138
+ /**
139
+ * Creates the "to_spend" transaction used by both intent proofs and BIP-322.
140
+ *
141
+ * The message is hashed with the given tagged-hash tag before being placed
142
+ * into the scriptSig as `OP_0 <hash>`.
143
+ *
144
+ * @param message - The message to embed
145
+ * @param pkScript - The scriptPubKey of the signer's address
146
+ * @param tag - Tagged-hash tag (defaults to the Ark intent proof tag)
147
+ */
148
+ function craftToSpendTx(message, pkScript, tag = exports.TAG_INTENT_PROOF) {
149
+ const messageHash = hashMessage(message, tag);
136
150
  const tx = new transaction_1.Transaction({
137
151
  version: 0,
138
152
  });
@@ -190,7 +204,7 @@ function craftToSignTx(toSpend, inputs, outputs) {
190
204
  outputs = [
191
205
  {
192
206
  amount: 0n,
193
- script: OP_RETURN_EMPTY_PKSCRIPT,
207
+ script: exports.OP_RETURN_EMPTY_PKSCRIPT,
194
208
  },
195
209
  ];
196
210
  }
@@ -202,6 +216,28 @@ function craftToSignTx(toSpend, inputs, outputs) {
202
216
  }
203
217
  return tx;
204
218
  }
205
- function hashMessage(message) {
206
- return secp256k1_js_1.schnorr.utils.taggedHash(TAG_INTENT_PROOF, new TextEncoder().encode(message));
219
+ function hashMessage(message, tag = exports.TAG_INTENT_PROOF) {
220
+ return secp256k1_js_1.schnorr.utils.taggedHash(tag, new TextEncoder().encode(message));
221
+ }
222
+ function prepareCoinAsIntentProofInput(coin) {
223
+ if (!("tapTree" in coin)) {
224
+ return coin;
225
+ }
226
+ const vtxoScript = base_2.VtxoScript.decode(coin.tapTree);
227
+ const sequence = (0, base_2.getSequence)(coin.intentTapLeafScript);
228
+ const unknown = [unknownFields_1.VtxoTaprootTree.encode(coin.tapTree)];
229
+ if (coin.extraWitness) {
230
+ unknown.push(unknownFields_1.ConditionWitness.encode(coin.extraWitness));
231
+ }
232
+ return {
233
+ txid: base_1.hex.decode(coin.txid),
234
+ index: coin.vout,
235
+ witnessUtxo: {
236
+ amount: BigInt(coin.value),
237
+ script: vtxoScript.pkScript,
238
+ },
239
+ sequence,
240
+ tapLeafScript: [coin.intentTapLeafScript],
241
+ unknown,
242
+ };
207
243
  }
@@ -16,6 +16,7 @@ var SettlementEventType;
16
16
  SettlementEventType["TreeNonces"] = "tree_nonces";
17
17
  SettlementEventType["TreeTx"] = "tree_tx";
18
18
  SettlementEventType["TreeSignature"] = "tree_signature";
19
+ SettlementEventType["StreamStarted"] = "stream_started";
19
20
  })(SettlementEventType || (exports.SettlementEventType = SettlementEventType = {}));
20
21
  /**
21
22
  * REST-based Ark provider implementation.
@@ -424,6 +425,12 @@ class RestArkProvider {
424
425
  signature: data.treeSignature.signature,
425
426
  };
426
427
  }
428
+ if (data.streamStarted) {
429
+ return {
430
+ type: SettlementEventType.StreamStarted,
431
+ id: data.streamStarted.id,
432
+ };
433
+ }
427
434
  // Skip heartbeat events
428
435
  if (data.heartbeat) {
429
436
  return null;
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.RestDelegatorProvider = void 0;
4
+ const intent_1 = require("../intent");
5
+ /**
6
+ * REST-based Delegator provider implementation.
7
+ * @example
8
+ * ```typescript
9
+ * const provider = new RestDelegatorProvider('https://delegator.example.com');
10
+ * const info = await provider.getDelegateInfo();
11
+ * await provider.delegate(intent, forfeitTxs);
12
+ * ```
13
+ */
14
+ class RestDelegatorProvider {
15
+ constructor(url) {
16
+ this.url = url;
17
+ }
18
+ async delegate(intent, forfeitTxs, options) {
19
+ const url = `${this.url}/v1/delegate`;
20
+ const response = await fetch(url, {
21
+ method: "POST",
22
+ headers: {
23
+ "Content-Type": "application/json",
24
+ },
25
+ body: JSON.stringify({
26
+ intent: {
27
+ message: intent_1.Intent.encodeMessage(intent.message),
28
+ proof: intent.proof,
29
+ },
30
+ forfeit_txs: forfeitTxs,
31
+ reject_replace: options?.rejectReplace ?? false,
32
+ }),
33
+ });
34
+ if (!response.ok) {
35
+ const errorText = await response.text();
36
+ throw new Error(`Failed to delegate: ${errorText}`);
37
+ }
38
+ }
39
+ async getDelegateInfo() {
40
+ const url = `${this.url}/v1/delegator/info`;
41
+ const response = await fetch(url);
42
+ if (!response.ok) {
43
+ const errorText = await response.text();
44
+ throw new Error(`Failed to get delegate info: ${errorText}`);
45
+ }
46
+ const data = await response.json();
47
+ if (!isDelegateInfo(data)) {
48
+ throw new Error("Invalid delegate info");
49
+ }
50
+ return data;
51
+ }
52
+ }
53
+ exports.RestDelegatorProvider = RestDelegatorProvider;
54
+ function isDelegateInfo(data) {
55
+ return (!!data &&
56
+ typeof data === "object" &&
57
+ "pubkey" in data &&
58
+ "fee" in data &&
59
+ "delegatorAddress" in data &&
60
+ typeof data.pubkey === "string" &&
61
+ typeof data.fee === "string" &&
62
+ typeof data.delegatorAddress === "string" &&
63
+ data.pubkey !== "" &&
64
+ data.fee !== "" &&
65
+ data.delegatorAddress !== "");
66
+ }
@@ -12,6 +12,7 @@ function convertVtxo(vtxo) {
12
12
  value: Number(vtxo.amount),
13
13
  status: {
14
14
  confirmed: !vtxo.isSwept && !vtxo.isPreconfirmed,
15
+ isLeaf: !vtxo.isPreconfirmed,
15
16
  },
16
17
  virtualStatus: {
17
18
  state: vtxo.isSwept
@@ -30,6 +31,10 @@ function convertVtxo(vtxo) {
30
31
  createdAt: new Date(Number(vtxo.createdAt) * 1000),
31
32
  isUnrolled: vtxo.isUnrolled,
32
33
  isSpent: vtxo.isSpent,
34
+ assets: vtxo.assets?.map((a) => ({
35
+ assetId: a.assetId,
36
+ amount: Number(a.amount),
37
+ })),
33
38
  };
34
39
  }
35
40
  /**