@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
@@ -1,655 +0,0 @@
1
- "use strict";
2
- /// <reference lib="webworker" />
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.Worker = void 0;
5
- const singleKey_1 = require("../../identity/singleKey");
6
- const __1 = require("..");
7
- const wallet_1 = require("../wallet");
8
- const request_1 = require("./request");
9
- const response_1 = require("./response");
10
- const ark_1 = require("../../providers/ark");
11
- const indexer_1 = require("../../providers/indexer");
12
- const base_1 = require("@scure/base");
13
- const indexedDB_1 = require("../../storage/indexedDB");
14
- const walletRepository_1 = require("../../repositories/walletRepository");
15
- const utils_1 = require("../utils");
16
- const utils_2 = require("./utils");
17
- class ReadonlyHandler {
18
- constructor(wallet) {
19
- this.wallet = wallet;
20
- }
21
- get offchainTapscript() {
22
- return this.wallet.offchainTapscript;
23
- }
24
- get boardingTapscript() {
25
- return this.wallet.boardingTapscript;
26
- }
27
- get onchainProvider() {
28
- return this.wallet.onchainProvider;
29
- }
30
- get dustAmount() {
31
- return this.wallet.dustAmount;
32
- }
33
- get identity() {
34
- return this.wallet.identity;
35
- }
36
- notifyIncomingFunds(...args) {
37
- return this.wallet.notifyIncomingFunds(...args);
38
- }
39
- getAddress() {
40
- return this.wallet.getAddress();
41
- }
42
- getBoardingAddress() {
43
- return this.wallet.getBoardingAddress();
44
- }
45
- getTransactionHistory() {
46
- return this.wallet.getTransactionHistory();
47
- }
48
- async handleReload(_) {
49
- const pending = await this.wallet.fetchPendingTxs();
50
- return { pending, finalized: [] };
51
- }
52
- async handleSettle(..._) {
53
- return undefined;
54
- }
55
- async handleSendBitcoin(..._) {
56
- return undefined;
57
- }
58
- }
59
- class Handler extends ReadonlyHandler {
60
- constructor(wallet) {
61
- super(wallet);
62
- this.wallet = wallet;
63
- }
64
- async handleReload(vtxos) {
65
- return this.wallet.finalizePendingTxs(vtxos.filter((vtxo) => vtxo.virtualStatus.state !== "swept" &&
66
- vtxo.virtualStatus.state !== "settled"));
67
- }
68
- async handleSettle(...args) {
69
- return this.wallet.settle(...args);
70
- }
71
- async handleSendBitcoin(...args) {
72
- return this.wallet.sendBitcoin(...args);
73
- }
74
- }
75
- /**
76
- * Worker is a class letting to interact with ServiceWorkerWallet and ServiceWorkerReadonlyWallet from
77
- * the client; it aims to be run in a service worker context.
78
- *
79
- * The messages requiring a Wallet rather than a ReadonlyWallet result in no-op
80
- * without errors.
81
- */
82
- class Worker {
83
- constructor(dbName = utils_2.DEFAULT_DB_NAME, dbVersion = 1, messageCallback = () => { }) {
84
- this.dbName = dbName;
85
- this.dbVersion = dbVersion;
86
- this.messageCallback = messageCallback;
87
- this.storage = new indexedDB_1.IndexedDBStorageAdapter(dbName, dbVersion);
88
- this.walletRepository = new walletRepository_1.WalletRepositoryImpl(this.storage);
89
- }
90
- /**
91
- * Get spendable vtxos for the current wallet address
92
- */
93
- async getSpendableVtxos() {
94
- if (!this.handler)
95
- return [];
96
- const address = await this.handler.getAddress();
97
- const allVtxos = await this.walletRepository.getVtxos(address);
98
- return allVtxos.filter(__1.isSpendable);
99
- }
100
- /**
101
- * Get swept vtxos for the current wallet address
102
- */
103
- async getSweptVtxos() {
104
- if (!this.handler)
105
- return [];
106
- const address = await this.handler.getAddress();
107
- const allVtxos = await this.walletRepository.getVtxos(address);
108
- return allVtxos.filter((vtxo) => vtxo.virtualStatus.state === "swept");
109
- }
110
- /**
111
- * Get all vtxos categorized by type
112
- */
113
- async getAllVtxos() {
114
- if (!this.handler)
115
- return { spendable: [], spent: [] };
116
- const address = await this.handler.getAddress();
117
- const allVtxos = await this.walletRepository.getVtxos(address);
118
- return {
119
- spendable: allVtxos.filter(__1.isSpendable),
120
- spent: allVtxos.filter((vtxo) => !(0, __1.isSpendable)(vtxo)),
121
- };
122
- }
123
- /**
124
- * Get all boarding utxos from wallet repository
125
- */
126
- async getAllBoardingUtxos() {
127
- if (!this.handler)
128
- return [];
129
- const address = await this.handler.getBoardingAddress();
130
- return await this.walletRepository.getUtxos(address);
131
- }
132
- async start(withServiceWorkerUpdate = true) {
133
- self.addEventListener("message", async (event) => {
134
- await this.handleMessage(event);
135
- });
136
- if (withServiceWorkerUpdate) {
137
- // activate service worker immediately
138
- self.addEventListener("install", () => {
139
- self.skipWaiting();
140
- });
141
- // take control of clients immediately
142
- self.addEventListener("activate", () => {
143
- self.clients.claim();
144
- });
145
- }
146
- }
147
- async clear() {
148
- if (this.incomingFundsSubscription)
149
- this.incomingFundsSubscription();
150
- // Clear storage - this replaces vtxoRepository.close()
151
- await this.storage.clear();
152
- // Reset in-memory caches by recreating the repository
153
- this.walletRepository = new walletRepository_1.WalletRepositoryImpl(this.storage);
154
- this.handler = undefined;
155
- this.arkProvider = undefined;
156
- this.indexerProvider = undefined;
157
- }
158
- async reload() {
159
- await this.onWalletInitialized();
160
- }
161
- async onWalletInitialized() {
162
- if (!this.handler ||
163
- !this.arkProvider ||
164
- !this.indexerProvider ||
165
- !this.handler.offchainTapscript ||
166
- !this.handler.boardingTapscript) {
167
- return;
168
- }
169
- // Get public key script and set the initial vtxos state
170
- const script = base_1.hex.encode(this.handler.offchainTapscript.pkScript);
171
- const response = await this.indexerProvider.getVtxos({
172
- scripts: [script],
173
- });
174
- const vtxos = response.vtxos.map((vtxo) => (0, utils_1.extendVirtualCoin)(this.handler, vtxo));
175
- try {
176
- // recover pending transactions if possible
177
- const { pending, finalized } = await this.handler.handleReload(vtxos);
178
- console.info(`Recovered ${finalized.length}/${pending.length} pending transactions: ${finalized.join(", ")}`);
179
- }
180
- catch (error) {
181
- console.error("Error recovering pending transactions:", error);
182
- }
183
- // Get wallet address and save vtxos using unified repository
184
- const address = await this.handler.getAddress();
185
- await this.walletRepository.saveVtxos(address, vtxos);
186
- // Fetch boarding utxos and save using unified repository
187
- const boardingAddress = await this.handler.getBoardingAddress();
188
- const coins = await this.handler.onchainProvider.getCoins(boardingAddress);
189
- await this.walletRepository.saveUtxos(boardingAddress, coins.map((utxo) => (0, utils_1.extendCoin)(this.handler, utxo)));
190
- // Get transaction history to cache boarding txs
191
- const txs = await this.handler.getTransactionHistory();
192
- if (txs)
193
- await this.walletRepository.saveTransactions(address, txs);
194
- // unsubscribe previous subscription if any
195
- if (this.incomingFundsSubscription)
196
- this.incomingFundsSubscription();
197
- // subscribe for incoming funds and notify all clients when new funds arrive
198
- this.incomingFundsSubscription = await this.handler.notifyIncomingFunds(async (funds) => {
199
- if (funds.type === "vtxo") {
200
- const newVtxos = funds.newVtxos.length > 0
201
- ? funds.newVtxos.map((vtxo) => (0, utils_1.extendVirtualCoin)(this.handler, vtxo))
202
- : [];
203
- const spentVtxos = funds.spentVtxos.length > 0
204
- ? funds.spentVtxos.map((vtxo) => (0, utils_1.extendVirtualCoin)(this.handler, vtxo))
205
- : [];
206
- if ([...newVtxos, ...spentVtxos].length === 0)
207
- return;
208
- // save vtxos using unified repository
209
- await this.walletRepository.saveVtxos(address, [
210
- ...newVtxos,
211
- ...spentVtxos,
212
- ]);
213
- // notify all clients about the vtxo update
214
- await this.sendMessageToAllClients(response_1.Response.vtxoUpdate(newVtxos, spentVtxos));
215
- }
216
- if (funds.type === "utxo") {
217
- const utxos = funds.coins.map((utxo) => (0, utils_1.extendCoin)(this.handler, utxo));
218
- const boardingAddress = await this.handler?.getBoardingAddress();
219
- // save utxos using unified repository
220
- await this.walletRepository.clearUtxos(boardingAddress);
221
- await this.walletRepository.saveUtxos(boardingAddress, utxos);
222
- // notify all clients about the utxo update
223
- await this.sendMessageToAllClients(response_1.Response.utxoUpdate(utxos));
224
- }
225
- });
226
- }
227
- async handleClear(event) {
228
- await this.clear();
229
- if (request_1.Request.isBase(event.data)) {
230
- event.source?.postMessage(response_1.Response.clearResponse(event.data.id, true));
231
- }
232
- }
233
- async handleInitWallet(event) {
234
- if (!request_1.Request.isInitWallet(event.data)) {
235
- console.error("Invalid INIT_WALLET message format", event.data);
236
- event.source?.postMessage(response_1.Response.error(event.data.id, "Invalid INIT_WALLET message format"));
237
- return;
238
- }
239
- const message = event.data;
240
- const { arkServerPublicKey, arkServerUrl } = message;
241
- this.arkProvider = new ark_1.RestArkProvider(arkServerUrl);
242
- this.indexerProvider = new indexer_1.RestIndexerProvider(arkServerUrl);
243
- try {
244
- if ("privateKey" in message.key &&
245
- typeof message.key.privateKey === "string") {
246
- const { key: { privateKey }, } = message;
247
- const identity = singleKey_1.SingleKey.fromHex(privateKey);
248
- const wallet = await wallet_1.Wallet.create({
249
- identity,
250
- arkServerUrl,
251
- arkServerPublicKey,
252
- storage: this.storage, // Use unified storage for wallet too
253
- });
254
- this.handler = new Handler(wallet);
255
- }
256
- else if ("publicKey" in message.key &&
257
- typeof message.key.publicKey === "string") {
258
- const { key: { publicKey }, } = message;
259
- const identity = singleKey_1.ReadonlySingleKey.fromPublicKey(base_1.hex.decode(publicKey));
260
- const wallet = await wallet_1.ReadonlyWallet.create({
261
- identity,
262
- arkServerUrl,
263
- arkServerPublicKey,
264
- storage: this.storage, // Use unified storage for wallet too
265
- });
266
- this.handler = new ReadonlyHandler(wallet);
267
- }
268
- else {
269
- const err = "Missing privateKey or publicKey in key object";
270
- event.source?.postMessage(response_1.Response.error(message.id, err));
271
- console.error(err);
272
- return;
273
- }
274
- }
275
- catch (error) {
276
- console.error("Error initializing wallet:", error);
277
- const errorMessage = error instanceof Error
278
- ? error.message
279
- : "Unknown error occurred";
280
- event.source?.postMessage(response_1.Response.error(message.id, errorMessage));
281
- return;
282
- }
283
- event.source?.postMessage(response_1.Response.walletInitialized(message.id));
284
- await this.onWalletInitialized();
285
- }
286
- async handleSettle(event) {
287
- const message = event.data;
288
- if (!request_1.Request.isSettle(message)) {
289
- console.error("Invalid SETTLE message format", message);
290
- event.source?.postMessage(response_1.Response.error(message.id, "Invalid SETTLE message format"));
291
- return;
292
- }
293
- try {
294
- if (!this.handler) {
295
- console.error("Wallet not initialized");
296
- event.source?.postMessage(response_1.Response.error(message.id, "Wallet not initialized"));
297
- return;
298
- }
299
- const txid = await this.handler.handleSettle(message.params, (e) => {
300
- event.source?.postMessage(response_1.Response.settleEvent(message.id, e));
301
- });
302
- if (txid) {
303
- event.source?.postMessage(response_1.Response.settleSuccess(message.id, txid));
304
- }
305
- else {
306
- event.source?.postMessage(response_1.Response.error(message.id, "Operation not supported in readonly mode"));
307
- }
308
- }
309
- catch (error) {
310
- console.error("Error settling:", error);
311
- const errorMessage = error instanceof Error
312
- ? error.message
313
- : "Unknown error occurred";
314
- event.source?.postMessage(response_1.Response.error(message.id, errorMessage));
315
- }
316
- }
317
- async handleSendBitcoin(event) {
318
- const message = event.data;
319
- if (!request_1.Request.isSendBitcoin(message)) {
320
- console.error("Invalid SEND_BITCOIN message format", message);
321
- event.source?.postMessage(response_1.Response.error(message.id, "Invalid SEND_BITCOIN message format"));
322
- return;
323
- }
324
- if (!this.handler) {
325
- console.error("Wallet not initialized");
326
- event.source?.postMessage(response_1.Response.error(message.id, "Wallet not initialized"));
327
- return;
328
- }
329
- try {
330
- const txid = await this.handler.handleSendBitcoin(message.params);
331
- if (txid) {
332
- event.source?.postMessage(response_1.Response.sendBitcoinSuccess(message.id, txid));
333
- }
334
- else {
335
- event.source?.postMessage(response_1.Response.error(message.id, "Operation not supported in readonly mode"));
336
- }
337
- }
338
- catch (error) {
339
- console.error("Error sending bitcoin:", error);
340
- const errorMessage = error instanceof Error
341
- ? error.message
342
- : "Unknown error occurred";
343
- event.source?.postMessage(response_1.Response.error(message.id, errorMessage));
344
- }
345
- }
346
- async handleGetAddress(event) {
347
- const message = event.data;
348
- if (!request_1.Request.isGetAddress(message)) {
349
- console.error("Invalid GET_ADDRESS message format", message);
350
- event.source?.postMessage(response_1.Response.error(message.id, "Invalid GET_ADDRESS message format"));
351
- return;
352
- }
353
- if (!this.handler) {
354
- console.error("Wallet not initialized");
355
- event.source?.postMessage(response_1.Response.error(message.id, "Wallet not initialized"));
356
- return;
357
- }
358
- try {
359
- const address = await this.handler.getAddress();
360
- event.source?.postMessage(response_1.Response.address(message.id, address));
361
- }
362
- catch (error) {
363
- console.error("Error getting address:", error);
364
- const errorMessage = error instanceof Error
365
- ? error.message
366
- : "Unknown error occurred";
367
- event.source?.postMessage(response_1.Response.error(message.id, errorMessage));
368
- }
369
- }
370
- async handleGetBoardingAddress(event) {
371
- const message = event.data;
372
- if (!request_1.Request.isGetBoardingAddress(message)) {
373
- console.error("Invalid GET_BOARDING_ADDRESS message format", message);
374
- event.source?.postMessage(response_1.Response.error(message.id, "Invalid GET_BOARDING_ADDRESS message format"));
375
- return;
376
- }
377
- if (!this.handler) {
378
- console.error("Wallet not initialized");
379
- event.source?.postMessage(response_1.Response.error(message.id, "Wallet not initialized"));
380
- return;
381
- }
382
- try {
383
- const address = await this.handler.getBoardingAddress();
384
- event.source?.postMessage(response_1.Response.boardingAddress(message.id, address));
385
- }
386
- catch (error) {
387
- console.error("Error getting boarding address:", error);
388
- const errorMessage = error instanceof Error
389
- ? error.message
390
- : "Unknown error occurred";
391
- event.source?.postMessage(response_1.Response.error(message.id, errorMessage));
392
- }
393
- }
394
- async handleGetBalance(event) {
395
- const message = event.data;
396
- if (!request_1.Request.isGetBalance(message)) {
397
- console.error("Invalid GET_BALANCE message format", message);
398
- event.source?.postMessage(response_1.Response.error(message.id, "Invalid GET_BALANCE message format"));
399
- return;
400
- }
401
- if (!this.handler) {
402
- console.error("Wallet not initialized");
403
- event.source?.postMessage(response_1.Response.error(message.id, "Wallet not initialized"));
404
- return;
405
- }
406
- try {
407
- const [boardingUtxos, spendableVtxos, sweptVtxos] = await Promise.all([
408
- this.getAllBoardingUtxos(),
409
- this.getSpendableVtxos(),
410
- this.getSweptVtxos(),
411
- ]);
412
- // boarding
413
- let confirmed = 0;
414
- let unconfirmed = 0;
415
- for (const utxo of boardingUtxos) {
416
- if (utxo.status.confirmed) {
417
- confirmed += utxo.value;
418
- }
419
- else {
420
- unconfirmed += utxo.value;
421
- }
422
- }
423
- // offchain
424
- let settled = 0;
425
- let preconfirmed = 0;
426
- let recoverable = 0;
427
- for (const vtxo of spendableVtxos) {
428
- if (vtxo.virtualStatus.state === "settled") {
429
- settled += vtxo.value;
430
- }
431
- else if (vtxo.virtualStatus.state === "preconfirmed") {
432
- preconfirmed += vtxo.value;
433
- }
434
- }
435
- for (const vtxo of sweptVtxos) {
436
- if ((0, __1.isSpendable)(vtxo)) {
437
- recoverable += vtxo.value;
438
- }
439
- }
440
- const totalBoarding = confirmed + unconfirmed;
441
- const totalOffchain = settled + preconfirmed + recoverable;
442
- event.source?.postMessage(response_1.Response.balance(message.id, {
443
- boarding: {
444
- confirmed,
445
- unconfirmed,
446
- total: totalBoarding,
447
- },
448
- settled,
449
- preconfirmed,
450
- available: settled + preconfirmed,
451
- recoverable,
452
- total: totalBoarding + totalOffchain,
453
- }));
454
- }
455
- catch (error) {
456
- console.error("Error getting balance:", error);
457
- const errorMessage = error instanceof Error
458
- ? error.message
459
- : "Unknown error occurred";
460
- event.source?.postMessage(response_1.Response.error(message.id, errorMessage));
461
- }
462
- }
463
- async handleGetVtxos(event) {
464
- const message = event.data;
465
- if (!request_1.Request.isGetVtxos(message)) {
466
- console.error("Invalid GET_VTXOS message format", message);
467
- event.source?.postMessage(response_1.Response.error(message.id, "Invalid GET_VTXOS message format"));
468
- return;
469
- }
470
- if (!this.handler) {
471
- console.error("Wallet not initialized");
472
- event.source?.postMessage(response_1.Response.error(message.id, "Wallet not initialized"));
473
- return;
474
- }
475
- try {
476
- const vtxos = await this.getSpendableVtxos();
477
- const dustAmount = this.handler.dustAmount;
478
- const includeRecoverable = message.filter?.withRecoverable ?? false;
479
- const filteredVtxos = includeRecoverable
480
- ? vtxos
481
- : vtxos.filter((v) => {
482
- if (dustAmount != null && (0, __1.isSubdust)(v, dustAmount)) {
483
- return false;
484
- }
485
- if ((0, __1.isRecoverable)(v)) {
486
- return false;
487
- }
488
- if ((0, __1.isExpired)(v)) {
489
- return false;
490
- }
491
- return true;
492
- });
493
- event.source?.postMessage(response_1.Response.vtxos(message.id, filteredVtxos));
494
- }
495
- catch (error) {
496
- console.error("Error getting vtxos:", error);
497
- const errorMessage = error instanceof Error
498
- ? error.message
499
- : "Unknown error occurred";
500
- event.source?.postMessage(response_1.Response.error(message.id, errorMessage));
501
- }
502
- }
503
- async handleGetBoardingUtxos(event) {
504
- const message = event.data;
505
- if (!request_1.Request.isGetBoardingUtxos(message)) {
506
- console.error("Invalid GET_BOARDING_UTXOS message format", message);
507
- event.source?.postMessage(response_1.Response.error(message.id, "Invalid GET_BOARDING_UTXOS message format"));
508
- return;
509
- }
510
- if (!this.handler) {
511
- console.error("Wallet not initialized");
512
- event.source?.postMessage(response_1.Response.error(message.id, "Wallet not initialized"));
513
- return;
514
- }
515
- try {
516
- const boardingUtxos = await this.getAllBoardingUtxos();
517
- event.source?.postMessage(response_1.Response.boardingUtxos(message.id, boardingUtxos));
518
- }
519
- catch (error) {
520
- console.error("Error getting boarding utxos:", error);
521
- const errorMessage = error instanceof Error
522
- ? error.message
523
- : "Unknown error occurred";
524
- event.source?.postMessage(response_1.Response.error(message.id, errorMessage));
525
- }
526
- }
527
- async handleGetTransactionHistory(event) {
528
- const message = event.data;
529
- if (!request_1.Request.isGetTransactionHistory(message)) {
530
- console.error("Invalid GET_TRANSACTION_HISTORY message format", message);
531
- event.source?.postMessage(response_1.Response.error(message.id, "Invalid GET_TRANSACTION_HISTORY message format"));
532
- return;
533
- }
534
- if (!this.handler) {
535
- console.error("Wallet not initialized");
536
- event.source?.postMessage(response_1.Response.error(message.id, "Wallet not initialized"));
537
- return;
538
- }
539
- try {
540
- const txs = await this.handler.getTransactionHistory();
541
- event.source?.postMessage(response_1.Response.transactionHistory(message.id, txs));
542
- }
543
- catch (error) {
544
- console.error("Error getting transaction history:", error);
545
- const errorMessage = error instanceof Error
546
- ? error.message
547
- : "Unknown error occurred";
548
- event.source?.postMessage(response_1.Response.error(message.id, errorMessage));
549
- }
550
- }
551
- async handleGetStatus(event) {
552
- const message = event.data;
553
- if (!request_1.Request.isGetStatus(message)) {
554
- console.error("Invalid GET_STATUS message format", message);
555
- event.source?.postMessage(response_1.Response.error(message.id, "Invalid GET_STATUS message format"));
556
- return;
557
- }
558
- const pubKey = this.handler
559
- ? await this.handler.identity.xOnlyPublicKey()
560
- : undefined;
561
- event.source?.postMessage(response_1.Response.walletStatus(message.id, this.handler !== undefined, pubKey));
562
- }
563
- async handleMessage(event) {
564
- this.messageCallback(event);
565
- const message = event.data;
566
- if (!request_1.Request.isBase(message)) {
567
- console.warn("Invalid message format", JSON.stringify(message));
568
- // ignore invalid messages
569
- return;
570
- }
571
- switch (message.type) {
572
- case "INIT_WALLET": {
573
- await this.handleInitWallet(event);
574
- break;
575
- }
576
- case "SETTLE": {
577
- await this.handleSettle(event);
578
- break;
579
- }
580
- case "SEND_BITCOIN": {
581
- await this.handleSendBitcoin(event);
582
- break;
583
- }
584
- case "GET_ADDRESS": {
585
- await this.handleGetAddress(event);
586
- break;
587
- }
588
- case "GET_BOARDING_ADDRESS": {
589
- await this.handleGetBoardingAddress(event);
590
- break;
591
- }
592
- case "GET_BALANCE": {
593
- await this.handleGetBalance(event);
594
- break;
595
- }
596
- case "GET_VTXOS": {
597
- await this.handleGetVtxos(event);
598
- break;
599
- }
600
- case "GET_BOARDING_UTXOS": {
601
- await this.handleGetBoardingUtxos(event);
602
- break;
603
- }
604
- case "GET_TRANSACTION_HISTORY": {
605
- await this.handleGetTransactionHistory(event);
606
- break;
607
- }
608
- case "GET_STATUS": {
609
- await this.handleGetStatus(event);
610
- break;
611
- }
612
- case "CLEAR": {
613
- await this.handleClear(event);
614
- break;
615
- }
616
- case "RELOAD_WALLET": {
617
- await this.handleReloadWallet(event);
618
- break;
619
- }
620
- default:
621
- event.source?.postMessage(response_1.Response.error(message.id, "Unknown message type"));
622
- }
623
- }
624
- async sendMessageToAllClients(message) {
625
- self.clients
626
- .matchAll({ includeUncontrolled: true, type: "window" })
627
- .then((clients) => {
628
- clients.forEach((client) => {
629
- client.postMessage(message);
630
- });
631
- });
632
- }
633
- async handleReloadWallet(event) {
634
- const message = event.data;
635
- if (!request_1.Request.isReloadWallet(message)) {
636
- console.error("Invalid RELOAD_WALLET message format", message);
637
- event.source?.postMessage(response_1.Response.error(message.id, "Invalid RELOAD_WALLET message format"));
638
- return;
639
- }
640
- if (!this.handler) {
641
- console.error("Wallet not initialized");
642
- event.source?.postMessage(response_1.Response.walletReloaded(message.id, false));
643
- return;
644
- }
645
- try {
646
- await this.onWalletInitialized();
647
- event.source?.postMessage(response_1.Response.walletReloaded(message.id, true));
648
- }
649
- catch (error) {
650
- console.error("Error reloading wallet:", error);
651
- event.source?.postMessage(response_1.Response.walletReloaded(message.id, false));
652
- }
653
- }
654
- }
655
- exports.Worker = Worker;