@arkade-os/sdk 0.4.68 → 0.5.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +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-DaZlVTbM.d.ts → asyncStorageTaskQueue-BCzN3Y45.d.ts} +1 -1
- package/dist/{asyncStorageTaskQueue-B2CcXIHU.d.cts → asyncStorageTaskQueue-CdF_ELX8.d.cts} +1 -1
- package/dist/{chunk-WCJVKFAP.cjs → chunk-5MJHZHG7.cjs} +726 -468
- package/dist/chunk-5MJHZHG7.cjs.map +1 -0
- package/dist/{chunk-EJOFL5WH.cjs → chunk-6AFUNKK7.cjs} +19 -7
- package/dist/chunk-6AFUNKK7.cjs.map +1 -0
- package/dist/{chunk-VBHXBI7F.js → chunk-6F2Q32KA.js} +298 -41
- package/dist/chunk-6F2Q32KA.js.map +1 -0
- package/dist/{chunk-GQ4NMQGR.js → chunk-ABJPM4JF.js} +4 -4
- package/dist/{chunk-GQ4NMQGR.js.map → chunk-ABJPM4JF.js.map} +1 -1
- package/dist/{chunk-PJR63FTK.cjs → chunk-CZ32XADN.cjs} +17 -17
- package/dist/{chunk-PJR63FTK.cjs.map → chunk-CZ32XADN.cjs.map} +1 -1
- package/dist/{chunk-33Q2RFET.js → chunk-FVTJJQNM.js} +3 -3
- package/dist/{chunk-33Q2RFET.js.map → chunk-FVTJJQNM.js.map} +1 -1
- package/dist/{chunk-6YUACVX4.cjs → chunk-HL7EC2Z5.cjs} +52 -53
- package/dist/chunk-HL7EC2Z5.cjs.map +1 -0
- package/dist/{chunk-G4I6PU5H.js → chunk-JYP7YXT2.js} +4 -4
- package/dist/{chunk-G4I6PU5H.js.map → chunk-JYP7YXT2.js.map} +1 -1
- package/dist/{chunk-45FKMOJH.js → chunk-KTU44AEH.js} +6 -7
- package/dist/chunk-KTU44AEH.js.map +1 -0
- package/dist/{chunk-4KCVS4ZN.cjs → chunk-PB5KJI4U.cjs} +10 -10
- package/dist/{chunk-4KCVS4ZN.cjs.map → chunk-PB5KJI4U.cjs.map} +1 -1
- package/dist/{chunk-4CMXV5SF.js → chunk-PPG6W34P.js} +18 -8
- package/dist/chunk-PPG6W34P.js.map +1 -0
- package/dist/{chunk-JGMSZIE4.cjs → chunk-RXWKCEZP.cjs} +17 -17
- package/dist/{chunk-JGMSZIE4.cjs.map → chunk-RXWKCEZP.cjs.map} +1 -1
- 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-Bffc5f54.d.cts → delegate-DLIOBQ5x.d.cts} +1 -1
- package/dist/{delegate-AomVWxO_.d.ts → delegate-Dyn5L80J.d.ts} +1 -1
- package/dist/{hdWalletCapable-B5nRs3RH.d.cts → hdWalletCapable-D9tooZ6F.d.ts} +102 -27
- package/dist/{hdWalletCapable-DZdIVa23.d.ts → hdWalletCapable-Dt3MUiGE.d.cts} +102 -27
- package/dist/{index-jouvy8FD.d.ts → index-D3hmsuKs.d.cts} +6 -6
- package/dist/{index-nfyQM33h.d.cts → index-D9tXd-tN.d.ts} +6 -6
- package/dist/{index-C7RZCfoY.d.cts → index-Udm5V2xW.d.cts} +168 -19
- package/dist/{index-C7RZCfoY.d.ts → index-Udm5V2xW.d.ts} +168 -19
- package/dist/index.cjs +306 -290
- 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-D2vnpPBT.d.cts → taskRunner-DxZciNaa.d.cts} +1 -1
- package/dist/{taskRunner-DuwK9t8O.d.ts → taskRunner-ZdS16Ypm.d.ts} +1 -1
- 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-45FKMOJH.js.map +0 -1
- package/dist/chunk-4CMXV5SF.js.map +0 -1
- package/dist/chunk-6YUACVX4.cjs.map +0 -1
- package/dist/chunk-EJOFL5WH.cjs.map +0 -1
- package/dist/chunk-VBHXBI7F.js.map +0 -1
- package/dist/chunk-WCJVKFAP.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, isVirtualCoin, getArkPsbtFields, CosignerPublicKey, ServerResponseMismatchError, OP_RETURN_EMPTY_PKSCRIPT, canSweepOnchain, sequenceToTimelock, decodeTapscript, scriptFromTapLeafScript, CLTVMultisigTapscript, VtxoTaprootTree, timelockToSequence, assertAllowedSighashTypes, baseFetch, Intent, rateGate, DEFAULT_NETWORK_NAME, formatSighash, normalizeVtxo, getSequence, toBatchExpiry, maybeArkError, isArkError, ArkErrorName, toOffchainInputFeeParams, canRecoverOnchain, getNetwork, MultisigTapscript, isEventSourceError, isEventSourceUnavailableError, isRetryableProviderError, getAllNormalizedVtxos, DEFAULT_PAGE_SIZE, RestArkProvider, toVirtualStatus, ArkError, TapTreeCoder, resolveTimeHeight, canSpendOffchain, parseLegacyExpiry, isExpired,
|
|
1
|
+
import { AssetId, AssetGroup, AssetInput, AssetOutput, Metadata, Packet, BufferReader, BufferWriter, AssetRef, RestIndexerProvider } from './chunk-FVTJJQNM.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-KTU44AEH.js';
|
|
3
|
+
import { VtxoScript, Transaction, isRecoverable, CSVMultisigTapscript, DEFAULT_NETWORK, resolveEmulatorPubkey, hasTerminalSpend, getNormalizedVtxos, setArkPsbtField, PrevArkTxField, ConditionWitness, craftToSpendTx, ArkAddress, isVirtualCoin, getArkPsbtFields, CosignerPublicKey, ServerResponseMismatchError, OP_RETURN_EMPTY_PKSCRIPT, canSweepOnchain, sequenceToTimelock, decodeTapscript, scriptFromTapLeafScript, CLTVMultisigTapscript, VtxoTaprootTree, timelockToSequence, assertAllowedSighashTypes, baseFetch, Intent, rateGate, DEFAULT_NETWORK_NAME, formatSighash, normalizeVtxo, getSequence, toBatchExpiry, maybeArkError, isArkError, ArkErrorName, toOffchainInputFeeParams, canRecoverOnchain, getNetwork, MultisigTapscript, isEventSourceError, isEventSourceUnavailableError, isRetryableProviderError, getAllNormalizedVtxos, DEFAULT_PAGE_SIZE, RestArkProvider, networkFromArkadeInfo, toVirtualStatus, ArkError, TapTreeCoder, resolveTimeHeight, canSpendOffchain, parseLegacyExpiry, isExpired, INFO_FETCH_TIMEOUT_MS, PrevoutTxField, ProviderUnavailableError, DEFAULT_ARKADE_SERVER_URL, networks as networks$1, isPastExpiry, fetchVtxoCreatedAtByTxid } from './chunk-PPG6W34P.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';
|
|
@@ -3651,7 +3651,7 @@ function isValidArkAddress2(address) {
|
|
|
3651
3651
|
return false;
|
|
3652
3652
|
}
|
|
3653
3653
|
}
|
|
3654
|
-
function
|
|
3654
|
+
function assertRecipientArkadeAddress(encoded, address, context) {
|
|
3655
3655
|
if (address.hrp !== context.hrp) {
|
|
3656
3656
|
throw new Error(
|
|
3657
3657
|
`Invalid Arkade address ${encoded}: expected prefix "${context.hrp}", got "${address.hrp}"`
|
|
@@ -3694,7 +3694,7 @@ function validateRecipients(recipients, dustAmount, context) {
|
|
|
3694
3694
|
} catch (e) {
|
|
3695
3695
|
throw new Error(`Invalid Arkade address: ${recipient.address}`);
|
|
3696
3696
|
}
|
|
3697
|
-
|
|
3697
|
+
assertRecipientArkadeAddress(recipient.address, address, context);
|
|
3698
3698
|
const amount = recipient.amount || dustAmount;
|
|
3699
3699
|
if (amount <= 0) {
|
|
3700
3700
|
throw new Error("Amount must be positive");
|
|
@@ -4585,7 +4585,7 @@ var VtxoManager = class _VtxoManager {
|
|
|
4585
4585
|
}
|
|
4586
4586
|
/**
|
|
4587
4587
|
* Core migration routine shared by the manual API and the automatic poll
|
|
4588
|
-
* pass. Fetches a fresh {@link
|
|
4588
|
+
* pass. Fetches a fresh {@link ArkadeInfo}, applies a mid-session signer
|
|
4589
4589
|
* rotation when the wallet's own snapshot signer has been deprecated,
|
|
4590
4590
|
* selects spendable VTXOs under deprecated-signer contracts (cutoff-first),
|
|
4591
4591
|
* and settles them to the active-signer Ark address.
|
|
@@ -6368,12 +6368,12 @@ async function saveArkInfoSnapshot(repo, info, savedAt) {
|
|
|
6368
6368
|
}
|
|
6369
6369
|
}));
|
|
6370
6370
|
}
|
|
6371
|
-
async function resolveArkInfo(arkProvider, walletRepository) {
|
|
6371
|
+
async function resolveArkInfo(arkProvider, walletRepository, opts) {
|
|
6372
6372
|
let info;
|
|
6373
6373
|
try {
|
|
6374
6374
|
info = await arkProvider.getInfo();
|
|
6375
6375
|
} catch (err) {
|
|
6376
|
-
if (!isRetryableProviderError(err)) throw err;
|
|
6376
|
+
if (opts?.requireLive || !isRetryableProviderError(err)) throw err;
|
|
6377
6377
|
const snapshot = await loadArkInfoSnapshot(walletRepository);
|
|
6378
6378
|
if (!snapshot) {
|
|
6379
6379
|
throw new ProviderUnavailableError(
|
|
@@ -12140,10 +12140,11 @@ var ArkadeCashCreateError = class extends Error {
|
|
|
12140
12140
|
cause;
|
|
12141
12141
|
};
|
|
12142
12142
|
var ReadonlyWallet = class _ReadonlyWallet {
|
|
12143
|
-
constructor(identity, network, onchainProvider, indexerProvider, arkServerPublicKey, offchainTapscript, boardingTapscript, dustAmount, walletRepository, contractRepository, delegateProvider, watcherConfig, walletContractTimelocks) {
|
|
12143
|
+
constructor(identity, network, onchainProvider, arkProvider, indexerProvider, arkServerPublicKey, offchainTapscript, boardingTapscript, dustAmount, walletRepository, contractRepository, delegateProvider, watcherConfig, walletContractTimelocks) {
|
|
12144
12144
|
this.identity = identity;
|
|
12145
12145
|
this.network = network;
|
|
12146
12146
|
this.onchainProvider = onchainProvider;
|
|
12147
|
+
this.arkProvider = arkProvider;
|
|
12147
12148
|
this.indexerProvider = indexerProvider;
|
|
12148
12149
|
this.dustAmount = dustAmount;
|
|
12149
12150
|
this.walletRepository = walletRepository;
|
|
@@ -12169,6 +12170,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12169
12170
|
identity;
|
|
12170
12171
|
network;
|
|
12171
12172
|
onchainProvider;
|
|
12173
|
+
arkProvider;
|
|
12172
12174
|
indexerProvider;
|
|
12173
12175
|
dustAmount;
|
|
12174
12176
|
walletRepository;
|
|
@@ -12236,14 +12238,19 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12236
12238
|
*/
|
|
12237
12239
|
_arkServerPublicKey;
|
|
12238
12240
|
/**
|
|
12239
|
-
* Whether
|
|
12240
|
-
*
|
|
12241
|
-
* (`"cache"`).
|
|
12241
|
+
* Whether the LATEST server-info resolution answered live (`"live"`) or
|
|
12242
|
+
* from the cached snapshot because the operator was unreachable
|
|
12243
|
+
* (`"cache"`). Seeded at construction and updated by every
|
|
12244
|
+
* {@link getArkadeInfo} read, so a wallet that booted offline and
|
|
12245
|
+
* recovered stops reporting degraded — and one that just fell back stops
|
|
12246
|
+
* claiming online. Freshness signal for
|
|
12247
|
+
* {@link getProviderConnectionState}.
|
|
12242
12248
|
*/
|
|
12243
12249
|
_serverInfoSource = "live";
|
|
12244
12250
|
/**
|
|
12245
|
-
* Epoch-ms of the last known live operator contact:
|
|
12246
|
-
*
|
|
12251
|
+
* Epoch-ms of the last known live operator contact: the most recent live
|
|
12252
|
+
* resolution (construction or a later {@link getArkadeInfo}), or the
|
|
12253
|
+
* cached snapshot's `savedAt` when the latest resolution fell back.
|
|
12247
12254
|
*/
|
|
12248
12255
|
_serverInfoLastOnlineAt;
|
|
12249
12256
|
/** @see {@link _serverInfoSource} */
|
|
@@ -12251,13 +12258,15 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12251
12258
|
return this._serverInfoSource;
|
|
12252
12259
|
}
|
|
12253
12260
|
/**
|
|
12254
|
-
* Composed provider-connection freshness: the
|
|
12255
|
-
* (
|
|
12256
|
-
* manager
|
|
12257
|
-
*
|
|
12258
|
-
*
|
|
12261
|
+
* Composed provider-connection freshness: the LATEST server-info
|
|
12262
|
+
* resolution (boot, or any later {@link getArkadeInfo} read) combined with
|
|
12263
|
+
* the contract-manager's indexer-sync health, if the manager has been
|
|
12264
|
+
* initialized. Reads no live provider state — it never forces a
|
|
12265
|
+
* `ContractManager` to construct — so it is safe for readonly callers
|
|
12266
|
+
* that only use address/balance APIs.
|
|
12259
12267
|
*
|
|
12260
|
-
* -
|
|
12268
|
+
* - Latest resolution fell back to the cached snapshot → degraded on
|
|
12269
|
+
* `arkade` (`cache`).
|
|
12261
12270
|
* - Otherwise, if the contract manager has degraded to repository data →
|
|
12262
12271
|
* degraded on `indexer` (`repository`).
|
|
12263
12272
|
* - Otherwise online.
|
|
@@ -12303,7 +12312,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12303
12312
|
}
|
|
12304
12313
|
/**
|
|
12305
12314
|
* x-only hex of the operator's deprecated signer keys (from
|
|
12306
|
-
* `
|
|
12315
|
+
* `ArkadeInfo.deprecatedSigners`), cached for the OFFLINE read/watch paths.
|
|
12307
12316
|
* The boarding watch/history surfaces ({@link getBoardingAddresses},
|
|
12308
12317
|
* {@link getBoardingTxs}) fan out over {current} ∪ this set so a deposit at
|
|
12309
12318
|
* a boarding address minted under a now-rotated operator signer keeps being
|
|
@@ -12378,6 +12387,64 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12378
12387
|
get arkServerPublicKey() {
|
|
12379
12388
|
return this._arkServerPublicKey;
|
|
12380
12389
|
}
|
|
12390
|
+
/**
|
|
12391
|
+
* Server info for the Arkade server this wallet is connected to, resolved
|
|
12392
|
+
* exactly as construction resolves it: live wins, a retryable failure
|
|
12393
|
+
* falls back to the snapshot persisted at boot, a terminal one propagates.
|
|
12394
|
+
*
|
|
12395
|
+
* Live rather than the pinned boot snapshot because the fields callers
|
|
12396
|
+
* come here for — `signerPubkey`, `checkpointTapscript`, `fees` — are the
|
|
12397
|
+
* ones a mid-session rotation moves, and a covenant built against a
|
|
12398
|
+
* superseded signer is unspendable.
|
|
12399
|
+
*
|
|
12400
|
+
* One rotation caveat: reading does NOT re-pin the wallet —
|
|
12401
|
+
* {@link arkServerPublicKey}, {@link dustAmount} and the tapscripts move
|
|
12402
|
+
* only through `handleServerInfoChanged`/`rotateServerSigner` — so inside
|
|
12403
|
+
* a rotation window this can report epoch N+1 while the wallet still
|
|
12404
|
+
* spends on N. The window closes on its own: a read that observes a moved
|
|
12405
|
+
* digest makes the provider emit `onServerInfoChanged`, which is what
|
|
12406
|
+
* drives that rotation. A caller about to bind the answer into a covenant
|
|
12407
|
+
* passes `{ requireLive: true }` and fails closed instead of receiving
|
|
12408
|
+
* the boot snapshot.
|
|
12409
|
+
*
|
|
12410
|
+
* @returns The Arkade server's info
|
|
12411
|
+
* @see ArkadeInfo
|
|
12412
|
+
*/
|
|
12413
|
+
async getArkadeInfo(opts) {
|
|
12414
|
+
const { info, source, lastOnlineAt } = await resolveArkInfo(
|
|
12415
|
+
this.arkProvider,
|
|
12416
|
+
this.walletRepository,
|
|
12417
|
+
opts
|
|
12418
|
+
);
|
|
12419
|
+
this._serverInfoSource = source;
|
|
12420
|
+
if (source === "live") {
|
|
12421
|
+
this._serverInfoLastOnlineAt = Date.now();
|
|
12422
|
+
} else if (lastOnlineAt !== void 0) {
|
|
12423
|
+
this._serverInfoLastOnlineAt = lastOnlineAt;
|
|
12424
|
+
}
|
|
12425
|
+
return info;
|
|
12426
|
+
}
|
|
12427
|
+
/**
|
|
12428
|
+
* Chain reads against this wallet's server for scripts it does not own.
|
|
12429
|
+
*
|
|
12430
|
+
* Binds the wallet's own `indexerProvider` — which may be an Expo or
|
|
12431
|
+
* injected one that a caller's hand-built `RestIndexerProvider` would
|
|
12432
|
+
* silently bypass. `getVtxos` goes through
|
|
12433
|
+
* {@link getNormalizedVtxos}, which is what makes every VTXO leaving the
|
|
12434
|
+
* seam carry its canonical facts.
|
|
12435
|
+
*
|
|
12436
|
+
* A bound object rather than the provider itself, so an `IReadonlyWallet`
|
|
12437
|
+
* holder gets `getVtxos`/`getVirtualTxs` and nothing else at runtime.
|
|
12438
|
+
* (`indexerProvider` is still public on the concrete classes, unlike
|
|
12439
|
+
* `arkProvider`, so this narrows the interface rather than the field.)
|
|
12440
|
+
*/
|
|
12441
|
+
async getArkadeReader() {
|
|
12442
|
+
const indexer = this.indexerProvider;
|
|
12443
|
+
return {
|
|
12444
|
+
getVtxos: (opts) => getNormalizedVtxos(indexer, opts),
|
|
12445
|
+
getVirtualTxs: (txids, opts) => indexer.getVirtualTxs(txids, opts)
|
|
12446
|
+
};
|
|
12447
|
+
}
|
|
12381
12448
|
/**
|
|
12382
12449
|
* The wallet's current boarding tapscript (the on-chain onboarding
|
|
12383
12450
|
* target). Read-only from the outside; mutated only via
|
|
@@ -12456,7 +12523,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12456
12523
|
source: serverInfoSource,
|
|
12457
12524
|
lastOnlineAt: serverInfoLastOnlineAt
|
|
12458
12525
|
} = await resolveArkInfo(arkProvider, walletRepository);
|
|
12459
|
-
const network =
|
|
12526
|
+
const network = networkFromArkadeInfo(info);
|
|
12460
12527
|
if ("descriptor" in config.identity) {
|
|
12461
12528
|
const descriptor = config.identity.descriptor;
|
|
12462
12529
|
const identityIsMainnet = !descriptor.includes("tpub");
|
|
@@ -12546,6 +12613,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
|
|
|
12546
12613
|
config.identity,
|
|
12547
12614
|
setup.network,
|
|
12548
12615
|
setup.onchainProvider,
|
|
12616
|
+
setup.arkProvider,
|
|
12549
12617
|
setup.indexerProvider,
|
|
12550
12618
|
setup.serverPubKey,
|
|
12551
12619
|
setup.offchainTapscript,
|
|
@@ -13393,6 +13461,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13393
13461
|
identity,
|
|
13394
13462
|
network,
|
|
13395
13463
|
onchainProvider,
|
|
13464
|
+
arkProvider,
|
|
13396
13465
|
indexerProvider,
|
|
13397
13466
|
arkServerPublicKey,
|
|
13398
13467
|
offchainTapscript,
|
|
@@ -13404,7 +13473,6 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13404
13473
|
watcherConfig,
|
|
13405
13474
|
walletContractTimelocks
|
|
13406
13475
|
);
|
|
13407
|
-
this.arkProvider = arkProvider;
|
|
13408
13476
|
this.forfeitOutputScript = forfeitOutputScript;
|
|
13409
13477
|
this.forfeitPubkey = forfeitPubkey;
|
|
13410
13478
|
this.batchExpiryPolicy = batchExpiryPolicy;
|
|
@@ -13438,7 +13506,6 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13438
13506
|
boardingPkScript: boardingTapscript.pkScript
|
|
13439
13507
|
});
|
|
13440
13508
|
}
|
|
13441
|
-
arkProvider;
|
|
13442
13509
|
forfeitOutputScript;
|
|
13443
13510
|
forfeitPubkey;
|
|
13444
13511
|
batchExpiryPolicy;
|
|
@@ -13601,7 +13668,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13601
13668
|
/**
|
|
13602
13669
|
* Output script for checkpoint transactions, decoded from the server's
|
|
13603
13670
|
* `checkpointTapscript`. Server-controlled state: pinned at construction
|
|
13604
|
-
* and re-sourced from a fresh `
|
|
13671
|
+
* and re-sourced from a fresh `ArkadeInfo` on server-signer rotation. Read it
|
|
13605
13672
|
* through {@link serverUnrollScript}; write it only through
|
|
13606
13673
|
* {@link setServerUnrollScriptForRotation}.
|
|
13607
13674
|
*/
|
|
@@ -13612,7 +13679,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
13612
13679
|
/**
|
|
13613
13680
|
* @internal Sole write path for `serverUnrollScript` after construction.
|
|
13614
13681
|
* Called by {@link Wallet._doRotateServerSigner} with the checkpoint script
|
|
13615
|
-
* sourced from the fresh `
|
|
13682
|
+
* sourced from the fresh `ArkadeInfo` that triggered the rotation, so the send
|
|
13616
13683
|
* path builds checkpoints against the new server epoch. External code must
|
|
13617
13684
|
* treat `serverUnrollScript` as read-only.
|
|
13618
13685
|
*/
|
|
@@ -14244,6 +14311,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14244
14311
|
/** @deprecated Use settlementConfig instead */
|
|
14245
14312
|
renewalConfig;
|
|
14246
14313
|
settlementConfig;
|
|
14314
|
+
/**
|
|
14315
|
+
* Broadcast access bound to this wallet's server, so a plugin needs only
|
|
14316
|
+
* the wallet.
|
|
14317
|
+
*
|
|
14318
|
+
* Defined here and not on {@link ReadonlyWallet} for the same reason
|
|
14319
|
+
* `arkProvider` is protected there: a readonly wallet, and every
|
|
14320
|
+
* `toReadonly()` view, must not be able to submit.
|
|
14321
|
+
*/
|
|
14322
|
+
async getArkadeBroadcaster() {
|
|
14323
|
+
const ark = this.arkProvider;
|
|
14324
|
+
return {
|
|
14325
|
+
submitTx: (signedArkTx, checkpointTxs) => ark.submitTx(signedArkTx, checkpointTxs),
|
|
14326
|
+
finalizeTx: (arkTxid, finalCheckpointTxs) => ark.finalizeTx(arkTxid, finalCheckpointTxs)
|
|
14327
|
+
};
|
|
14328
|
+
}
|
|
14247
14329
|
get assetManager() {
|
|
14248
14330
|
this._walletAssetManager ??= new AssetManager(this);
|
|
14249
14331
|
return this._walletAssetManager;
|
|
@@ -14423,6 +14505,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14423
14505
|
readonlyIdentity,
|
|
14424
14506
|
this.network,
|
|
14425
14507
|
this.onchainProvider,
|
|
14508
|
+
this.arkProvider,
|
|
14426
14509
|
this.indexerProvider,
|
|
14427
14510
|
this.arkServerPublicKey,
|
|
14428
14511
|
this.offchainTapscript,
|
|
@@ -14475,7 +14558,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14475
14558
|
changeAmount: BigInt(changeAmount)
|
|
14476
14559
|
};
|
|
14477
14560
|
const outputAddress = ArkAddress.decode(params.address);
|
|
14478
|
-
|
|
14561
|
+
assertRecipientArkadeAddress(
|
|
14479
14562
|
params.address,
|
|
14480
14563
|
outputAddress,
|
|
14481
14564
|
this.recipientAddressContext(serverPubKey)
|
|
@@ -14628,7 +14711,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
|
|
|
14628
14711
|
}
|
|
14629
14712
|
if (arkAddress) {
|
|
14630
14713
|
recipientContext ??= this.recipientAddressContext();
|
|
14631
|
-
|
|
14714
|
+
assertRecipientArkadeAddress(output.address, arkAddress, recipientContext);
|
|
14632
14715
|
script = arkAddress.pkScript;
|
|
14633
14716
|
hasOffchainOutputs = true;
|
|
14634
14717
|
} else {
|
|
@@ -16832,6 +16915,9 @@ var MessageBus = class {
|
|
|
16832
16915
|
});
|
|
16833
16916
|
return;
|
|
16834
16917
|
}
|
|
16918
|
+
if (response.error instanceof Error && !response.errorName) {
|
|
16919
|
+
response.errorName = response.error.name;
|
|
16920
|
+
}
|
|
16835
16921
|
source.postMessage(response);
|
|
16836
16922
|
}
|
|
16837
16923
|
/**
|
|
@@ -17425,6 +17511,49 @@ var WalletMessageHandler = class {
|
|
|
17425
17511
|
payload: { address }
|
|
17426
17512
|
});
|
|
17427
17513
|
}
|
|
17514
|
+
case "GET_ARKADE_INFO": {
|
|
17515
|
+
const { payload } = message;
|
|
17516
|
+
const info = await this.readonlyWallet.getArkadeInfo(payload);
|
|
17517
|
+
return this.tagged({
|
|
17518
|
+
id,
|
|
17519
|
+
type: "ARKADE_INFO",
|
|
17520
|
+
payload: { info }
|
|
17521
|
+
});
|
|
17522
|
+
}
|
|
17523
|
+
case "INDEXER_GET_VTXOS": {
|
|
17524
|
+
const { opts } = message.payload;
|
|
17525
|
+
const reader = await this.readonlyWallet.getArkadeReader();
|
|
17526
|
+
return this.tagged({
|
|
17527
|
+
id,
|
|
17528
|
+
type: "INDEXER_VTXOS",
|
|
17529
|
+
payload: await reader.getVtxos(opts)
|
|
17530
|
+
});
|
|
17531
|
+
}
|
|
17532
|
+
case "INDEXER_GET_VIRTUAL_TXS": {
|
|
17533
|
+
const { txids, opts } = message.payload;
|
|
17534
|
+
const reader = await this.readonlyWallet.getArkadeReader();
|
|
17535
|
+
return this.tagged({
|
|
17536
|
+
id,
|
|
17537
|
+
type: "INDEXER_VIRTUAL_TXS",
|
|
17538
|
+
payload: await reader.getVirtualTxs(txids, opts)
|
|
17539
|
+
});
|
|
17540
|
+
}
|
|
17541
|
+
case "SUBMIT_TX": {
|
|
17542
|
+
const { signedArkTx, checkpointTxs } = message.payload;
|
|
17543
|
+
const broadcaster = await this.requireWallet().getArkadeBroadcaster();
|
|
17544
|
+
const result = await broadcaster.submitTx(signedArkTx, checkpointTxs);
|
|
17545
|
+
return this.tagged({
|
|
17546
|
+
id,
|
|
17547
|
+
type: "SUBMIT_TX_SUCCESS",
|
|
17548
|
+
payload: result
|
|
17549
|
+
});
|
|
17550
|
+
}
|
|
17551
|
+
case "FINALIZE_TX": {
|
|
17552
|
+
const { arkTxid, finalCheckpointTxs } = message.payload;
|
|
17553
|
+
const broadcaster = await this.requireWallet().getArkadeBroadcaster();
|
|
17554
|
+
await broadcaster.finalizeTx(arkTxid, finalCheckpointTxs);
|
|
17555
|
+
return this.tagged({ id, type: "FINALIZE_TX_SUCCESS" });
|
|
17556
|
+
}
|
|
17428
17557
|
case "GET_BALANCE": {
|
|
17429
17558
|
const balance = await this.handleGetBalance();
|
|
17430
17559
|
return this.tagged({
|
|
@@ -18316,6 +18445,13 @@ var WalletMessageHandler = class {
|
|
|
18316
18445
|
|
|
18317
18446
|
// src/wallet/serviceWorker/wallet.ts
|
|
18318
18447
|
var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
18448
|
+
var restoreErrorName = (response) => {
|
|
18449
|
+
const error = response.error;
|
|
18450
|
+
if (response.errorName && error instanceof Error && error.name !== response.errorName) {
|
|
18451
|
+
error.name = response.errorName;
|
|
18452
|
+
}
|
|
18453
|
+
return error;
|
|
18454
|
+
};
|
|
18319
18455
|
var INIT_WAIT_BACKOFF_CAP_MS = 2e3;
|
|
18320
18456
|
var MAX_INIT_WAITS = 8;
|
|
18321
18457
|
var initWaitBackoffMs = (attempt) => Math.min(100 * 2 ** attempt, INIT_WAIT_BACKOFF_CAP_MS);
|
|
@@ -18338,6 +18474,14 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
|
|
|
18338
18474
|
GET_USED_SIGNING_DESCRIPTORS: 2e4,
|
|
18339
18475
|
ADVANCE_SIGNING_DESCRIPTOR_WATERMARK: 1e4,
|
|
18340
18476
|
// Medium reads — may involve indexer queries
|
|
18477
|
+
// A live `/v1/info` fetch queued behind the same per-origin rate gate as
|
|
18478
|
+
// the indexer, not a repository read. Derived from the fetch's own abort
|
|
18479
|
+
// budget so the worker's snapshot fallback stays reachable before this
|
|
18480
|
+
// page deadline fires — lowering it below the budget would time the page
|
|
18481
|
+
// out while the worker is still seconds from answering from cache.
|
|
18482
|
+
GET_ARKADE_INFO: INFO_FETCH_TIMEOUT_MS + 8e3,
|
|
18483
|
+
INDEXER_GET_VTXOS: 2e4,
|
|
18484
|
+
INDEXER_GET_VIRTUAL_TXS: 2e4,
|
|
18341
18485
|
GET_VTXOS: 2e4,
|
|
18342
18486
|
GET_SPENDABLE_VTXOS: 2e4,
|
|
18343
18487
|
GET_BOARDING_UTXOS: 2e4,
|
|
@@ -18360,6 +18504,10 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
|
|
|
18360
18504
|
SEND_BITCOIN: 5e4,
|
|
18361
18505
|
SEND: 5e4,
|
|
18362
18506
|
SETTLE: 5e4,
|
|
18507
|
+
// Broadcast: the server round-trip a spend ends in, so it belongs
|
|
18508
|
+
// with the writes rather than the reads above.
|
|
18509
|
+
SUBMIT_TX: 5e4,
|
|
18510
|
+
FINALIZE_TX: 5e4,
|
|
18363
18511
|
ISSUE: 5e4,
|
|
18364
18512
|
REISSUE: 5e4,
|
|
18365
18513
|
BURN: 5e4,
|
|
@@ -18386,6 +18534,9 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
|
|
|
18386
18534
|
};
|
|
18387
18535
|
var DEDUPABLE_REQUEST_TYPES = /* @__PURE__ */ new Set([
|
|
18388
18536
|
"GET_ADDRESS",
|
|
18537
|
+
"GET_ARKADE_INFO",
|
|
18538
|
+
"INDEXER_GET_VTXOS",
|
|
18539
|
+
"INDEXER_GET_VIRTUAL_TXS",
|
|
18389
18540
|
"GET_BALANCE",
|
|
18390
18541
|
"GET_BOARDING_ADDRESS",
|
|
18391
18542
|
"GET_BOARDING_UTXOS",
|
|
@@ -18477,7 +18628,7 @@ var initializeMessageBus = (serviceWorker, config, timeoutMs = 2e3) => {
|
|
|
18477
18628
|
if (response?.id !== initCmd.id) return;
|
|
18478
18629
|
cleanup();
|
|
18479
18630
|
if (response.error) {
|
|
18480
|
-
reject(response
|
|
18631
|
+
reject(restoreErrorName(response));
|
|
18481
18632
|
} else {
|
|
18482
18633
|
resolve();
|
|
18483
18634
|
}
|
|
@@ -18649,7 +18800,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18649
18800
|
}
|
|
18650
18801
|
cleanup();
|
|
18651
18802
|
if (response.error) {
|
|
18652
|
-
reject(response
|
|
18803
|
+
reject(restoreErrorName(response));
|
|
18653
18804
|
} else {
|
|
18654
18805
|
resolve(response);
|
|
18655
18806
|
}
|
|
@@ -18675,7 +18826,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18675
18826
|
if (request.id !== response.id) return;
|
|
18676
18827
|
if (response.error) {
|
|
18677
18828
|
cleanup();
|
|
18678
|
-
reject(response
|
|
18829
|
+
reject(restoreErrorName(response));
|
|
18679
18830
|
return;
|
|
18680
18831
|
}
|
|
18681
18832
|
if (isComplete(response)) {
|
|
@@ -18901,6 +19052,68 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
|
|
|
18901
19052
|
throw new Error(`Failed to get boarding address: ${error}`);
|
|
18902
19053
|
}
|
|
18903
19054
|
}
|
|
19055
|
+
/**
|
|
19056
|
+
* Delegated to the worker, which holds the wallet that owns the connection.
|
|
19057
|
+
* The payload crosses raw — see {@link ResponseGetArkadeInfo} for why.
|
|
19058
|
+
*/
|
|
19059
|
+
async getArkadeInfo(opts) {
|
|
19060
|
+
const message = {
|
|
19061
|
+
id: getRandomId(),
|
|
19062
|
+
tag: this.messageTag,
|
|
19063
|
+
type: "GET_ARKADE_INFO",
|
|
19064
|
+
// omitted entirely for the default read: wire-shape hygiene
|
|
19065
|
+
// toward workers built before the option existed. (Dedup is
|
|
19066
|
+
// unaffected either way — the key is JSON.stringify, which drops
|
|
19067
|
+
// undefined-valued properties.)
|
|
19068
|
+
...opts?.requireLive ? { payload: { requireLive: true } } : {}
|
|
19069
|
+
};
|
|
19070
|
+
try {
|
|
19071
|
+
const response = await this.sendMessage(message);
|
|
19072
|
+
return response.payload.info;
|
|
19073
|
+
} catch (error) {
|
|
19074
|
+
throw new Error(`Failed to get arkade info: ${error}`, { cause: error });
|
|
19075
|
+
}
|
|
19076
|
+
}
|
|
19077
|
+
/**
|
|
19078
|
+
* An {@link ArkadeReader} that speaks to the worker rather than to the
|
|
19079
|
+
* server. The page holds no provider, so a caller that built its own from a
|
|
19080
|
+
* URL would open a second connection outside the worker's rate gate and
|
|
19081
|
+
* caches — this proxy is what keeps chain reads in one place.
|
|
19082
|
+
*/
|
|
19083
|
+
async getArkadeReader() {
|
|
19084
|
+
return {
|
|
19085
|
+
getVtxos: async (opts) => {
|
|
19086
|
+
const message = {
|
|
19087
|
+
id: getRandomId(),
|
|
19088
|
+
tag: this.messageTag,
|
|
19089
|
+
type: "INDEXER_GET_VTXOS",
|
|
19090
|
+
payload: { opts }
|
|
19091
|
+
};
|
|
19092
|
+
try {
|
|
19093
|
+
const response = await this.sendMessage(message);
|
|
19094
|
+
const { vtxos, page } = response.payload;
|
|
19095
|
+
return { vtxos: vtxos.map(normalizeVtxo), page: page && { ...page } };
|
|
19096
|
+
} catch (error) {
|
|
19097
|
+
throw new Error(`Failed to get vtxos: ${error}`, { cause: error });
|
|
19098
|
+
}
|
|
19099
|
+
},
|
|
19100
|
+
getVirtualTxs: async (txids, opts) => {
|
|
19101
|
+
const message = {
|
|
19102
|
+
id: getRandomId(),
|
|
19103
|
+
tag: this.messageTag,
|
|
19104
|
+
type: "INDEXER_GET_VIRTUAL_TXS",
|
|
19105
|
+
payload: { txids, opts }
|
|
19106
|
+
};
|
|
19107
|
+
try {
|
|
19108
|
+
const response = await this.sendMessage(message);
|
|
19109
|
+
const { txs, page } = response.payload;
|
|
19110
|
+
return { txs: [...txs], page: page && { ...page } };
|
|
19111
|
+
} catch (error) {
|
|
19112
|
+
throw new Error(`Failed to get virtual txs: ${error}`, { cause: error });
|
|
19113
|
+
}
|
|
19114
|
+
}
|
|
19115
|
+
};
|
|
19116
|
+
}
|
|
18904
19117
|
async getBalance() {
|
|
18905
19118
|
const message = {
|
|
18906
19119
|
id: getRandomId(),
|
|
@@ -19557,6 +19770,43 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
|
|
|
19557
19770
|
async signerForDescriptor(descriptor) {
|
|
19558
19771
|
return resolveDescriptorSigner(descriptor, this.identity);
|
|
19559
19772
|
}
|
|
19773
|
+
/**
|
|
19774
|
+
* An {@link ArkadeBroadcaster} proxied to the worker, which holds the
|
|
19775
|
+
* provider. Only `ServiceWorkerWallet` offers one: a readonly worker
|
|
19776
|
+
* refuses `SUBMIT_TX`/`FINALIZE_TX` outright, so exposing it on the
|
|
19777
|
+
* readonly class would promise something the boundary rejects.
|
|
19778
|
+
*/
|
|
19779
|
+
async getArkadeBroadcaster() {
|
|
19780
|
+
return {
|
|
19781
|
+
submitTx: async (signedArkTx, checkpointTxs) => {
|
|
19782
|
+
const message = {
|
|
19783
|
+
id: getRandomId(),
|
|
19784
|
+
tag: this.messageTag,
|
|
19785
|
+
type: "SUBMIT_TX",
|
|
19786
|
+
payload: { signedArkTx, checkpointTxs }
|
|
19787
|
+
};
|
|
19788
|
+
try {
|
|
19789
|
+
const response = await this.sendMessage(message);
|
|
19790
|
+
return response.payload;
|
|
19791
|
+
} catch (error) {
|
|
19792
|
+
throw new Error(`Failed to submit tx: ${error}`, { cause: error });
|
|
19793
|
+
}
|
|
19794
|
+
},
|
|
19795
|
+
finalizeTx: async (arkTxid, finalCheckpointTxs) => {
|
|
19796
|
+
const message = {
|
|
19797
|
+
id: getRandomId(),
|
|
19798
|
+
tag: this.messageTag,
|
|
19799
|
+
type: "FINALIZE_TX",
|
|
19800
|
+
payload: { arkTxid, finalCheckpointTxs }
|
|
19801
|
+
};
|
|
19802
|
+
try {
|
|
19803
|
+
await this.sendMessage(message);
|
|
19804
|
+
} catch (error) {
|
|
19805
|
+
throw new Error(`Failed to finalize tx: ${error}`, { cause: error });
|
|
19806
|
+
}
|
|
19807
|
+
}
|
|
19808
|
+
};
|
|
19809
|
+
}
|
|
19560
19810
|
async sendBitcoin(params) {
|
|
19561
19811
|
const message = {
|
|
19562
19812
|
id: getRandomId(),
|
|
@@ -23055,8 +23305,14 @@ var ArkadeTransactionBuilder = class {
|
|
|
23055
23305
|
if (!client.identity) {
|
|
23056
23306
|
throw new Error("a signing identity is required for non-covenant spends");
|
|
23057
23307
|
}
|
|
23308
|
+
const ark = client.arkProvider;
|
|
23309
|
+
if (!ark.submitTx || !ark.finalizeTx) {
|
|
23310
|
+
throw new Error(
|
|
23311
|
+
"broadcasting requires an `arkade` provider with `submitTx`/`finalizeTx` on the Arkade client"
|
|
23312
|
+
);
|
|
23313
|
+
}
|
|
23058
23314
|
const signedArk = await this.signArk(arkTx, userInputs);
|
|
23059
|
-
const res = await
|
|
23315
|
+
const res = await ark.submitTx(
|
|
23060
23316
|
base64.encode(signedArk.toPSBT()),
|
|
23061
23317
|
checkpoints.map((c) => base64.encode(c.toPSBT()))
|
|
23062
23318
|
);
|
|
@@ -23067,7 +23323,7 @@ var ArkadeTransactionBuilder = class {
|
|
|
23067
23323
|
async ({ server }) => base64.encode((await client.identity.sign(server, [0])).toPSBT())
|
|
23068
23324
|
)
|
|
23069
23325
|
);
|
|
23070
|
-
await
|
|
23326
|
+
await ark.finalizeTx(res.arkTxid, finalCps);
|
|
23071
23327
|
return {
|
|
23072
23328
|
txid: res.arkTxid,
|
|
23073
23329
|
signedArkTx: res.finalArkTx,
|
|
@@ -23155,6 +23411,7 @@ var BIP21Error = /* @__PURE__ */ ((BIP21Error2) => {
|
|
|
23155
23411
|
BIP21Error2["INVALID_ADDRESS"] = "Invalid address";
|
|
23156
23412
|
return BIP21Error2;
|
|
23157
23413
|
})(BIP21Error || {});
|
|
23414
|
+
var ARK_HRP = /^(?:t?ark|T?ARK)/;
|
|
23158
23415
|
var BIP21 = class _BIP21 {
|
|
23159
23416
|
/**
|
|
23160
23417
|
* Create a BIP21 URI from the provided parameters.
|
|
@@ -23178,7 +23435,7 @@ var BIP21 = class _BIP21 {
|
|
|
23178
23435
|
}
|
|
23179
23436
|
queryParams[key] = value;
|
|
23180
23437
|
} else if (key === "ark") {
|
|
23181
|
-
if (typeof value === "string" &&
|
|
23438
|
+
if (typeof value === "string" && ARK_HRP.test(value)) {
|
|
23182
23439
|
queryParams[key] = value;
|
|
23183
23440
|
} else {
|
|
23184
23441
|
console.warn("Invalid ARK address format");
|
|
@@ -23198,7 +23455,7 @@ var BIP21 = class _BIP21 {
|
|
|
23198
23455
|
Object.entries(queryParams).map(([k, v]) => [k, String(v)])
|
|
23199
23456
|
)
|
|
23200
23457
|
).toString() : "";
|
|
23201
|
-
return `bitcoin:${address
|
|
23458
|
+
return `bitcoin:${address ?? ""}${query}`;
|
|
23202
23459
|
}
|
|
23203
23460
|
/**
|
|
23204
23461
|
* Integer-sats amount encoded in a BIP21 URI (`amount=` is BTC), or
|
|
@@ -23231,7 +23488,7 @@ var BIP21 = class _BIP21 {
|
|
|
23231
23488
|
const [address, query] = withoutPrefix.split("?");
|
|
23232
23489
|
const params = {};
|
|
23233
23490
|
if (address) {
|
|
23234
|
-
params.address = address
|
|
23491
|
+
params.address = address;
|
|
23235
23492
|
}
|
|
23236
23493
|
if (query) {
|
|
23237
23494
|
const queryParams = new URLSearchParams(query);
|
|
@@ -23247,7 +23504,7 @@ var BIP21 = class _BIP21 {
|
|
|
23247
23504
|
}
|
|
23248
23505
|
params[key] = amount;
|
|
23249
23506
|
} else if (key === "ark") {
|
|
23250
|
-
if (
|
|
23507
|
+
if (ARK_HRP.test(value)) {
|
|
23251
23508
|
params[key] = value;
|
|
23252
23509
|
} else {
|
|
23253
23510
|
console.warn("Invalid ARK address format");
|
|
@@ -23499,7 +23756,7 @@ function onchainRail() {
|
|
|
23499
23756
|
function createDefaultPaymentRouter(wallet) {
|
|
23500
23757
|
return new PaymentRouter({
|
|
23501
23758
|
wallet,
|
|
23502
|
-
prefs: { priority: ["ark", "
|
|
23759
|
+
prefs: { priority: ["ark", "onchain"] }
|
|
23503
23760
|
}).use(arkRail()).use(onchainRail());
|
|
23504
23761
|
}
|
|
23505
23762
|
/*! Bundled license information:
|
|
@@ -23508,6 +23765,6 @@ function createDefaultPaymentRouter(wallet) {
|
|
|
23508
23765
|
(*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) *)
|
|
23509
23766
|
*/
|
|
23510
23767
|
|
|
23511
|
-
export { ARKADE_MAGIC, ARKADE_SALTED_PREIMAGE_TAG, ARKADE_SWAP_PREIMAGE_TAG, 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 };
|
|
23512
|
-
//# sourceMappingURL=chunk-
|
|
23513
|
-
//# sourceMappingURL=chunk-
|
|
23768
|
+
export { ARKADE_MAGIC, ARKADE_SALTED_PREIMAGE_TAG, ARKADE_SWAP_PREIMAGE_TAG, 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 };
|
|
23769
|
+
//# sourceMappingURL=chunk-6F2Q32KA.js.map
|
|
23770
|
+
//# sourceMappingURL=chunk-6F2Q32KA.js.map
|