@arkade-os/sdk 0.4.69 → 0.5.0-rc.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 +35 -5
- package/dist/adapters/expo.cjs +5 -5
- package/dist/adapters/expo.d.cts +2 -2
- package/dist/adapters/expo.d.ts +2 -2
- package/dist/adapters/expo.js +3 -3
- package/dist/adapters/indexedDB.cjs +5 -5
- package/dist/adapters/indexedDB.js +4 -4
- package/dist/{asyncStorageTaskQueue-BgUJN-3X.d.ts → asyncStorageTaskQueue-DAs_n1xr.d.ts} +2 -2
- package/dist/{asyncStorageTaskQueue-Cstx6hS7.d.cts → asyncStorageTaskQueue-DqGRG66E.d.cts} +2 -2
- package/dist/{chunk-L5SCQYHF.js → chunk-6COJWPBO.js} +19 -9
- package/dist/chunk-6COJWPBO.js.map +1 -0
- package/dist/{chunk-XQPN5YP2.cjs → chunk-KB7OP3FG.cjs} +17 -17
- package/dist/{chunk-XQPN5YP2.cjs.map → chunk-KB7OP3FG.cjs.map} +1 -1
- package/dist/{chunk-XLWDX7QZ.js → chunk-LPK4UBNJ.js} +4 -4
- package/dist/{chunk-XLWDX7QZ.js.map → chunk-LPK4UBNJ.js.map} +1 -1
- package/dist/{chunk-MNMPGEK2.js → chunk-MEJSBJVH.js} +4 -4
- package/dist/{chunk-MNMPGEK2.js.map → chunk-MEJSBJVH.js.map} +1 -1
- package/dist/{chunk-HQ4DMGA4.cjs → chunk-MXY23OPP.cjs} +10 -10
- package/dist/{chunk-HQ4DMGA4.cjs.map → chunk-MXY23OPP.cjs.map} +1 -1
- package/dist/{chunk-WIFL5QYZ.cjs → chunk-Q5WQ4Y2I.cjs} +53 -54
- package/dist/chunk-Q5WQ4Y2I.cjs.map +1 -0
- package/dist/{chunk-5MLC2HU3.cjs → chunk-RZ2NGS6A.cjs} +19 -7
- package/dist/chunk-RZ2NGS6A.cjs.map +1 -0
- package/dist/{chunk-YG7T6LI3.js → chunk-SG4XYCS7.js} +3 -3
- package/dist/{chunk-YG7T6LI3.js.map → chunk-SG4XYCS7.js.map} +1 -1
- package/dist/{chunk-TA7XLEP2.js → chunk-VTE3NYVD.js} +298 -41
- package/dist/chunk-VTE3NYVD.js.map +1 -0
- package/dist/{chunk-GVHUHTRH.cjs → chunk-WQIWUTYS.cjs} +17 -17
- package/dist/{chunk-GVHUHTRH.cjs.map → chunk-WQIWUTYS.cjs.map} +1 -1
- package/dist/{chunk-EBYCTLET.cjs → chunk-YEUXBECG.cjs} +727 -469
- package/dist/chunk-YEUXBECG.cjs.map +1 -0
- package/dist/{chunk-2PPL3O7Z.js → chunk-ZPSUBAWQ.js} +7 -8
- package/dist/chunk-ZPSUBAWQ.js.map +1 -0
- package/dist/contracts/handlers/index.cjs +9 -9
- package/dist/contracts/handlers/index.d.cts +3 -3
- package/dist/contracts/handlers/index.d.ts +3 -3
- package/dist/contracts/handlers/index.js +2 -2
- package/dist/{delegate-BPdzTbwN.d.ts → delegate-B9Bmrns7.d.ts} +1 -1
- package/dist/{delegate-DrwIar11.d.cts → delegate-CZzIduW4.d.cts} +1 -1
- package/dist/{hdWalletCapable-D4WH35z0.d.cts → hdWalletCapable-BIl3yLVM.d.cts} +103 -28
- package/dist/{hdWalletCapable-DyxCiNVE.d.ts → hdWalletCapable-Cr5nGpK5.d.ts} +103 -28
- package/dist/{index-TZJvbIaA.d.ts → index-Ci5MmNnK.d.cts} +7 -7
- package/dist/{index-BqhpAqqj.d.cts → index-DQ1Hb2w_.d.ts} +7 -7
- package/dist/{index-dWRqYSdS.d.ts → index-DnNIOqHS.d.cts} +168 -19
- package/dist/{index-dWRqYSdS.d.cts → index-DnNIOqHS.d.ts} +168 -19
- package/dist/index.cjs +307 -291
- package/dist/index.d.cts +121 -29
- package/dist/index.d.ts +121 -29
- package/dist/index.js +4 -4
- package/dist/repositories/realm/index.cjs +19 -19
- package/dist/repositories/realm/index.d.cts +2 -2
- package/dist/repositories/realm/index.d.ts +2 -2
- package/dist/repositories/realm/index.js +5 -5
- package/dist/repositories/sqlite/index.cjs +18 -18
- package/dist/repositories/sqlite/index.d.cts +2 -2
- package/dist/repositories/sqlite/index.d.ts +2 -2
- package/dist/repositories/sqlite/index.js +5 -5
- package/dist/{taskRunner-CzYKyJ9c.d.cts → taskRunner-BDb5Ee2J.d.cts} +2 -2
- package/dist/{taskRunner-D2fnbqYw.d.ts → taskRunner-F7wNJcF3.d.ts} +2 -2
- package/dist/wallet/expo/background.cjs +14 -14
- package/dist/wallet/expo/background.d.cts +3 -3
- package/dist/wallet/expo/background.d.ts +3 -3
- package/dist/wallet/expo/background.js +6 -6
- package/dist/wallet/expo/index.cjs +23 -14
- package/dist/wallet/expo/index.cjs.map +1 -1
- package/dist/wallet/expo/index.d.cts +7 -4
- package/dist/wallet/expo/index.d.ts +7 -4
- package/dist/wallet/expo/index.js +14 -5
- package/dist/wallet/expo/index.js.map +1 -1
- package/dist/worker/expo/index.cjs +9 -9
- package/dist/worker/expo/index.d.cts +4 -4
- package/dist/worker/expo/index.d.ts +4 -4
- package/dist/worker/expo/index.js +5 -5
- package/package.json +3 -2
- package/dist/chunk-2PPL3O7Z.js.map +0 -1
- package/dist/chunk-5MLC2HU3.cjs.map +0 -1
- package/dist/chunk-EBYCTLET.cjs.map +0 -1
- package/dist/chunk-L5SCQYHF.js.map +0 -1
- package/dist/chunk-TA7XLEP2.js.map +0 -1
- package/dist/chunk-WIFL5QYZ.cjs.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { AssetId, AssetGroup, AssetInput, AssetOutput, Metadata, Packet, BufferReader, BufferWriter, AssetRef, RestIndexerProvider } from './chunk-
|
|
2
|
-
import { witnessRefToBytes, validateProgram, toASM, stringifyArtifact, serializeArkadeContractParams, resolveAsm, parseArtifact, getOpcodeValue, getOpcodeName, fromASM, deserializeArkadeContractParams, computeArkadeScriptPublicKey, bytesToASM, asmToBytes, arkadeWitnessHash, arkadeScriptHash, SUPPORTED_PROGRAM_VERSION, OPCODE_VALUES, OPCODE_NAMES, bignum_exports, ArkadeScript, ArkadeProgramScript, ARKADE_OPS, ARKADE_OPCODE_VALUES, ARKADE_OPCODE_NAMES, ARKADE_OPCODES, ARKADE_OP, toXOnly, inputName, contractHandlers, isMainnetDescriptor, descriptorIsOurs, deriveDescriptorLeafPubKey, deriveDescriptorLeafCompressedPubKey, parseHDDescriptor, identityDescriptor, DefaultVtxo, speculativeReceiveMetadata, DelegateVtxo, WALLET_RECEIVE_SOURCE, BoardingContractHandler } from './chunk-
|
|
3
|
-
import { VtxoScript, Transaction, isRecoverable, CSVMultisigTapscript, DEFAULT_NETWORK, resolveEmulatorPubkey, hasTerminalSpend, getNormalizedVtxos, setArkPsbtField, PrevArkTxField, ConditionWitness, craftToSpendTx, ArkAddress,
|
|
1
|
+
import { AssetId, AssetGroup, AssetInput, AssetOutput, Metadata, Packet, BufferReader, BufferWriter, AssetRef, RestIndexerProvider } from './chunk-SG4XYCS7.js';
|
|
2
|
+
import { witnessRefToBytes, validateProgram, toASM, stringifyArtifact, serializeArkadeContractParams, resolveAsm, parseArtifact, getOpcodeValue, getOpcodeName, fromASM, deserializeArkadeContractParams, computeArkadeScriptPublicKey, bytesToASM, asmToBytes, arkadeWitnessHash, arkadeScriptHash, SUPPORTED_PROGRAM_VERSION, OPCODE_VALUES, OPCODE_NAMES, bignum_exports, ArkadeScript, ArkadeProgramScript, ARKADE_OPS, ARKADE_OPCODE_VALUES, ARKADE_OPCODE_NAMES, ARKADE_OPCODES, ARKADE_OP, toXOnly, inputName, contractHandlers, isMainnetDescriptor, descriptorIsOurs, deriveDescriptorLeafPubKey, deriveDescriptorLeafCompressedPubKey, parseHDDescriptor, identityDescriptor, DefaultVtxo, speculativeReceiveMetadata, DelegateVtxo, WALLET_RECEIVE_SOURCE, BoardingContractHandler } from './chunk-ZPSUBAWQ.js';
|
|
3
|
+
import { VtxoScript, Transaction, isVirtualCoin, isRecoverable, CSVMultisigTapscript, DEFAULT_NETWORK, resolveEmulatorPubkey, hasTerminalSpend, getNormalizedVtxos, setArkPsbtField, PrevArkTxField, ConditionWitness, craftToSpendTx, ArkAddress, ServerResponseMismatchError, getArkPsbtFields, CosignerPublicKey, OP_RETURN_EMPTY_PKSCRIPT, canSweepOnchain, sequenceToTimelock, decodeTapscript, scriptFromTapLeafScript, CLTVMultisigTapscript, VtxoTaprootTree, timelockToSequence, normalizeVtxo, assertAllowedSighashTypes, baseFetch, Intent, rateGate, DEFAULT_NETWORK_NAME, formatSighash, getSequence, toBatchExpiry, maybeArkError, isArkError, ArkErrorName, toOffchainInputFeeParams, canRecoverOnchain, getNetwork, MultisigTapscript, isEventSourceError, isEventSourceUnavailableError, isRetryableProviderError, getAllNormalizedVtxos, DEFAULT_PAGE_SIZE, DEFAULT_ARKADE_SERVER_URL, RestArkProvider, networkFromArkadeInfo, toVirtualStatus, ArkError, TapTreeCoder, resolveTimeHeight, canSpendOffchain, parseLegacyExpiry, isExpired, INFO_FETCH_TIMEOUT_MS, PrevoutTxField, ProviderUnavailableError, networks as networks$1, isPastExpiry, fetchVtxoCreatedAtByTxid } from './chunk-6COJWPBO.js';
|
|
4
4
|
import { __export } from './chunk-NSBPE2FW.js';
|
|
5
5
|
import { sha256 as sha256$1, equalBytes, hash160, sha256x2, concatBytes, randomPrivateKeyBytes, pubECDSA, pubSchnorr } from '@scure/btc-signer/utils.js';
|
|
6
6
|
import { SigHash, Script, OP, OutScript, Address, RawWitness, p2tr, p2wpkh, TaprootControlBlock, DEFAULT_SEQUENCE, Transaction as Transaction$2 } from '@scure/btc-signer';
|
|
@@ -3878,7 +3878,7 @@ function isValidArkAddress2(address) {
|
|
|
3878
3878
|
return false;
|
|
3879
3879
|
}
|
|
3880
3880
|
}
|
|
3881
|
-
function
|
|
3881
|
+
function assertRecipientArkadeAddress(encoded, address, context) {
|
|
3882
3882
|
if (address.hrp !== context.hrp) {
|
|
3883
3883
|
throw new Error(
|
|
3884
3884
|
`Invalid Arkade address ${encoded}: expected prefix "${context.hrp}", got "${address.hrp}"`
|
|
@@ -3921,7 +3921,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3921
3921
|
} catch (e) {
|
|
3922
3922
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
3923
3923
|
}
|
|
3924
|
-
|
|
3924
|
+
assertRecipientArkadeAddress(recipient.address, address, context);
|
|
3925
3925
|
const amount = recipient.amount || dustAmount;
|
|
3926
3926
|
if (amount <= 0) {
|
|
3927
3927
|
throw new Error("Amount must be positive");
|
|
@@ -4812,7 +4812,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4812
4812
|
}
|
|
4813
4813
|
/**
|
|
4814
4814
|
* Core migration routine shared by the manual API and the automatic poll
|
|
4815
|
-
* pass. Fetches a fresh {@link
|
|
4815
|
+
* pass. Fetches a fresh {@link ArkadeInfo}, applies a mid-session signer
|
|
4816
4816
|
* rotation when the wallet's own snapshot signer has been deprecated,
|
|
4817
4817
|
* selects spendable VTXOs under deprecated-signer contracts (cutoff-first),
|
|
4818
4818
|
* and settles them to the active-signer Ark address.
|
|
@@ -6595,12 +6595,12 @@ async function saveArkInfoSnapshot(repo, info, savedAt) {
|
|
|
6595
6595
|
}
|
|
6596
6596
|
}));
|
|
6597
6597
|
}
|
|
6598
|
-
async function resolveArkInfo(arkProvider, walletRepository) {
|
|
6598
|
+
async function resolveArkInfo(arkProvider, walletRepository, opts) {
|
|
6599
6599
|
let info;
|
|
6600
6600
|
try {
|
|
6601
6601
|
info = await arkProvider.getInfo();
|
|
6602
6602
|
} catch (err) {
|
|
6603
|
-
if (!isRetryableProviderError(err)) throw err;
|
|
6603
|
+
if (opts?.requireLive || !isRetryableProviderError(err)) throw err;
|
|
6604
6604
|
const snapshot = await loadArkInfoSnapshot(walletRepository);
|
|
6605
6605
|
if (!snapshot) {
|
|
6606
6606
|
throw new ProviderUnavailableError(
|
|
@@ -12367,10 +12367,11 @@ var ArkadeCashCreateError = class extends Error {
|
|
|
12367
12367
|
cause;
|
|
12368
12368
|
};
|
|
12369
12369
|
var ReadonlyWallet = class _ReadonlyWallet {
|
|
12370
|
-
constructor(identity, network, onchainProvider, indexerProvider, arkServerPublicKey, offchainTapscript, boardingTapscript, dustAmount, walletRepository, contractRepository, delegateProvider, watcherConfig, walletContractTimelocks) {
|
|
12370
|
+
constructor(identity, network, onchainProvider, arkProvider, indexerProvider, arkServerPublicKey, offchainTapscript, boardingTapscript, dustAmount, walletRepository, contractRepository, delegateProvider, watcherConfig, walletContractTimelocks) {
|
|
12371
12371
|
this.identity = identity;
|
|
12372
12372
|
this.network = network;
|
|
12373
12373
|
this.onchainProvider = onchainProvider;
|
|
12374
|
+
this.arkProvider = arkProvider;
|
|
12374
12375
|
this.indexerProvider = indexerProvider;
|
|
12375
12376
|
this.dustAmount = dustAmount;
|
|
12376
12377
|
this.walletRepository = walletRepository;
|
|
@@ -12396,6 +12397,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12396
12397
|
identity;
|
|
12397
12398
|
network;
|
|
12398
12399
|
onchainProvider;
|
|
12400
|
+
arkProvider;
|
|
12399
12401
|
indexerProvider;
|
|
12400
12402
|
dustAmount;
|
|
12401
12403
|
walletRepository;
|
|
@@ -12463,14 +12465,19 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12463
12465
|
*/
|
|
12464
12466
|
_arkServerPublicKey;
|
|
12465
12467
|
/**
|
|
12466
|
-
* Whether
|
|
12467
|
-
*
|
|
12468
|
-
* (`"cache"`).
|
|
12468
|
+
* Whether the LATEST server-info resolution answered live (`"live"`) or
|
|
12469
|
+
* from the cached snapshot because the operator was unreachable
|
|
12470
|
+
* (`"cache"`). Seeded at construction and updated by every
|
|
12471
|
+
* {@link getArkadeInfo} read, so a wallet that booted offline and
|
|
12472
|
+
* recovered stops reporting degraded — and one that just fell back stops
|
|
12473
|
+
* claiming online. Freshness signal for
|
|
12474
|
+
* {@link getProviderConnectionState}.
|
|
12469
12475
|
*/
|
|
12470
12476
|
_serverInfoSource = "live";
|
|
12471
12477
|
/**
|
|
12472
|
-
* Epoch-ms of the last known live operator contact:
|
|
12473
|
-
*
|
|
12478
|
+
* Epoch-ms of the last known live operator contact: the most recent live
|
|
12479
|
+
* resolution (construction or a later {@link getArkadeInfo}), or the
|
|
12480
|
+
* cached snapshot's `savedAt` when the latest resolution fell back.
|
|
12474
12481
|
*/
|
|
12475
12482
|
_serverInfoLastOnlineAt;
|
|
12476
12483
|
/** @see {@link _serverInfoSource} */
|
|
@@ -12478,13 +12485,15 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12478
12485
|
return this._serverInfoSource;
|
|
12479
12486
|
}
|
|
12480
12487
|
/**
|
|
12481
|
-
* Composed provider-connection freshness: the
|
|
12482
|
-
* (
|
|
12483
|
-
* manager
|
|
12484
|
-
*
|
|
12485
|
-
*
|
|
12488
|
+
* Composed provider-connection freshness: the LATEST server-info
|
|
12489
|
+
* resolution (boot, or any later {@link getArkadeInfo} read) combined with
|
|
12490
|
+
* the contract-manager's indexer-sync health, if the manager has been
|
|
12491
|
+
* initialized. Reads no live provider state — it never forces a
|
|
12492
|
+
* `ContractManager` to construct — so it is safe for readonly callers
|
|
12493
|
+
* that only use address/balance APIs.
|
|
12486
12494
|
*
|
|
12487
|
-
* -
|
|
12495
|
+
* - Latest resolution fell back to the cached snapshot → degraded on
|
|
12496
|
+
* `arkade` (`cache`).
|
|
12488
12497
|
* - Otherwise, if the contract manager has degraded to repository data →
|
|
12489
12498
|
* degraded on `indexer` (`repository`).
|
|
12490
12499
|
* - Otherwise online.
|
|
@@ -12530,7 +12539,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12530
12539
|
}
|
|
12531
12540
|
/**
|
|
12532
12541
|
* x-only hex of the operator's deprecated signer keys (from
|
|
12533
|
-
* `
|
|
12542
|
+
* `ArkadeInfo.deprecatedSigners`), cached for the OFFLINE read/watch paths.
|
|
12534
12543
|
* The boarding watch/history surfaces ({@link getBoardingAddresses},
|
|
12535
12544
|
* {@link getBoardingTxs}) fan out over {current} ∪ this set so a deposit at
|
|
12536
12545
|
* a boarding address minted under a now-rotated operator signer keeps being
|
|
@@ -12605,6 +12614,64 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12605
12614
|
get arkServerPublicKey() {
|
|
12606
12615
|
return this._arkServerPublicKey;
|
|
12607
12616
|
}
|
|
12617
|
+
/**
|
|
12618
|
+
* Server info for the Arkade server this wallet is connected to, resolved
|
|
12619
|
+
* exactly as construction resolves it: live wins, a retryable failure
|
|
12620
|
+
* falls back to the snapshot persisted at boot, a terminal one propagates.
|
|
12621
|
+
*
|
|
12622
|
+
* Live rather than the pinned boot snapshot because the fields callers
|
|
12623
|
+
* come here for — `signerPubkey`, `checkpointTapscript`, `fees` — are the
|
|
12624
|
+
* ones a mid-session rotation moves, and a covenant built against a
|
|
12625
|
+
* superseded signer is unspendable.
|
|
12626
|
+
*
|
|
12627
|
+
* One rotation caveat: reading does NOT re-pin the wallet —
|
|
12628
|
+
* {@link arkServerPublicKey}, {@link dustAmount} and the tapscripts move
|
|
12629
|
+
* only through `handleServerInfoChanged`/`rotateServerSigner` — so inside
|
|
12630
|
+
* a rotation window this can report epoch N+1 while the wallet still
|
|
12631
|
+
* spends on N. The window closes on its own: a read that observes a moved
|
|
12632
|
+
* digest makes the provider emit `onServerInfoChanged`, which is what
|
|
12633
|
+
* drives that rotation. A caller about to bind the answer into a covenant
|
|
12634
|
+
* passes `{ requireLive: true }` and fails closed instead of receiving
|
|
12635
|
+
* the boot snapshot.
|
|
12636
|
+
*
|
|
12637
|
+
* @returns The Arkade server's info
|
|
12638
|
+
* @see ArkadeInfo
|
|
12639
|
+
*/
|
|
12640
|
+
async getArkadeInfo(opts) {
|
|
12641
|
+
const { info, source, lastOnlineAt } = await resolveArkInfo(
|
|
12642
|
+
this.arkProvider,
|
|
12643
|
+
this.walletRepository,
|
|
12644
|
+
opts
|
|
12645
|
+
);
|
|
12646
|
+
this._serverInfoSource = source;
|
|
12647
|
+
if (source === "live") {
|
|
12648
|
+
this._serverInfoLastOnlineAt = Date.now();
|
|
12649
|
+
} else if (lastOnlineAt !== void 0) {
|
|
12650
|
+
this._serverInfoLastOnlineAt = lastOnlineAt;
|
|
12651
|
+
}
|
|
12652
|
+
return info;
|
|
12653
|
+
}
|
|
12654
|
+
/**
|
|
12655
|
+
* Chain reads against this wallet's server for scripts it does not own.
|
|
12656
|
+
*
|
|
12657
|
+
* Binds the wallet's own `indexerProvider` — which may be an Expo or
|
|
12658
|
+
* injected one that a caller's hand-built `RestIndexerProvider` would
|
|
12659
|
+
* silently bypass. `getVtxos` goes through
|
|
12660
|
+
* {@link getNormalizedVtxos}, which is what makes every VTXO leaving the
|
|
12661
|
+
* seam carry its canonical facts.
|
|
12662
|
+
*
|
|
12663
|
+
* A bound object rather than the provider itself, so an `IReadonlyWallet`
|
|
12664
|
+
* holder gets `getVtxos`/`getVirtualTxs` and nothing else at runtime.
|
|
12665
|
+
* (`indexerProvider` is still public on the concrete classes, unlike
|
|
12666
|
+
* `arkProvider`, so this narrows the interface rather than the field.)
|
|
12667
|
+
*/
|
|
12668
|
+
async getArkadeReader() {
|
|
12669
|
+
const indexer = this.indexerProvider;
|
|
12670
|
+
return {
|
|
12671
|
+
getVtxos: (opts) => getNormalizedVtxos(indexer, opts),
|
|
12672
|
+
getVirtualTxs: (txids, opts) => indexer.getVirtualTxs(txids, opts)
|
|
12673
|
+
};
|
|
12674
|
+
}
|
|
12608
12675
|
/**
|
|
12609
12676
|
* The wallet's current boarding tapscript (the on-chain onboarding
|
|
12610
12677
|
* target). Read-only from the outside; mutated only via
|
|
@@ -12683,7 +12750,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12683
12750
|
source: serverInfoSource,
|
|
12684
12751
|
lastOnlineAt: serverInfoLastOnlineAt
|
|
12685
12752
|
} = await resolveArkInfo(arkProvider, walletRepository);
|
|
12686
|
-
const network =
|
|
12753
|
+
const network = networkFromArkadeInfo(info);
|
|
12687
12754
|
if ("descriptor" in config.identity) {
|
|
12688
12755
|
const descriptor = config.identity.descriptor;
|
|
12689
12756
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -12773,6 +12840,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12773
12840
|
config.identity,
|
|
12774
12841
|
setup.network,
|
|
12775
12842
|
setup.onchainProvider,
|
|
12843
|
+
setup.arkProvider,
|
|
12776
12844
|
setup.indexerProvider,
|
|
12777
12845
|
setup.serverPubKey,
|
|
12778
12846
|
setup.offchainTapscript,
|
|
@@ -13620,6 +13688,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13620
13688
|
identity,
|
|
13621
13689
|
network,
|
|
13622
13690
|
onchainProvider,
|
|
13691
|
+
arkProvider,
|
|
13623
13692
|
indexerProvider,
|
|
13624
13693
|
arkServerPublicKey,
|
|
13625
13694
|
offchainTapscript,
|
|
@@ -13631,7 +13700,6 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13631
13700
|
watcherConfig,
|
|
13632
13701
|
walletContractTimelocks
|
|
13633
13702
|
);
|
|
13634
|
-
this.arkProvider = arkProvider;
|
|
13635
13703
|
this.forfeitOutputScript = forfeitOutputScript;
|
|
13636
13704
|
this.forfeitPubkey = forfeitPubkey;
|
|
13637
13705
|
this.batchExpiryPolicy = batchExpiryPolicy;
|
|
@@ -13665,7 +13733,6 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13665
13733
|
boardingPkScript: boardingTapscript.pkScript
|
|
13666
13734
|
});
|
|
13667
13735
|
}
|
|
13668
|
-
arkProvider;
|
|
13669
13736
|
forfeitOutputScript;
|
|
13670
13737
|
forfeitPubkey;
|
|
13671
13738
|
batchExpiryPolicy;
|
|
@@ -13828,7 +13895,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13828
13895
|
/**
|
|
13829
13896
|
* Output script for checkpoint transactions, decoded from the server's
|
|
13830
13897
|
* `checkpointTapscript`. Server-controlled state: pinned at construction
|
|
13831
|
-
* and re-sourced from a fresh `
|
|
13898
|
+
* and re-sourced from a fresh `ArkadeInfo` on server-signer rotation. Read it
|
|
13832
13899
|
* through {@link serverUnrollScript}; write it only through
|
|
13833
13900
|
* {@link setServerUnrollScriptForRotation}.
|
|
13834
13901
|
*/
|
|
@@ -13839,7 +13906,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13839
13906
|
/**
|
|
13840
13907
|
* @internal Sole write path for `serverUnrollScript` after construction.
|
|
13841
13908
|
* Called by {@link Wallet._doRotateServerSigner} with the checkpoint script
|
|
13842
|
-
* sourced from the fresh `
|
|
13909
|
+
* sourced from the fresh `ArkadeInfo` that triggered the rotation, so the send
|
|
13843
13910
|
* path builds checkpoints against the new server epoch. External code must
|
|
13844
13911
|
* treat `serverUnrollScript` as read-only.
|
|
13845
13912
|
*/
|
|
@@ -14471,6 +14538,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14471
14538
|
/** @deprecated Use settlementConfig instead */
|
|
14472
14539
|
renewalConfig;
|
|
14473
14540
|
settlementConfig;
|
|
14541
|
+
/**
|
|
14542
|
+
* Broadcast access bound to this wallet's server, so a plugin needs only
|
|
14543
|
+
* the wallet.
|
|
14544
|
+
*
|
|
14545
|
+
* Defined here and not on {@link ReadonlyWallet} for the same reason
|
|
14546
|
+
* `arkProvider` is protected there: a readonly wallet, and every
|
|
14547
|
+
* `toReadonly()` view, must not be able to submit.
|
|
14548
|
+
*/
|
|
14549
|
+
async getArkadeBroadcaster() {
|
|
14550
|
+
const ark = this.arkProvider;
|
|
14551
|
+
return {
|
|
14552
|
+
submitTx: (signedArkTx, checkpointTxs) => ark.submitTx(signedArkTx, checkpointTxs),
|
|
14553
|
+
finalizeTx: (arkTxid, finalCheckpointTxs) => ark.finalizeTx(arkTxid, finalCheckpointTxs)
|
|
14554
|
+
};
|
|
14555
|
+
}
|
|
14474
14556
|
get assetManager() {
|
|
14475
14557
|
this._walletAssetManager ??= new AssetManager(this);
|
|
14476
14558
|
return this._walletAssetManager;
|
|
@@ -14650,6 +14732,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14650
14732
|
readonlyIdentity,
|
|
14651
14733
|
this.network,
|
|
14652
14734
|
this.onchainProvider,
|
|
14735
|
+
this.arkProvider,
|
|
14653
14736
|
this.indexerProvider,
|
|
14654
14737
|
this.arkServerPublicKey,
|
|
14655
14738
|
this.offchainTapscript,
|
|
@@ -14702,7 +14785,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14702
14785
|
changeAmount: BigInt(changeAmount)
|
|
14703
14786
|
};
|
|
14704
14787
|
const outputAddress = ArkAddress.decode(params.address);
|
|
14705
|
-
|
|
14788
|
+
assertRecipientArkadeAddress(
|
|
14706
14789
|
params.address,
|
|
14707
14790
|
outputAddress,
|
|
14708
14791
|
this.recipientAddressContext(serverPubKey)
|
|
@@ -14855,7 +14938,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14855
14938
|
}
|
|
14856
14939
|
if (arkAddress) {
|
|
14857
14940
|
recipientContext ??= this.recipientAddressContext();
|
|
14858
|
-
|
|
14941
|
+
assertRecipientArkadeAddress(output.address, arkAddress, recipientContext);
|
|
14859
14942
|
script = arkAddress.pkScript;
|
|
14860
14943
|
hasOffchainOutputs = true;
|
|
14861
14944
|
} else {
|
|
@@ -17093,6 +17176,9 @@ var MessageBus = class {
|
|
|
17093
17176
|
});
|
|
17094
17177
|
return;
|
|
17095
17178
|
}
|
|
17179
|
+
if (response.error instanceof Error && !response.errorName) {
|
|
17180
|
+
response.errorName = response.error.name;
|
|
17181
|
+
}
|
|
17096
17182
|
source.postMessage(response);
|
|
17097
17183
|
}
|
|
17098
17184
|
/**
|
|
@@ -17686,6 +17772,49 @@ var WalletMessageHandler = class {
|
|
|
17686
17772
|
payload: { address }
|
|
17687
17773
|
});
|
|
17688
17774
|
}
|
|
17775
|
+
case "GET_ARKADE_INFO": {
|
|
17776
|
+
const { payload } = message;
|
|
17777
|
+
const info = await this.readonlyWallet.getArkadeInfo(payload);
|
|
17778
|
+
return this.tagged({
|
|
17779
|
+
id,
|
|
17780
|
+
type: "ARKADE_INFO",
|
|
17781
|
+
payload: { info }
|
|
17782
|
+
});
|
|
17783
|
+
}
|
|
17784
|
+
case "INDEXER_GET_VTXOS": {
|
|
17785
|
+
const { opts } = message.payload;
|
|
17786
|
+
const reader = await this.readonlyWallet.getArkadeReader();
|
|
17787
|
+
return this.tagged({
|
|
17788
|
+
id,
|
|
17789
|
+
type: "INDEXER_VTXOS",
|
|
17790
|
+
payload: await reader.getVtxos(opts)
|
|
17791
|
+
});
|
|
17792
|
+
}
|
|
17793
|
+
case "INDEXER_GET_VIRTUAL_TXS": {
|
|
17794
|
+
const { txids, opts } = message.payload;
|
|
17795
|
+
const reader = await this.readonlyWallet.getArkadeReader();
|
|
17796
|
+
return this.tagged({
|
|
17797
|
+
id,
|
|
17798
|
+
type: "INDEXER_VIRTUAL_TXS",
|
|
17799
|
+
payload: await reader.getVirtualTxs(txids, opts)
|
|
17800
|
+
});
|
|
17801
|
+
}
|
|
17802
|
+
case "SUBMIT_TX": {
|
|
17803
|
+
const { signedArkTx, checkpointTxs } = message.payload;
|
|
17804
|
+
const broadcaster = await this.requireWallet().getArkadeBroadcaster();
|
|
17805
|
+
const result = await broadcaster.submitTx(signedArkTx, checkpointTxs);
|
|
17806
|
+
return this.tagged({
|
|
17807
|
+
id,
|
|
17808
|
+
type: "SUBMIT_TX_SUCCESS",
|
|
17809
|
+
payload: result
|
|
17810
|
+
});
|
|
17811
|
+
}
|
|
17812
|
+
case "FINALIZE_TX": {
|
|
17813
|
+
const { arkTxid, finalCheckpointTxs } = message.payload;
|
|
17814
|
+
const broadcaster = await this.requireWallet().getArkadeBroadcaster();
|
|
17815
|
+
await broadcaster.finalizeTx(arkTxid, finalCheckpointTxs);
|
|
17816
|
+
return this.tagged({ id, type: "FINALIZE_TX_SUCCESS" });
|
|
17817
|
+
}
|
|
17689
17818
|
case "GET_BALANCE": {
|
|
17690
17819
|
const balance = await this.handleGetBalance();
|
|
17691
17820
|
return this.tagged({
|
|
@@ -18577,6 +18706,13 @@ var WalletMessageHandler = class {
|
|
|
18577
18706
|
|
|
18578
18707
|
// src/wallet/serviceWorker/wallet.ts
|
|
18579
18708
|
var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
18709
|
+
var restoreErrorName = (response) => {
|
|
18710
|
+
const error = response.error;
|
|
18711
|
+
if (response.errorName && error instanceof Error && error.name !== response.errorName) {
|
|
18712
|
+
error.name = response.errorName;
|
|
18713
|
+
}
|
|
18714
|
+
return error;
|
|
18715
|
+
};
|
|
18580
18716
|
var INIT_WAIT_BACKOFF_CAP_MS = 2e3;
|
|
18581
18717
|
var MAX_INIT_WAITS = 8;
|
|
18582
18718
|
var initWaitBackoffMs = (attempt) => Math.min(100 * 2 ** attempt, INIT_WAIT_BACKOFF_CAP_MS);
|
|
@@ -18599,6 +18735,14 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
|
|
|
18599
18735
|
GET_USED_SIGNING_DESCRIPTORS: 2e4,
|
|
18600
18736
|
ADVANCE_SIGNING_DESCRIPTOR_WATERMARK: 1e4,
|
|
18601
18737
|
// Medium reads — may involve indexer queries
|
|
18738
|
+
// A live `/v1/info` fetch queued behind the same per-origin rate gate as
|
|
18739
|
+
// the indexer, not a repository read. Derived from the fetch's own abort
|
|
18740
|
+
// budget so the worker's snapshot fallback stays reachable before this
|
|
18741
|
+
// page deadline fires — lowering it below the budget would time the page
|
|
18742
|
+
// out while the worker is still seconds from answering from cache.
|
|
18743
|
+
GET_ARKADE_INFO: INFO_FETCH_TIMEOUT_MS + 8e3,
|
|
18744
|
+
INDEXER_GET_VTXOS: 2e4,
|
|
18745
|
+
INDEXER_GET_VIRTUAL_TXS: 2e4,
|
|
18602
18746
|
GET_VTXOS: 2e4,
|
|
18603
18747
|
GET_SPENDABLE_VTXOS: 2e4,
|
|
18604
18748
|
GET_BOARDING_UTXOS: 2e4,
|
|
@@ -18621,6 +18765,10 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
|
|
|
18621
18765
|
SEND_BITCOIN: 5e4,
|
|
18622
18766
|
SEND: 5e4,
|
|
18623
18767
|
SETTLE: 5e4,
|
|
18768
|
+
// Broadcast: the server round-trip a spend ends in, so it belongs
|
|
18769
|
+
// with the writes rather than the reads above.
|
|
18770
|
+
SUBMIT_TX: 5e4,
|
|
18771
|
+
FINALIZE_TX: 5e4,
|
|
18624
18772
|
ISSUE: 5e4,
|
|
18625
18773
|
REISSUE: 5e4,
|
|
18626
18774
|
BURN: 5e4,
|
|
@@ -18647,6 +18795,9 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
|
|
|
18647
18795
|
};
|
|
18648
18796
|
var DEDUPABLE_REQUEST_TYPES = /* @__PURE__ */ new Set([
|
|
18649
18797
|
"GET_ADDRESS",
|
|
18798
|
+
"GET_ARKADE_INFO",
|
|
18799
|
+
"INDEXER_GET_VTXOS",
|
|
18800
|
+
"INDEXER_GET_VIRTUAL_TXS",
|
|
18650
18801
|
"GET_BALANCE",
|
|
18651
18802
|
"GET_BOARDING_ADDRESS",
|
|
18652
18803
|
"GET_BOARDING_UTXOS",
|
|
@@ -18738,7 +18889,7 @@ var initializeMessageBus = (serviceWorker, config, timeoutMs = 2e3) => {
|
|
|
18738
18889
|
if (response?.id !== initCmd.id) return;
|
|
18739
18890
|
cleanup();
|
|
18740
18891
|
if (response.error) {
|
|
18741
|
-
reject(response
|
|
18892
|
+
reject(restoreErrorName(response));
|
|
18742
18893
|
} else {
|
|
18743
18894
|
resolve();
|
|
18744
18895
|
}
|
|
@@ -18910,7 +19061,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18910
19061
|
}
|
|
18911
19062
|
cleanup();
|
|
18912
19063
|
if (response.error) {
|
|
18913
|
-
reject(response
|
|
19064
|
+
reject(restoreErrorName(response));
|
|
18914
19065
|
} else {
|
|
18915
19066
|
resolve(response);
|
|
18916
19067
|
}
|
|
@@ -18936,7 +19087,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18936
19087
|
if (request.id !== response.id) return;
|
|
18937
19088
|
if (response.error) {
|
|
18938
19089
|
cleanup();
|
|
18939
|
-
reject(response
|
|
19090
|
+
reject(restoreErrorName(response));
|
|
18940
19091
|
return;
|
|
18941
19092
|
}
|
|
18942
19093
|
if (isComplete(response)) {
|
|
@@ -19162,6 +19313,68 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
19162
19313
|
throw new Error(`Failed to get boarding address: ${error}`);
|
|
19163
19314
|
}
|
|
19164
19315
|
}
|
|
19316
|
+
/**
|
|
19317
|
+
* Delegated to the worker, which holds the wallet that owns the connection.
|
|
19318
|
+
* The payload crosses raw — see {@link ResponseGetArkadeInfo} for why.
|
|
19319
|
+
*/
|
|
19320
|
+
async getArkadeInfo(opts) {
|
|
19321
|
+
const message = {
|
|
19322
|
+
id: getRandomId(),
|
|
19323
|
+
tag: this.messageTag,
|
|
19324
|
+
type: "GET_ARKADE_INFO",
|
|
19325
|
+
// omitted entirely for the default read: wire-shape hygiene
|
|
19326
|
+
// toward workers built before the option existed. (Dedup is
|
|
19327
|
+
// unaffected either way — the key is JSON.stringify, which drops
|
|
19328
|
+
// undefined-valued properties.)
|
|
19329
|
+
...opts?.requireLive ? { payload: { requireLive: true } } : {}
|
|
19330
|
+
};
|
|
19331
|
+
try {
|
|
19332
|
+
const response = await this.sendMessage(message);
|
|
19333
|
+
return response.payload.info;
|
|
19334
|
+
} catch (error) {
|
|
19335
|
+
throw new Error(`Failed to get arkade info: ${error}`, { cause: error });
|
|
19336
|
+
}
|
|
19337
|
+
}
|
|
19338
|
+
/**
|
|
19339
|
+
* An {@link ArkadeReader} that speaks to the worker rather than to the
|
|
19340
|
+
* server. The page holds no provider, so a caller that built its own from a
|
|
19341
|
+
* URL would open a second connection outside the worker's rate gate and
|
|
19342
|
+
* caches — this proxy is what keeps chain reads in one place.
|
|
19343
|
+
*/
|
|
19344
|
+
async getArkadeReader() {
|
|
19345
|
+
return {
|
|
19346
|
+
getVtxos: async (opts) => {
|
|
19347
|
+
const message = {
|
|
19348
|
+
id: getRandomId(),
|
|
19349
|
+
tag: this.messageTag,
|
|
19350
|
+
type: "INDEXER_GET_VTXOS",
|
|
19351
|
+
payload: { opts }
|
|
19352
|
+
};
|
|
19353
|
+
try {
|
|
19354
|
+
const response = await this.sendMessage(message);
|
|
19355
|
+
const { vtxos, page } = response.payload;
|
|
19356
|
+
return { vtxos: vtxos.map(normalizeVtxo), page: page && { ...page } };
|
|
19357
|
+
} catch (error) {
|
|
19358
|
+
throw new Error(`Failed to get vtxos: ${error}`, { cause: error });
|
|
19359
|
+
}
|
|
19360
|
+
},
|
|
19361
|
+
getVirtualTxs: async (txids, opts) => {
|
|
19362
|
+
const message = {
|
|
19363
|
+
id: getRandomId(),
|
|
19364
|
+
tag: this.messageTag,
|
|
19365
|
+
type: "INDEXER_GET_VIRTUAL_TXS",
|
|
19366
|
+
payload: { txids, opts }
|
|
19367
|
+
};
|
|
19368
|
+
try {
|
|
19369
|
+
const response = await this.sendMessage(message);
|
|
19370
|
+
const { txs, page } = response.payload;
|
|
19371
|
+
return { txs: [...txs], page: page && { ...page } };
|
|
19372
|
+
} catch (error) {
|
|
19373
|
+
throw new Error(`Failed to get virtual txs: ${error}`, { cause: error });
|
|
19374
|
+
}
|
|
19375
|
+
}
|
|
19376
|
+
};
|
|
19377
|
+
}
|
|
19165
19378
|
async getBalance() {
|
|
19166
19379
|
const message = {
|
|
19167
19380
|
id: getRandomId(),
|
|
@@ -19818,6 +20031,43 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
19818
20031
|
async signerForDescriptor(descriptor) {
|
|
19819
20032
|
return resolveDescriptorSigner(descriptor, this.identity);
|
|
19820
20033
|
}
|
|
20034
|
+
/**
|
|
20035
|
+
* An {@link ArkadeBroadcaster} proxied to the worker, which holds the
|
|
20036
|
+
* provider. Only `ServiceWorkerWallet` offers one: a readonly worker
|
|
20037
|
+
* refuses `SUBMIT_TX`/`FINALIZE_TX` outright, so exposing it on the
|
|
20038
|
+
* readonly class would promise something the boundary rejects.
|
|
20039
|
+
*/
|
|
20040
|
+
async getArkadeBroadcaster() {
|
|
20041
|
+
return {
|
|
20042
|
+
submitTx: async (signedArkTx, checkpointTxs) => {
|
|
20043
|
+
const message = {
|
|
20044
|
+
id: getRandomId(),
|
|
20045
|
+
tag: this.messageTag,
|
|
20046
|
+
type: "SUBMIT_TX",
|
|
20047
|
+
payload: { signedArkTx, checkpointTxs }
|
|
20048
|
+
};
|
|
20049
|
+
try {
|
|
20050
|
+
const response = await this.sendMessage(message);
|
|
20051
|
+
return response.payload;
|
|
20052
|
+
} catch (error) {
|
|
20053
|
+
throw new Error(`Failed to submit tx: ${error}`, { cause: error });
|
|
20054
|
+
}
|
|
20055
|
+
},
|
|
20056
|
+
finalizeTx: async (arkTxid, finalCheckpointTxs) => {
|
|
20057
|
+
const message = {
|
|
20058
|
+
id: getRandomId(),
|
|
20059
|
+
tag: this.messageTag,
|
|
20060
|
+
type: "FINALIZE_TX",
|
|
20061
|
+
payload: { arkTxid, finalCheckpointTxs }
|
|
20062
|
+
};
|
|
20063
|
+
try {
|
|
20064
|
+
await this.sendMessage(message);
|
|
20065
|
+
} catch (error) {
|
|
20066
|
+
throw new Error(`Failed to finalize tx: ${error}`, { cause: error });
|
|
20067
|
+
}
|
|
20068
|
+
}
|
|
20069
|
+
};
|
|
20070
|
+
}
|
|
19821
20071
|
async sendBitcoin(params) {
|
|
19822
20072
|
const message = {
|
|
19823
20073
|
id: getRandomId(),
|
|
@@ -23362,8 +23612,14 @@ var ArkadeTransactionBuilder = class {
|
|
|
23362
23612
|
if (!client.identity) {
|
|
23363
23613
|
throw new Error("a signing identity is required for non-covenant spends");
|
|
23364
23614
|
}
|
|
23615
|
+
const ark = client.arkProvider;
|
|
23616
|
+
if (!ark.submitTx || !ark.finalizeTx) {
|
|
23617
|
+
throw new Error(
|
|
23618
|
+
"broadcasting requires an `arkade` provider with `submitTx`/`finalizeTx` on the Arkade client"
|
|
23619
|
+
);
|
|
23620
|
+
}
|
|
23365
23621
|
const signedArk = await this.signArk(arkTx, userInputs);
|
|
23366
|
-
const res = await
|
|
23622
|
+
const res = await ark.submitTx(
|
|
23367
23623
|
base64.encode(signedArk.toPSBT()),
|
|
23368
23624
|
checkpoints.map((c) => base64.encode(c.toPSBT()))
|
|
23369
23625
|
);
|
|
@@ -23374,7 +23630,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
23374
23630
|
async ({ server }) => base64.encode((await client.identity.sign(server, [0])).toPSBT())
|
|
23375
23631
|
)
|
|
23376
23632
|
);
|
|
23377
|
-
await
|
|
23633
|
+
await ark.finalizeTx(res.arkTxid, finalCps);
|
|
23378
23634
|
return {
|
|
23379
23635
|
txid: res.arkTxid,
|
|
23380
23636
|
signedArkTx: res.finalArkTx,
|
|
@@ -23462,6 +23718,7 @@ var BIP21Error = /* @__PURE__ */ ((BIP21Error2) => {
|
|
|
23462
23718
|
BIP21Error2["INVALID_ADDRESS"] = "Invalid address";
|
|
23463
23719
|
return BIP21Error2;
|
|
23464
23720
|
})(BIP21Error || {});
|
|
23721
|
+
var ARK_HRP = /^(?:t?ark|T?ARK)/;
|
|
23465
23722
|
var BIP21 = class _BIP21 {
|
|
23466
23723
|
/**
|
|
23467
23724
|
* Create a BIP21 URI from the provided parameters.
|
|
@@ -23485,7 +23742,7 @@ var BIP21 = class _BIP21 {
|
|
|
23485
23742
|
}
|
|
23486
23743
|
queryParams[key] = value;
|
|
23487
23744
|
} else if (key === "ark") {
|
|
23488
|
-
if (typeof value === "string" &&
|
|
23745
|
+
if (typeof value === "string" && ARK_HRP.test(value)) {
|
|
23489
23746
|
queryParams[key] = value;
|
|
23490
23747
|
} else {
|
|
23491
23748
|
console.warn("Invalid ARK address format");
|
|
@@ -23505,7 +23762,7 @@ var BIP21 = class _BIP21 {
|
|
|
23505
23762
|
Object.entries(queryParams).map(([k, v]) => [k, String(v)])
|
|
23506
23763
|
)
|
|
23507
23764
|
).toString() : "";
|
|
23508
|
-
return `bitcoin:${address
|
|
23765
|
+
return `bitcoin:${address ?? ""}${query}`;
|
|
23509
23766
|
}
|
|
23510
23767
|
/**
|
|
23511
23768
|
* Integer-sats amount encoded in a BIP21 URI (`amount=` is BTC), or
|
|
@@ -23538,7 +23795,7 @@ var BIP21 = class _BIP21 {
|
|
|
23538
23795
|
const [address, query] = withoutPrefix.split("?");
|
|
23539
23796
|
const params = {};
|
|
23540
23797
|
if (address) {
|
|
23541
|
-
params.address = address
|
|
23798
|
+
params.address = address;
|
|
23542
23799
|
}
|
|
23543
23800
|
if (query) {
|
|
23544
23801
|
const queryParams = new URLSearchParams(query);
|
|
@@ -23554,7 +23811,7 @@ var BIP21 = class _BIP21 {
|
|
|
23554
23811
|
}
|
|
23555
23812
|
params[key] = amount;
|
|
23556
23813
|
} else if (key === "ark") {
|
|
23557
|
-
if (
|
|
23814
|
+
if (ARK_HRP.test(value)) {
|
|
23558
23815
|
params[key] = value;
|
|
23559
23816
|
} else {
|
|
23560
23817
|
console.warn("Invalid ARK address format");
|
|
@@ -23806,7 +24063,7 @@ function onchainRail() {
|
|
|
23806
24063
|
function createDefaultPaymentRouter(wallet) {
|
|
23807
24064
|
return new PaymentRouter({
|
|
23808
24065
|
wallet,
|
|
23809
|
-
prefs: { priority: ["ark", "
|
|
24066
|
+
prefs: { priority: ["ark", "onchain"] }
|
|
23810
24067
|
}).use(arkRail()).use(onchainRail());
|
|
23811
24068
|
}
|
|
23812
24069
|
/*! Bundled license information:
|
|
@@ -23815,6 +24072,6 @@ function createDefaultPaymentRouter(wallet) {
|
|
|
23815
24072
|
(*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
|
|
23816
24073
|
*/
|
|
23817
24074
|
|
|
23818
|
-
export { ARKADE_MAGIC, ARKADE_SALTED_PREIMAGE_TAG, ARKADE_SWAP_PREIMAGE_TAG, AbortError, ActivityRegistry, AmbiguousRouteError, ArkNote, ArkadeCash, ArkadeCashCreateError, AssetManager, BIP21, BIP21Error, BIP322, BLOCKED_UPGRADE_TIMEOUT_MS, Batch, CachingArkProvider, ChainedTxType, ConnectionDisposedError, ContractManager, ContractRepositoryImpl, ContractWatcher, DB_VERSION, DEFAULT_MESSAGE_TIMEOUTS, DEFAULT_MIN_BATCH_EXPIRY_SECONDS, DEFAULT_MIN_CHECKPOINT_EXIT_DELAY_SECONDS, DatabaseUpgradeBlockedError, DelegateManagerImpl, DelegateNotConfiguredError, DelegatorManagerImpl, DelegatorNotConfiguredError, DescriptorIdentity, DescriptorSigningProviderMissingError, DustChangeError, ELECTRUM_TCP_HOST, ELECTRUM_WS_URL, ESPLORA_URL, ElectrumOnchainProvider, EmulatorPacket, EsploraProvider, Estimator, Extension, ExtensionNotFoundError, ForeignDescriptorError, HDDescriptorProvider, INTENT_TERMINAL_STATES, InMemoryContractRepository, InMemoryIntentRepository, InMemoryVirtualTxRepository, InMemoryWalletRepository, IndexedDBContractRepository, IndexedDBIntentRepository, IndexedDBVirtualTxRepository, IndexedDBWalletRepository, MAX_USED_SIGNING_DESCRIPTORS_LOOK_AHEAD, MESSAGE_BUS_INITIALIZING, MESSAGE_BUS_NOT_INITIALIZED, MIGRATION_KEY, MUTINYNET_MIN_CHECKPOINT_EXIT_DELAY_SECONDS, MessageBus, MessageBusInitializingError, MessageBusNotInitializedError, MissingSigningDescriptorError, MnemonicIdentity, OnchainWallet, P2A, PaymentRouter, PrevTxUnavailableError, REGTEST_MIN_BATCH_EXPIRY_SECONDS, REGTEST_MIN_CHECKPOINT_EXIT_DELAY_SECONDS, Ramps, ReadonlyAssetManager, ReadonlyDescriptorIdentity, ReadonlySingleKey, ReadonlyWallet, ReadonlyWalletError, RestDelegateProvider, RestDelegatorProvider, RestEmulatorProvider, SIGNET_MIN_CHECKPOINT_EXIT_DELAY_SECONDS, SeedIdentity, ServiceWorkerReadonlyWallet, ServiceWorkerTimeoutError, ServiceWorkerWallet, SingleKey, TxTree, TxType, TxWeightEstimator, UnannotatableInputError, UnilateralExit, UnknownPacket, Unroll, VtxoManager, Wallet2 as Wallet, WalletCannotAllocateAddressError, WalletCannotSignError, WalletMessageHandler, WalletNotInitializedError, WalletRepositoryImpl, WsElectrumChainSource, adoptContractDescriptor, arkRail, arkTarget, arkade_exports, assertFinalCommitmentMatchesValidated, assertIntentIdUnique, assertSendableAmount, assertSubmittedArkTxid, assertValidBatchExpiry, assertValidServerUnrollScript, assetMintResolver, attachPrevArkTxs, attachPrevoutTxs, awaitTransaction, boardingResolver, btcTarget, buildForfeitTx, buildOffchainTx, buildPreimageMessage, buildSaltedPreimageMessage, claimWithPreimageIdentity, classifyAgainstSignerSet, classifyContractSigner, closeDatabase, collabExitResolver, combineTapscriptSigs, contractFromArkContract, contractFromArkContractWithAddress, contractPreimage, contractSigner, createAssetPacket, createDefaultActivityRegistry, createDefaultPaymentRouter, createExitChainResolver, createManagedConnection, decodeArkContract, defaultBatchExpiryPolicy, defaultCheckpointExitDelayPolicy, deleteByIndex, deserializeAssets, deserializeExitPackage, deserializeUtxo, deserializeVtxo, encodeArkContract, exitObserverFor, extendVirtualCoinForContract, extractArkProviderUrl, gateExclusion, gatedContracts, getAllByIndexValues, getMigrationStatus, getRandomId, hasBoardingTxExpired, hasCandidates, intentMatchesFilter, intentPageBounds, invoiceTarget, isAddressAllocationCapable, isArkContract, isBatchSignable, isBtcAddress, isContractGenericallySpendable, isCooperativelyMigratable, isDeterministicSigner, isDiscoverable, isHDAllocationCapable, isHDDeterministicSignCapable, isHDWalletCapable, isLightningInvoice, isLnurl, isMessageBusInitializingError, isMessageBusNotInitializedError, isPerArtifactDescriptor, isSigningIdentity, isSubdust, isTerminalIntentState, isValidArkAddress, isVtxoExpiringSoon, isVtxoForScript, isWatchedContract, logExcludedVtxos, makeHandle, matchServerCheckpoints, mergeChainedTxType, migrateWalletRepository, notifyExitObserved, onchainRail, openDatabase, outpointExclusion, outpointReasons, promisifyRequest, provisionClaimSecret, provisionRefundKey, requiresMigration, resolveBatchExpiryPolicy, resolveCheckpointExitDelayPolicy, resolveDescriptorSigner, resolvePrevTxs, resolveSendAmount, rollbackMigration, saveVtxosForContract, scriptFromArkAddress, selectCoinsWithAsset, selectVirtualCoins, serializeAssets, serializeExitPackage, serializeUtxo, serializeVtxo, setupServiceWorker, signAndSubmitOffchainTx, signerSetFromInfo, signingDescriptorIndex, strictSigningDescriptorIndex, toXOnlySignerHex, tryResolveSendAmount, validateBatchRecipients, validateConnectorsTxGraph, validateVtxoTxGraph, verifyTapscriptSignatures, waitForIncomingFunds, warnAndFilterVtxosForScript, withPrevTxs };
|
|
23819
|
-
//# sourceMappingURL=chunk-
|
|
23820
|
-
//# sourceMappingURL=chunk-
|
|
24075
|
+
export { ARKADE_MAGIC, ARKADE_SALTED_PREIMAGE_TAG, ARKADE_SWAP_PREIMAGE_TAG, AbortError, ActivityRegistry, AmbiguousRouteError, ArkNote, ArkadeCash, ArkadeCashCreateError, AssetManager, BIP21, BIP21Error, BIP322, BLOCKED_UPGRADE_TIMEOUT_MS, Batch, CachingArkProvider, ChainedTxType, ConnectionDisposedError, ContractManager, ContractRepositoryImpl, ContractWatcher, DB_VERSION, DEFAULT_MESSAGE_TIMEOUTS, DEFAULT_MIN_BATCH_EXPIRY_SECONDS, DEFAULT_MIN_CHECKPOINT_EXIT_DELAY_SECONDS, DatabaseUpgradeBlockedError, DelegateManagerImpl, DelegateNotConfiguredError, DelegatorManagerImpl, DelegatorNotConfiguredError, DescriptorIdentity, DescriptorSigningProviderMissingError, DustChangeError, ELECTRUM_TCP_HOST, ELECTRUM_WS_URL, ESPLORA_URL, ElectrumOnchainProvider, EmulatorPacket, EsploraProvider, Estimator, Extension, ExtensionNotFoundError, ForeignDescriptorError, HDDescriptorProvider, INTENT_TERMINAL_STATES, InMemoryContractRepository, InMemoryIntentRepository, InMemoryVirtualTxRepository, InMemoryWalletRepository, IndexedDBContractRepository, IndexedDBIntentRepository, IndexedDBVirtualTxRepository, IndexedDBWalletRepository, MAX_USED_SIGNING_DESCRIPTORS_LOOK_AHEAD, MESSAGE_BUS_INITIALIZING, MESSAGE_BUS_NOT_INITIALIZED, MIGRATION_KEY, MUTINYNET_MIN_CHECKPOINT_EXIT_DELAY_SECONDS, MessageBus, MessageBusInitializingError, MessageBusNotInitializedError, MissingSigningDescriptorError, MnemonicIdentity, OnchainWallet, P2A, PaymentRouter, PrevTxUnavailableError, REGTEST_MIN_BATCH_EXPIRY_SECONDS, REGTEST_MIN_CHECKPOINT_EXIT_DELAY_SECONDS, Ramps, ReadonlyAssetManager, ReadonlyDescriptorIdentity, ReadonlySingleKey, ReadonlyWallet, ReadonlyWalletError, RestDelegateProvider, RestDelegatorProvider, RestEmulatorProvider, SIGNET_MIN_CHECKPOINT_EXIT_DELAY_SECONDS, SeedIdentity, ServiceWorkerReadonlyWallet, ServiceWorkerTimeoutError, ServiceWorkerWallet, SingleKey, TxTree, TxType, TxWeightEstimator, UnannotatableInputError, UnilateralExit, UnknownPacket, Unroll, VtxoManager, Wallet2 as Wallet, WalletCannotAllocateAddressError, WalletCannotSignError, WalletMessageHandler, WalletNotInitializedError, WalletRepositoryImpl, WsElectrumChainSource, adoptContractDescriptor, arkRail, arkTarget, arkade_exports, assertFinalCommitmentMatchesValidated, assertIntentIdUnique, assertRecipientArkadeAddress, assertSendableAmount, assertSubmittedArkTxid, assertValidBatchExpiry, assertValidServerUnrollScript, assetMintResolver, attachPrevArkTxs, attachPrevoutTxs, awaitTransaction, boardingResolver, btcTarget, buildForfeitTx, buildOffchainTx, buildPreimageMessage, buildSaltedPreimageMessage, claimWithPreimageIdentity, classifyAgainstSignerSet, classifyContractSigner, closeDatabase, collabExitResolver, combineTapscriptSigs, contractFromArkContract, contractFromArkContractWithAddress, contractPreimage, contractSigner, createAssetPacket, createDefaultActivityRegistry, createDefaultPaymentRouter, createExitChainResolver, createManagedConnection, decodeArkContract, defaultBatchExpiryPolicy, defaultCheckpointExitDelayPolicy, deleteByIndex, deserializeAssets, deserializeExitPackage, deserializeUtxo, deserializeVtxo, encodeArkContract, exitObserverFor, extendVirtualCoinForContract, extractArkProviderUrl, gateExclusion, gatedContracts, getAllByIndexValues, getMigrationStatus, getRandomId, hasBoardingTxExpired, hasCandidates, intentMatchesFilter, intentPageBounds, invoiceTarget, isAddressAllocationCapable, isArkContract, isBatchSignable, isBtcAddress, isContractGenericallySpendable, isCooperativelyMigratable, isDeterministicSigner, isDiscoverable, isHDAllocationCapable, isHDDeterministicSignCapable, isHDWalletCapable, isLightningInvoice, isLnurl, isMessageBusInitializingError, isMessageBusNotInitializedError, isPerArtifactDescriptor, isSigningIdentity, isSubdust, isTerminalIntentState, isValidArkAddress, isVtxoExpiringSoon, isVtxoForScript, isWatchedContract, logExcludedVtxos, makeHandle, matchServerCheckpoints, mergeChainedTxType, migrateWalletRepository, notifyExitObserved, onchainRail, openDatabase, outpointExclusion, outpointReasons, promisifyRequest, provisionClaimSecret, provisionRefundKey, requiresMigration, resolveBatchExpiryPolicy, resolveCheckpointExitDelayPolicy, resolveDescriptorSigner, resolvePrevTxs, resolveSendAmount, rollbackMigration, saveVtxosForContract, scriptFromArkAddress, selectCoinsWithAsset, selectVirtualCoins, serializeAssets, serializeExitPackage, serializeUtxo, serializeVtxo, setupServiceWorker, signAndSubmitOffchainTx, signerSetFromInfo, signingDescriptorIndex, strictSigningDescriptorIndex, toXOnlySignerHex, tryResolveSendAmount, validateBatchRecipients, validateConnectorsTxGraph, validateVtxoTxGraph, verifyTapscriptSignatures, waitForIncomingFunds, warnAndFilterVtxosForScript, withPrevTxs };
|
|
24076
|
+
//# sourceMappingURL=chunk-VTE3NYVD.js.map
|
|
24077
|
+
//# sourceMappingURL=chunk-VTE3NYVD.js.map
|