@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.
- package/README.md +586 -54
- 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/bip322/index.js +270 -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/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 +72 -14
- package/dist/cjs/intent/index.js +47 -11
- 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/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 +19 -0
- package/dist/cjs/repositories/indexedDB/manager.js +97 -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/realm/contractRepository.js +120 -0
- package/dist/cjs/repositories/realm/index.js +9 -0
- package/dist/cjs/repositories/realm/schemas.js +108 -0
- package/dist/cjs/repositories/realm/types.js +7 -0
- package/dist/cjs/repositories/realm/walletRepository.js +273 -0
- package/dist/cjs/repositories/serialization.js +49 -0
- package/dist/cjs/repositories/sqlite/contractRepository.js +139 -0
- package/dist/cjs/repositories/sqlite/index.js +7 -0
- package/dist/cjs/repositories/sqlite/types.js +2 -0
- package/dist/cjs/repositories/sqlite/walletRepository.js +328 -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/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/serviceWorker/wallet-message-handler.js +568 -0
- package/dist/cjs/wallet/serviceWorker/wallet.js +383 -102
- package/dist/cjs/wallet/utils.js +58 -0
- package/dist/cjs/wallet/validation.js +151 -0
- package/dist/cjs/wallet/vtxo-manager.js +8 -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/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/bip322/index.js +267 -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/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 +28 -15
- package/dist/esm/intent/index.js +44 -9
- 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/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 +4 -0
- package/dist/esm/repositories/indexedDB/manager.js +92 -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/realm/contractRepository.js +116 -0
- package/dist/esm/repositories/realm/index.js +3 -0
- package/dist/esm/repositories/realm/schemas.js +105 -0
- package/dist/esm/repositories/realm/types.js +6 -0
- package/dist/esm/repositories/realm/walletRepository.js +269 -0
- package/dist/esm/repositories/serialization.js +40 -0
- package/dist/esm/repositories/sqlite/contractRepository.js +135 -0
- package/dist/esm/repositories/sqlite/index.js +2 -0
- package/dist/esm/repositories/sqlite/types.js +1 -0
- package/dist/esm/repositories/sqlite/walletRepository.js +324 -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/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/serviceWorker/wallet-message-handler.js +564 -0
- package/dist/esm/wallet/serviceWorker/wallet.js +382 -101
- package/dist/esm/wallet/utils.js +54 -0
- package/dist/esm/wallet/validation.js +139 -0
- package/dist/esm/wallet/vtxo-manager.js +8 -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/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/bip322/index.d.ts +55 -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/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 +22 -12
- package/dist/types/intent/index.d.ts +15 -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 +4 -0
- package/dist/types/repositories/indexedDB/manager.d.ts +22 -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/realm/contractRepository.d.ts +24 -0
- package/dist/types/repositories/realm/index.d.ts +4 -0
- package/dist/types/repositories/realm/schemas.d.ts +208 -0
- package/dist/types/repositories/realm/types.d.ts +16 -0
- package/dist/types/repositories/realm/walletRepository.d.ts +31 -0
- package/dist/types/repositories/serialization.d.ts +40 -0
- package/dist/types/repositories/sqlite/contractRepository.d.ts +33 -0
- package/dist/types/repositories/sqlite/index.d.ts +3 -0
- package/dist/types/repositories/sqlite/types.d.ts +18 -0
- package/dist/types/repositories/sqlite/walletRepository.d.ts +40 -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/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/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 +12 -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 +69 -11
- 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
|
@@ -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.
|
|
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("./
|
|
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; } });
|
package/dist/cjs/intent/index.js
CHANGED
|
@@ -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,
|
|
48
|
+
function create(message, ins, outputs = []) {
|
|
45
49
|
if (typeof message !== "string") {
|
|
46
50
|
message = encodeMessage(message);
|
|
47
51
|
}
|
|
48
|
-
if (
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
134
|
-
|
|
135
|
-
|
|
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(
|
|
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
|
/**
|