@arkade-os/sdk 0.3.12 → 0.4.0-next.0
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.
- package/README.md +483 -54
- package/dist/cjs/adapters/expo-db.js +35 -0
- package/dist/cjs/asset/assetGroup.js +141 -0
- package/dist/cjs/asset/assetId.js +88 -0
- package/dist/cjs/asset/assetInput.js +204 -0
- package/dist/cjs/asset/assetOutput.js +159 -0
- package/dist/cjs/asset/assetRef.js +82 -0
- package/dist/cjs/asset/index.js +24 -0
- package/dist/cjs/asset/metadata.js +172 -0
- package/dist/cjs/asset/packet.js +164 -0
- package/dist/cjs/asset/types.js +25 -0
- package/dist/cjs/asset/utils.js +105 -0
- package/dist/cjs/contracts/arkcontract.js +148 -0
- package/dist/cjs/contracts/contractManager.js +436 -0
- package/dist/cjs/contracts/contractWatcher.js +567 -0
- package/dist/cjs/contracts/handlers/default.js +85 -0
- package/dist/cjs/contracts/handlers/delegate.js +89 -0
- package/dist/cjs/contracts/handlers/helpers.js +105 -0
- package/dist/cjs/contracts/handlers/index.js +19 -0
- package/dist/cjs/contracts/handlers/registry.js +89 -0
- package/dist/cjs/contracts/handlers/vhtlc.js +193 -0
- package/dist/cjs/contracts/index.js +41 -0
- package/dist/cjs/contracts/types.js +2 -0
- package/dist/cjs/db/manager.js +97 -0
- package/dist/cjs/forfeit.js +12 -8
- package/dist/cjs/identity/index.js +1 -0
- package/dist/cjs/identity/seedIdentity.js +255 -0
- package/dist/cjs/index.js +70 -14
- package/dist/cjs/intent/index.js +28 -2
- package/dist/cjs/providers/ark.js +7 -0
- package/dist/cjs/providers/delegator.js +66 -0
- package/dist/cjs/providers/expoIndexer.js +5 -0
- package/dist/cjs/providers/indexer.js +68 -1
- package/dist/cjs/providers/onchain.js +2 -2
- package/dist/cjs/providers/utils.js +1 -0
- package/dist/cjs/repositories/contractRepository.js +0 -103
- package/dist/cjs/repositories/inMemory/contractRepository.js +55 -0
- package/dist/cjs/repositories/inMemory/walletRepository.js +80 -0
- package/dist/cjs/repositories/index.js +16 -0
- package/dist/cjs/repositories/indexedDB/contractRepository.js +187 -0
- package/dist/cjs/repositories/indexedDB/db.js +57 -0
- package/dist/cjs/repositories/indexedDB/schema.js +159 -0
- package/dist/cjs/repositories/indexedDB/walletRepository.js +338 -0
- package/dist/cjs/repositories/indexedDB/websqlAdapter.js +144 -0
- package/dist/cjs/repositories/migrations/contractRepositoryImpl.js +127 -0
- package/dist/cjs/repositories/migrations/fromStorageAdapter.js +66 -0
- package/dist/cjs/repositories/migrations/walletRepositoryImpl.js +180 -0
- package/dist/cjs/repositories/walletRepository.js +0 -169
- package/dist/cjs/script/base.js +54 -0
- package/dist/cjs/script/delegate.js +49 -0
- package/dist/cjs/storage/asyncStorage.js +4 -1
- package/dist/cjs/storage/fileSystem.js +3 -0
- package/dist/cjs/storage/inMemory.js +3 -0
- package/dist/cjs/storage/indexedDB.js +5 -1
- package/dist/cjs/storage/localStorage.js +3 -0
- package/dist/cjs/utils/arkTransaction.js +16 -0
- package/dist/cjs/utils/transactionHistory.js +50 -0
- package/dist/cjs/utils/txSizeEstimator.js +39 -14
- package/dist/cjs/wallet/asset-manager.js +338 -0
- package/dist/cjs/wallet/asset.js +117 -0
- package/dist/cjs/wallet/batch.js +1 -1
- package/dist/cjs/wallet/delegator.js +235 -0
- package/dist/cjs/wallet/expo/background.js +133 -0
- package/dist/cjs/wallet/expo/index.js +9 -0
- package/dist/cjs/wallet/expo/wallet.js +231 -0
- package/dist/cjs/wallet/onchain.js +57 -12
- package/dist/cjs/wallet/serviceWorker/wallet-message-handler.js +568 -0
- package/dist/cjs/wallet/serviceWorker/wallet.js +383 -102
- package/dist/cjs/wallet/unroll.js +7 -2
- package/dist/cjs/wallet/utils.js +60 -0
- package/dist/cjs/wallet/validation.js +151 -0
- package/dist/cjs/wallet/vtxo-manager.js +1 -1
- package/dist/cjs/wallet/wallet.js +702 -260
- package/dist/cjs/worker/browser/service-worker-manager.js +82 -0
- package/dist/cjs/{wallet/serviceWorker → worker/browser}/utils.js +2 -1
- package/dist/cjs/worker/expo/asyncStorageTaskQueue.js +78 -0
- package/dist/cjs/worker/expo/index.js +12 -0
- package/dist/cjs/worker/expo/processors/contractPollProcessor.js +61 -0
- package/dist/cjs/worker/expo/processors/index.js +6 -0
- package/dist/cjs/worker/expo/taskQueue.js +41 -0
- package/dist/cjs/worker/expo/taskRunner.js +57 -0
- package/dist/cjs/worker/messageBus.js +252 -0
- package/dist/esm/adapters/expo-db.js +27 -0
- package/dist/esm/asset/assetGroup.js +137 -0
- package/dist/esm/asset/assetId.js +84 -0
- package/dist/esm/asset/assetInput.js +199 -0
- package/dist/esm/asset/assetOutput.js +154 -0
- package/dist/esm/asset/assetRef.js +78 -0
- package/dist/esm/asset/index.js +8 -0
- package/dist/esm/asset/metadata.js +167 -0
- package/dist/esm/asset/packet.js +159 -0
- package/dist/esm/asset/types.js +22 -0
- package/dist/esm/asset/utils.js +99 -0
- package/dist/esm/contracts/arkcontract.js +141 -0
- package/dist/esm/contracts/contractManager.js +432 -0
- package/dist/esm/contracts/contractWatcher.js +563 -0
- package/dist/esm/contracts/handlers/default.js +82 -0
- package/dist/esm/contracts/handlers/delegate.js +86 -0
- package/dist/esm/contracts/handlers/helpers.js +66 -0
- package/dist/esm/contracts/handlers/index.js +12 -0
- package/dist/esm/contracts/handlers/registry.js +86 -0
- package/dist/esm/contracts/handlers/vhtlc.js +190 -0
- package/dist/esm/contracts/index.js +13 -0
- package/dist/esm/contracts/types.js +1 -0
- package/dist/esm/db/manager.js +92 -0
- package/dist/esm/forfeit.js +11 -8
- package/dist/esm/identity/index.js +1 -0
- package/dist/esm/identity/seedIdentity.js +249 -0
- package/dist/esm/index.js +25 -15
- package/dist/esm/intent/index.js +28 -2
- package/dist/esm/providers/ark.js +7 -0
- package/dist/esm/providers/delegator.js +62 -0
- package/dist/esm/providers/expoIndexer.js +5 -0
- package/dist/esm/providers/indexer.js +68 -1
- package/dist/esm/providers/onchain.js +2 -2
- package/dist/esm/providers/utils.js +1 -0
- package/dist/esm/repositories/contractRepository.js +1 -101
- package/dist/esm/repositories/inMemory/contractRepository.js +51 -0
- package/dist/esm/repositories/inMemory/walletRepository.js +76 -0
- package/dist/esm/repositories/index.js +8 -0
- package/dist/esm/repositories/indexedDB/contractRepository.js +183 -0
- package/dist/esm/repositories/indexedDB/db.js +42 -0
- package/dist/esm/repositories/indexedDB/schema.js +155 -0
- package/dist/esm/repositories/indexedDB/walletRepository.js +334 -0
- package/dist/esm/repositories/indexedDB/websqlAdapter.js +138 -0
- package/dist/esm/repositories/migrations/contractRepositoryImpl.js +121 -0
- package/dist/esm/repositories/migrations/fromStorageAdapter.js +58 -0
- package/dist/esm/repositories/migrations/walletRepositoryImpl.js +176 -0
- package/dist/esm/repositories/walletRepository.js +1 -167
- package/dist/esm/script/base.js +21 -1
- package/dist/esm/script/delegate.js +46 -0
- package/dist/esm/storage/asyncStorage.js +4 -1
- package/dist/esm/storage/fileSystem.js +3 -0
- package/dist/esm/storage/inMemory.js +3 -0
- package/dist/esm/storage/indexedDB.js +5 -1
- package/dist/esm/storage/localStorage.js +3 -0
- package/dist/esm/utils/arkTransaction.js +15 -0
- package/dist/esm/utils/transactionHistory.js +50 -0
- package/dist/esm/utils/txSizeEstimator.js +39 -14
- package/dist/esm/wallet/asset-manager.js +333 -0
- package/dist/esm/wallet/asset.js +111 -0
- package/dist/esm/wallet/batch.js +1 -1
- package/dist/esm/wallet/delegator.js +231 -0
- package/dist/esm/wallet/expo/background.js +128 -0
- package/dist/esm/wallet/expo/index.js +2 -0
- package/dist/esm/wallet/expo/wallet.js +194 -0
- package/dist/esm/wallet/onchain.js +57 -12
- package/dist/esm/wallet/serviceWorker/wallet-message-handler.js +564 -0
- package/dist/esm/wallet/serviceWorker/wallet.js +382 -101
- package/dist/esm/wallet/unroll.js +7 -2
- package/dist/esm/wallet/utils.js +55 -0
- package/dist/esm/wallet/validation.js +139 -0
- package/dist/esm/wallet/vtxo-manager.js +1 -1
- package/dist/esm/wallet/wallet.js +704 -229
- package/dist/esm/worker/browser/service-worker-manager.js +76 -0
- package/dist/esm/{wallet/serviceWorker → worker/browser}/utils.js +2 -1
- package/dist/esm/worker/expo/asyncStorageTaskQueue.js +74 -0
- package/dist/esm/worker/expo/index.js +4 -0
- package/dist/esm/worker/expo/processors/contractPollProcessor.js +58 -0
- package/dist/esm/worker/expo/processors/index.js +1 -0
- package/dist/esm/worker/expo/taskQueue.js +37 -0
- package/dist/esm/worker/expo/taskRunner.js +54 -0
- package/dist/esm/worker/messageBus.js +248 -0
- package/dist/types/adapters/expo-db.d.ts +7 -0
- package/dist/types/asset/assetGroup.d.ts +28 -0
- package/dist/types/asset/assetId.d.ts +19 -0
- package/dist/types/asset/assetInput.d.ts +46 -0
- package/dist/types/asset/assetOutput.d.ts +39 -0
- package/dist/types/asset/assetRef.d.ts +25 -0
- package/dist/types/asset/index.d.ts +8 -0
- package/dist/types/asset/metadata.d.ts +37 -0
- package/dist/types/asset/packet.d.ts +27 -0
- package/dist/types/asset/types.d.ts +18 -0
- package/dist/types/asset/utils.d.ts +21 -0
- package/dist/types/contracts/arkcontract.d.ts +101 -0
- package/dist/types/contracts/contractManager.d.ts +331 -0
- package/dist/types/contracts/contractWatcher.d.ts +192 -0
- package/dist/types/contracts/handlers/default.d.ts +19 -0
- package/dist/types/contracts/handlers/delegate.d.ts +21 -0
- package/dist/types/contracts/handlers/helpers.d.ts +18 -0
- package/dist/types/contracts/handlers/index.d.ts +7 -0
- package/dist/types/contracts/handlers/registry.d.ts +65 -0
- package/dist/types/contracts/handlers/vhtlc.d.ts +32 -0
- package/dist/types/contracts/index.d.ts +14 -0
- package/dist/types/contracts/types.d.ts +222 -0
- package/dist/types/db/manager.d.ts +22 -0
- package/dist/types/forfeit.d.ts +2 -1
- package/dist/types/identity/index.d.ts +1 -0
- package/dist/types/identity/seedIdentity.d.ts +128 -0
- package/dist/types/index.d.ts +21 -12
- package/dist/types/intent/index.d.ts +2 -1
- package/dist/types/providers/ark.d.ts +11 -2
- package/dist/types/providers/delegator.d.ts +29 -0
- package/dist/types/providers/indexer.d.ts +11 -1
- package/dist/types/repositories/contractRepository.d.ts +30 -19
- package/dist/types/repositories/inMemory/contractRepository.d.ts +17 -0
- package/dist/types/repositories/inMemory/walletRepository.d.ts +26 -0
- package/dist/types/repositories/index.d.ts +7 -0
- package/dist/types/repositories/indexedDB/contractRepository.d.ts +21 -0
- package/dist/types/repositories/indexedDB/db.d.ts +56 -0
- package/dist/types/repositories/indexedDB/schema.d.ts +8 -0
- package/dist/types/repositories/indexedDB/walletRepository.d.ts +25 -0
- package/dist/types/repositories/indexedDB/websqlAdapter.d.ts +49 -0
- package/dist/types/repositories/migrations/contractRepositoryImpl.d.ts +24 -0
- package/dist/types/repositories/migrations/fromStorageAdapter.d.ts +19 -0
- package/dist/types/repositories/migrations/walletRepositoryImpl.d.ts +27 -0
- package/dist/types/repositories/walletRepository.d.ts +13 -24
- package/dist/types/script/base.d.ts +1 -0
- package/dist/types/script/delegate.d.ts +36 -0
- package/dist/types/storage/asyncStorage.d.ts +4 -0
- package/dist/types/storage/fileSystem.d.ts +3 -0
- package/dist/types/storage/inMemory.d.ts +3 -0
- package/dist/types/storage/index.d.ts +3 -0
- package/dist/types/storage/indexedDB.d.ts +3 -0
- package/dist/types/storage/localStorage.d.ts +3 -0
- package/dist/types/utils/arkTransaction.d.ts +6 -0
- package/dist/types/utils/txSizeEstimator.d.ts +12 -2
- package/dist/types/wallet/asset-manager.d.ts +78 -0
- package/dist/types/wallet/asset.d.ts +21 -0
- package/dist/types/wallet/batch.d.ts +1 -1
- package/dist/types/wallet/delegator.d.ts +24 -0
- package/dist/types/wallet/expo/background.d.ts +66 -0
- package/dist/types/wallet/expo/index.d.ts +4 -0
- package/dist/types/wallet/expo/wallet.d.ts +97 -0
- package/dist/types/wallet/index.d.ts +75 -2
- package/dist/types/wallet/onchain.d.ts +22 -1
- package/dist/types/wallet/serviceWorker/wallet-message-handler.d.ts +366 -0
- package/dist/types/wallet/serviceWorker/wallet.d.ts +20 -11
- package/dist/types/wallet/utils.d.ts +13 -1
- package/dist/types/wallet/validation.d.ts +24 -0
- package/dist/types/wallet/wallet.d.ts +111 -17
- package/dist/types/worker/browser/service-worker-manager.d.ts +21 -0
- package/dist/types/{wallet/serviceWorker → worker/browser}/utils.d.ts +2 -1
- package/dist/types/worker/expo/asyncStorageTaskQueue.d.ts +46 -0
- package/dist/types/worker/expo/index.d.ts +7 -0
- package/dist/types/worker/expo/processors/contractPollProcessor.d.ts +14 -0
- package/dist/types/worker/expo/processors/index.d.ts +1 -0
- package/dist/types/worker/expo/taskQueue.d.ts +50 -0
- package/dist/types/worker/expo/taskRunner.d.ts +42 -0
- package/dist/types/worker/messageBus.d.ts +109 -0
- package/package.json +71 -17
- package/dist/cjs/wallet/serviceWorker/request.js +0 -78
- package/dist/cjs/wallet/serviceWorker/response.js +0 -222
- package/dist/cjs/wallet/serviceWorker/worker.js +0 -655
- package/dist/esm/wallet/serviceWorker/request.js +0 -75
- package/dist/esm/wallet/serviceWorker/response.js +0 -219
- package/dist/esm/wallet/serviceWorker/worker.js +0 -651
- package/dist/types/wallet/serviceWorker/request.d.ts +0 -74
- package/dist/types/wallet/serviceWorker/response.d.ts +0 -123
- package/dist/types/wallet/serviceWorker/worker.d.ts +0 -53
|
@@ -1,53 +1,138 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ServiceWorkerWallet = exports.ServiceWorkerReadonlyWallet = void 0;
|
|
4
|
-
const response_1 = require("./response");
|
|
5
4
|
const base_1 = require("@scure/base");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
5
|
+
const utils_1 = require("../../worker/browser/utils");
|
|
6
|
+
const repositories_1 = require("../../repositories");
|
|
7
|
+
const wallet_message_handler_1 = require("./wallet-message-handler");
|
|
8
|
+
const utils_2 = require("../utils");
|
|
10
9
|
const isPrivateKeyIdentity = (identity) => {
|
|
11
10
|
return typeof identity.toHex === "function";
|
|
12
11
|
};
|
|
13
|
-
class
|
|
14
|
-
constructor(
|
|
15
|
-
|
|
16
|
-
this.
|
|
12
|
+
class ServiceWorkerReadonlyAssetManager {
|
|
13
|
+
constructor(sendMessage, messageTag) {
|
|
14
|
+
this.sendMessage = sendMessage;
|
|
15
|
+
this.messageTag = messageTag;
|
|
16
|
+
}
|
|
17
|
+
async getAssetDetails(assetId) {
|
|
18
|
+
const message = {
|
|
19
|
+
tag: this.messageTag,
|
|
20
|
+
type: "GET_ASSET_DETAILS",
|
|
21
|
+
id: (0, utils_2.getRandomId)(),
|
|
22
|
+
payload: { assetId },
|
|
23
|
+
};
|
|
24
|
+
const response = await this.sendMessage(message);
|
|
25
|
+
return response.payload.assetDetails;
|
|
17
26
|
}
|
|
18
27
|
}
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
28
|
+
class ServiceWorkerAssetManager extends ServiceWorkerReadonlyAssetManager {
|
|
29
|
+
async issue(params) {
|
|
30
|
+
const message = {
|
|
31
|
+
tag: this.messageTag,
|
|
32
|
+
type: "ISSUE",
|
|
33
|
+
id: (0, utils_2.getRandomId)(),
|
|
34
|
+
payload: { params },
|
|
35
|
+
};
|
|
36
|
+
const response = await this.sendMessage(message);
|
|
37
|
+
return response.payload.result;
|
|
38
|
+
}
|
|
39
|
+
async reissue(params) {
|
|
40
|
+
const message = {
|
|
41
|
+
tag: this.messageTag,
|
|
42
|
+
type: "REISSUE",
|
|
43
|
+
id: (0, utils_2.getRandomId)(),
|
|
44
|
+
payload: { params },
|
|
45
|
+
};
|
|
46
|
+
const response = await this.sendMessage(message);
|
|
47
|
+
return response.payload.txid;
|
|
48
|
+
}
|
|
49
|
+
async burn(params) {
|
|
50
|
+
const message = {
|
|
51
|
+
tag: this.messageTag,
|
|
52
|
+
type: "BURN",
|
|
53
|
+
id: (0, utils_2.getRandomId)(),
|
|
54
|
+
payload: { params },
|
|
55
|
+
};
|
|
56
|
+
const response = await this.sendMessage(message);
|
|
57
|
+
return response.payload.txid;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
const initializeMessageBus = (serviceWorker, config, timeoutMs = 2000) => {
|
|
61
|
+
const initCmd = {
|
|
62
|
+
tag: "INITIALIZE_MESSAGE_BUS",
|
|
63
|
+
id: (0, utils_2.getRandomId)(),
|
|
64
|
+
config: { ...config, timeoutMs },
|
|
26
65
|
};
|
|
66
|
+
return new Promise((resolve, reject) => {
|
|
67
|
+
const cleanup = () => {
|
|
68
|
+
navigator.serviceWorker.removeEventListener("message", onMessage);
|
|
69
|
+
clearTimeout(timeoutId);
|
|
70
|
+
};
|
|
71
|
+
const onMessage = (event) => {
|
|
72
|
+
const response = event.data;
|
|
73
|
+
if (response?.id !== initCmd.id)
|
|
74
|
+
return;
|
|
75
|
+
cleanup();
|
|
76
|
+
if (response.error) {
|
|
77
|
+
reject(response.error);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
resolve();
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
const timeoutId = setTimeout(() => {
|
|
84
|
+
cleanup();
|
|
85
|
+
reject(new Error("MessageBus timed out!"));
|
|
86
|
+
}, timeoutMs);
|
|
87
|
+
navigator.serviceWorker.addEventListener("message", onMessage);
|
|
88
|
+
serviceWorker.postMessage(initCmd);
|
|
89
|
+
});
|
|
27
90
|
};
|
|
28
91
|
class ServiceWorkerReadonlyWallet {
|
|
29
|
-
|
|
92
|
+
get assetManager() {
|
|
93
|
+
return this._readonlyAssetManager;
|
|
94
|
+
}
|
|
95
|
+
constructor(serviceWorker, identity, walletRepository, contractRepository, messageTag) {
|
|
30
96
|
this.serviceWorker = serviceWorker;
|
|
97
|
+
this.messageTag = messageTag;
|
|
31
98
|
this.identity = identity;
|
|
32
99
|
this.walletRepository = walletRepository;
|
|
33
100
|
this.contractRepository = contractRepository;
|
|
101
|
+
this._readonlyAssetManager = new ServiceWorkerReadonlyAssetManager((msg) => this.sendMessage(msg), messageTag);
|
|
34
102
|
}
|
|
35
103
|
static async create(options) {
|
|
36
|
-
const
|
|
104
|
+
const walletRepository = options.storage?.walletRepository ??
|
|
105
|
+
new repositories_1.IndexedDBWalletRepository();
|
|
106
|
+
const contractRepository = options.storage?.contractRepository ??
|
|
107
|
+
new repositories_1.IndexedDBContractRepository();
|
|
108
|
+
const messageTag = options.walletUpdaterTag ?? wallet_message_handler_1.DEFAULT_MESSAGE_TAG;
|
|
37
109
|
// Create the wallet instance
|
|
38
|
-
const wallet = new ServiceWorkerReadonlyWallet(options.serviceWorker, options.identity,
|
|
110
|
+
const wallet = new ServiceWorkerReadonlyWallet(options.serviceWorker, options.identity, walletRepository, contractRepository, messageTag);
|
|
39
111
|
const publicKey = await options.identity
|
|
40
112
|
.compressedPublicKey()
|
|
41
113
|
.then(base_1.hex.encode);
|
|
42
|
-
|
|
43
|
-
const initMessage = {
|
|
44
|
-
type: "INIT_WALLET",
|
|
45
|
-
id: getRandomId(),
|
|
114
|
+
const initConfig = {
|
|
46
115
|
key: { publicKey },
|
|
47
116
|
arkServerUrl: options.arkServerUrl,
|
|
48
117
|
arkServerPublicKey: options.arkServerPublicKey,
|
|
118
|
+
delegatorUrl: options.delegatorUrl,
|
|
119
|
+
};
|
|
120
|
+
// Bootstrap the MessageBus in the service worker
|
|
121
|
+
await initializeMessageBus(options.serviceWorker, {
|
|
122
|
+
wallet: initConfig.key,
|
|
123
|
+
arkServer: {
|
|
124
|
+
url: initConfig.arkServerUrl,
|
|
125
|
+
publicKey: initConfig.arkServerPublicKey,
|
|
126
|
+
},
|
|
127
|
+
timeoutMs: options.messageBusTimeoutMs,
|
|
128
|
+
}, options.messageBusTimeoutMs);
|
|
129
|
+
// Initialize the wallet handler
|
|
130
|
+
const initMessage = {
|
|
131
|
+
tag: messageTag,
|
|
132
|
+
type: "INIT_WALLET",
|
|
133
|
+
id: (0, utils_2.getRandomId)(),
|
|
134
|
+
payload: initConfig,
|
|
49
135
|
};
|
|
50
|
-
// Initialize the service worker
|
|
51
136
|
await wallet.sendMessage(initMessage);
|
|
52
137
|
return wallet;
|
|
53
138
|
}
|
|
@@ -76,44 +161,41 @@ class ServiceWorkerReadonlyWallet {
|
|
|
76
161
|
// Register and setup the service worker
|
|
77
162
|
const serviceWorker = await (0, utils_1.setupServiceWorker)(options.serviceWorkerPath);
|
|
78
163
|
// Use the existing create method
|
|
79
|
-
return ServiceWorkerReadonlyWallet.create({
|
|
164
|
+
return await ServiceWorkerReadonlyWallet.create({
|
|
80
165
|
...options,
|
|
81
166
|
serviceWorker,
|
|
82
167
|
});
|
|
83
168
|
}
|
|
84
169
|
// send a message and wait for a response
|
|
85
|
-
async sendMessage(
|
|
170
|
+
async sendMessage(request) {
|
|
86
171
|
return new Promise((resolve, reject) => {
|
|
87
172
|
const messageHandler = (event) => {
|
|
88
173
|
const response = event.data;
|
|
89
|
-
if (
|
|
90
|
-
reject(new Error("Invalid response id"));
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
if (response.id !== message.id) {
|
|
174
|
+
if (request.id !== response.id) {
|
|
94
175
|
return;
|
|
95
176
|
}
|
|
96
177
|
navigator.serviceWorker.removeEventListener("message", messageHandler);
|
|
97
|
-
if (
|
|
98
|
-
reject(
|
|
178
|
+
if (response.error) {
|
|
179
|
+
reject(response.error);
|
|
99
180
|
}
|
|
100
181
|
else {
|
|
101
182
|
resolve(response);
|
|
102
183
|
}
|
|
103
184
|
};
|
|
104
185
|
navigator.serviceWorker.addEventListener("message", messageHandler);
|
|
105
|
-
this.serviceWorker.postMessage(
|
|
186
|
+
this.serviceWorker.postMessage(request);
|
|
106
187
|
});
|
|
107
188
|
}
|
|
108
189
|
async clear() {
|
|
109
190
|
const message = {
|
|
191
|
+
id: (0, utils_2.getRandomId)(),
|
|
192
|
+
tag: this.messageTag,
|
|
110
193
|
type: "CLEAR",
|
|
111
|
-
id: getRandomId(),
|
|
112
194
|
};
|
|
113
195
|
// Clear page-side storage to maintain parity with SW
|
|
114
196
|
try {
|
|
115
197
|
const address = await this.getAddress();
|
|
116
|
-
await this.walletRepository.
|
|
198
|
+
await this.walletRepository.deleteVtxos(address);
|
|
117
199
|
}
|
|
118
200
|
catch (_) {
|
|
119
201
|
console.warn("Failed to clear vtxos from wallet repository");
|
|
@@ -122,15 +204,13 @@ class ServiceWorkerReadonlyWallet {
|
|
|
122
204
|
}
|
|
123
205
|
async getAddress() {
|
|
124
206
|
const message = {
|
|
207
|
+
id: (0, utils_2.getRandomId)(),
|
|
208
|
+
tag: this.messageTag,
|
|
125
209
|
type: "GET_ADDRESS",
|
|
126
|
-
id: getRandomId(),
|
|
127
210
|
};
|
|
128
211
|
try {
|
|
129
212
|
const response = await this.sendMessage(message);
|
|
130
|
-
|
|
131
|
-
return response.address;
|
|
132
|
-
}
|
|
133
|
-
throw new UnexpectedResponseError(response);
|
|
213
|
+
return response.payload.address;
|
|
134
214
|
}
|
|
135
215
|
catch (error) {
|
|
136
216
|
throw new Error(`Failed to get address: ${error}`);
|
|
@@ -138,15 +218,13 @@ class ServiceWorkerReadonlyWallet {
|
|
|
138
218
|
}
|
|
139
219
|
async getBoardingAddress() {
|
|
140
220
|
const message = {
|
|
221
|
+
id: (0, utils_2.getRandomId)(),
|
|
222
|
+
tag: this.messageTag,
|
|
141
223
|
type: "GET_BOARDING_ADDRESS",
|
|
142
|
-
id: getRandomId(),
|
|
143
224
|
};
|
|
144
225
|
try {
|
|
145
226
|
const response = await this.sendMessage(message);
|
|
146
|
-
|
|
147
|
-
return response.address;
|
|
148
|
-
}
|
|
149
|
-
throw new UnexpectedResponseError(response);
|
|
227
|
+
return response.payload.address;
|
|
150
228
|
}
|
|
151
229
|
catch (error) {
|
|
152
230
|
throw new Error(`Failed to get boarding address: ${error}`);
|
|
@@ -154,15 +232,13 @@ class ServiceWorkerReadonlyWallet {
|
|
|
154
232
|
}
|
|
155
233
|
async getBalance() {
|
|
156
234
|
const message = {
|
|
235
|
+
id: (0, utils_2.getRandomId)(),
|
|
236
|
+
tag: this.messageTag,
|
|
157
237
|
type: "GET_BALANCE",
|
|
158
|
-
id: getRandomId(),
|
|
159
238
|
};
|
|
160
239
|
try {
|
|
161
240
|
const response = await this.sendMessage(message);
|
|
162
|
-
|
|
163
|
-
return response.balance;
|
|
164
|
-
}
|
|
165
|
-
throw new UnexpectedResponseError(response);
|
|
241
|
+
return response.payload;
|
|
166
242
|
}
|
|
167
243
|
catch (error) {
|
|
168
244
|
throw new Error(`Failed to get balance: ${error}`);
|
|
@@ -170,15 +246,13 @@ class ServiceWorkerReadonlyWallet {
|
|
|
170
246
|
}
|
|
171
247
|
async getBoardingUtxos() {
|
|
172
248
|
const message = {
|
|
249
|
+
id: (0, utils_2.getRandomId)(),
|
|
250
|
+
tag: this.messageTag,
|
|
173
251
|
type: "GET_BOARDING_UTXOS",
|
|
174
|
-
id: getRandomId(),
|
|
175
252
|
};
|
|
176
253
|
try {
|
|
177
254
|
const response = await this.sendMessage(message);
|
|
178
|
-
|
|
179
|
-
return response.boardingUtxos;
|
|
180
|
-
}
|
|
181
|
-
throw new UnexpectedResponseError(response);
|
|
255
|
+
return response.payload.utxos;
|
|
182
256
|
}
|
|
183
257
|
catch (error) {
|
|
184
258
|
throw new Error(`Failed to get boarding UTXOs: ${error}`);
|
|
@@ -186,26 +260,28 @@ class ServiceWorkerReadonlyWallet {
|
|
|
186
260
|
}
|
|
187
261
|
async getStatus() {
|
|
188
262
|
const message = {
|
|
263
|
+
id: (0, utils_2.getRandomId)(),
|
|
264
|
+
tag: this.messageTag,
|
|
189
265
|
type: "GET_STATUS",
|
|
190
|
-
id: getRandomId(),
|
|
191
266
|
};
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
return response.
|
|
267
|
+
try {
|
|
268
|
+
const response = await this.sendMessage(message);
|
|
269
|
+
return response.payload;
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
272
|
+
throw new Error(`Failed to get status: ${error}`);
|
|
195
273
|
}
|
|
196
|
-
throw new UnexpectedResponseError(response);
|
|
197
274
|
}
|
|
198
275
|
async getTransactionHistory() {
|
|
199
276
|
const message = {
|
|
277
|
+
id: (0, utils_2.getRandomId)(),
|
|
278
|
+
tag: this.messageTag,
|
|
200
279
|
type: "GET_TRANSACTION_HISTORY",
|
|
201
|
-
id: getRandomId(),
|
|
202
280
|
};
|
|
203
281
|
try {
|
|
204
282
|
const response = await this.sendMessage(message);
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
}
|
|
208
|
-
throw new UnexpectedResponseError(response);
|
|
283
|
+
return response.payload
|
|
284
|
+
.transactions;
|
|
209
285
|
}
|
|
210
286
|
catch (error) {
|
|
211
287
|
throw new Error(`Failed to get transaction history: ${error}`);
|
|
@@ -213,16 +289,14 @@ class ServiceWorkerReadonlyWallet {
|
|
|
213
289
|
}
|
|
214
290
|
async getVtxos(filter) {
|
|
215
291
|
const message = {
|
|
292
|
+
id: (0, utils_2.getRandomId)(),
|
|
293
|
+
tag: this.messageTag,
|
|
216
294
|
type: "GET_VTXOS",
|
|
217
|
-
|
|
218
|
-
filter,
|
|
295
|
+
payload: { filter },
|
|
219
296
|
};
|
|
220
297
|
try {
|
|
221
298
|
const response = await this.sendMessage(message);
|
|
222
|
-
|
|
223
|
-
return response.vtxos;
|
|
224
|
-
}
|
|
225
|
-
throw new UnexpectedResponseError(response);
|
|
299
|
+
return response.payload.vtxos;
|
|
226
300
|
}
|
|
227
301
|
catch (error) {
|
|
228
302
|
throw new Error(`Failed to get vtxos: ${error}`);
|
|
@@ -230,27 +304,210 @@ class ServiceWorkerReadonlyWallet {
|
|
|
230
304
|
}
|
|
231
305
|
async reload() {
|
|
232
306
|
const message = {
|
|
307
|
+
id: (0, utils_2.getRandomId)(),
|
|
308
|
+
tag: this.messageTag,
|
|
233
309
|
type: "RELOAD_WALLET",
|
|
234
|
-
id: getRandomId(),
|
|
235
310
|
};
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
return response.
|
|
311
|
+
try {
|
|
312
|
+
const response = await this.sendMessage(message);
|
|
313
|
+
return response.payload.reloaded;
|
|
314
|
+
}
|
|
315
|
+
catch (error) {
|
|
316
|
+
throw new Error(`Failed to reload wallet: ${error}`);
|
|
239
317
|
}
|
|
240
|
-
|
|
318
|
+
}
|
|
319
|
+
async getContractManager() {
|
|
320
|
+
const wallet = this;
|
|
321
|
+
const sendContractMessage = async (message) => {
|
|
322
|
+
return wallet.sendMessage(message);
|
|
323
|
+
};
|
|
324
|
+
const messageTag = this.messageTag;
|
|
325
|
+
const manager = {
|
|
326
|
+
async createContract(params) {
|
|
327
|
+
const message = {
|
|
328
|
+
type: "CREATE_CONTRACT",
|
|
329
|
+
id: (0, utils_2.getRandomId)(),
|
|
330
|
+
tag: messageTag,
|
|
331
|
+
payload: params,
|
|
332
|
+
};
|
|
333
|
+
try {
|
|
334
|
+
const response = await sendContractMessage(message);
|
|
335
|
+
return response.payload
|
|
336
|
+
.contract;
|
|
337
|
+
}
|
|
338
|
+
catch (e) {
|
|
339
|
+
throw new Error("Failed to create contract");
|
|
340
|
+
}
|
|
341
|
+
},
|
|
342
|
+
async getContracts(filter) {
|
|
343
|
+
const message = {
|
|
344
|
+
type: "GET_CONTRACTS",
|
|
345
|
+
id: (0, utils_2.getRandomId)(),
|
|
346
|
+
tag: messageTag,
|
|
347
|
+
payload: { filter },
|
|
348
|
+
};
|
|
349
|
+
try {
|
|
350
|
+
const response = await sendContractMessage(message);
|
|
351
|
+
return response.payload.contracts;
|
|
352
|
+
}
|
|
353
|
+
catch (e) {
|
|
354
|
+
throw new Error("Failed to get contracts");
|
|
355
|
+
}
|
|
356
|
+
},
|
|
357
|
+
async getContractsWithVtxos(filter) {
|
|
358
|
+
const message = {
|
|
359
|
+
type: "GET_CONTRACTS_WITH_VTXOS",
|
|
360
|
+
id: (0, utils_2.getRandomId)(),
|
|
361
|
+
tag: messageTag,
|
|
362
|
+
payload: { filter },
|
|
363
|
+
};
|
|
364
|
+
try {
|
|
365
|
+
const response = await sendContractMessage(message);
|
|
366
|
+
return response.payload
|
|
367
|
+
.contracts;
|
|
368
|
+
}
|
|
369
|
+
catch (e) {
|
|
370
|
+
throw new Error("Failed to get contracts with vtxos");
|
|
371
|
+
}
|
|
372
|
+
},
|
|
373
|
+
async updateContract(script, updates) {
|
|
374
|
+
const message = {
|
|
375
|
+
type: "UPDATE_CONTRACT",
|
|
376
|
+
id: (0, utils_2.getRandomId)(),
|
|
377
|
+
tag: messageTag,
|
|
378
|
+
payload: { script, updates },
|
|
379
|
+
};
|
|
380
|
+
try {
|
|
381
|
+
const response = await sendContractMessage(message);
|
|
382
|
+
return response.payload
|
|
383
|
+
.contract;
|
|
384
|
+
}
|
|
385
|
+
catch (e) {
|
|
386
|
+
throw new Error("Failed to update contract");
|
|
387
|
+
}
|
|
388
|
+
},
|
|
389
|
+
async setContractState(script, state) {
|
|
390
|
+
const message = {
|
|
391
|
+
type: "UPDATE_CONTRACT",
|
|
392
|
+
id: (0, utils_2.getRandomId)(),
|
|
393
|
+
tag: messageTag,
|
|
394
|
+
payload: { script, updates: { state } },
|
|
395
|
+
};
|
|
396
|
+
try {
|
|
397
|
+
await sendContractMessage(message);
|
|
398
|
+
return;
|
|
399
|
+
}
|
|
400
|
+
catch (e) {
|
|
401
|
+
throw new Error("Failed to update contract state");
|
|
402
|
+
}
|
|
403
|
+
},
|
|
404
|
+
async deleteContract(script) {
|
|
405
|
+
const message = {
|
|
406
|
+
type: "DELETE_CONTRACT",
|
|
407
|
+
id: (0, utils_2.getRandomId)(),
|
|
408
|
+
tag: messageTag,
|
|
409
|
+
payload: { script },
|
|
410
|
+
};
|
|
411
|
+
try {
|
|
412
|
+
await sendContractMessage(message);
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
catch (e) {
|
|
416
|
+
throw new Error("Failed to delete contract");
|
|
417
|
+
}
|
|
418
|
+
},
|
|
419
|
+
async getSpendablePaths(options) {
|
|
420
|
+
const message = {
|
|
421
|
+
type: "GET_SPENDABLE_PATHS",
|
|
422
|
+
id: (0, utils_2.getRandomId)(),
|
|
423
|
+
tag: messageTag,
|
|
424
|
+
payload: { options },
|
|
425
|
+
};
|
|
426
|
+
try {
|
|
427
|
+
const response = await sendContractMessage(message);
|
|
428
|
+
return response.payload
|
|
429
|
+
.paths;
|
|
430
|
+
}
|
|
431
|
+
catch (e) {
|
|
432
|
+
throw new Error("Failed to get spendable paths");
|
|
433
|
+
}
|
|
434
|
+
},
|
|
435
|
+
async getAllSpendingPaths(options) {
|
|
436
|
+
const message = {
|
|
437
|
+
type: "GET_ALL_SPENDING_PATHS",
|
|
438
|
+
id: (0, utils_2.getRandomId)(),
|
|
439
|
+
tag: messageTag,
|
|
440
|
+
payload: { options },
|
|
441
|
+
};
|
|
442
|
+
try {
|
|
443
|
+
const response = await sendContractMessage(message);
|
|
444
|
+
return response.payload
|
|
445
|
+
.paths;
|
|
446
|
+
}
|
|
447
|
+
catch (e) {
|
|
448
|
+
throw new Error("Failed to get all spending paths");
|
|
449
|
+
}
|
|
450
|
+
},
|
|
451
|
+
onContractEvent(callback) {
|
|
452
|
+
const messageHandler = (event) => {
|
|
453
|
+
const response = event.data;
|
|
454
|
+
if (response.type !== "CONTRACT_EVENT") {
|
|
455
|
+
return;
|
|
456
|
+
}
|
|
457
|
+
if (response.tag !== messageTag) {
|
|
458
|
+
return;
|
|
459
|
+
}
|
|
460
|
+
callback(response.payload.event);
|
|
461
|
+
};
|
|
462
|
+
navigator.serviceWorker.addEventListener("message", messageHandler);
|
|
463
|
+
return () => {
|
|
464
|
+
navigator.serviceWorker.removeEventListener("message", messageHandler);
|
|
465
|
+
};
|
|
466
|
+
},
|
|
467
|
+
async isWatching() {
|
|
468
|
+
const message = {
|
|
469
|
+
type: "IS_CONTRACT_MANAGER_WATCHING",
|
|
470
|
+
id: (0, utils_2.getRandomId)(),
|
|
471
|
+
tag: messageTag,
|
|
472
|
+
};
|
|
473
|
+
try {
|
|
474
|
+
const response = await sendContractMessage(message);
|
|
475
|
+
return response
|
|
476
|
+
.payload.isWatching;
|
|
477
|
+
}
|
|
478
|
+
catch (e) {
|
|
479
|
+
throw new Error("Failed to check if contract manager is watching");
|
|
480
|
+
}
|
|
481
|
+
},
|
|
482
|
+
dispose() {
|
|
483
|
+
return;
|
|
484
|
+
},
|
|
485
|
+
[Symbol.dispose]() {
|
|
486
|
+
// no-op
|
|
487
|
+
return;
|
|
488
|
+
},
|
|
489
|
+
};
|
|
490
|
+
return manager;
|
|
241
491
|
}
|
|
242
492
|
}
|
|
243
493
|
exports.ServiceWorkerReadonlyWallet = ServiceWorkerReadonlyWallet;
|
|
244
494
|
class ServiceWorkerWallet extends ServiceWorkerReadonlyWallet {
|
|
245
|
-
constructor(serviceWorker, identity, walletRepository, contractRepository) {
|
|
246
|
-
super(serviceWorker, identity, walletRepository, contractRepository);
|
|
495
|
+
constructor(serviceWorker, identity, walletRepository, contractRepository, messageTag) {
|
|
496
|
+
super(serviceWorker, identity, walletRepository, contractRepository, messageTag);
|
|
247
497
|
this.serviceWorker = serviceWorker;
|
|
248
498
|
this.identity = identity;
|
|
249
499
|
this.walletRepository = walletRepository;
|
|
250
500
|
this.contractRepository = contractRepository;
|
|
501
|
+
this._assetManager = new ServiceWorkerAssetManager((msg) => this.sendMessage(msg), messageTag);
|
|
502
|
+
}
|
|
503
|
+
get assetManager() {
|
|
504
|
+
return this._assetManager;
|
|
251
505
|
}
|
|
252
506
|
static async create(options) {
|
|
253
|
-
const
|
|
507
|
+
const walletRepository = options.storage?.walletRepository ??
|
|
508
|
+
new repositories_1.IndexedDBWalletRepository();
|
|
509
|
+
const contractRepository = options.storage?.contractRepository ??
|
|
510
|
+
new repositories_1.IndexedDBContractRepository();
|
|
254
511
|
// Extract identity and check if it can expose private key
|
|
255
512
|
const identity = isPrivateKeyIdentity(options.identity)
|
|
256
513
|
? options.identity
|
|
@@ -260,15 +517,29 @@ class ServiceWorkerWallet extends ServiceWorkerReadonlyWallet {
|
|
|
260
517
|
}
|
|
261
518
|
// Extract private key for service worker initialization
|
|
262
519
|
const privateKey = identity.toHex();
|
|
520
|
+
const messageTag = options.walletUpdaterTag ?? wallet_message_handler_1.DEFAULT_MESSAGE_TAG;
|
|
263
521
|
// Create the wallet instance
|
|
264
|
-
const wallet = new ServiceWorkerWallet(options.serviceWorker, identity,
|
|
265
|
-
|
|
266
|
-
const initMessage = {
|
|
267
|
-
type: "INIT_WALLET",
|
|
268
|
-
id: getRandomId(),
|
|
522
|
+
const wallet = new ServiceWorkerWallet(options.serviceWorker, identity, walletRepository, contractRepository, messageTag);
|
|
523
|
+
const initConfig = {
|
|
269
524
|
key: { privateKey },
|
|
270
525
|
arkServerUrl: options.arkServerUrl,
|
|
271
526
|
arkServerPublicKey: options.arkServerPublicKey,
|
|
527
|
+
delegatorUrl: options.delegatorUrl,
|
|
528
|
+
};
|
|
529
|
+
await initializeMessageBus(options.serviceWorker, {
|
|
530
|
+
wallet: initConfig.key,
|
|
531
|
+
arkServer: {
|
|
532
|
+
url: initConfig.arkServerUrl,
|
|
533
|
+
publicKey: initConfig.arkServerPublicKey,
|
|
534
|
+
},
|
|
535
|
+
timeoutMs: options.messageBusTimeoutMs,
|
|
536
|
+
}, options.messageBusTimeoutMs);
|
|
537
|
+
// Initialize the service worker with the config
|
|
538
|
+
const initMessage = {
|
|
539
|
+
tag: messageTag,
|
|
540
|
+
type: "INIT_WALLET",
|
|
541
|
+
id: (0, utils_2.getRandomId)(),
|
|
542
|
+
payload: initConfig,
|
|
272
543
|
};
|
|
273
544
|
// Initialize the service worker
|
|
274
545
|
await wallet.sendMessage(initMessage);
|
|
@@ -306,16 +577,14 @@ class ServiceWorkerWallet extends ServiceWorkerReadonlyWallet {
|
|
|
306
577
|
}
|
|
307
578
|
async sendBitcoin(params) {
|
|
308
579
|
const message = {
|
|
580
|
+
id: (0, utils_2.getRandomId)(),
|
|
581
|
+
tag: this.messageTag,
|
|
309
582
|
type: "SEND_BITCOIN",
|
|
310
|
-
params,
|
|
311
|
-
id: getRandomId(),
|
|
583
|
+
payload: params,
|
|
312
584
|
};
|
|
313
585
|
try {
|
|
314
586
|
const response = await this.sendMessage(message);
|
|
315
|
-
|
|
316
|
-
return response.txid;
|
|
317
|
-
}
|
|
318
|
-
throw new UnexpectedResponseError(response);
|
|
587
|
+
return response.payload.txid;
|
|
319
588
|
}
|
|
320
589
|
catch (error) {
|
|
321
590
|
throw new Error(`Failed to send bitcoin: ${error}`);
|
|
@@ -323,9 +592,10 @@ class ServiceWorkerWallet extends ServiceWorkerReadonlyWallet {
|
|
|
323
592
|
}
|
|
324
593
|
async settle(params, callback) {
|
|
325
594
|
const message = {
|
|
595
|
+
id: (0, utils_2.getRandomId)(),
|
|
596
|
+
tag: this.messageTag,
|
|
326
597
|
type: "SETTLE",
|
|
327
|
-
params,
|
|
328
|
-
id: getRandomId(),
|
|
598
|
+
payload: { params },
|
|
329
599
|
};
|
|
330
600
|
try {
|
|
331
601
|
return new Promise((resolve, reject) => {
|
|
@@ -334,23 +604,23 @@ class ServiceWorkerWallet extends ServiceWorkerReadonlyWallet {
|
|
|
334
604
|
if (response.id !== message.id) {
|
|
335
605
|
return;
|
|
336
606
|
}
|
|
337
|
-
if (
|
|
607
|
+
if (response.error) {
|
|
338
608
|
navigator.serviceWorker.removeEventListener("message", messageHandler);
|
|
339
|
-
reject(
|
|
609
|
+
reject(response.error);
|
|
340
610
|
return;
|
|
341
611
|
}
|
|
342
612
|
switch (response.type) {
|
|
343
613
|
case "SETTLE_EVENT":
|
|
344
614
|
if (callback) {
|
|
345
|
-
callback(response.
|
|
615
|
+
callback(response.payload);
|
|
346
616
|
}
|
|
347
617
|
break;
|
|
348
618
|
case "SETTLE_SUCCESS":
|
|
349
619
|
navigator.serviceWorker.removeEventListener("message", messageHandler);
|
|
350
|
-
resolve(response.txid);
|
|
620
|
+
resolve(response.payload.txid);
|
|
351
621
|
break;
|
|
352
622
|
default:
|
|
353
|
-
|
|
623
|
+
console.error(`Unexpected response type for SETTLE request: ${response.type}`);
|
|
354
624
|
}
|
|
355
625
|
};
|
|
356
626
|
navigator.serviceWorker.addEventListener("message", messageHandler);
|
|
@@ -361,9 +631,20 @@ class ServiceWorkerWallet extends ServiceWorkerReadonlyWallet {
|
|
|
361
631
|
throw new Error(`Settlement failed: ${error}`);
|
|
362
632
|
}
|
|
363
633
|
}
|
|
634
|
+
async send(...recipients) {
|
|
635
|
+
const message = {
|
|
636
|
+
tag: this.messageTag,
|
|
637
|
+
type: "SEND",
|
|
638
|
+
id: (0, utils_2.getRandomId)(),
|
|
639
|
+
payload: { recipients },
|
|
640
|
+
};
|
|
641
|
+
try {
|
|
642
|
+
const response = await this.sendMessage(message);
|
|
643
|
+
return response.payload.txid;
|
|
644
|
+
}
|
|
645
|
+
catch (error) {
|
|
646
|
+
throw new Error(`Send failed: ${error}`);
|
|
647
|
+
}
|
|
648
|
+
}
|
|
364
649
|
}
|
|
365
650
|
exports.ServiceWorkerWallet = ServiceWorkerWallet;
|
|
366
|
-
function getRandomId() {
|
|
367
|
-
const randomValue = crypto.getRandomValues(new Uint8Array(16));
|
|
368
|
-
return base_1.hex.encode(randomValue);
|
|
369
|
-
}
|