@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.
Files changed (80) hide show
  1. package/README.md +35 -5
  2. package/dist/adapters/expo.cjs +5 -5
  3. package/dist/adapters/expo.d.cts +2 -2
  4. package/dist/adapters/expo.d.ts +2 -2
  5. package/dist/adapters/expo.js +3 -3
  6. package/dist/adapters/indexedDB.cjs +5 -5
  7. package/dist/adapters/indexedDB.js +4 -4
  8. package/dist/{asyncStorageTaskQueue-BgUJN-3X.d.ts → asyncStorageTaskQueue-DAs_n1xr.d.ts} +2 -2
  9. package/dist/{asyncStorageTaskQueue-Cstx6hS7.d.cts → asyncStorageTaskQueue-DqGRG66E.d.cts} +2 -2
  10. package/dist/{chunk-L5SCQYHF.js → chunk-6COJWPBO.js} +19 -9
  11. package/dist/chunk-6COJWPBO.js.map +1 -0
  12. package/dist/{chunk-XQPN5YP2.cjs → chunk-KB7OP3FG.cjs} +17 -17
  13. package/dist/{chunk-XQPN5YP2.cjs.map → chunk-KB7OP3FG.cjs.map} +1 -1
  14. package/dist/{chunk-XLWDX7QZ.js → chunk-LPK4UBNJ.js} +4 -4
  15. package/dist/{chunk-XLWDX7QZ.js.map → chunk-LPK4UBNJ.js.map} +1 -1
  16. package/dist/{chunk-MNMPGEK2.js → chunk-MEJSBJVH.js} +4 -4
  17. package/dist/{chunk-MNMPGEK2.js.map → chunk-MEJSBJVH.js.map} +1 -1
  18. package/dist/{chunk-HQ4DMGA4.cjs → chunk-MXY23OPP.cjs} +10 -10
  19. package/dist/{chunk-HQ4DMGA4.cjs.map → chunk-MXY23OPP.cjs.map} +1 -1
  20. package/dist/{chunk-WIFL5QYZ.cjs → chunk-Q5WQ4Y2I.cjs} +53 -54
  21. package/dist/chunk-Q5WQ4Y2I.cjs.map +1 -0
  22. package/dist/{chunk-5MLC2HU3.cjs → chunk-RZ2NGS6A.cjs} +19 -7
  23. package/dist/chunk-RZ2NGS6A.cjs.map +1 -0
  24. package/dist/{chunk-YG7T6LI3.js → chunk-SG4XYCS7.js} +3 -3
  25. package/dist/{chunk-YG7T6LI3.js.map → chunk-SG4XYCS7.js.map} +1 -1
  26. package/dist/{chunk-TA7XLEP2.js → chunk-VTE3NYVD.js} +298 -41
  27. package/dist/chunk-VTE3NYVD.js.map +1 -0
  28. package/dist/{chunk-GVHUHTRH.cjs → chunk-WQIWUTYS.cjs} +17 -17
  29. package/dist/{chunk-GVHUHTRH.cjs.map → chunk-WQIWUTYS.cjs.map} +1 -1
  30. package/dist/{chunk-EBYCTLET.cjs → chunk-YEUXBECG.cjs} +727 -469
  31. package/dist/chunk-YEUXBECG.cjs.map +1 -0
  32. package/dist/{chunk-2PPL3O7Z.js → chunk-ZPSUBAWQ.js} +7 -8
  33. package/dist/chunk-ZPSUBAWQ.js.map +1 -0
  34. package/dist/contracts/handlers/index.cjs +9 -9
  35. package/dist/contracts/handlers/index.d.cts +3 -3
  36. package/dist/contracts/handlers/index.d.ts +3 -3
  37. package/dist/contracts/handlers/index.js +2 -2
  38. package/dist/{delegate-BPdzTbwN.d.ts → delegate-B9Bmrns7.d.ts} +1 -1
  39. package/dist/{delegate-DrwIar11.d.cts → delegate-CZzIduW4.d.cts} +1 -1
  40. package/dist/{hdWalletCapable-D4WH35z0.d.cts → hdWalletCapable-BIl3yLVM.d.cts} +103 -28
  41. package/dist/{hdWalletCapable-DyxCiNVE.d.ts → hdWalletCapable-Cr5nGpK5.d.ts} +103 -28
  42. package/dist/{index-TZJvbIaA.d.ts → index-Ci5MmNnK.d.cts} +7 -7
  43. package/dist/{index-BqhpAqqj.d.cts → index-DQ1Hb2w_.d.ts} +7 -7
  44. package/dist/{index-dWRqYSdS.d.ts → index-DnNIOqHS.d.cts} +168 -19
  45. package/dist/{index-dWRqYSdS.d.cts → index-DnNIOqHS.d.ts} +168 -19
  46. package/dist/index.cjs +307 -291
  47. package/dist/index.d.cts +121 -29
  48. package/dist/index.d.ts +121 -29
  49. package/dist/index.js +4 -4
  50. package/dist/repositories/realm/index.cjs +19 -19
  51. package/dist/repositories/realm/index.d.cts +2 -2
  52. package/dist/repositories/realm/index.d.ts +2 -2
  53. package/dist/repositories/realm/index.js +5 -5
  54. package/dist/repositories/sqlite/index.cjs +18 -18
  55. package/dist/repositories/sqlite/index.d.cts +2 -2
  56. package/dist/repositories/sqlite/index.d.ts +2 -2
  57. package/dist/repositories/sqlite/index.js +5 -5
  58. package/dist/{taskRunner-CzYKyJ9c.d.cts → taskRunner-BDb5Ee2J.d.cts} +2 -2
  59. package/dist/{taskRunner-D2fnbqYw.d.ts → taskRunner-F7wNJcF3.d.ts} +2 -2
  60. package/dist/wallet/expo/background.cjs +14 -14
  61. package/dist/wallet/expo/background.d.cts +3 -3
  62. package/dist/wallet/expo/background.d.ts +3 -3
  63. package/dist/wallet/expo/background.js +6 -6
  64. package/dist/wallet/expo/index.cjs +23 -14
  65. package/dist/wallet/expo/index.cjs.map +1 -1
  66. package/dist/wallet/expo/index.d.cts +7 -4
  67. package/dist/wallet/expo/index.d.ts +7 -4
  68. package/dist/wallet/expo/index.js +14 -5
  69. package/dist/wallet/expo/index.js.map +1 -1
  70. package/dist/worker/expo/index.cjs +9 -9
  71. package/dist/worker/expo/index.d.cts +4 -4
  72. package/dist/worker/expo/index.d.ts +4 -4
  73. package/dist/worker/expo/index.js +5 -5
  74. package/package.json +3 -2
  75. package/dist/chunk-2PPL3O7Z.js.map +0 -1
  76. package/dist/chunk-5MLC2HU3.cjs.map +0 -1
  77. package/dist/chunk-EBYCTLET.cjs.map +0 -1
  78. package/dist/chunk-L5SCQYHF.js.map +0 -1
  79. package/dist/chunk-TA7XLEP2.js.map +0 -1
  80. package/dist/chunk-WIFL5QYZ.cjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkGVHUHTRH_cjs = require('./chunk-GVHUHTRH.cjs');
4
- var chunkWIFL5QYZ_cjs = require('./chunk-WIFL5QYZ.cjs');
5
- var chunk5MLC2HU3_cjs = require('./chunk-5MLC2HU3.cjs');
3
+ var chunkWQIWUTYS_cjs = require('./chunk-WQIWUTYS.cjs');
4
+ var chunkQ5WQ4Y2I_cjs = require('./chunk-Q5WQ4Y2I.cjs');
5
+ var chunkRZ2NGS6A_cjs = require('./chunk-RZ2NGS6A.cjs');
6
6
  var chunk5BLDMQED_cjs = require('./chunk-5BLDMQED.cjs');
7
7
  var utils_js = require('@scure/btc-signer/utils.js');
8
8
  var btcSigner = require('@scure/btc-signer');
@@ -188,7 +188,7 @@ var TreeSignerSession = class _TreeSignerSession {
188
188
  noncesByPubkey.set(base.hex.encode(myPublicKey.subarray(1)), myNonce);
189
189
  const tx = this.graph.find(txid);
190
190
  if (!tx) throw new Error(`missing tx for txid ${txid}`);
191
- const cosigners = chunk5MLC2HU3_cjs.getArkPsbtFields(tx.root, 0, chunk5MLC2HU3_cjs.CosignerPublicKey).map(
191
+ const cosigners = chunkRZ2NGS6A_cjs.getArkPsbtFields(tx.root, 0, chunkRZ2NGS6A_cjs.CosignerPublicKey).map(
192
192
  (c) => base.hex.encode(c.key.subarray(1))
193
193
  // xonly pubkey
194
194
  );
@@ -240,7 +240,7 @@ var TreeSignerSession = class _TreeSignerSession {
240
240
  if (!aggNonce) throw new Error("missing aggregate nonce");
241
241
  const prevoutAmounts = [];
242
242
  const prevoutScripts = [];
243
- const cosigners = chunk5MLC2HU3_cjs.getArkPsbtFields(g.root, 0, chunk5MLC2HU3_cjs.CosignerPublicKey).map((c) => c.key);
243
+ const cosigners = chunkRZ2NGS6A_cjs.getArkPsbtFields(g.root, 0, chunkRZ2NGS6A_cjs.CosignerPublicKey).map((c) => c.key);
244
244
  const { finalKey } = aggregateKeys(cosigners, true, {
245
245
  taprootTweak: this.scriptRoot
246
246
  });
@@ -323,7 +323,7 @@ var SingleKey = class _SingleKey {
323
323
  async sign(tx, inputIndexes) {
324
324
  const txCpy = tx.clone();
325
325
  if (!inputIndexes) {
326
- chunk5MLC2HU3_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH);
326
+ chunkRZ2NGS6A_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH);
327
327
  try {
328
328
  if (!txCpy.sign(this.key, ALLOWED_SIGHASH)) {
329
329
  throw new Error("Failed to sign transaction");
@@ -432,7 +432,7 @@ var SeedIdentity = class _SeedIdentity {
432
432
  let network;
433
433
  if ("descriptor" in opts && typeof opts.descriptor === "string") {
434
434
  descriptor = opts.descriptor;
435
- network = chunkWIFL5QYZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
435
+ network = chunkQ5WQ4Y2I_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
436
436
  } else {
437
437
  network = opts.isMainnet ?? true ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
438
438
  descriptor = descriptorsScure.scriptExpressions.trBIP32({
@@ -530,7 +530,7 @@ var SeedIdentity = class _SeedIdentity {
530
530
  * `StaticDescriptorProvider` for legacy single-key wallets.
531
531
  */
532
532
  isOurs(descriptor) {
533
- return chunkWIFL5QYZ_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
533
+ return chunkQ5WQ4Y2I_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
534
534
  }
535
535
  /**
536
536
  * Signs each request with the key derived from its descriptor.
@@ -579,7 +579,7 @@ var SeedIdentity = class _SeedIdentity {
579
579
  }
580
580
  // ── internal helpers ─────────────────────────────────────────────
581
581
  derivePrivateKeyForDescriptor(descriptor) {
582
- const network = chunkWIFL5QYZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
582
+ const network = chunkQ5WQ4Y2I_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
583
583
  const expansion = descriptorsScure.expand({ descriptor, network });
584
584
  if (expansion.isRanged) {
585
585
  throw new Error(
@@ -604,7 +604,7 @@ var SeedIdentity = class _SeedIdentity {
604
604
  signTxWithKey(tx, key, inputIndexes) {
605
605
  const txCpy = tx.clone();
606
606
  if (!inputIndexes) {
607
- chunk5MLC2HU3_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH2);
607
+ chunkRZ2NGS6A_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH2);
608
608
  try {
609
609
  if (!txCpy.sign(key, ALLOWED_SIGHASH2)) {
610
610
  throw new Error("Failed to sign transaction");
@@ -666,7 +666,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
666
666
  */
667
667
  descriptor;
668
668
  constructor(descriptor) {
669
- const network = chunkWIFL5QYZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
669
+ const network = chunkQ5WQ4Y2I_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
670
670
  let expansion;
671
671
  try {
672
672
  expansion = descriptorsScure.expand({ descriptor, network, index: 0 });
@@ -716,7 +716,7 @@ var ReadonlyDescriptorIdentity = class _ReadonlyDescriptorIdentity {
716
716
  * `StaticDescriptorProvider` for legacy single-key wallets.
717
717
  */
718
718
  isOurs(descriptor) {
719
- return chunkWIFL5QYZ_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
719
+ return chunkQ5WQ4Y2I_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
720
720
  }
721
721
  };
722
722
  function serializeSeedOwnedSigningIdentity(identity) {
@@ -878,10 +878,10 @@ var DescriptorIdentity = class {
878
878
  this.base = base;
879
879
  }
880
880
  async xOnlyPublicKey() {
881
- return chunkWIFL5QYZ_cjs.deriveDescriptorLeafPubKey(this.descriptor);
881
+ return chunkQ5WQ4Y2I_cjs.deriveDescriptorLeafPubKey(this.descriptor);
882
882
  }
883
883
  async compressedPublicKey() {
884
- return chunkWIFL5QYZ_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
884
+ return chunkQ5WQ4Y2I_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
885
885
  }
886
886
  async sign(tx, inputIndexes) {
887
887
  const [signed] = await this.signer.signWithDescriptor([
@@ -949,12 +949,12 @@ var WalletCannotAllocateAddressError = class extends Error {
949
949
  };
950
950
  async function resolveDescriptorSigner(descriptor, identity, provider) {
951
951
  const owner = provider?.isOurs(descriptor) ? provider : isHDCapableIdentity(identity) && identity.isOurs(descriptor) ? identity : void 0;
952
- if (owner && chunkWIFL5QYZ_cjs.parseHDDescriptor(descriptor)) {
952
+ if (owner && chunkQ5WQ4Y2I_cjs.parseHDDescriptor(descriptor)) {
953
953
  return new DescriptorIdentity({ descriptor, signer: owner, base: identity });
954
954
  }
955
955
  let key;
956
956
  try {
957
- key = chunkWIFL5QYZ_cjs.deriveDescriptorLeafPubKey(descriptor);
957
+ key = chunkQ5WQ4Y2I_cjs.deriveDescriptorLeafPubKey(descriptor);
958
958
  } catch {
959
959
  throw new ForeignDescriptorError(descriptor);
960
960
  }
@@ -1329,14 +1329,14 @@ function buildSaltedPreimageMessage(xonly, salt) {
1329
1329
  }
1330
1330
  var PREIMAGE_INDEX = 0;
1331
1331
  function isPerArtifactDescriptor(descriptor) {
1332
- return chunkWIFL5QYZ_cjs.parseHDDescriptor(descriptor) !== null;
1332
+ return chunkQ5WQ4Y2I_cjs.parseHDDescriptor(descriptor) !== null;
1333
1333
  }
1334
1334
  async function provisionDescriptor(wallet) {
1335
1335
  const allocated = isHDAllocationCapable(wallet) ? await wallet.getNextSigningDescriptor() : void 0;
1336
- return allocated ?? await chunkWIFL5QYZ_cjs.identityDescriptor(wallet.identity);
1336
+ return allocated ?? await chunkQ5WQ4Y2I_cjs.identityDescriptor(wallet.identity);
1337
1337
  }
1338
1338
  async function provisionRefundKey(wallet) {
1339
- const descriptor = await chunkWIFL5QYZ_cjs.identityDescriptor(wallet.identity);
1339
+ const descriptor = await chunkQ5WQ4Y2I_cjs.identityDescriptor(wallet.identity);
1340
1340
  const signer = await contractSigner(wallet, descriptor);
1341
1341
  const pubkey = await signer.xOnlyPublicKey();
1342
1342
  const identityPubkey = await wallet.identity.xOnlyPublicKey();
@@ -1346,7 +1346,7 @@ async function provisionRefundKey(wallet) {
1346
1346
  );
1347
1347
  }
1348
1348
  const address = await wallet.getAddress();
1349
- const { pkScript } = chunk5MLC2HU3_cjs.ArkAddress.decode(address);
1349
+ const { pkScript } = chunkRZ2NGS6A_cjs.ArkAddress.decode(address);
1350
1350
  return { descriptor, pubkey, pkScript, address };
1351
1351
  }
1352
1352
  async function provisionClaimSecret(wallet, opts = {}) {
@@ -1392,7 +1392,7 @@ async function contractSigner(wallet, descriptor) {
1392
1392
  const signer = isHDWalletCapable(wallet) ? await wallet.signerForDescriptor(descriptor) : wallet.identity;
1393
1393
  let expected;
1394
1394
  try {
1395
- expected = chunkWIFL5QYZ_cjs.deriveDescriptorLeafPubKey(descriptor);
1395
+ expected = chunkQ5WQ4Y2I_cjs.deriveDescriptorLeafPubKey(descriptor);
1396
1396
  } catch (cause) {
1397
1397
  throw new ForeignDescriptorError(descriptor, { cause });
1398
1398
  }
@@ -1611,14 +1611,14 @@ var RestDelegateProvider = class {
1611
1611
  */
1612
1612
  async delegate(intent, forfeitTxs, options) {
1613
1613
  const url = `${this.url}/v1/delegate`;
1614
- const response = await chunk5MLC2HU3_cjs.baseFetch(url, {
1614
+ const response = await chunkRZ2NGS6A_cjs.baseFetch(url, {
1615
1615
  method: "POST",
1616
1616
  headers: {
1617
1617
  "Content-Type": "application/json"
1618
1618
  },
1619
1619
  body: JSON.stringify({
1620
1620
  intent: {
1621
- message: chunk5MLC2HU3_cjs.Intent.encodeMessage(intent.message),
1621
+ message: chunkRZ2NGS6A_cjs.Intent.encodeMessage(intent.message),
1622
1622
  proof: intent.proof
1623
1623
  },
1624
1624
  forfeit_txs: forfeitTxs,
@@ -1638,7 +1638,7 @@ var RestDelegateProvider = class {
1638
1638
  */
1639
1639
  async getDelegateInfo() {
1640
1640
  const url = `${this.url}/v1/delegator/info`;
1641
- const response = await chunk5MLC2HU3_cjs.rateGate.runHttp(url, () => chunk5MLC2HU3_cjs.baseFetch(url));
1641
+ const response = await chunkRZ2NGS6A_cjs.rateGate.runHttp(url, () => chunkRZ2NGS6A_cjs.baseFetch(url));
1642
1642
  if (!response.ok) {
1643
1643
  const errorText2 = await response.text();
1644
1644
  throw new Error(`Failed to get delegate info: ${errorText2}`);
@@ -1663,7 +1663,7 @@ var ESPLORA_URL = {
1663
1663
  regtest: "http://localhost:3000/api"
1664
1664
  };
1665
1665
  var EsploraProvider = class {
1666
- constructor(baseUrl = ESPLORA_URL[chunk5MLC2HU3_cjs.DEFAULT_NETWORK_NAME], opts) {
1666
+ constructor(baseUrl = ESPLORA_URL[chunkRZ2NGS6A_cjs.DEFAULT_NETWORK_NAME], opts) {
1667
1667
  this.baseUrl = baseUrl;
1668
1668
  this.pollingInterval = opts?.pollingInterval ?? 15e3;
1669
1669
  this.forcePolling = opts?.forcePolling ?? false;
@@ -1682,14 +1682,14 @@ var EsploraProvider = class {
1682
1682
  */
1683
1683
  addressWatches = /* @__PURE__ */ new Map();
1684
1684
  async getCoins(address) {
1685
- const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
1685
+ const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
1686
1686
  if (!response.ok) {
1687
1687
  throw new Error(`Failed to fetch UTXOs: ${response.statusText}`);
1688
1688
  }
1689
1689
  return response.json();
1690
1690
  }
1691
1691
  async getFeeRate() {
1692
- const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
1692
+ const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
1693
1693
  if (response.status === 404) {
1694
1694
  return void 0;
1695
1695
  }
@@ -1710,7 +1710,7 @@ var EsploraProvider = class {
1710
1710
  }
1711
1711
  }
1712
1712
  async getTxOutspends(txid) {
1713
- const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
1713
+ const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
1714
1714
  if (!response.ok) {
1715
1715
  const error = await response.text();
1716
1716
  throw new Error(`Failed to get transaction outspends: ${error}`);
@@ -1718,7 +1718,7 @@ var EsploraProvider = class {
1718
1718
  return response.json();
1719
1719
  }
1720
1720
  async getTransactions(address) {
1721
- const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
1721
+ const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
1722
1722
  if (!response.ok) {
1723
1723
  const error = await response.text();
1724
1724
  throw new Error(`Failed to get transactions: ${error}`);
@@ -1731,14 +1731,14 @@ var EsploraProvider = class {
1731
1731
  * usable as a change probe for the polling fallback.
1732
1732
  */
1733
1733
  async getAddressStats(address) {
1734
- const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/address/${address}`);
1734
+ const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/address/${address}`);
1735
1735
  if (!response.ok) {
1736
1736
  throw new Error(`Failed to get address stats: ${response.statusText}`);
1737
1737
  }
1738
1738
  return response.json();
1739
1739
  }
1740
1740
  async getRawTransaction(txid) {
1741
- const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/hex`);
1741
+ const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/hex`);
1742
1742
  if (!response.ok) {
1743
1743
  const error = await response.text();
1744
1744
  throw new Error(`Failed to get raw transaction ${txid}: ${error}`);
@@ -1746,7 +1746,7 @@ var EsploraProvider = class {
1746
1746
  return base.hex.decode((await response.text()).trim());
1747
1747
  }
1748
1748
  async getTxStatus(txid) {
1749
- const txresponse = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
1749
+ const txresponse = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
1750
1750
  if (!txresponse.ok) {
1751
1751
  throw new Error(txresponse.statusText);
1752
1752
  }
@@ -1754,7 +1754,7 @@ var EsploraProvider = class {
1754
1754
  if (!tx.status.confirmed) {
1755
1755
  return { confirmed: false };
1756
1756
  }
1757
- const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
1757
+ const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
1758
1758
  if (!response.ok) {
1759
1759
  throw new Error(`Failed to get transaction status: ${response.statusText}`);
1760
1760
  }
@@ -2038,7 +2038,7 @@ var EsploraProvider = class {
2038
2038
  return { subscribers, teardown, started };
2039
2039
  }
2040
2040
  async getChainTip() {
2041
- const tipBlocks = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/blocks`);
2041
+ const tipBlocks = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/blocks`);
2042
2042
  if (!tipBlocks.ok) {
2043
2043
  throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
2044
2044
  }
@@ -2059,7 +2059,7 @@ var EsploraProvider = class {
2059
2059
  };
2060
2060
  }
2061
2061
  async broadcastPackage(parent, child) {
2062
- const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
2062
+ const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
2063
2063
  method: "POST",
2064
2064
  headers: {
2065
2065
  "Content-Type": "application/json"
@@ -2075,7 +2075,7 @@ var EsploraProvider = class {
2075
2075
  return result;
2076
2076
  }
2077
2077
  async broadcastTx(tx) {
2078
- const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/tx`, {
2078
+ const response = await chunkRZ2NGS6A_cjs.baseFetch(`${this.baseUrl}/tx`, {
2079
2079
  method: "POST",
2080
2080
  headers: {
2081
2081
  "Content-Type": "text/plain"
@@ -2258,7 +2258,7 @@ function findP2AOutput(tx) {
2258
2258
  var CHILD_DUST_AMOUNT = 546;
2259
2259
  function buildAnchorChild(params) {
2260
2260
  const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
2261
- const child = new chunk5MLC2HU3_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
2261
+ const child = new chunkRZ2NGS6A_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
2262
2262
  child.addInput(findP2AOutput(parent));
2263
2263
  const estimator = TxWeightEstimator.create().addP2AInput();
2264
2264
  for (const _ of fundingCoins) {
@@ -2306,7 +2306,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
2306
2306
  );
2307
2307
  }
2308
2308
  function buildForfeitTxWithOutput(inputs, output, txLocktime) {
2309
- const tx = new chunk5MLC2HU3_cjs.Transaction({
2309
+ const tx = new chunkRZ2NGS6A_cjs.Transaction({
2310
2310
  version: 3,
2311
2311
  lockTime: txLocktime
2312
2312
  });
@@ -2382,7 +2382,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
2382
2382
  if (previousScriptKey.length !== 32) {
2383
2383
  throw new Error(`parent output ${childIndex} has invalid script`);
2384
2384
  }
2385
- const cosigners = chunk5MLC2HU3_cjs.getArkPsbtFields(child.root, 0, chunk5MLC2HU3_cjs.CosignerPublicKey);
2385
+ const cosigners = chunkRZ2NGS6A_cjs.getArkPsbtFields(child.root, 0, chunkRZ2NGS6A_cjs.CosignerPublicKey);
2386
2386
  if (cosigners.length === 0) {
2387
2387
  throw ErrMissingCosignersPublicKeys;
2388
2388
  }
@@ -2440,7 +2440,7 @@ var EmulatorPacket = class _EmulatorPacket {
2440
2440
  return new _EmulatorPacket(entries);
2441
2441
  }
2442
2442
  static fromBytes(data) {
2443
- const reader = new chunkGVHUHTRH_cjs.BufferReader(data);
2443
+ const reader = new chunkWQIWUTYS_cjs.BufferReader(data);
2444
2444
  const entryCount = reader.readCompactSize();
2445
2445
  const entries = [];
2446
2446
  for (let i = 0; i < entryCount; i++) {
@@ -2458,7 +2458,7 @@ var EmulatorPacket = class _EmulatorPacket {
2458
2458
  return _EmulatorPacket.PACKET_TYPE;
2459
2459
  }
2460
2460
  serialize() {
2461
- const writer = new chunkGVHUHTRH_cjs.BufferWriter();
2461
+ const writer = new chunkWQIWUTYS_cjs.BufferWriter();
2462
2462
  writer.writeCompactSize(this.entries.length);
2463
2463
  for (const entry of this.entries) {
2464
2464
  writer.writeUint16LE(entry.vin);
@@ -2545,7 +2545,7 @@ var Extension = class _Extension {
2545
2545
  `expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
2546
2546
  );
2547
2547
  }
2548
- const reader = new chunkGVHUHTRH_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
2548
+ const reader = new chunkWQIWUTYS_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
2549
2549
  const packets = [];
2550
2550
  while (reader.remaining() > 0) {
2551
2551
  const packetType = reader.readByte();
@@ -2619,7 +2619,7 @@ var Extension = class _Extension {
2619
2619
  */
2620
2620
  getAssetPacket() {
2621
2621
  for (const p of this.packets) {
2622
- if (p instanceof chunkGVHUHTRH_cjs.Packet) {
2622
+ if (p instanceof chunkWQIWUTYS_cjs.Packet) {
2623
2623
  return p;
2624
2624
  }
2625
2625
  }
@@ -2657,8 +2657,8 @@ var Extension = class _Extension {
2657
2657
  };
2658
2658
  function parsePacket(packetType, data) {
2659
2659
  switch (packetType) {
2660
- case chunkGVHUHTRH_cjs.Packet.PACKET_TYPE:
2661
- return chunkGVHUHTRH_cjs.Packet.fromBytes(data);
2660
+ case chunkWQIWUTYS_cjs.Packet.PACKET_TYPE:
2661
+ return chunkWQIWUTYS_cjs.Packet.fromBytes(data);
2662
2662
  case EmulatorPacket.PACKET_TYPE:
2663
2663
  return EmulatorPacket.fromBytes(data);
2664
2664
  default:
@@ -2705,16 +2705,16 @@ function buildOpReturnScript(data) {
2705
2705
  }
2706
2706
  return script;
2707
2707
  }
2708
- var ErrOffchainOutputNotFound = (address) => new chunk5MLC2HU3_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
2709
- var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
2708
+ var ErrOffchainOutputNotFound = (address) => new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
2709
+ var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
2710
2710
  `invalid asset output amount for ${assetId}: got ${got}, want ${want}`
2711
2711
  );
2712
- var ErrAssetGroupNotFound = (assetId) => new chunk5MLC2HU3_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
2713
- var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
2712
+ var ErrAssetGroupNotFound = (assetId) => new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
2713
+ var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
2714
2714
  `asset output not found in asset group ${assetId} at index ${outputIndex}`
2715
2715
  );
2716
- var ErrOnchainOutputNotFound = (address) => new chunk5MLC2HU3_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
2717
- var ErrUnvalidatedOffchainOutput = (address) => new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
2716
+ var ErrOnchainOutputNotFound = (address) => new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
2717
+ var ErrUnvalidatedOffchainOutput = (address) => new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
2718
2718
  `offchain output ${address} cannot be validated: virtual output tree signing did not run`
2719
2719
  );
2720
2720
  var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
@@ -2723,7 +2723,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
2723
2723
  function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
2724
2724
  if (!validatedCommitmentTxid) return;
2725
2725
  if (finalCommitmentTx.id === validatedCommitmentTxid) return;
2726
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
2726
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
2727
2727
  `${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
2728
2728
  );
2729
2729
  }
@@ -2733,7 +2733,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
2733
2733
  for (const recipient of recipients) {
2734
2734
  let arkAddress;
2735
2735
  try {
2736
- arkAddress = chunk5MLC2HU3_cjs.ArkAddress.decode(recipient.address);
2736
+ arkAddress = chunkRZ2NGS6A_cjs.ArkAddress.decode(recipient.address);
2737
2737
  } catch {
2738
2738
  validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
2739
2739
  continue;
@@ -2745,7 +2745,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
2745
2745
  const usedOnchainOutputs = /* @__PURE__ */ new Set();
2746
2746
  for (const recipient of recipients) {
2747
2747
  try {
2748
- chunk5MLC2HU3_cjs.ArkAddress.decode(recipient.address);
2748
+ chunkRZ2NGS6A_cjs.ArkAddress.decode(recipient.address);
2749
2749
  } catch {
2750
2750
  validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
2751
2751
  continue;
@@ -2978,7 +2978,7 @@ function assetMintResolver() {
2978
2978
  if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
2979
2979
  const minted = tx.assets.filter((a) => {
2980
2980
  try {
2981
- return base.hex.encode(chunkGVHUHTRH_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2981
+ return base.hex.encode(chunkWQIWUTYS_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2982
2982
  } catch {
2983
2983
  return false;
2984
2984
  }
@@ -3021,7 +3021,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
3021
3021
  const existing = inputsByAssetId.get(asset.assetId);
3022
3022
  inputsByAssetId.set(asset.assetId, [
3023
3023
  ...existing ?? [],
3024
- chunkGVHUHTRH_cjs.AssetInput.create(inputIndex, asset.amount)
3024
+ chunkWQIWUTYS_cjs.AssetInput.create(inputIndex, asset.amount)
3025
3025
  ]);
3026
3026
  }
3027
3027
  }
@@ -3033,7 +3033,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
3033
3033
  const existing = outputsByAssetId.get(asset.assetId);
3034
3034
  outputsByAssetId.set(asset.assetId, [
3035
3035
  ...existing ?? [],
3036
- chunkGVHUHTRH_cjs.AssetOutput.create(outputIndex, asset.amount)
3036
+ chunkWQIWUTYS_cjs.AssetOutput.create(outputIndex, asset.amount)
3037
3037
  ]);
3038
3038
  }
3039
3039
  }
@@ -3044,7 +3044,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
3044
3044
  const existing = outputsByAssetId.get(asset.assetId);
3045
3045
  outputsByAssetId.set(asset.assetId, [
3046
3046
  ...existing ?? [],
3047
- chunkGVHUHTRH_cjs.AssetOutput.create(outputIndex, asset.amount)
3047
+ chunkWQIWUTYS_cjs.AssetOutput.create(outputIndex, asset.amount)
3048
3048
  ]);
3049
3049
  }
3050
3050
  }
@@ -3053,11 +3053,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
3053
3053
  for (const assetIdStr of allAssetIds) {
3054
3054
  const inputs = inputsByAssetId.get(assetIdStr);
3055
3055
  const outputs = outputsByAssetId.get(assetIdStr);
3056
- const assetId = chunkGVHUHTRH_cjs.AssetId.fromString(assetIdStr);
3057
- const group = chunkGVHUHTRH_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
3056
+ const assetId = chunkWQIWUTYS_cjs.AssetId.fromString(assetIdStr);
3057
+ const group = chunkWQIWUTYS_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
3058
3058
  groups.push(group);
3059
3059
  }
3060
- return chunkGVHUHTRH_cjs.Packet.create(groups);
3060
+ return chunkWQIWUTYS_cjs.Packet.create(groups);
3061
3061
  }
3062
3062
  function selectCoinsWithAsset(coins, assetId, requiredAmount) {
3063
3063
  const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
@@ -3094,7 +3094,7 @@ function selectedCoinsToAssetInputs(selectedCoins) {
3094
3094
  }
3095
3095
  function toXOnlySignerHex(pubkeyHex) {
3096
3096
  const bytes = base.hex.decode(pubkeyHex);
3097
- if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunkWIFL5QYZ_cjs.toXOnly(bytes, "signer key"));
3097
+ if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunkQ5WQ4Y2I_cjs.toXOnly(bytes, "signer key"));
3098
3098
  throw new Error(`invalid signer pubkey length: expected 32 or 33 bytes, got ${bytes.length}`);
3099
3099
  }
3100
3100
  function signerSetFromInfo(info) {
@@ -3141,13 +3141,13 @@ var toTimelock = (value) => ({
3141
3141
  var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
3142
3142
  function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
3143
3143
  if (policy.requireSeconds && timelock.type === "blocks") {
3144
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3144
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3145
3145
  `${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
3146
3146
  );
3147
3147
  }
3148
3148
  const seconds = toSeconds(timelock);
3149
3149
  if (seconds < policy.minSeconds) {
3150
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3150
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3151
3151
  `${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
3152
3152
  );
3153
3153
  }
@@ -3168,7 +3168,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
3168
3168
  }
3169
3169
  function assertValidBatchExpiry(batchExpiry, policy) {
3170
3170
  if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
3171
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3171
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3172
3172
  `batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
3173
3173
  );
3174
3174
  }
@@ -3198,21 +3198,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
3198
3198
  function assertValidServerUnrollScript(checkpointTapscript, policy) {
3199
3199
  let script;
3200
3200
  try {
3201
- script = chunk5MLC2HU3_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
3201
+ script = chunkRZ2NGS6A_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
3202
3202
  } catch (e) {
3203
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3203
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3204
3204
  `checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
3205
3205
  );
3206
3206
  }
3207
3207
  if (policy.advertisedForfeitPubkey !== void 0) {
3208
3208
  const { pubkeys } = script.params;
3209
3209
  if (pubkeys.length !== 1) {
3210
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3210
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3211
3211
  `checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
3212
3212
  );
3213
3213
  }
3214
3214
  if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
3215
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3215
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3216
3216
  `checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
3217
3217
  );
3218
3218
  }
@@ -3256,8 +3256,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
3256
3256
  function buildVirtualTx(inputs, outputs) {
3257
3257
  let lockTime = 0n;
3258
3258
  for (const input of inputs) {
3259
- const tapscript = chunk5MLC2HU3_cjs.decodeTapscript(chunk5MLC2HU3_cjs.scriptFromTapLeafScript(input.tapLeafScript));
3260
- if (chunk5MLC2HU3_cjs.CLTVMultisigTapscript.is(tapscript)) {
3259
+ const tapscript = chunkRZ2NGS6A_cjs.decodeTapscript(chunkRZ2NGS6A_cjs.scriptFromTapLeafScript(input.tapLeafScript));
3260
+ if (chunkRZ2NGS6A_cjs.CLTVMultisigTapscript.is(tapscript)) {
3261
3261
  if (lockTime !== 0n) {
3262
3262
  if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
3263
3263
  throw new Error("cannot mix seconds and blocks locktime");
@@ -3268,7 +3268,7 @@ function buildVirtualTx(inputs, outputs) {
3268
3268
  }
3269
3269
  }
3270
3270
  }
3271
- const tx = new chunk5MLC2HU3_cjs.Transaction({
3271
+ const tx = new chunkRZ2NGS6A_cjs.Transaction({
3272
3272
  version: 3,
3273
3273
  lockTime: Number(lockTime)
3274
3274
  });
@@ -3278,12 +3278,12 @@ function buildVirtualTx(inputs, outputs) {
3278
3278
  index: input.vout,
3279
3279
  sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
3280
3280
  witnessUtxo: {
3281
- script: chunk5MLC2HU3_cjs.VtxoScript.decode(input.tapTree).pkScript,
3281
+ script: chunkRZ2NGS6A_cjs.VtxoScript.decode(input.tapTree).pkScript,
3282
3282
  amount: BigInt(input.value)
3283
3283
  },
3284
3284
  tapLeafScript: [input.tapLeafScript]
3285
3285
  });
3286
- chunk5MLC2HU3_cjs.setArkPsbtField(tx, i, chunk5MLC2HU3_cjs.VtxoTaprootTree, input.tapTree);
3286
+ chunkRZ2NGS6A_cjs.setArkPsbtField(tx, i, chunkRZ2NGS6A_cjs.VtxoTaprootTree, input.tapTree);
3287
3287
  }
3288
3288
  for (const output of outputs) {
3289
3289
  tx.addOutput(output);
@@ -3292,8 +3292,8 @@ function buildVirtualTx(inputs, outputs) {
3292
3292
  return tx;
3293
3293
  }
3294
3294
  function buildCheckpointTx(vtxo, serverUnrollScript) {
3295
- const collaborativeClosure = chunk5MLC2HU3_cjs.decodeTapscript(chunk5MLC2HU3_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
3296
- const checkpointVtxoScript = new chunk5MLC2HU3_cjs.VtxoScript([
3295
+ const collaborativeClosure = chunkRZ2NGS6A_cjs.decodeTapscript(chunkRZ2NGS6A_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
3296
+ const checkpointVtxoScript = new chunkRZ2NGS6A_cjs.VtxoScript([
3297
3297
  serverUnrollScript.script,
3298
3298
  collaborativeClosure.script
3299
3299
  ]);
@@ -3369,7 +3369,7 @@ function verifyTapscriptSignatures(tx, inputIndex, requiredSigners, excludePubke
3369
3369
  const sighashType = signature.length === 65 ? signature[64] : btcSigner.SigHash.DEFAULT;
3370
3370
  const sig = signature.subarray(0, 64);
3371
3371
  if (!allowedSighashTypes.includes(sighashType)) {
3372
- const sighashName = chunk5MLC2HU3_cjs.formatSighash(sighashType);
3372
+ const sighashName = chunkRZ2NGS6A_cjs.formatSighash(sighashType);
3373
3373
  throw new Error(
3374
3374
  `Unallowed sighash type ${sighashName} for input ${inputIndex}, pubkey ${pubKeyHex}.`
3375
3375
  );
@@ -3443,7 +3443,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
3443
3443
  }
3444
3444
  function isValidArkAddress(address) {
3445
3445
  try {
3446
- chunk5MLC2HU3_cjs.ArkAddress.decode(address);
3446
+ chunkRZ2NGS6A_cjs.ArkAddress.decode(address);
3447
3447
  return true;
3448
3448
  } catch (e) {
3449
3449
  return false;
@@ -3451,16 +3451,16 @@ function isValidArkAddress(address) {
3451
3451
  }
3452
3452
  function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
3453
3453
  if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
3454
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3454
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3455
3455
  `${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
3456
3456
  );
3457
3457
  }
3458
3458
  const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
3459
3459
  return serverCheckpointTxs.map((encoded, index) => {
3460
- const server = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
3460
+ const server = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
3461
3461
  const local = byTxid.get(server.id);
3462
3462
  if (!local) {
3463
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3463
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3464
3464
  `${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
3465
3465
  );
3466
3466
  }
@@ -3470,14 +3470,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
3470
3470
  }
3471
3471
  function assertSubmittedArkTxid(response, signedArkTx, context) {
3472
3472
  if (response.arkTxid !== signedArkTx.id) {
3473
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3473
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3474
3474
  `${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
3475
3475
  );
3476
3476
  }
3477
3477
  if (response.finalArkTx === void 0) return;
3478
- const finalTxid = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
3478
+ const finalTxid = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
3479
3479
  if (finalTxid !== signedArkTx.id) {
3480
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3480
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3481
3481
  `${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
3482
3482
  );
3483
3483
  }
@@ -3496,10 +3496,10 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeyHex,
3496
3496
  [serverPubkeyHex],
3497
3497
  void 0,
3498
3498
  void 0,
3499
- payment_js.tapLeafHash(chunk5MLC2HU3_cjs.scriptFromTapLeafScript(leaf))
3499
+ payment_js.tapLeafHash(chunkRZ2NGS6A_cjs.scriptFromTapLeafScript(leaf))
3500
3500
  );
3501
3501
  } catch (error) {
3502
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3502
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3503
3503
  `${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
3504
3504
  );
3505
3505
  }
@@ -3508,20 +3508,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
3508
3508
  const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
3509
3509
  for (const [index, checkpoint] of checkpoints.entries()) {
3510
3510
  if (checkpoint.inputsLength !== 1) {
3511
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3511
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3512
3512
  `${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
3513
3513
  );
3514
3514
  }
3515
3515
  const spent = checkpoint.getInput(0);
3516
3516
  if (!spent.txid || spent.index === void 0) {
3517
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3517
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3518
3518
  `${context}: checkpoint ${index} has no input outpoint`
3519
3519
  );
3520
3520
  }
3521
3521
  const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
3522
3522
  const input = byOutpoint.get(outpoint);
3523
3523
  if (!input) {
3524
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3524
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3525
3525
  `${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
3526
3526
  );
3527
3527
  }
@@ -3529,7 +3529,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
3529
3529
  (unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
3530
3530
  );
3531
3531
  if (!rebuilt) {
3532
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3532
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3533
3533
  `${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
3534
3534
  );
3535
3535
  }
@@ -3555,9 +3555,9 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
3555
3555
  const matched = matchServerCheckpoints(signedCheckpointTxs, offchainTx.checkpoints, "submitTx");
3556
3556
  matched.forEach(({ server }, index) => {
3557
3557
  try {
3558
- chunk5MLC2HU3_cjs.assertAllowedSighashTypes(server);
3558
+ chunkRZ2NGS6A_cjs.assertAllowedSighashTypes(server);
3559
3559
  } catch (error) {
3560
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3560
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3561
3561
  `submitTx checkpoint ${index}: ${error instanceof Error ? error.message : String(error)}`
3562
3562
  );
3563
3563
  }
@@ -3565,12 +3565,12 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
3565
3565
  const verify = options?.verifyServerSignatures;
3566
3566
  if (verify) {
3567
3567
  if (response.finalArkTx === void 0) {
3568
- throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3568
+ throw new chunkRZ2NGS6A_cjs.ServerResponseMismatchError(
3569
3569
  "submitTx: server returned no final ark tx to verify its signatures against"
3570
3570
  );
3571
3571
  }
3572
- const finalArkTx = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
3573
- const serverPubkeyHex = base.hex.encode(chunkWIFL5QYZ_cjs.toXOnly(verify.serverPubkey, "server key"));
3572
+ const finalArkTx = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
3573
+ const serverPubkeyHex = base.hex.encode(chunkQ5WQ4Y2I_cjs.toXOnly(verify.serverPubkey, "server key"));
3574
3574
  for (let i = 0; i < offchainTx.arkTx.inputsLength; i++) {
3575
3575
  assertServerSignedLeaf(
3576
3576
  finalArkTx,
@@ -3626,12 +3626,12 @@ function claimWithPreimageIdentity(identity, preimage) {
3626
3626
  return {
3627
3627
  ...identity,
3628
3628
  sign: async (tx, inputIndexes) => {
3629
- const signed = chunk5MLC2HU3_cjs.Transaction.fromPSBT(
3629
+ const signed = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(
3630
3630
  (await identity.sign(tx.clone(), inputIndexes)).toPSBT()
3631
3631
  );
3632
3632
  const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
3633
3633
  for (const index of indexes) {
3634
- chunk5MLC2HU3_cjs.setArkPsbtField(signed, index, chunk5MLC2HU3_cjs.ConditionWitness, [preimage]);
3634
+ chunkRZ2NGS6A_cjs.setArkPsbtField(signed, index, chunkRZ2NGS6A_cjs.ConditionWitness, [preimage]);
3635
3635
  }
3636
3636
  return signed;
3637
3637
  }
@@ -3823,7 +3823,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
3823
3823
  };
3824
3824
  }
3825
3825
  function deriveContractTapscripts(contract) {
3826
- const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type);
3826
+ const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type);
3827
3827
  if (!handler) {
3828
3828
  throw new Error(`No handler for contract type '${contract.type}'`);
3829
3829
  }
@@ -3894,13 +3894,13 @@ function getRandomId() {
3894
3894
  }
3895
3895
  function isValidArkAddress2(address) {
3896
3896
  try {
3897
- chunk5MLC2HU3_cjs.ArkAddress.decode(address);
3897
+ chunkRZ2NGS6A_cjs.ArkAddress.decode(address);
3898
3898
  return true;
3899
3899
  } catch (e) {
3900
3900
  return false;
3901
3901
  }
3902
3902
  }
3903
- function assertRecipientArkAddress(encoded, address, context) {
3903
+ function assertRecipientArkadeAddress(encoded, address, context) {
3904
3904
  if (address.hrp !== context.hrp) {
3905
3905
  throw new Error(
3906
3906
  `Invalid Arkade address ${encoded}: expected prefix "${context.hrp}", got "${address.hrp}"`
@@ -3922,7 +3922,7 @@ function assertRecipientArkAddress(encoded, address, context) {
3922
3922
  function assertTapTreeDerivesAddress(encoded, tapTree, address) {
3923
3923
  let derived;
3924
3924
  try {
3925
- derived = chunk5MLC2HU3_cjs.VtxoScript.decode(tapTree).pkScript;
3925
+ derived = chunkRZ2NGS6A_cjs.VtxoScript.decode(tapTree).pkScript;
3926
3926
  } catch (e) {
3927
3927
  throw new Error(
3928
3928
  `Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
@@ -3939,11 +3939,11 @@ function validateRecipients(recipients, dustAmount, context) {
3939
3939
  for (const recipient of recipients) {
3940
3940
  let address;
3941
3941
  try {
3942
- address = chunk5MLC2HU3_cjs.ArkAddress.decode(recipient.address);
3942
+ address = chunkRZ2NGS6A_cjs.ArkAddress.decode(recipient.address);
3943
3943
  } catch (e) {
3944
3944
  throw new Error(`Invalid Arkade address: ${recipient.address}`);
3945
3945
  }
3946
- assertRecipientArkAddress(recipient.address, address, context);
3946
+ assertRecipientArkadeAddress(recipient.address, address, context);
3947
3947
  const amount = recipient.amount || dustAmount;
3948
3948
  if (amount <= 0) {
3949
3949
  throw new Error("Amount must be positive");
@@ -3964,7 +3964,7 @@ function validateRecipients(recipients, dustAmount, context) {
3964
3964
 
3965
3965
  // src/contracts/spendability.ts
3966
3966
  function isContractGenericallySpendable(contract) {
3967
- return chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
3967
+ return chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
3968
3968
  }
3969
3969
  function gatedContracts(contracts) {
3970
3970
  const gated = /* @__PURE__ */ new Map();
@@ -3977,7 +3977,7 @@ function gateExclusion(gated) {
3977
3977
  return (vtxo) => {
3978
3978
  const type = vtxo.script === void 0 ? void 0 : gated.get(vtxo.script);
3979
3979
  if (type === void 0) return void 0;
3980
- if (!chunkWIFL5QYZ_cjs.contractHandlers.has(type)) {
3980
+ if (!chunkQ5WQ4Y2I_cjs.contractHandlers.has(type)) {
3981
3981
  return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
3982
3982
  }
3983
3983
  return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
@@ -4013,7 +4013,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
4013
4013
  continue;
4014
4014
  }
4015
4015
  for (const v of vtxos) {
4016
- if (!chunk5MLC2HU3_cjs.hasTerminalSpend(v) && !v.isSwept && !v.isUnrolled) {
4016
+ if (!chunkRZ2NGS6A_cjs.hasTerminalSpend(v) && !v.isSwept && !v.isUnrolled) {
4017
4017
  out.add(`${v.txid}:${v.vout}`);
4018
4018
  }
4019
4019
  }
@@ -4048,10 +4048,10 @@ function byValueDescending(vtxos) {
4048
4048
  return [...vtxos].sort((a, b) => b.value - a.value);
4049
4049
  }
4050
4050
  async function fetchTimeHeight(wallet) {
4051
- return chunk5MLC2HU3_cjs.resolveTimeHeight(wallet.onchainProvider);
4051
+ return chunkRZ2NGS6A_cjs.resolveTimeHeight(wallet.onchainProvider);
4052
4052
  }
4053
4053
  function canMigrateBySend(vtxo, now) {
4054
- if (!chunk5MLC2HU3_cjs.canSpendOffchain(vtxo, now)) return false;
4054
+ if (!chunkRZ2NGS6A_cjs.canSpendOffchain(vtxo, now)) return false;
4055
4055
  return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
4056
4056
  }
4057
4057
  function byExpiryAscending(vtxos, now) {
@@ -4059,7 +4059,7 @@ function byExpiryAscending(vtxos, now) {
4059
4059
  if (vtxo.isSwept) return -Infinity;
4060
4060
  if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
4061
4061
  if (vtxo.expiresAtHeight !== void 0) {
4062
- return chunk5MLC2HU3_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
4062
+ return chunkRZ2NGS6A_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
4063
4063
  }
4064
4064
  return Infinity;
4065
4065
  };
@@ -4086,7 +4086,7 @@ function priceSettlementInputs(vtxos, estimator) {
4086
4086
  const payable = [];
4087
4087
  const net = /* @__PURE__ */ new Map();
4088
4088
  for (const vtxo of vtxos) {
4089
- const inputFee = estimator.evalOffchainInput(chunk5MLC2HU3_cjs.toOffchainInputFeeParams(vtxo));
4089
+ const inputFee = estimator.evalOffchainInput(chunkRZ2NGS6A_cjs.toOffchainInputFeeParams(vtxo));
4090
4090
  if (inputFee.satoshis >= vtxo.value) {
4091
4091
  continue;
4092
4092
  }
@@ -4112,7 +4112,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
4112
4112
  }
4113
4113
  const outputFee = estimator.evalOffchainOutput({
4114
4114
  amount: subtotal,
4115
- script: base.hex.encode(chunk5MLC2HU3_cjs.ArkAddress.decode(arkAddress).pkScript)
4115
+ script: base.hex.encode(chunkRZ2NGS6A_cjs.ArkAddress.decode(arkAddress).pkScript)
4116
4116
  });
4117
4117
  return subtotal - BigInt(outputFee.satoshis);
4118
4118
  }
@@ -4130,10 +4130,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
4130
4130
  };
4131
4131
  function getRecoverableVtxos(vtxos, dustAmount, now) {
4132
4132
  return vtxos.filter((vtxo) => {
4133
- if (chunk5MLC2HU3_cjs.canRecoverOnchain(vtxo, now)) {
4133
+ if (chunkRZ2NGS6A_cjs.canRecoverOnchain(vtxo, now)) {
4134
4134
  return true;
4135
4135
  }
4136
- if (chunk5MLC2HU3_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
4136
+ if (chunkRZ2NGS6A_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
4137
4137
  return true;
4138
4138
  }
4139
4139
  return false;
@@ -4165,7 +4165,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
4165
4165
  function isVtxoExpiringSoon(vtxo, thresholdMs) {
4166
4166
  if (vtxo.isUnrolled) return false;
4167
4167
  const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
4168
- const expiresAt = chunk5MLC2HU3_cjs.normalizeVtxo(vtxo).expiresAt;
4168
+ const expiresAt = chunkRZ2NGS6A_cjs.normalizeVtxo(vtxo).expiresAt;
4169
4169
  if (expiresAt === void 0) return false;
4170
4170
  const now = Date.now();
4171
4171
  const batchExpiry = expiresAt.getTime();
@@ -4176,7 +4176,7 @@ function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
4176
4176
  return vtxos.filter(
4177
4177
  // The leading exclusion covers the `isSubdust` arm too, which is a value
4178
4178
  // property and would otherwise re-admit an exited coin on its own.
4179
- (vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) || chunk5MLC2HU3_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount))
4179
+ (vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) || chunkRZ2NGS6A_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount))
4180
4180
  );
4181
4181
  }
4182
4182
  function isMigrationCapable(wallet) {
@@ -4775,11 +4775,11 @@ var VtxoManager = class _VtxoManager {
4775
4775
  `Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
4776
4776
  );
4777
4777
  }
4778
- const tx = new chunk5MLC2HU3_cjs.Transaction();
4778
+ const tx = new chunkRZ2NGS6A_cjs.Transaction();
4779
4779
  for (const utxo of expiredUtxos) {
4780
- const utxoScript = chunk5MLC2HU3_cjs.VtxoScript.decode(utxo.tapTree);
4780
+ const utxoScript = chunkRZ2NGS6A_cjs.VtxoScript.decode(utxo.tapTree);
4781
4781
  const utxoExitLeaf = utxoScript.leaves.find(
4782
- (leaf) => chunk5MLC2HU3_cjs.CSVMultisigTapscript.isScriptValid(chunk5MLC2HU3_cjs.scriptFromTapLeafScript(leaf)) === true
4782
+ (leaf) => chunkRZ2NGS6A_cjs.CSVMultisigTapscript.isScriptValid(chunkRZ2NGS6A_cjs.scriptFromTapLeafScript(leaf)) === true
4783
4783
  );
4784
4784
  if (!utxoExitLeaf) {
4785
4785
  throw new Error(
@@ -4794,7 +4794,7 @@ var VtxoManager = class _VtxoManager {
4794
4794
  amount: BigInt(utxo.value)
4795
4795
  },
4796
4796
  tapLeafScript: [utxoExitLeaf],
4797
- sequence: chunk5MLC2HU3_cjs.getSequence(utxoExitLeaf)
4797
+ sequence: chunkRZ2NGS6A_cjs.getSequence(utxoExitLeaf)
4798
4798
  });
4799
4799
  }
4800
4800
  tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
@@ -4834,7 +4834,7 @@ var VtxoManager = class _VtxoManager {
4834
4834
  }
4835
4835
  /**
4836
4836
  * Core migration routine shared by the manual API and the automatic poll
4837
- * pass. Fetches a fresh {@link ArkInfo}, applies a mid-session signer
4837
+ * pass. Fetches a fresh {@link ArkadeInfo}, applies a mid-session signer
4838
4838
  * rotation when the wallet's own snapshot signer has been deprecated,
4839
4839
  * selects spendable VTXOs under deprecated-signer contracts (cutoff-first),
4840
4840
  * and settles them to the active-signer Ark address.
@@ -5037,8 +5037,8 @@ var VtxoManager = class _VtxoManager {
5037
5037
  const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
5038
5038
  if (cls.status === "CURRENT") continue;
5039
5039
  const live = vtxos.filter((v) => !v.isUnrolled);
5040
- const recoverable = live.filter((v) => v.isSwept && !chunk5MLC2HU3_cjs.hasTerminalSpend(v));
5041
- const spendable = live.filter((v) => !chunk5MLC2HU3_cjs.hasTerminalSpend(v) && !v.isSwept);
5040
+ const recoverable = live.filter((v) => v.isSwept && !chunkRZ2NGS6A_cjs.hasTerminalSpend(v));
5041
+ const spendable = live.filter((v) => !chunkRZ2NGS6A_cjs.hasTerminalSpend(v) && !v.isSwept);
5042
5042
  const value = spendable.reduce((sum, v) => sum + v.value, 0);
5043
5043
  let recoverableCount = 0;
5044
5044
  let recoverableValue = 0;
@@ -5051,7 +5051,7 @@ var VtxoManager = class _VtxoManager {
5051
5051
  awaitingSweepCount = spendable.length;
5052
5052
  awaitingSweepValue = value;
5053
5053
  for (const v of spendable) {
5054
- const exp = chunk5MLC2HU3_cjs.toBatchExpiry(v);
5054
+ const exp = chunkRZ2NGS6A_cjs.toBatchExpiry(v);
5055
5055
  if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
5056
5056
  nextSweepEta = exp;
5057
5057
  }
@@ -5312,7 +5312,7 @@ var VtxoManager = class _VtxoManager {
5312
5312
  /** Decodes the boarding tapscript exit path to extract the CSV timelock. */
5313
5313
  getBoardingTimelock() {
5314
5314
  const wallet = this.getSweepWallet();
5315
- const exitScript = chunk5MLC2HU3_cjs.CSVMultisigTapscript.decode(
5315
+ const exitScript = chunkRZ2NGS6A_cjs.CSVMultisigTapscript.decode(
5316
5316
  base.hex.decode(wallet.boardingTapscript.exitScript)
5317
5317
  );
5318
5318
  return exitScript.params.timelock;
@@ -5443,8 +5443,8 @@ var VtxoManager = class _VtxoManager {
5443
5443
  * or doesn't carry the metadata.
5444
5444
  */
5445
5445
  extractSpentOutpoint(error) {
5446
- const ark = chunk5MLC2HU3_cjs.maybeArkError(error);
5447
- if (!chunk5MLC2HU3_cjs.isArkError(ark, chunk5MLC2HU3_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
5446
+ const ark = chunkRZ2NGS6A_cjs.maybeArkError(error);
5447
+ if (!chunkRZ2NGS6A_cjs.isArkError(ark, chunkRZ2NGS6A_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
5448
5448
  const raw = ark.metadata?.vtxo_outpoint;
5449
5449
  if (typeof raw !== "string") return void 0;
5450
5450
  const [txid, voutStr] = raw.split(":");
@@ -5634,7 +5634,7 @@ var VtxoManager = class _VtxoManager {
5634
5634
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
5635
5635
  break;
5636
5636
  }
5637
- const inputFee = estimator.evalOffchainInput(chunk5MLC2HU3_cjs.toOffchainInputFeeParams(v));
5637
+ const inputFee = estimator.evalOffchainInput(chunkRZ2NGS6A_cjs.toOffchainInputFeeParams(v));
5638
5638
  if (inputFee.satoshis >= v.value) {
5639
5639
  continue;
5640
5640
  }
@@ -5654,7 +5654,7 @@ var VtxoManager = class _VtxoManager {
5654
5654
  const arkAddress = await this.wallet.getAddress();
5655
5655
  const outputFee = estimator.evalOffchainOutput({
5656
5656
  amount: totalAmount,
5657
- script: base.hex.encode(chunk5MLC2HU3_cjs.ArkAddress.decode(arkAddress).pkScript)
5657
+ script: base.hex.encode(chunkRZ2NGS6A_cjs.ArkAddress.decode(arkAddress).pkScript)
5658
5658
  });
5659
5659
  totalAmount -= BigInt(outputFee.satoshis);
5660
5660
  if (totalAmount < dustAmount) return;
@@ -5734,7 +5734,7 @@ var ArkNote = class _ArkNote {
5734
5734
  this.value = value;
5735
5735
  this.HRP = HRP;
5736
5736
  const preimageHash = utils_js.sha256(this.preimage);
5737
- this.vtxoScript = new chunk5MLC2HU3_cjs.VtxoScript([noteTapscript(preimageHash)]);
5737
+ this.vtxoScript = new chunkRZ2NGS6A_cjs.VtxoScript([noteTapscript(preimageHash)]);
5738
5738
  const leaf = this.vtxoScript.leaves[0];
5739
5739
  this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
5740
5740
  this.tapTree = this.vtxoScript.encode();
@@ -5901,7 +5901,7 @@ var ArkadeCash = class _ArkadeCash {
5901
5901
  const privateKey = data.slice(1, 33);
5902
5902
  const serverPubKey = data.slice(33, 65);
5903
5903
  const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
5904
- const csvTimelock = chunk5MLC2HU3_cjs.sequenceToTimelock(sequence);
5904
+ const csvTimelock = chunkRZ2NGS6A_cjs.sequenceToTimelock(sequence);
5905
5905
  return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
5906
5906
  }
5907
5907
  toString() {
@@ -5909,7 +5909,7 @@ var ArkadeCash = class _ArkadeCash {
5909
5909
  data[0] = _ArkadeCash.Version;
5910
5910
  data.set(this._privateKey, 1);
5911
5911
  data.set(this._serverPubKey, 33);
5912
- const sequence = chunk5MLC2HU3_cjs.timelockToSequence(this.csvTimelock);
5912
+ const sequence = chunkRZ2NGS6A_cjs.timelockToSequence(this.csvTimelock);
5913
5913
  new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
5914
5914
  const words = base.bech32m.toWords(data);
5915
5915
  return base.bech32m.encode(this.hrp, words, 1023);
@@ -5918,7 +5918,7 @@ var ArkadeCash = class _ArkadeCash {
5918
5918
  return SingleKey.fromPrivateKey(this._privateKey);
5919
5919
  }
5920
5920
  get vtxoScript() {
5921
- return new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({
5921
+ return new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({
5922
5922
  pubKey: this._publicKey,
5923
5923
  serverPubKey: this._serverPubKey,
5924
5924
  csvTimelock: this.csvTimelock
@@ -6179,7 +6179,7 @@ async function captureExitBranch(params) {
6179
6179
  const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
6180
6180
  if (nonCommitment.length > 0) {
6181
6181
  for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
6182
- psbtByTxid.set(chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
6182
+ psbtByTxid.set(chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
6183
6183
  }
6184
6184
  }
6185
6185
  }
@@ -6222,10 +6222,10 @@ var IndexerExitDataSource = class {
6222
6222
  while (hasMore) {
6223
6223
  const { chain: page, page: meta } = await this.indexer.getVtxoChain(
6224
6224
  { txid: vtxo.txid, vout: vtxo.vout },
6225
- { pageIndex, pageSize: chunk5MLC2HU3_cjs.DEFAULT_PAGE_SIZE }
6225
+ { pageIndex, pageSize: chunkRZ2NGS6A_cjs.DEFAULT_PAGE_SIZE }
6226
6226
  );
6227
6227
  chain.push(...page);
6228
- hasMore = meta ? page.length === chunk5MLC2HU3_cjs.DEFAULT_PAGE_SIZE : false;
6228
+ hasMore = meta ? page.length === chunkRZ2NGS6A_cjs.DEFAULT_PAGE_SIZE : false;
6229
6229
  pageIndex++;
6230
6230
  }
6231
6231
  return chain;
@@ -6237,12 +6237,12 @@ var IndexerExitDataSource = class {
6237
6237
  while (hasMore) {
6238
6238
  const { txs, page } = await this.indexer.getVirtualTxs(txids, {
6239
6239
  pageIndex,
6240
- pageSize: chunk5MLC2HU3_cjs.DEFAULT_PAGE_SIZE
6240
+ pageSize: chunkRZ2NGS6A_cjs.DEFAULT_PAGE_SIZE
6241
6241
  });
6242
6242
  for (const psbt of txs) {
6243
- out.set(chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
6243
+ out.set(chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
6244
6244
  }
6245
- hasMore = page ? txs.length === chunk5MLC2HU3_cjs.DEFAULT_PAGE_SIZE : false;
6245
+ hasMore = page ? txs.length === chunkRZ2NGS6A_cjs.DEFAULT_PAGE_SIZE : false;
6246
6246
  pageIndex++;
6247
6247
  }
6248
6248
  return out;
@@ -6263,7 +6263,7 @@ function chainedTxTypeToChainTxType(t) {
6263
6263
  }
6264
6264
  }
6265
6265
  function psbtInputTxids(psbtBase64) {
6266
- const tx = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
6266
+ const tx = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
6267
6267
  const ids = [];
6268
6268
  for (let i = 0; i < tx.inputsLength; i++) {
6269
6269
  const txid = tx.getInput(i).txid;
@@ -6617,15 +6617,15 @@ async function saveArkInfoSnapshot(repo, info, savedAt) {
6617
6617
  }
6618
6618
  }));
6619
6619
  }
6620
- async function resolveArkInfo(arkProvider, walletRepository) {
6620
+ async function resolveArkInfo(arkProvider, walletRepository, opts) {
6621
6621
  let info;
6622
6622
  try {
6623
6623
  info = await arkProvider.getInfo();
6624
6624
  } catch (err) {
6625
- if (!chunk5MLC2HU3_cjs.isRetryableProviderError(err)) throw err;
6625
+ if (opts?.requireLive || !chunkRZ2NGS6A_cjs.isRetryableProviderError(err)) throw err;
6626
6626
  const snapshot = await loadArkInfoSnapshot(walletRepository);
6627
6627
  if (!snapshot) {
6628
- throw new chunk5MLC2HU3_cjs.ProviderUnavailableError(
6628
+ throw new chunkRZ2NGS6A_cjs.ProviderUnavailableError(
6629
6629
  "Arkade server info is unavailable and no cached snapshot exists",
6630
6630
  { cause: err }
6631
6631
  );
@@ -7015,7 +7015,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
7015
7015
  return [...txids];
7016
7016
  }
7017
7017
  async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
7018
- const fromOldestVtxo = vtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
7018
+ const fromOldestVtxo = vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
7019
7019
  const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
7020
7020
  const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
7021
7021
  const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
@@ -7179,7 +7179,7 @@ var AssetManager = class extends ReadonlyAssetManager {
7179
7179
  const virtualCoins = await this.wallet.getSpendableVtxos({
7180
7180
  withRecoverable: false
7181
7181
  });
7182
- const controlAssetRef = params.controlAssetId ? chunkGVHUHTRH_cjs.AssetRef.fromId(chunkGVHUHTRH_cjs.AssetId.fromString(params.controlAssetId)) : null;
7182
+ const controlAssetRef = params.controlAssetId ? chunkWQIWUTYS_cjs.AssetRef.fromId(chunkWQIWUTYS_cjs.AssetId.fromString(params.controlAssetId)) : null;
7183
7183
  const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
7184
7184
  let totalBtcSelected = 0n;
7185
7185
  const assetChanges = /* @__PURE__ */ new Map();
@@ -7192,8 +7192,8 @@ var AssetManager = class extends ReadonlyAssetManager {
7192
7192
  }
7193
7193
  }
7194
7194
  const groups = [];
7195
- const issuedAssetOutput = chunkGVHUHTRH_cjs.AssetOutput.create(0, params.amount);
7196
- const issuedAssetGroup = chunkGVHUHTRH_cjs.AssetGroup.create(
7195
+ const issuedAssetOutput = chunkWQIWUTYS_cjs.AssetOutput.create(0, params.amount);
7196
+ const issuedAssetGroup = chunkWQIWUTYS_cjs.AssetGroup.create(
7197
7197
  null,
7198
7198
  controlAssetRef,
7199
7199
  [],
@@ -7208,28 +7208,28 @@ var AssetManager = class extends ReadonlyAssetManager {
7208
7208
  for (const [inputIndex, assets] of assetInputs) {
7209
7209
  for (const asset of assets) {
7210
7210
  if (asset.assetId !== assetId) continue;
7211
- changeInputs.push(chunkGVHUHTRH_cjs.AssetInput.create(inputIndex, asset.amount));
7211
+ changeInputs.push(chunkWQIWUTYS_cjs.AssetInput.create(inputIndex, asset.amount));
7212
7212
  }
7213
7213
  }
7214
7214
  groups.push(
7215
- chunkGVHUHTRH_cjs.AssetGroup.create(
7216
- chunkGVHUHTRH_cjs.AssetId.fromString(assetId),
7215
+ chunkWQIWUTYS_cjs.AssetGroup.create(
7216
+ chunkWQIWUTYS_cjs.AssetId.fromString(assetId),
7217
7217
  null,
7218
7218
  changeInputs,
7219
- [chunkGVHUHTRH_cjs.AssetOutput.create(0, amount)],
7219
+ [chunkWQIWUTYS_cjs.AssetOutput.create(0, amount)],
7220
7220
  []
7221
7221
  )
7222
7222
  );
7223
7223
  }
7224
7224
  }
7225
7225
  const address = await this.wallet.getAddress();
7226
- const outputAddress = chunk5MLC2HU3_cjs.ArkAddress.decode(address);
7226
+ const outputAddress = chunkRZ2NGS6A_cjs.ArkAddress.decode(address);
7227
7227
  const outputs = [
7228
7228
  {
7229
7229
  script: outputAddress.pkScript,
7230
7230
  amount: BigInt(totalBtcSelected)
7231
7231
  },
7232
- Extension.create([chunkGVHUHTRH_cjs.Packet.create(groups)]).txOut()
7232
+ Extension.create([chunkWQIWUTYS_cjs.Packet.create(groups)]).txOut()
7233
7233
  ];
7234
7234
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
7235
7235
  coinSelection.inputs,
@@ -7237,7 +7237,7 @@ var AssetManager = class extends ReadonlyAssetManager {
7237
7237
  );
7238
7238
  return {
7239
7239
  arkTxId: arkTxid,
7240
- assetId: chunkGVHUHTRH_cjs.AssetId.create(arkTxid, 0).toString()
7240
+ assetId: chunkWQIWUTYS_cjs.AssetId.create(arkTxid, 0).toString()
7241
7241
  };
7242
7242
  }
7243
7243
  /**
@@ -7309,16 +7309,16 @@ var AssetManager = class extends ReadonlyAssetManager {
7309
7309
  for (const [inputIndex, assets] of assetInputs) {
7310
7310
  for (const asset of assets) {
7311
7311
  if (asset.assetId !== params.assetId) continue;
7312
- reissueInputs.push(chunkGVHUHTRH_cjs.AssetInput.create(inputIndex, asset.amount));
7312
+ reissueInputs.push(chunkWQIWUTYS_cjs.AssetInput.create(inputIndex, asset.amount));
7313
7313
  }
7314
7314
  }
7315
7315
  const totalAssetAmount = assetToReissueAmount + params.amount;
7316
- const reissueAssetIdObj = chunkGVHUHTRH_cjs.AssetId.fromString(params.assetId);
7317
- const reissueAssetGroup = chunkGVHUHTRH_cjs.AssetGroup.create(
7316
+ const reissueAssetIdObj = chunkWQIWUTYS_cjs.AssetId.fromString(params.assetId);
7317
+ const reissueAssetGroup = chunkWQIWUTYS_cjs.AssetGroup.create(
7318
7318
  reissueAssetIdObj,
7319
7319
  null,
7320
7320
  reissueInputs,
7321
- [chunkGVHUHTRH_cjs.AssetOutput.create(0, totalAssetAmount)],
7321
+ [chunkWQIWUTYS_cjs.AssetOutput.create(0, totalAssetAmount)],
7322
7322
  []
7323
7323
  );
7324
7324
  const groups = [reissueAssetGroup];
@@ -7327,27 +7327,27 @@ var AssetManager = class extends ReadonlyAssetManager {
7327
7327
  for (const [inputIndex, assets] of assetInputs) {
7328
7328
  for (const asset of assets) {
7329
7329
  if (asset.assetId !== assetId) continue;
7330
- changeInputs.push(chunkGVHUHTRH_cjs.AssetInput.create(inputIndex, asset.amount));
7330
+ changeInputs.push(chunkWQIWUTYS_cjs.AssetInput.create(inputIndex, asset.amount));
7331
7331
  }
7332
7332
  }
7333
7333
  groups.push(
7334
- chunkGVHUHTRH_cjs.AssetGroup.create(
7335
- chunkGVHUHTRH_cjs.AssetId.fromString(assetId),
7334
+ chunkWQIWUTYS_cjs.AssetGroup.create(
7335
+ chunkWQIWUTYS_cjs.AssetId.fromString(assetId),
7336
7336
  null,
7337
7337
  changeInputs,
7338
- [chunkGVHUHTRH_cjs.AssetOutput.create(0, amount)],
7338
+ [chunkWQIWUTYS_cjs.AssetOutput.create(0, amount)],
7339
7339
  []
7340
7340
  )
7341
7341
  );
7342
7342
  }
7343
7343
  const address = await this.wallet.getAddress();
7344
- const outputAddress = chunk5MLC2HU3_cjs.ArkAddress.decode(address);
7344
+ const outputAddress = chunkRZ2NGS6A_cjs.ArkAddress.decode(address);
7345
7345
  const outputs = [
7346
7346
  {
7347
7347
  script: outputAddress.pkScript,
7348
7348
  amount: BigInt(totalBtcSelected)
7349
7349
  },
7350
- Extension.create([chunkGVHUHTRH_cjs.Packet.create(groups)]).txOut()
7350
+ Extension.create([chunkWQIWUTYS_cjs.Packet.create(groups)]).txOut()
7351
7351
  ];
7352
7352
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
7353
7353
  return arkTxid;
@@ -7414,27 +7414,27 @@ var AssetManager = class extends ReadonlyAssetManager {
7414
7414
  for (const [inputIndex, assets] of assetInputs) {
7415
7415
  for (const asset of assets) {
7416
7416
  if (asset.assetId !== assetId) continue;
7417
- changeInputs.push(chunkGVHUHTRH_cjs.AssetInput.create(inputIndex, asset.amount));
7417
+ changeInputs.push(chunkWQIWUTYS_cjs.AssetInput.create(inputIndex, asset.amount));
7418
7418
  }
7419
7419
  }
7420
7420
  groups.push(
7421
- chunkGVHUHTRH_cjs.AssetGroup.create(
7422
- chunkGVHUHTRH_cjs.AssetId.fromString(assetId),
7421
+ chunkWQIWUTYS_cjs.AssetGroup.create(
7422
+ chunkWQIWUTYS_cjs.AssetId.fromString(assetId),
7423
7423
  null,
7424
7424
  changeInputs,
7425
- amount > 0n ? [chunkGVHUHTRH_cjs.AssetOutput.create(0, amount)] : [],
7425
+ amount > 0n ? [chunkWQIWUTYS_cjs.AssetOutput.create(0, amount)] : [],
7426
7426
  []
7427
7427
  )
7428
7428
  );
7429
7429
  }
7430
7430
  const address = await this.wallet.getAddress();
7431
- const outputAddress = chunk5MLC2HU3_cjs.ArkAddress.decode(address);
7431
+ const outputAddress = chunkRZ2NGS6A_cjs.ArkAddress.decode(address);
7432
7432
  const outputs = [
7433
7433
  {
7434
7434
  script: outputAddress.pkScript,
7435
7435
  amount: BigInt(totalBtcSelected)
7436
7436
  },
7437
- Extension.create([chunkGVHUHTRH_cjs.Packet.create(groups)]).txOut()
7437
+ Extension.create([chunkWQIWUTYS_cjs.Packet.create(groups)]).txOut()
7438
7438
  ];
7439
7439
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
7440
7440
  return arkTxid;
@@ -7459,7 +7459,7 @@ function castMetadata(metadata) {
7459
7459
  } else {
7460
7460
  throw new Error("Invalid metadata value type");
7461
7461
  }
7462
- md.push(chunkGVHUHTRH_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
7462
+ md.push(chunkWQIWUTYS_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
7463
7463
  }
7464
7464
  return md;
7465
7465
  }
@@ -7480,10 +7480,10 @@ var DelegateManagerImpl = class {
7480
7480
  if (vtxos.length === 0) {
7481
7481
  return { delegated: [], failed: [] };
7482
7482
  }
7483
- const destinationScript = chunk5MLC2HU3_cjs.ArkAddress.decode(destination).pkScript;
7483
+ const destinationScript = chunkRZ2NGS6A_cjs.ArkAddress.decode(destination).pkScript;
7484
7484
  const arkInfo = await this.arkInfoProvider.getInfo();
7485
7485
  const delegateInfo = await this.delegateProvider.getDelegateInfo();
7486
- const eligible = vtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo).filter(
7486
+ const eligible = vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo).filter(
7487
7487
  (v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
7488
7488
  );
7489
7489
  if (eligible.length === 0) {
@@ -7512,11 +7512,11 @@ var DelegateManagerImpl = class {
7512
7512
  const groupByExpiry = /* @__PURE__ */ new Map();
7513
7513
  let recoverableVtxos = [];
7514
7514
  for (const vtxo of eligible) {
7515
- if (chunk5MLC2HU3_cjs.canRecoverOnchain(vtxo, now)) {
7515
+ if (chunkRZ2NGS6A_cjs.canRecoverOnchain(vtxo, now)) {
7516
7516
  recoverableVtxos.push(vtxo);
7517
7517
  continue;
7518
7518
  }
7519
- const expiry = chunk5MLC2HU3_cjs.toBatchExpiry(vtxo);
7519
+ const expiry = chunkRZ2NGS6A_cjs.toBatchExpiry(vtxo);
7520
7520
  if (!expiry) continue;
7521
7521
  const dayKey = getDayTimestamp(expiry);
7522
7522
  groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
@@ -7581,7 +7581,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7581
7581
  }
7582
7582
  if (!delegateAt) {
7583
7583
  const now = { timestamp: /* @__PURE__ */ new Date() };
7584
- const expiryTimestamp = vtxos.filter((coin) => !chunk5MLC2HU3_cjs.canRecoverOnchain(coin, now) && chunk5MLC2HU3_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunk5MLC2HU3_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
7584
+ const expiryTimestamp = vtxos.filter((coin) => !chunkRZ2NGS6A_cjs.canRecoverOnchain(coin, now) && chunkRZ2NGS6A_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkRZ2NGS6A_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
7585
7585
  if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
7586
7586
  delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
7587
7587
  } else {
@@ -7610,7 +7610,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7610
7610
  let amount = 0n;
7611
7611
  for (const coin of vtxos) {
7612
7612
  const inputFee = estimator.evalOffchainInput({
7613
- ...chunk5MLC2HU3_cjs.toOffchainInputFeeParams(coin),
7613
+ ...chunkRZ2NGS6A_cjs.toOffchainInputFeeParams(coin),
7614
7614
  type: "vtxo"
7615
7615
  });
7616
7616
  if (inputFee.value >= coin.value) {
@@ -7624,7 +7624,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7624
7624
  const delegateFee = BigInt(Number(fee));
7625
7625
  if (delegateFee > 0n) {
7626
7626
  outputs.push({
7627
- script: chunk5MLC2HU3_cjs.ArkAddress.decode(delegateAddress).pkScript,
7627
+ script: chunkRZ2NGS6A_cjs.ArkAddress.decode(delegateAddress).pkScript,
7628
7628
  amount: delegateFee
7629
7629
  });
7630
7630
  }
@@ -7657,10 +7657,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7657
7657
  destinationScript
7658
7658
  );
7659
7659
  const forfeitOutputScript = btcSigner.OutScript.encode(
7660
- btcSigner.Address(chunk5MLC2HU3_cjs.getNetwork(network)).decode(forfeitAddress)
7660
+ btcSigner.Address(chunkRZ2NGS6A_cjs.getNetwork(network)).decode(forfeitAddress)
7661
7661
  );
7662
7662
  const forfeits = await Promise.all(
7663
- vtxos.filter((v) => !chunk5MLC2HU3_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
7663
+ vtxos.filter((v) => !chunkRZ2NGS6A_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
7664
7664
  const forfeit = await makeDelegateForfeitTx(
7665
7665
  coin,
7666
7666
  dust,
@@ -7685,7 +7685,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
7685
7685
  index: input.vout,
7686
7686
  witnessUtxo: {
7687
7687
  amount: BigInt(input.value),
7688
- script: chunk5MLC2HU3_cjs.VtxoScript.decode(input.tapTree).pkScript
7688
+ script: chunkRZ2NGS6A_cjs.VtxoScript.decode(input.tapTree).pkScript
7689
7689
  },
7690
7690
  sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
7691
7691
  tapLeafScript: [delegateTapLeaf]
@@ -7743,7 +7743,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
7743
7743
  expire_at: 0,
7744
7744
  cosigners_public_keys: cosignerPubKeys
7745
7745
  };
7746
- const proof = chunk5MLC2HU3_cjs.Intent.create(message, coins, outputs);
7746
+ const proof = chunkRZ2NGS6A_cjs.Intent.create(message, coins, outputs);
7747
7747
  const signedProof = await identity.sign(proof);
7748
7748
  return {
7749
7749
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -7761,10 +7761,10 @@ function getDayTimestamp(timestamp) {
7761
7761
  function findDelegateTapLeaf(vtxo, delegatePubkey) {
7762
7762
  if (!vtxo.tapTree) return void 0;
7763
7763
  const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
7764
- const vtxoScript = chunk5MLC2HU3_cjs.VtxoScript.decode(vtxo.tapTree);
7764
+ const vtxoScript = chunkRZ2NGS6A_cjs.VtxoScript.decode(vtxo.tapTree);
7765
7765
  return vtxoScript.leaves.find((tapLeaf) => {
7766
- const arkTapscript = chunk5MLC2HU3_cjs.decodeTapscript(chunk5MLC2HU3_cjs.scriptFromTapLeafScript(tapLeaf));
7767
- if (!chunk5MLC2HU3_cjs.MultisigTapscript.is(arkTapscript)) return false;
7766
+ const arkTapscript = chunkRZ2NGS6A_cjs.decodeTapscript(chunkRZ2NGS6A_cjs.scriptFromTapLeafScript(tapLeaf));
7767
+ if (!chunkRZ2NGS6A_cjs.MultisigTapscript.is(arkTapscript)) return false;
7768
7768
  return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
7769
7769
  });
7770
7770
  }
@@ -8045,7 +8045,7 @@ function createManagedConnection(dbName, version, initDatabase2) {
8045
8045
  };
8046
8046
  }
8047
8047
  function scriptFromArkAddress(address) {
8048
- return base.hex.encode(chunk5MLC2HU3_cjs.ArkAddress.decode(address).pkScript);
8048
+ return base.hex.encode(chunkRZ2NGS6A_cjs.ArkAddress.decode(address).pkScript);
8049
8049
  }
8050
8050
 
8051
8051
  // src/repositories/indexedDB/schema.ts
@@ -8540,7 +8540,7 @@ function validateVtxosForScript(vtxos, script, context) {
8540
8540
  }
8541
8541
  async function getVtxosForContract(repo, contract) {
8542
8542
  const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
8543
- return vtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo);
8543
+ return vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo);
8544
8544
  }
8545
8545
  async function saveVtxosForContract(repo, contract, vtxos) {
8546
8546
  if (repo.saveVtxosForScript) {
@@ -8682,7 +8682,7 @@ function decodeArkContract(encoded) {
8682
8682
  }
8683
8683
  function contractFromArkContract(encoded, options = {}) {
8684
8684
  const parsed = decodeArkContract(encoded);
8685
- const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(parsed.type);
8685
+ const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(parsed.type);
8686
8686
  if (!handler) {
8687
8687
  throw new Error(`No handler registered for contract type '${parsed.type}'`);
8688
8688
  }
@@ -8696,9 +8696,9 @@ function contractFromArkContract(encoded, options = {}) {
8696
8696
  metadata: options.metadata
8697
8697
  };
8698
8698
  }
8699
- function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunk5MLC2HU3_cjs.DEFAULT_NETWORK.hrp, options = {}) {
8699
+ function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkRZ2NGS6A_cjs.DEFAULT_NETWORK.hrp, options = {}) {
8700
8700
  const parsed = decodeArkContract(encoded);
8701
- const handler = chunkWIFL5QYZ_cjs.contractHandlers.getOrThrow(parsed.type);
8701
+ const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.getOrThrow(parsed.type);
8702
8702
  const params = parsed.data;
8703
8703
  const vtxoScript = handler.createScript(params);
8704
8704
  return {
@@ -8952,9 +8952,9 @@ var ContractWatcher = class {
8952
8952
  this.connectionState = "connected";
8953
8953
  this.reconnectAttempts = 0;
8954
8954
  this.listenLoop().catch((e) => {
8955
- if (chunk5MLC2HU3_cjs.isEventSourceError(e)) {
8955
+ if (chunkRZ2NGS6A_cjs.isEventSourceError(e)) {
8956
8956
  console.debug("ContractWatcher subscription disconnected; reconnecting");
8957
- } else if (!chunk5MLC2HU3_cjs.isEventSourceUnavailableError(e)) {
8957
+ } else if (!chunkRZ2NGS6A_cjs.isEventSourceUnavailableError(e)) {
8958
8958
  console.error(e);
8959
8959
  }
8960
8960
  this.connectionState = "disconnected";
@@ -8966,7 +8966,7 @@ var ContractWatcher = class {
8966
8966
  this.scheduleReconnect();
8967
8967
  });
8968
8968
  } catch (error) {
8969
- if (!chunk5MLC2HU3_cjs.isEventSourceUnavailableError(error)) {
8969
+ if (!chunkRZ2NGS6A_cjs.isEventSourceUnavailableError(error)) {
8970
8970
  console.error("ContractWatcher connection failed:", error);
8971
8971
  }
8972
8972
  this.connectionState = "disconnected";
@@ -8992,7 +8992,7 @@ var ContractWatcher = class {
8992
8992
  * slower; what it loses is push latency.
8993
8993
  */
8994
8994
  reportEventSourceUnavailable(error) {
8995
- if (!chunk5MLC2HU3_cjs.isEventSourceUnavailableError(error)) return false;
8995
+ if (!chunkRZ2NGS6A_cjs.isEventSourceUnavailableError(error)) return false;
8996
8996
  if (!this.eventSourceReported) {
8997
8997
  this.eventSourceReported = true;
8998
8998
  console.warn(
@@ -9208,14 +9208,14 @@ var ContractWatcher = class {
9208
9208
  const timestamp = Date.now();
9209
9209
  if (update.newVtxos?.length) {
9210
9210
  this.processSubscriptionVtxos(
9211
- update.newVtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo),
9211
+ update.newVtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo),
9212
9212
  "vtxo_received",
9213
9213
  timestamp
9214
9214
  );
9215
9215
  }
9216
9216
  if (update.spentVtxos?.length) {
9217
9217
  this.processSubscriptionVtxos(
9218
- update.spentVtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo),
9218
+ update.spentVtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo),
9219
9219
  "vtxo_spent",
9220
9220
  timestamp
9221
9221
  );
@@ -9310,7 +9310,7 @@ var NON_TERMINAL_INTENT_STATES = ALL_INTENT_STATES.filter(
9310
9310
  (s) => !isTerminalIntentState(s)
9311
9311
  );
9312
9312
  function isConsumed(vtxo) {
9313
- return vtxo !== void 0 && chunk5MLC2HU3_cjs.hasTerminalSpend(vtxo);
9313
+ return vtxo !== void 0 && chunkRZ2NGS6A_cjs.hasTerminalSpend(vtxo);
9314
9314
  }
9315
9315
  async function classifyIntent(intent, vtxosByOutpoint, now) {
9316
9316
  if (isTerminalIntentState(intent.state)) return void 0;
@@ -9353,7 +9353,7 @@ async function reconcileIntents(deps) {
9353
9353
  let vtxosByOutpoint = /* @__PURE__ */ new Map();
9354
9354
  if (outpoints.length > 0) {
9355
9355
  try {
9356
- const { vtxos } = await chunk5MLC2HU3_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
9356
+ const { vtxos } = await chunkRZ2NGS6A_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
9357
9357
  vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
9358
9358
  } catch (e) {
9359
9359
  console.error("reconcileIntents: failed to fetch input VTXO state", e);
@@ -9527,7 +9527,7 @@ var ContractManager = class _ContractManager {
9527
9527
  await this.reconcileWatched();
9528
9528
  this.markSyncOnline();
9529
9529
  } catch (err) {
9530
- if (!chunk5MLC2HU3_cjs.isRetryableProviderError(err)) throw err;
9530
+ if (!chunkRZ2NGS6A_cjs.isRetryableProviderError(err)) throw err;
9531
9531
  this.markSyncDegraded(err);
9532
9532
  }
9533
9533
  this.initialized = true;
@@ -9659,7 +9659,7 @@ var ContractManager = class _ContractManager {
9659
9659
  const from = Math.max(0, watermark - lookAhead.size);
9660
9660
  const to = watermark + lookAhead.size;
9661
9661
  const deps = lookAhead.candidateDeps();
9662
- const handlers = chunkWIFL5QYZ_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkWIFL5QYZ_cjs.contractHandlers.get(t)).filter(hasCandidates);
9662
+ const handlers = chunkQ5WQ4Y2I_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkQ5WQ4Y2I_cjs.contractHandlers.get(t)).filter(hasCandidates);
9663
9663
  const band = /* @__PURE__ */ new Map();
9664
9664
  for (let index = from; index <= to; index++) {
9665
9665
  const descriptor = lookAhead.materialize(index);
@@ -9670,7 +9670,7 @@ var ContractManager = class _ContractManager {
9670
9670
  index,
9671
9671
  params: {
9672
9672
  ...candidate,
9673
- ...chunkWIFL5QYZ_cjs.speculativeReceiveMetadata(descriptor)
9673
+ ...chunkQ5WQ4Y2I_cjs.speculativeReceiveMetadata(descriptor)
9674
9674
  }
9675
9675
  });
9676
9676
  }
@@ -9732,7 +9732,7 @@ var ContractManager = class _ContractManager {
9732
9732
  });
9733
9733
  for (const entry of pending) entry.catchUpPending = false;
9734
9734
  } catch (err) {
9735
- if (!chunk5MLC2HU3_cjs.isRetryableProviderError(err)) throw err;
9735
+ if (!chunkRZ2NGS6A_cjs.isRetryableProviderError(err)) throw err;
9736
9736
  this.markSyncDegraded(err);
9737
9737
  }
9738
9738
  }
@@ -9782,7 +9782,7 @@ var ContractManager = class _ContractManager {
9782
9782
  await this.fetchContractVxosFromIndexer([contract]);
9783
9783
  this.markSyncOnline();
9784
9784
  } catch (err) {
9785
- if (!chunk5MLC2HU3_cjs.isRetryableProviderError(err)) throw err;
9785
+ if (!chunkRZ2NGS6A_cjs.isRetryableProviderError(err)) throw err;
9786
9786
  this.markSyncDegraded(err);
9787
9787
  }
9788
9788
  await this.watcher.addContract(contract);
@@ -9819,7 +9819,7 @@ var ContractManager = class _ContractManager {
9819
9819
  return result;
9820
9820
  }
9821
9821
  async upsertContractRow(params) {
9822
- const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(params.type);
9822
+ const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(params.type);
9823
9823
  if (!handler) {
9824
9824
  throw new Error(`No handler registered for contract type '${params.type}'`);
9825
9825
  }
@@ -9919,7 +9919,7 @@ var ContractManager = class _ContractManager {
9919
9919
  `scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
9920
9920
  );
9921
9921
  }
9922
- const registered = chunkWIFL5QYZ_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkWIFL5QYZ_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9922
+ const registered = chunkQ5WQ4Y2I_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkQ5WQ4Y2I_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9923
9923
  const discoverables = [
9924
9924
  ...registered.filter((h) => h.type === "boarding"),
9925
9925
  ...registered.filter((h) => h.type !== "boarding")
@@ -10054,7 +10054,7 @@ var ContractManager = class _ContractManager {
10054
10054
  await this.syncContracts({ contracts, pageSize });
10055
10055
  this.markSyncOnline();
10056
10056
  } catch (err) {
10057
- if (!chunk5MLC2HU3_cjs.isRetryableProviderError(err)) throw err;
10057
+ if (!chunkRZ2NGS6A_cjs.isRetryableProviderError(err)) throw err;
10058
10058
  this.markSyncDegraded(err);
10059
10059
  }
10060
10060
  const vtxos = await this.getVtxosForContracts(contracts);
@@ -10075,7 +10075,7 @@ var ContractManager = class _ContractManager {
10075
10075
  }
10076
10076
  const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
10077
10077
  return vtxos.map(
10078
- (vtxo) => extendVirtualCoinForContract(chunk5MLC2HU3_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
10078
+ (vtxo) => extendVirtualCoinForContract(chunkRZ2NGS6A_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
10079
10079
  );
10080
10080
  }
10081
10081
  /** @inheritdoc */
@@ -10119,14 +10119,14 @@ var ContractManager = class _ContractManager {
10119
10119
  const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
10120
10120
  const asking = vtxos.filter((vtxo) => {
10121
10121
  const contract = byScript.get(vtxo.script);
10122
- return contract !== void 0 && chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
10122
+ return contract !== void 0 && chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
10123
10123
  });
10124
10124
  if (asking.length === 0) return refused;
10125
10125
  const tip = await this.currentChainTip();
10126
10126
  const walletKey = await walletPubKey?.();
10127
10127
  for (const vtxo of asking) {
10128
10128
  const contract = byScript.get(vtxo.script);
10129
- const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type);
10129
+ const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type);
10130
10130
  if (!handler?.assertSpendableNow) continue;
10131
10131
  const context = {
10132
10132
  collaborative: true,
@@ -10141,7 +10141,7 @@ var ContractManager = class _ContractManager {
10141
10141
  // the next handler to answer a CSV question would meet a
10142
10142
  // TypeError instead of a `false`. Carry the coin only when it
10143
10143
  // really is one.
10144
- vtxo: chunk5MLC2HU3_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
10144
+ vtxo: chunkRZ2NGS6A_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
10145
10145
  };
10146
10146
  try {
10147
10147
  await handler.assertSpendableNow(
@@ -10297,7 +10297,7 @@ var ContractManager = class _ContractManager {
10297
10297
  const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
10298
10298
  const [contract] = await this.getContracts({ script: contractScript });
10299
10299
  if (!contract) return [];
10300
- const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type);
10300
+ const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type);
10301
10301
  if (!handler) return [];
10302
10302
  const script = handler.createScript(contract.params);
10303
10303
  const tip = await this.currentChainTip();
@@ -10325,7 +10325,7 @@ var ContractManager = class _ContractManager {
10325
10325
  const { contractScript, collaborative = true, walletPubKey } = options;
10326
10326
  const [contract] = await this.getContracts({ script: contractScript });
10327
10327
  if (!contract) return [];
10328
- const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type);
10328
+ const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type);
10329
10329
  if (!handler) return [];
10330
10330
  const script = handler.createScript(contract.params);
10331
10331
  const context = {
@@ -10381,7 +10381,7 @@ var ContractManager = class _ContractManager {
10381
10381
  }
10382
10382
  async refreshOutpoints(outpoints) {
10383
10383
  if (outpoints.length === 0) return;
10384
- const { vtxos } = await chunk5MLC2HU3_cjs.getNormalizedVtxos(this.config.indexerProvider, {
10384
+ const { vtxos } = await chunkRZ2NGS6A_cjs.getNormalizedVtxos(this.config.indexerProvider, {
10385
10385
  outpoints
10386
10386
  });
10387
10387
  if (vtxos.length === 0) return;
@@ -10460,7 +10460,7 @@ var ContractManager = class _ContractManager {
10460
10460
  break;
10461
10461
  }
10462
10462
  } catch (err) {
10463
- if (!chunk5MLC2HU3_cjs.isRetryableProviderError(err)) throw err;
10463
+ if (!chunkRZ2NGS6A_cjs.isRetryableProviderError(err)) throw err;
10464
10464
  this.markSyncDegraded(err);
10465
10465
  }
10466
10466
  this.emitEvent(event);
@@ -10539,7 +10539,7 @@ var ContractManager = class _ContractManager {
10539
10539
  */
10540
10540
  async reconcilePendingFrontier(contracts) {
10541
10541
  const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
10542
- const vtxos = await chunk5MLC2HU3_cjs.getAllNormalizedVtxos(
10542
+ const vtxos = await chunkRZ2NGS6A_cjs.getAllNormalizedVtxos(
10543
10543
  this.config.indexerProvider,
10544
10544
  contracts.map((c) => c.script),
10545
10545
  { pendingOnly: true }
@@ -10622,7 +10622,7 @@ var ContractManager = class _ContractManager {
10622
10622
  }
10623
10623
  return result;
10624
10624
  }
10625
- async fetchContractVtxosBulk(contracts, pageSize = chunk5MLC2HU3_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10625
+ async fetchContractVtxosBulk(contracts, pageSize = chunkRZ2NGS6A_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10626
10626
  if (contracts.length === 0) {
10627
10627
  return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
10628
10628
  }
@@ -10638,7 +10638,7 @@ var ContractManager = class _ContractManager {
10638
10638
  before: syncWindow.before
10639
10639
  }
10640
10640
  } : {};
10641
- const vtxos = await chunk5MLC2HU3_cjs.getAllNormalizedVtxos(
10641
+ const vtxos = await chunkRZ2NGS6A_cjs.getAllNormalizedVtxos(
10642
10642
  this.config.indexerProvider,
10643
10643
  contracts.map((c) => c.script),
10644
10644
  { ...windowOpts, pageSize }
@@ -10783,7 +10783,7 @@ var deserializeTapLeaf = (t) => {
10783
10783
  const s = base.hex.decode(t.s);
10784
10784
  return [cb, s];
10785
10785
  };
10786
- var deserializeVtxo = (o) => chunk5MLC2HU3_cjs.normalizeVtxo({
10786
+ var deserializeVtxo = (o) => chunkRZ2NGS6A_cjs.normalizeVtxo({
10787
10787
  ...o,
10788
10788
  createdAt: new Date(o.createdAt),
10789
10789
  tapTree: base.hex.decode(o.tapTree),
@@ -11606,7 +11606,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
11606
11606
  */
11607
11607
  materializeDescriptorAt(index) {
11608
11608
  const descriptor = this.identity.descriptor;
11609
- const network = chunkWIFL5QYZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
11609
+ const network = chunkQ5WQ4Y2I_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
11610
11610
  const expansion = descriptorsScure.expand({ descriptor, network, index });
11611
11611
  const keyInfo = expansion.expansionMap?.["@0"];
11612
11612
  if (!keyInfo?.keyExpression) {
@@ -11754,7 +11754,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
11754
11754
  const provider = await resolveDescriptorProvider(config, setup.walletRepository);
11755
11755
  if (!provider) return void 0;
11756
11756
  const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
11757
- const expectedContractType = setup.offchainTapscript instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script ? "delegate" : "default";
11757
+ const expectedContractType = setup.offchainTapscript instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script ? "delegate" : "default";
11758
11758
  const factoryOpts = {
11759
11759
  walletRepository: setup.walletRepository,
11760
11760
  contractRepository: setup.contractRepository,
@@ -11955,7 +11955,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
11955
11955
  };
11956
11956
  function deriveLeafPubkey(descriptor) {
11957
11957
  try {
11958
- return chunkWIFL5QYZ_cjs.deriveDescriptorLeafPubKey(descriptor);
11958
+ return chunkQ5WQ4Y2I_cjs.deriveDescriptorLeafPubKey(descriptor);
11959
11959
  } catch (e) {
11960
11960
  throw new NonRangeableDescriptorError(
11961
11961
  "Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
@@ -11967,7 +11967,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11967
11967
  const pubKey = deriveLeafPubkey(descriptor);
11968
11968
  const tapscript = rebuildTapscript(current, pubKey);
11969
11969
  const serverPubKey = tapscript.options.serverPubKey;
11970
- const csvTimelock = chunk5MLC2HU3_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
11970
+ const csvTimelock = chunkRZ2NGS6A_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
11971
11971
  const base$1 = {
11972
11972
  script: base.hex.encode(tapscript.pkScript),
11973
11973
  address: tapscript.address(hrp, serverPubKey).encode(),
@@ -11978,11 +11978,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11978
11978
  // index-0 key. Without it, spends produce unsigned PSBTs that the
11979
11979
  // server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
11980
11980
  metadata: {
11981
- ...tagSource && { source: chunkWIFL5QYZ_cjs.WALLET_RECEIVE_SOURCE },
11981
+ ...tagSource && { source: chunkQ5WQ4Y2I_cjs.WALLET_RECEIVE_SOURCE },
11982
11982
  signingDescriptor: descriptor
11983
11983
  }
11984
11984
  };
11985
- const params = tapscript instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script ? {
11985
+ const params = tapscript instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script ? {
11986
11986
  ...base$1,
11987
11987
  type: "delegate",
11988
11988
  params: {
@@ -12003,10 +12003,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
12003
12003
  return { tapscript, params };
12004
12004
  }
12005
12005
  function rebuildTapscript(current, pubKey) {
12006
- if (current instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script) {
12007
- return new chunkWIFL5QYZ_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
12006
+ if (current instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script) {
12007
+ return new chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
12008
12008
  }
12009
- return new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
12009
+ return new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
12010
12010
  }
12011
12011
  async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
12012
12012
  const candidates = await contractRepository.getContracts({
@@ -12015,7 +12015,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
12015
12015
  });
12016
12016
  const serverPubKeyHex = base.hex.encode(serverPubKey);
12017
12017
  const matching = candidates.filter(
12018
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkWIFL5QYZ_cjs.WALLET_RECEIVE_SOURCE
12018
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkQ5WQ4Y2I_cjs.WALLET_RECEIVE_SOURCE
12019
12019
  ).sort((a, b) => {
12020
12020
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
12021
12021
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -12071,7 +12071,7 @@ function computeOffchainBalance(vtxos, caps) {
12071
12071
  }
12072
12072
  };
12073
12073
  for (const vtxo of vtxos) {
12074
- if (chunk5MLC2HU3_cjs.hasTerminalSpend(vtxo)) continue;
12074
+ if (chunkRZ2NGS6A_cjs.hasTerminalSpend(vtxo)) continue;
12075
12075
  addAssets(owned, vtxo);
12076
12076
  if (vtxo.isUnrolled) {
12077
12077
  unrolled += vtxo.value;
@@ -12081,11 +12081,11 @@ function computeOffchainBalance(vtxos, caps) {
12081
12081
  pendingRecovery += vtxo.value;
12082
12082
  continue;
12083
12083
  }
12084
- if (chunk5MLC2HU3_cjs.canRecoverOnchain(vtxo, now)) {
12084
+ if (chunkRZ2NGS6A_cjs.canRecoverOnchain(vtxo, now)) {
12085
12085
  recoverable += vtxo.value;
12086
12086
  continue;
12087
12087
  }
12088
- if (!chunk5MLC2HU3_cjs.canSpendOffchain(vtxo, now)) continue;
12088
+ if (!chunkRZ2NGS6A_cjs.canSpendOffchain(vtxo, now)) continue;
12089
12089
  if (vtxo.isPreconfirmed) {
12090
12090
  preconfirmed += vtxo.value;
12091
12091
  } else {
@@ -12255,12 +12255,12 @@ var InputSignerRouter = class {
12255
12255
  };
12256
12256
 
12257
12257
  // src/wallet/wallet.ts
12258
- var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunk5MLC2HU3_cjs.DEFAULT_ARKADE_SERVER_URL;
12258
+ var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkRZ2NGS6A_cjs.DEFAULT_ARKADE_SERVER_URL;
12259
12259
  function intentProofJobs(coins) {
12260
12260
  if (coins.length === 0) return [];
12261
12261
  const coinJobs = coins.map((coin, i) => ({
12262
12262
  index: i + 1,
12263
- lookupScript: chunk5MLC2HU3_cjs.VtxoScript.decode(coin.tapTree).pkScript
12263
+ lookupScript: chunkRZ2NGS6A_cjs.VtxoScript.decode(coin.tapTree).pkScript
12264
12264
  }));
12265
12265
  return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
12266
12266
  }
@@ -12292,7 +12292,7 @@ function dedupeTimelocks(timelocks) {
12292
12292
  const seen = /* @__PURE__ */ new Set();
12293
12293
  const deduped = [];
12294
12294
  for (const timelock of timelocks) {
12295
- const sequence = chunk5MLC2HU3_cjs.timelockToSequence(timelock).toString();
12295
+ const sequence = chunkRZ2NGS6A_cjs.timelockToSequence(timelock).toString();
12296
12296
  if (seen.has(sequence)) continue;
12297
12297
  seen.add(sequence);
12298
12298
  deduped.push(timelock);
@@ -12309,7 +12309,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
12309
12309
  state: "active"
12310
12310
  });
12311
12311
  const newest = candidates.filter(
12312
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkWIFL5QYZ_cjs.WALLET_RECEIVE_SOURCE
12312
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkQ5WQ4Y2I_cjs.WALLET_RECEIVE_SOURCE
12313
12313
  ).sort((a, b) => {
12314
12314
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
12315
12315
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -12317,7 +12317,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
12317
12317
  if (!newest?.params.pubKey) return baseline;
12318
12318
  try {
12319
12319
  const pubKey = base.hex.decode(newest.params.pubKey);
12320
- return new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
12320
+ return new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
12321
12321
  } catch (e) {
12322
12322
  console.warn("Skipping malformed boarding contract at boot", newest.script, e);
12323
12323
  return baseline;
@@ -12336,10 +12336,10 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
12336
12336
  if (vtxo.isUnrolled) {
12337
12337
  return !!f.withUnrolled;
12338
12338
  }
12339
- if (chunk5MLC2HU3_cjs.hasTerminalSpend(vtxo)) {
12339
+ if (chunkRZ2NGS6A_cjs.hasTerminalSpend(vtxo)) {
12340
12340
  return false;
12341
12341
  }
12342
- if (!f.withRecoverable && chunk5MLC2HU3_cjs.canRecoverOnchain(vtxo, now)) {
12342
+ if (!f.withRecoverable && chunkRZ2NGS6A_cjs.canRecoverOnchain(vtxo, now)) {
12343
12343
  return false;
12344
12344
  }
12345
12345
  return true;
@@ -12389,10 +12389,11 @@ var ArkadeCashCreateError = class extends Error {
12389
12389
  cause;
12390
12390
  };
12391
12391
  var ReadonlyWallet = class _ReadonlyWallet {
12392
- constructor(identity, network, onchainProvider, indexerProvider, arkServerPublicKey, offchainTapscript, boardingTapscript, dustAmount, walletRepository, contractRepository, delegateProvider, watcherConfig, walletContractTimelocks) {
12392
+ constructor(identity, network, onchainProvider, arkProvider, indexerProvider, arkServerPublicKey, offchainTapscript, boardingTapscript, dustAmount, walletRepository, contractRepository, delegateProvider, watcherConfig, walletContractTimelocks) {
12393
12393
  this.identity = identity;
12394
12394
  this.network = network;
12395
12395
  this.onchainProvider = onchainProvider;
12396
+ this.arkProvider = arkProvider;
12396
12397
  this.indexerProvider = indexerProvider;
12397
12398
  this.dustAmount = dustAmount;
12398
12399
  this.walletRepository = walletRepository;
@@ -12418,6 +12419,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12418
12419
  identity;
12419
12420
  network;
12420
12421
  onchainProvider;
12422
+ arkProvider;
12421
12423
  indexerProvider;
12422
12424
  dustAmount;
12423
12425
  walletRepository;
@@ -12485,14 +12487,19 @@ var ReadonlyWallet = class _ReadonlyWallet {
12485
12487
  */
12486
12488
  _arkServerPublicKey;
12487
12489
  /**
12488
- * Whether this wallet was constructed from live operator server-info
12489
- * (`"live"`) or from a cached snapshot because the operator was unreachable
12490
- * (`"cache"`). Freshness signal for {@link getProviderConnectionState}.
12490
+ * Whether the LATEST server-info resolution answered live (`"live"`) or
12491
+ * from the cached snapshot because the operator was unreachable
12492
+ * (`"cache"`). Seeded at construction and updated by every
12493
+ * {@link getArkadeInfo} read, so a wallet that booted offline and
12494
+ * recovered stops reporting degraded — and one that just fell back stops
12495
+ * claiming online. Freshness signal for
12496
+ * {@link getProviderConnectionState}.
12491
12497
  */
12492
12498
  _serverInfoSource = "live";
12493
12499
  /**
12494
- * Epoch-ms of the last known live operator contact: construction time on the
12495
- * `live` boot path, the cached snapshot's `savedAt` on the `cache` path.
12500
+ * Epoch-ms of the last known live operator contact: the most recent live
12501
+ * resolution (construction or a later {@link getArkadeInfo}), or the
12502
+ * cached snapshot's `savedAt` when the latest resolution fell back.
12496
12503
  */
12497
12504
  _serverInfoLastOnlineAt;
12498
12505
  /** @see {@link _serverInfoSource} */
@@ -12500,13 +12507,15 @@ var ReadonlyWallet = class _ReadonlyWallet {
12500
12507
  return this._serverInfoSource;
12501
12508
  }
12502
12509
  /**
12503
- * Composed provider-connection freshness: the boot server-info source
12504
- * (Arkade) combined with the contract-manager's indexer-sync health, if the
12505
- * manager has been initialized. Reads no live provider state — it never
12506
- * forces a `ContractManager` to constructso it is safe for readonly
12507
- * callers that only use address/balance APIs.
12510
+ * Composed provider-connection freshness: the LATEST server-info
12511
+ * resolution (boot, or any later {@link getArkadeInfo} read) combined with
12512
+ * the contract-manager's indexer-sync health, if the manager has been
12513
+ * initialized. Reads no live provider state — it never forces a
12514
+ * `ContractManager` to construct so it is safe for readonly callers
12515
+ * that only use address/balance APIs.
12508
12516
  *
12509
- * - Boot fell back to a cached snapshot → degraded on `arkade` (`cache`).
12517
+ * - Latest resolution fell back to the cached snapshot → degraded on
12518
+ * `arkade` (`cache`).
12510
12519
  * - Otherwise, if the contract manager has degraded to repository data →
12511
12520
  * degraded on `indexer` (`repository`).
12512
12521
  * - Otherwise online.
@@ -12552,7 +12561,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12552
12561
  }
12553
12562
  /**
12554
12563
  * x-only hex of the operator's deprecated signer keys (from
12555
- * `ArkInfo.deprecatedSigners`), cached for the OFFLINE read/watch paths.
12564
+ * `ArkadeInfo.deprecatedSigners`), cached for the OFFLINE read/watch paths.
12556
12565
  * The boarding watch/history surfaces ({@link getBoardingAddresses},
12557
12566
  * {@link getBoardingTxs}) fan out over {current} ∪ this set so a deposit at
12558
12567
  * a boarding address minted under a now-rotated operator signer keeps being
@@ -12627,6 +12636,64 @@ var ReadonlyWallet = class _ReadonlyWallet {
12627
12636
  get arkServerPublicKey() {
12628
12637
  return this._arkServerPublicKey;
12629
12638
  }
12639
+ /**
12640
+ * Server info for the Arkade server this wallet is connected to, resolved
12641
+ * exactly as construction resolves it: live wins, a retryable failure
12642
+ * falls back to the snapshot persisted at boot, a terminal one propagates.
12643
+ *
12644
+ * Live rather than the pinned boot snapshot because the fields callers
12645
+ * come here for — `signerPubkey`, `checkpointTapscript`, `fees` — are the
12646
+ * ones a mid-session rotation moves, and a covenant built against a
12647
+ * superseded signer is unspendable.
12648
+ *
12649
+ * One rotation caveat: reading does NOT re-pin the wallet —
12650
+ * {@link arkServerPublicKey}, {@link dustAmount} and the tapscripts move
12651
+ * only through `handleServerInfoChanged`/`rotateServerSigner` — so inside
12652
+ * a rotation window this can report epoch N+1 while the wallet still
12653
+ * spends on N. The window closes on its own: a read that observes a moved
12654
+ * digest makes the provider emit `onServerInfoChanged`, which is what
12655
+ * drives that rotation. A caller about to bind the answer into a covenant
12656
+ * passes `{ requireLive: true }` and fails closed instead of receiving
12657
+ * the boot snapshot.
12658
+ *
12659
+ * @returns The Arkade server's info
12660
+ * @see ArkadeInfo
12661
+ */
12662
+ async getArkadeInfo(opts) {
12663
+ const { info, source, lastOnlineAt } = await resolveArkInfo(
12664
+ this.arkProvider,
12665
+ this.walletRepository,
12666
+ opts
12667
+ );
12668
+ this._serverInfoSource = source;
12669
+ if (source === "live") {
12670
+ this._serverInfoLastOnlineAt = Date.now();
12671
+ } else if (lastOnlineAt !== void 0) {
12672
+ this._serverInfoLastOnlineAt = lastOnlineAt;
12673
+ }
12674
+ return info;
12675
+ }
12676
+ /**
12677
+ * Chain reads against this wallet's server for scripts it does not own.
12678
+ *
12679
+ * Binds the wallet's own `indexerProvider` — which may be an Expo or
12680
+ * injected one that a caller's hand-built `RestIndexerProvider` would
12681
+ * silently bypass. `getVtxos` goes through
12682
+ * {@link getNormalizedVtxos}, which is what makes every VTXO leaving the
12683
+ * seam carry its canonical facts.
12684
+ *
12685
+ * A bound object rather than the provider itself, so an `IReadonlyWallet`
12686
+ * holder gets `getVtxos`/`getVirtualTxs` and nothing else at runtime.
12687
+ * (`indexerProvider` is still public on the concrete classes, unlike
12688
+ * `arkProvider`, so this narrows the interface rather than the field.)
12689
+ */
12690
+ async getArkadeReader() {
12691
+ const indexer = this.indexerProvider;
12692
+ return {
12693
+ getVtxos: (opts) => chunkRZ2NGS6A_cjs.getNormalizedVtxos(indexer, opts),
12694
+ getVirtualTxs: (txids, opts) => indexer.getVirtualTxs(txids, opts)
12695
+ };
12696
+ }
12630
12697
  /**
12631
12698
  * The wallet's current boarding tapscript (the on-chain onboarding
12632
12699
  * target). Read-only from the outside; mutated only via
@@ -12679,7 +12746,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12679
12746
  */
12680
12747
  static async setupWalletConfig(config, pubKey) {
12681
12748
  const arkadeServerUrl = getArkadeServerUrl(config);
12682
- const arkProvider = config.arkProvider || new chunk5MLC2HU3_cjs.RestArkProvider(arkadeServerUrl);
12749
+ const arkProvider = config.arkProvider || new chunkRZ2NGS6A_cjs.RestArkProvider(arkadeServerUrl);
12683
12750
  let indexerProvider = config.indexerProvider;
12684
12751
  if (!indexerProvider) {
12685
12752
  let indexerUrl = config.indexerUrl;
@@ -12696,7 +12763,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12696
12763
  indexerUrl = arkadeServerUrl;
12697
12764
  }
12698
12765
  }
12699
- indexerProvider = new chunkGVHUHTRH_cjs.RestIndexerProvider(indexerUrl);
12766
+ indexerProvider = new chunkWQIWUTYS_cjs.RestIndexerProvider(indexerUrl);
12700
12767
  }
12701
12768
  const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
12702
12769
  const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
@@ -12705,7 +12772,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12705
12772
  source: serverInfoSource,
12706
12773
  lastOnlineAt: serverInfoLastOnlineAt
12707
12774
  } = await resolveArkInfo(arkProvider, walletRepository);
12708
- const network = chunk5MLC2HU3_cjs.getNetwork(info.network);
12775
+ const network = chunkRZ2NGS6A_cjs.networkFromArkadeInfo(info);
12709
12776
  if ("descriptor" in config.identity) {
12710
12777
  const descriptor = config.identity.descriptor;
12711
12778
  const identityIsMainnet = !descriptor.includes("tpub");
@@ -12745,18 +12812,18 @@ var ReadonlyWallet = class _ReadonlyWallet {
12745
12812
  value: info.boardingExitDelay,
12746
12813
  type: info.boardingExitDelay < 512n ? "blocks" : "seconds"
12747
12814
  };
12748
- const serverPubKey = chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
12749
- const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : config.delegatorProvider ? await config.delegatorProvider.getDelegateInfo().then((info2) => chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : void 0;
12815
+ const serverPubKey = chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
12816
+ const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : config.delegatorProvider ? await config.delegatorProvider.getDelegateInfo().then((info2) => chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : void 0;
12750
12817
  const offchainOptions = {
12751
12818
  pubKey,
12752
12819
  serverPubKey,
12753
12820
  csvTimelock: exitTimelock
12754
12821
  };
12755
- const offchainTapscript = !delegatePubKey ? new chunkWIFL5QYZ_cjs.DefaultVtxo.Script(offchainOptions) : new chunkWIFL5QYZ_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
12756
- const boardingTapscript = chunkWIFL5QYZ_cjs.BoardingContractHandler.createScript({
12822
+ const offchainTapscript = !delegatePubKey ? new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script(offchainOptions) : new chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
12823
+ const boardingTapscript = chunkQ5WQ4Y2I_cjs.BoardingContractHandler.createScript({
12757
12824
  pubKey: base.hex.encode(pubKey),
12758
12825
  serverPubKey: base.hex.encode(serverPubKey),
12759
- csvTimelock: chunk5MLC2HU3_cjs.timelockToSequence(boardingTimelock).toString()
12826
+ csvTimelock: chunkRZ2NGS6A_cjs.timelockToSequence(boardingTimelock).toString()
12760
12827
  });
12761
12828
  return {
12762
12829
  arkProvider,
@@ -12795,6 +12862,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12795
12862
  config.identity,
12796
12863
  setup.network,
12797
12864
  setup.onchainProvider,
12865
+ setup.arkProvider,
12798
12866
  setup.indexerProvider,
12799
12867
  setup.serverPubKey,
12800
12868
  setup.offchainTapscript,
@@ -12922,7 +12990,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12922
12990
  if (!filter?.withUnrolled) {
12923
12991
  logExcludedVtxos(
12924
12992
  "getSpendableVtxos",
12925
- snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunk5MLC2HU3_cjs.hasTerminalSpend(vtxo)),
12993
+ snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunkRZ2NGS6A_cjs.hasTerminalSpend(vtxo)),
12926
12994
  [() => UNROLLED_REASON]
12927
12995
  );
12928
12996
  }
@@ -13065,7 +13133,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13065
13133
  const response = await contractManager.getContractsWithVtxos();
13066
13134
  const allVtxos = response.flatMap((_) => _.vtxos);
13067
13135
  const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
13068
- const resolveTxCreatedAt = (txids) => chunk5MLC2HU3_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
13136
+ const resolveTxCreatedAt = (txids) => chunkRZ2NGS6A_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
13069
13137
  return buildTransactionHistory(
13070
13138
  allVtxos,
13071
13139
  boardingTxs,
@@ -13159,7 +13227,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13159
13227
  },
13160
13228
  isUnrolled: true,
13161
13229
  ...boardingFacts,
13162
- virtualStatus: chunk5MLC2HU3_cjs.toVirtualStatus(boardingFacts),
13230
+ virtualStatus: chunkRZ2NGS6A_cjs.toVirtualStatus(boardingFacts),
13163
13231
  spentBy: "",
13164
13232
  createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
13165
13233
  script: scriptHex
@@ -13215,9 +13283,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
13215
13283
  async getBoardingTapscripts(allowedSigners) {
13216
13284
  const byScript = /* @__PURE__ */ new Map();
13217
13285
  const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
13218
- const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkWIFL5QYZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13286
+ const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13219
13287
  add(
13220
- new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({
13288
+ new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({
13221
13289
  pubKey: await this.identity.xOnlyPublicKey(),
13222
13290
  serverPubKey: this.boardingTapscript.options.serverPubKey,
13223
13291
  csvTimelock: boardingCsv
@@ -13232,7 +13300,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13232
13300
  for (const c of boardingContracts) {
13233
13301
  if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
13234
13302
  try {
13235
- add(chunkWIFL5QYZ_cjs.BoardingContractHandler.createScript(c.params));
13303
+ add(chunkQ5WQ4Y2I_cjs.BoardingContractHandler.createScript(c.params));
13236
13304
  } catch (e) {
13237
13305
  console.warn("Skipping malformed boarding contract", c.script, e);
13238
13306
  }
@@ -13270,7 +13338,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13270
13338
  // Per-row CSV delay decoded from THIS tapscript's exit leaf —
13271
13339
  // not the wallet's current boarding timelock, which a signer
13272
13340
  // rotation may have changed.
13273
- csvTimelock: chunk5MLC2HU3_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
13341
+ csvTimelock: chunkRZ2NGS6A_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
13274
13342
  coins: utxos
13275
13343
  });
13276
13344
  }
@@ -13403,7 +13471,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13403
13471
  /** Fetch Arkade transaction ids that are still pending final settlement. */
13404
13472
  async fetchPendingTxs() {
13405
13473
  const scripts = await this.getWalletScripts();
13406
- const vtxos = await chunk5MLC2HU3_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
13474
+ const vtxos = await chunkRZ2NGS6A_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
13407
13475
  return vtxos.filter(
13408
13476
  (vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
13409
13477
  ).map((_) => _.arkTxId);
@@ -13434,7 +13502,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13434
13502
  });
13435
13503
  for (const contract of contracts) {
13436
13504
  if (map.has(contract.script)) continue;
13437
- const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type);
13505
+ const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type);
13438
13506
  if (handler) {
13439
13507
  const script = handler.createScript(contract.params);
13440
13508
  map.set(contract.script, script);
@@ -13546,7 +13614,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13546
13614
  }
13547
13615
  });
13548
13616
  const baselinePubkey = await this.identity.xOnlyPublicKey();
13549
- const delegatePubKey = this.offchainTapscript instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13617
+ const delegatePubKey = this.offchainTapscript instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13550
13618
  const baselineSigners = [
13551
13619
  this.offchainTapscript.options.serverPubKey,
13552
13620
  ...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
@@ -13554,8 +13622,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
13554
13622
  const seenBaselineScripts = /* @__PURE__ */ new Set();
13555
13623
  for (const serverPubKey of baselineSigners) {
13556
13624
  for (const csvTimelock of this.walletContractTimelocks) {
13557
- const csvTimelockStr = chunk5MLC2HU3_cjs.timelockToSequence(csvTimelock).toString();
13558
- const defaultScript = new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({
13625
+ const csvTimelockStr = chunkRZ2NGS6A_cjs.timelockToSequence(csvTimelock).toString();
13626
+ const defaultScript = new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({
13559
13627
  pubKey: baselinePubkey,
13560
13628
  serverPubKey,
13561
13629
  csvTimelock
@@ -13576,7 +13644,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13576
13644
  });
13577
13645
  }
13578
13646
  if (delegatePubKey) {
13579
- const delegateScript = new chunkWIFL5QYZ_cjs.DelegateVtxo.Script({
13647
+ const delegateScript = new chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script({
13580
13648
  pubKey: baselinePubkey,
13581
13649
  serverPubKey,
13582
13650
  delegatePubKey,
@@ -13600,9 +13668,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
13600
13668
  }
13601
13669
  }
13602
13670
  }
13603
- const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkWIFL5QYZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13671
+ const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13604
13672
  for (const serverPubKey of baselineSigners) {
13605
- const baselineBoarding = new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({
13673
+ const baselineBoarding = new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({
13606
13674
  pubKey: baselinePubkey,
13607
13675
  serverPubKey,
13608
13676
  csvTimelock: boardingCsvTimelock
@@ -13615,7 +13683,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13615
13683
  params: {
13616
13684
  pubKey: base.hex.encode(baselineBoarding.options.pubKey),
13617
13685
  serverPubKey: base.hex.encode(serverPubKey),
13618
- csvTimelock: chunk5MLC2HU3_cjs.timelockToSequence(boardingCsvTimelock).toString()
13686
+ csvTimelock: chunkRZ2NGS6A_cjs.timelockToSequence(boardingCsvTimelock).toString()
13619
13687
  },
13620
13688
  script: boardingScriptHex,
13621
13689
  address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
@@ -13642,6 +13710,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13642
13710
  identity,
13643
13711
  network,
13644
13712
  onchainProvider,
13713
+ arkProvider,
13645
13714
  indexerProvider,
13646
13715
  arkServerPublicKey,
13647
13716
  offchainTapscript,
@@ -13653,7 +13722,6 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13653
13722
  watcherConfig,
13654
13723
  walletContractTimelocks
13655
13724
  );
13656
- this.arkProvider = arkProvider;
13657
13725
  this.forfeitOutputScript = forfeitOutputScript;
13658
13726
  this.forfeitPubkey = forfeitPubkey;
13659
13727
  this.batchExpiryPolicy = batchExpiryPolicy;
@@ -13687,7 +13755,6 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13687
13755
  boardingPkScript: boardingTapscript.pkScript
13688
13756
  });
13689
13757
  }
13690
- arkProvider;
13691
13758
  forfeitOutputScript;
13692
13759
  forfeitPubkey;
13693
13760
  batchExpiryPolicy;
@@ -13815,7 +13882,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13815
13882
  serverPubKey: this.offchainTapscript.options.serverPubKey,
13816
13883
  deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
13817
13884
  csvTimelocks: this.walletContractTimelocks,
13818
- delegatePubKey: this.offchainTapscript instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
13885
+ delegatePubKey: this.offchainTapscript instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
13819
13886
  };
13820
13887
  }
13821
13888
  _signerRouter;
@@ -13850,7 +13917,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13850
13917
  /**
13851
13918
  * Output script for checkpoint transactions, decoded from the server's
13852
13919
  * `checkpointTapscript`. Server-controlled state: pinned at construction
13853
- * and re-sourced from a fresh `ArkInfo` on server-signer rotation. Read it
13920
+ * and re-sourced from a fresh `ArkadeInfo` on server-signer rotation. Read it
13854
13921
  * through {@link serverUnrollScript}; write it only through
13855
13922
  * {@link setServerUnrollScriptForRotation}.
13856
13923
  */
@@ -13861,7 +13928,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13861
13928
  /**
13862
13929
  * @internal Sole write path for `serverUnrollScript` after construction.
13863
13930
  * Called by {@link Wallet._doRotateServerSigner} with the checkpoint script
13864
- * sourced from the fresh `ArkInfo` that triggered the rotation, so the send
13931
+ * sourced from the fresh `ArkadeInfo` that triggered the rotation, so the send
13865
13932
  * path builds checkpoints against the new server epoch. External code must
13866
13933
  * treat `serverUnrollScript` as read-only.
13867
13934
  */
@@ -14060,7 +14127,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14060
14127
  const [row] = await manager.getContracts({ script: base.hex.encode(display.pkScript) });
14061
14128
  const persisted = row?.metadata?.signingDescriptor;
14062
14129
  if (typeof persisted === "string") return persisted;
14063
- return chunkWIFL5QYZ_cjs.identityDescriptor(this.identity);
14130
+ return chunkQ5WQ4Y2I_cjs.identityDescriptor(this.identity);
14064
14131
  }
14065
14132
  /**
14066
14133
  * Build, persist and shape one address of `type` owned by `descriptor` —
@@ -14076,7 +14143,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14076
14143
  async mintAddress(manager, type, descriptor, tagSource, allocated) {
14077
14144
  if (type === "boarding") {
14078
14145
  const built2 = this.buildBoardingContract(
14079
- chunkWIFL5QYZ_cjs.deriveDescriptorLeafPubKey(descriptor),
14146
+ chunkQ5WQ4Y2I_cjs.deriveDescriptorLeafPubKey(descriptor),
14080
14147
  descriptor,
14081
14148
  tagSource
14082
14149
  );
@@ -14121,11 +14188,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14121
14188
  * {@link buildReceiveContract}.
14122
14189
  */
14123
14190
  buildBoardingContract(pubKey, descriptor, tagSource) {
14124
- const tapscript = new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({
14191
+ const tapscript = new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({
14125
14192
  ...this._boardingTapscript.options,
14126
14193
  pubKey
14127
14194
  });
14128
- const csvTimelock = tapscript.options.csvTimelock ?? chunkWIFL5QYZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
14195
+ const csvTimelock = tapscript.options.csvTimelock ?? chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
14129
14196
  return {
14130
14197
  tapscript,
14131
14198
  params: {
@@ -14133,13 +14200,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14133
14200
  params: {
14134
14201
  pubKey: base.hex.encode(pubKey),
14135
14202
  serverPubKey: base.hex.encode(tapscript.options.serverPubKey),
14136
- csvTimelock: chunk5MLC2HU3_cjs.timelockToSequence(csvTimelock).toString()
14203
+ csvTimelock: chunkRZ2NGS6A_cjs.timelockToSequence(csvTimelock).toString()
14137
14204
  },
14138
14205
  script: base.hex.encode(tapscript.pkScript),
14139
14206
  address: tapscript.address(this.network.hrp, this.arkServerPublicKey).encode(),
14140
14207
  state: "active",
14141
14208
  metadata: {
14142
- ...tagSource && { source: chunkWIFL5QYZ_cjs.WALLET_RECEIVE_SOURCE },
14209
+ ...tagSource && { source: chunkQ5WQ4Y2I_cjs.WALLET_RECEIVE_SOURCE },
14143
14210
  signingDescriptor: descriptor
14144
14211
  }
14145
14212
  }
@@ -14168,7 +14235,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14168
14235
  if (this._descriptorProvider instanceof HDDescriptorProvider) {
14169
14236
  return (await this.getContractManager()).getNextSigningDescriptor();
14170
14237
  }
14171
- return chunkWIFL5QYZ_cjs.identityDescriptor(this.identity);
14238
+ return chunkQ5WQ4Y2I_cjs.identityDescriptor(this.identity);
14172
14239
  }
14173
14240
  /**
14174
14241
  * @see HDAllocationCapable.advanceSigningDescriptorWatermark
@@ -14264,7 +14331,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14264
14331
  * the stable public API.
14265
14332
  */
14266
14333
  async rotateServerSigner(newServerPubKey, checkpointTapscript) {
14267
- const xonly = chunkWIFL5QYZ_cjs.toXOnly(newServerPubKey, "ark signer key");
14334
+ const xonly = chunkQ5WQ4Y2I_cjs.toXOnly(newServerPubKey, "ark signer key");
14268
14335
  const newServerUnrollScript = assertValidServerUnrollScript(
14269
14336
  checkpointTapscript,
14270
14337
  resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
@@ -14293,21 +14360,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14293
14360
  const [currentBoardingRow] = await manager.getContracts({
14294
14361
  script: currentBoardingScript
14295
14362
  });
14296
- const newOffchain = this.offchainTapscript instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script ? new chunkWIFL5QYZ_cjs.DelegateVtxo.Script({
14363
+ const newOffchain = this.offchainTapscript instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script ? new chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script({
14297
14364
  ...this.offchainTapscript.options,
14298
14365
  serverPubKey: xonly
14299
- }) : new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({
14366
+ }) : new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({
14300
14367
  ...this.offchainTapscript.options,
14301
14368
  serverPubKey: xonly
14302
14369
  });
14303
- const newBoarding = new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({
14370
+ const newBoarding = new chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script({
14304
14371
  ...this._boardingTapscript.options,
14305
14372
  serverPubKey: xonly
14306
14373
  });
14307
- const offchainCsv = chunk5MLC2HU3_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
14374
+ const offchainCsv = chunkRZ2NGS6A_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
14308
14375
  const newOffchainScript = base.hex.encode(newOffchain.pkScript);
14309
14376
  const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
14310
- if (newOffchain instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script) {
14377
+ if (newOffchain instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script) {
14311
14378
  await manager.createContract({
14312
14379
  type: "delegate",
14313
14380
  params: {
@@ -14335,13 +14402,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14335
14402
  metadata: currentOffchainRow?.metadata
14336
14403
  });
14337
14404
  }
14338
- const boardingCsv = newBoarding.options.csvTimelock ?? chunkWIFL5QYZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
14405
+ const boardingCsv = newBoarding.options.csvTimelock ?? chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
14339
14406
  await manager.createContract({
14340
14407
  type: "boarding",
14341
14408
  params: {
14342
14409
  pubKey: base.hex.encode(newBoarding.options.pubKey),
14343
14410
  serverPubKey: base.hex.encode(xonly),
14344
- csvTimelock: chunk5MLC2HU3_cjs.timelockToSequence(boardingCsv).toString()
14411
+ csvTimelock: chunkRZ2NGS6A_cjs.timelockToSequence(boardingCsv).toString()
14345
14412
  },
14346
14413
  script: base.hex.encode(newBoarding.pkScript),
14347
14414
  address: newBoarding.address(this.network.hrp, xonly).encode(),
@@ -14374,14 +14441,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14374
14441
  _restoreInFlight;
14375
14442
  _addPendingSpends(inputs) {
14376
14443
  for (const input of inputs) {
14377
- if (chunk5MLC2HU3_cjs.isVirtualCoin(input)) {
14444
+ if (chunkRZ2NGS6A_cjs.isVirtualCoin(input)) {
14378
14445
  this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
14379
14446
  }
14380
14447
  }
14381
14448
  }
14382
14449
  _removePendingSpends(inputs) {
14383
14450
  for (const input of inputs) {
14384
- if (chunk5MLC2HU3_cjs.isVirtualCoin(input)) {
14451
+ if (chunkRZ2NGS6A_cjs.isVirtualCoin(input)) {
14385
14452
  this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
14386
14453
  }
14387
14454
  }
@@ -14439,13 +14506,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14439
14506
  const manager = await this.getContractManager();
14440
14507
  const provider = this._descriptorProvider;
14441
14508
  const hd = provider instanceof HDDescriptorProvider;
14442
- const staticDescriptor = hd ? void 0 : await chunkWIFL5QYZ_cjs.identityDescriptor(this.identity);
14509
+ const staticDescriptor = hd ? void 0 : await chunkQ5WQ4Y2I_cjs.identityDescriptor(this.identity);
14443
14510
  const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
14444
- const delegatePubKey = this.offchainTapscript instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
14511
+ const delegatePubKey = this.offchainTapscript instanceof chunkQ5WQ4Y2I_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
14445
14512
  const arkInfo = await this.arkProvider.getInfo();
14446
- const currentSignerPubKey = chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
14513
+ const currentSignerPubKey = chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
14447
14514
  const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
14448
- (s) => chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
14515
+ (s) => chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
14449
14516
  );
14450
14517
  const deps = {
14451
14518
  indexerProvider: this.indexerProvider,
@@ -14460,7 +14527,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14460
14527
  csvTimelocks: this.walletContractTimelocks,
14461
14528
  // Boarding-exit CSV so the boarding handler can build its
14462
14529
  // candidate script (distinct from the unilateral-exit matrix).
14463
- boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkWIFL5QYZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
14530
+ boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkQ5WQ4Y2I_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
14464
14531
  delegatePubKey
14465
14532
  };
14466
14533
  const result = await manager.scanContracts({
@@ -14493,6 +14560,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14493
14560
  /** @deprecated Use settlementConfig instead */
14494
14561
  renewalConfig;
14495
14562
  settlementConfig;
14563
+ /**
14564
+ * Broadcast access bound to this wallet's server, so a plugin needs only
14565
+ * the wallet.
14566
+ *
14567
+ * Defined here and not on {@link ReadonlyWallet} for the same reason
14568
+ * `arkProvider` is protected there: a readonly wallet, and every
14569
+ * `toReadonly()` view, must not be able to submit.
14570
+ */
14571
+ async getArkadeBroadcaster() {
14572
+ const ark = this.arkProvider;
14573
+ return {
14574
+ submitTx: (signedArkTx, checkpointTxs) => ark.submitTx(signedArkTx, checkpointTxs),
14575
+ finalizeTx: (arkTxid, finalCheckpointTxs) => ark.finalizeTx(arkTxid, finalCheckpointTxs)
14576
+ };
14577
+ }
14496
14578
  get assetManager() {
14497
14579
  this._walletAssetManager ??= new AssetManager(this);
14498
14580
  return this._walletAssetManager;
@@ -14574,7 +14656,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14574
14656
  throw new Error("Invalid configured public key");
14575
14657
  }
14576
14658
  const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
14577
- const forfeitPubkey = chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
14659
+ const forfeitPubkey = chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
14578
14660
  const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
14579
14661
  const forfeitOutputScript = btcSigner.OutScript.encode(forfeitAddress);
14580
14662
  const checkpointExitDelayOverrides = {
@@ -14672,6 +14754,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14672
14754
  readonlyIdentity,
14673
14755
  this.network,
14674
14756
  this.onchainProvider,
14757
+ this.arkProvider,
14675
14758
  this.indexerProvider,
14676
14759
  this.arkServerPublicKey,
14677
14760
  this.offchainTapscript,
@@ -14723,8 +14806,8 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14723
14806
  inputs: params.selectedVtxos,
14724
14807
  changeAmount: BigInt(changeAmount)
14725
14808
  };
14726
- const outputAddress = chunk5MLC2HU3_cjs.ArkAddress.decode(params.address);
14727
- assertRecipientArkAddress(
14809
+ const outputAddress = chunkRZ2NGS6A_cjs.ArkAddress.decode(params.address);
14810
+ assertRecipientArkadeAddress(
14728
14811
  params.address,
14729
14812
  outputAddress,
14730
14813
  this.recipientAddressContext(serverPubKey)
@@ -14789,13 +14872,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14789
14872
  void this.logUngatedInputs("settle({ inputs })", params.inputs);
14790
14873
  }
14791
14874
  const offchainAddress = await this.getAddress();
14792
- const offchainPkScript = chunk5MLC2HU3_cjs.ArkAddress.decode(offchainAddress).pkScript;
14875
+ const offchainPkScript = chunkRZ2NGS6A_cjs.ArkAddress.decode(offchainAddress).pkScript;
14793
14876
  const offchainOutputScript = base.hex.encode(offchainPkScript);
14794
14877
  if (!params) {
14795
14878
  const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
14796
14879
  const estimator = new Estimator(fees.intentFee);
14797
14880
  let amount = 0;
14798
- const exitScript = chunk5MLC2HU3_cjs.CSVMultisigTapscript.decode(
14881
+ const exitScript = chunkRZ2NGS6A_cjs.CSVMultisigTapscript.decode(
14799
14882
  base.hex.decode(this.boardingTapscript.exitScript)
14800
14883
  );
14801
14884
  const boardingTimelock = exitScript.params.timelock;
@@ -14824,7 +14907,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14824
14907
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
14825
14908
  break;
14826
14909
  }
14827
- const inputFee = estimator.evalOffchainInput(chunk5MLC2HU3_cjs.toOffchainInputFeeParams(vtxo));
14910
+ const inputFee = estimator.evalOffchainInput(chunkRZ2NGS6A_cjs.toOffchainInputFeeParams(vtxo));
14828
14911
  if (inputFee.satoshis >= vtxo.value) {
14829
14912
  continue;
14830
14913
  }
@@ -14871,13 +14954,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14871
14954
  let script;
14872
14955
  let arkAddress;
14873
14956
  try {
14874
- arkAddress = chunk5MLC2HU3_cjs.ArkAddress.decode(output.address);
14957
+ arkAddress = chunkRZ2NGS6A_cjs.ArkAddress.decode(output.address);
14875
14958
  } catch {
14876
14959
  arkAddress = void 0;
14877
14960
  }
14878
14961
  if (arkAddress) {
14879
14962
  recipientContext ??= this.recipientAddressContext();
14880
- assertRecipientArkAddress(output.address, arkAddress, recipientContext);
14963
+ assertRecipientArkadeAddress(output.address, arkAddress, recipientContext);
14881
14964
  script = arkAddress.pkScript;
14882
14965
  hasOffchainOutputs = true;
14883
14966
  } else {
@@ -14961,7 +15044,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14961
15044
  const abortController = new AbortController();
14962
15045
  let stream;
14963
15046
  let committedTxid;
14964
- const settleInputVtxos = params.inputs.filter(chunk5MLC2HU3_cjs.isVirtualCoin);
15047
+ const settleInputVtxos = params.inputs.filter(chunkRZ2NGS6A_cjs.isVirtualCoin);
14965
15048
  const contractManager = await this.getContractManager();
14966
15049
  await contractManager.assertAnnotatable(settleInputVtxos);
14967
15050
  await contractManager.assertSpendableNow?.(
@@ -15073,7 +15156,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15073
15156
  async maybeRotateBoardingAfterBoard(inputs) {
15074
15157
  if (!this._descriptorProvider) return;
15075
15158
  const consumedBoarding = inputs.some(
15076
- (input) => typeof input !== "string" && !chunk5MLC2HU3_cjs.isVirtualCoin(input)
15159
+ (input) => typeof input !== "string" && !chunkRZ2NGS6A_cjs.isVirtualCoin(input)
15077
15160
  );
15078
15161
  if (!consumedBoarding) return;
15079
15162
  try {
@@ -15097,7 +15180,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15097
15180
  let connectorIndex = 0;
15098
15181
  const connectorsLeaves = connectorsGraph?.leaves() || [];
15099
15182
  for (const input of inputs) {
15100
- if (!chunk5MLC2HU3_cjs.isVirtualCoin(input)) {
15183
+ if (!chunkRZ2NGS6A_cjs.isVirtualCoin(input)) {
15101
15184
  for (let i = 0; i < settlementPsbt.inputsLength; i++) {
15102
15185
  const settlementInput = settlementPsbt.getInput(i);
15103
15186
  if (!settlementInput.txid || settlementInput.index === void 0) {
@@ -15128,7 +15211,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15128
15211
  }
15129
15212
  continue;
15130
15213
  }
15131
- if (chunk5MLC2HU3_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
15214
+ if (chunkRZ2NGS6A_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
15132
15215
  continue;
15133
15216
  }
15134
15217
  if (connectorsLeaves.length === 0) {
@@ -15156,7 +15239,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15156
15239
  index: input.vout,
15157
15240
  witnessUtxo: {
15158
15241
  amount: BigInt(input.value),
15159
- script: chunk5MLC2HU3_cjs.VtxoScript.decode(input.tapTree).pkScript
15242
+ script: chunkRZ2NGS6A_cjs.VtxoScript.decode(input.tapTree).pkScript
15160
15243
  },
15161
15244
  sighashType: btcSigner.SigHash.DEFAULT,
15162
15245
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -15175,7 +15258,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15175
15258
  forfeitTx = await this._signerRouter.sign(forfeitTx, [
15176
15259
  {
15177
15260
  index: 0,
15178
- lookupScript: chunk5MLC2HU3_cjs.VtxoScript.decode(input.tapTree).pkScript
15261
+ lookupScript: chunkRZ2NGS6A_cjs.VtxoScript.decode(input.tapTree).pkScript
15179
15262
  }
15180
15263
  ]);
15181
15264
  signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
@@ -15233,7 +15316,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15233
15316
  resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
15234
15317
  );
15235
15318
  await this.arkProvider.confirmRegistration(intentId);
15236
- const sweepTapscript = chunk5MLC2HU3_cjs.CSVMultisigTapscript.encode({
15319
+ const sweepTapscript = chunkRZ2NGS6A_cjs.CSVMultisigTapscript.encode({
15237
15320
  timelock,
15238
15321
  pubkeys: [this.forfeitPubkey]
15239
15322
  }).script;
@@ -15248,10 +15331,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15248
15331
  throw new Error("Sweep tap tree root not set");
15249
15332
  }
15250
15333
  const xOnlyPublicKeys = event.cosignersPublicKeys.map(
15251
- (k) => base.hex.encode(chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
15334
+ (k) => base.hex.encode(chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
15252
15335
  );
15253
15336
  const signerPublicKey = await session.getPublicKey();
15254
- const xonlySignerPublicKey = chunkWIFL5QYZ_cjs.toXOnly(signerPublicKey, "signer key");
15337
+ const xonlySignerPublicKey = chunkQ5WQ4Y2I_cjs.toXOnly(signerPublicKey, "signer key");
15255
15338
  if (!xOnlyPublicKeys.includes(base.hex.encode(xonlySignerPublicKey))) {
15256
15339
  return { skip: true };
15257
15340
  }
@@ -15341,9 +15424,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15341
15424
  ...existing ?? {},
15342
15425
  intentTxId,
15343
15426
  registerProof: intent.proof,
15344
- registerProofMessage: chunk5MLC2HU3_cjs.Intent.encodeMessage(intent.message),
15427
+ registerProofMessage: chunkRZ2NGS6A_cjs.Intent.encodeMessage(intent.message),
15345
15428
  deleteProof: deleteIntent.proof,
15346
- deleteProofMessage: chunk5MLC2HU3_cjs.Intent.encodeMessage(deleteIntent.message),
15429
+ deleteProofMessage: chunkRZ2NGS6A_cjs.Intent.encodeMessage(deleteIntent.message),
15347
15430
  intentVtxos: inputs.map((i) => ({
15348
15431
  txid: i.txid,
15349
15432
  vout: i.vout
@@ -15375,7 +15458,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15375
15458
  try {
15376
15459
  return await this.arkProvider.registerIntent(intent);
15377
15460
  } catch (error) {
15378
- if (error instanceof chunk5MLC2HU3_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
15461
+ if (error instanceof chunkRZ2NGS6A_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
15379
15462
  const deleteIntent = await this.makeDeleteIntentSignature(inputs);
15380
15463
  await this.arkProvider.deleteIntent(deleteIntent);
15381
15464
  return this.arkProvider.registerIntent(intent);
@@ -15391,7 +15474,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15391
15474
  expire_at: 0,
15392
15475
  cosigners_public_keys: cosignerPubKeys
15393
15476
  };
15394
- const proof = chunk5MLC2HU3_cjs.Intent.create(message, coins, outputs);
15477
+ const proof = chunkRZ2NGS6A_cjs.Intent.create(message, coins, outputs);
15395
15478
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
15396
15479
  return {
15397
15480
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -15403,7 +15486,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15403
15486
  type: "delete",
15404
15487
  expire_at: 0
15405
15488
  };
15406
- const proof = chunk5MLC2HU3_cjs.Intent.create(message, coins, []);
15489
+ const proof = chunkRZ2NGS6A_cjs.Intent.create(message, coins, []);
15407
15490
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
15408
15491
  return {
15409
15492
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -15415,7 +15498,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15415
15498
  type: "get-pending-tx",
15416
15499
  expire_at: 0
15417
15500
  };
15418
- const proof = chunk5MLC2HU3_cjs.Intent.create(message, coins, []);
15501
+ const proof = chunkRZ2NGS6A_cjs.Intent.create(message, coins, []);
15419
15502
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
15420
15503
  return {
15421
15504
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -15436,7 +15519,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15436
15519
  if (!vtxos || vtxos.length === 0) {
15437
15520
  const scriptMap = await this.getScriptMap();
15438
15521
  const allExtended = [];
15439
- const fetchedVtxos = await chunk5MLC2HU3_cjs.getAllNormalizedVtxos(this.indexerProvider, [
15522
+ const fetchedVtxos = await chunkRZ2NGS6A_cjs.getAllNormalizedVtxos(this.indexerProvider, [
15440
15523
  ...scriptMap.keys()
15441
15524
  ]);
15442
15525
  for (const vtxo of fetchedVtxos) {
@@ -15480,7 +15563,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15480
15563
  try {
15481
15564
  const checkpointTxs = pendingTx.signedCheckpointTxs.map((c) => {
15482
15565
  const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(c));
15483
- chunk5MLC2HU3_cjs.assertAllowedSighashTypes(tx);
15566
+ chunkRZ2NGS6A_cjs.assertAllowedSighashTypes(tx);
15484
15567
  return tx;
15485
15568
  });
15486
15569
  assertCheckpointsMatchInputs(
@@ -15552,11 +15635,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15552
15635
  * against the current key alone would leave it pending forever.
15553
15636
  */
15554
15637
  checkpointUnrollCandidates(info) {
15555
- const current = chunk5MLC2HU3_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
15638
+ const current = chunkRZ2NGS6A_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
15556
15639
  const candidates = [this._serverUnrollScript, current];
15557
15640
  for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
15558
15641
  candidates.push(
15559
- chunk5MLC2HU3_cjs.CSVMultisigTapscript.encode({
15642
+ chunkRZ2NGS6A_cjs.CSVMultisigTapscript.encode({
15560
15643
  ...current.params,
15561
15644
  pubkeys: [base.hex.decode(deprecated)]
15562
15645
  })
@@ -15647,7 +15730,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15647
15730
  if (vtxos.length === 0) {
15648
15731
  throw new Error("No VTXOs found for this arkadeCash");
15649
15732
  }
15650
- const myPkScript = chunk5MLC2HU3_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
15733
+ const myPkScript = chunkRZ2NGS6A_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
15651
15734
  let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
15652
15735
  let swept = 0;
15653
15736
  const drainable = vtxos.filter(
@@ -15723,7 +15806,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15723
15806
  const spendable = [];
15724
15807
  const unclaimed = [];
15725
15808
  for (const vtxo of vtxos) {
15726
- if (chunk5MLC2HU3_cjs.hasTerminalSpend(vtxo)) {
15809
+ if (chunkRZ2NGS6A_cjs.hasTerminalSpend(vtxo)) {
15727
15810
  unclaimed.push(cashReport(vtxo, "already-spent"));
15728
15811
  } else if (vtxo.isUnrolled) {
15729
15812
  unclaimed.push(cashReport(vtxo, "exited"));
@@ -15745,7 +15828,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15745
15828
  const all = [];
15746
15829
  const seen = /* @__PURE__ */ new Set();
15747
15830
  for (let pageIndex = 0; ; pageIndex++) {
15748
- const { vtxos, page } = await chunk5MLC2HU3_cjs.getNormalizedVtxos(this.indexerProvider, {
15831
+ const { vtxos, page } = await chunkRZ2NGS6A_cjs.getNormalizedVtxos(this.indexerProvider, {
15749
15832
  scripts,
15750
15833
  pageIndex,
15751
15834
  pageSize
@@ -15792,7 +15875,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15792
15875
  for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
15793
15876
  const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
15794
15877
  const message = { type: "get-pending-tx", expire_at: 0 };
15795
- const proof = chunk5MLC2HU3_cjs.Intent.create(message, batch, []);
15878
+ const proof = chunkRZ2NGS6A_cjs.Intent.create(message, batch, []);
15796
15879
  const signedProof = await identity.sign(
15797
15880
  proof,
15798
15881
  Array.from({ length: batch.length + 1 }, (_, j) => j)
@@ -15814,7 +15897,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15814
15897
  try {
15815
15898
  const checkpointTxs = pendingTx.signedCheckpointTxs.map((checkpoint) => {
15816
15899
  const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(checkpoint));
15817
- chunk5MLC2HU3_cjs.assertAllowedSighashTypes(tx);
15900
+ chunkRZ2NGS6A_cjs.assertAllowedSighashTypes(tx);
15818
15901
  return tx;
15819
15902
  });
15820
15903
  assertCheckpointsMatchInputs(
@@ -16013,7 +16096,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16013
16096
  script: recipient.script,
16014
16097
  amount: BigInt(recipient.amount),
16015
16098
  // Already checked against the recipient address in `validateRecipients`.
16016
- ...recipient.tapTree ? { tapTree: chunk5MLC2HU3_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
16099
+ ...recipient.tapTree ? { tapTree: chunkRZ2NGS6A_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
16017
16100
  }));
16018
16101
  const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
16019
16102
  let changeAmount = totalBtcSelected - totalBtcOutput;
@@ -16157,10 +16240,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16157
16240
  const serverPubKey = this.arkServerPublicKey;
16158
16241
  const serverUnrollScript = this.serverUnrollScript;
16159
16242
  const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
16160
- const normalizedInputs = inputs.map(chunk5MLC2HU3_cjs.normalizeVtxo);
16161
- const at = now ?? await chunk5MLC2HU3_cjs.resolveTimeHeight(this.onchainProvider);
16243
+ const normalizedInputs = inputs.map(chunkRZ2NGS6A_cjs.normalizeVtxo);
16244
+ const at = now ?? await chunkRZ2NGS6A_cjs.resolveTimeHeight(this.onchainProvider);
16162
16245
  for (const input of normalizedInputs) {
16163
- if (!chunk5MLC2HU3_cjs.canSpendOffchain(input, at)) {
16246
+ if (!chunkRZ2NGS6A_cjs.canSpendOffchain(input, at)) {
16164
16247
  throw new Error(
16165
16248
  `sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
16166
16249
  );
@@ -16230,7 +16313,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16230
16313
  );
16231
16314
  const arkTxJobs = inputs.map((input, index) => ({
16232
16315
  index,
16233
- lookupScript: chunk5MLC2HU3_cjs.VtxoScript.decode(input.tapTree).pkScript
16316
+ lookupScript: chunkRZ2NGS6A_cjs.VtxoScript.decode(input.tapTree).pkScript
16234
16317
  }));
16235
16318
  const identity = this.identity;
16236
16319
  const signer = {
@@ -16316,14 +16399,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16316
16399
  const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
16317
16400
  spentVtxos.push({
16318
16401
  ...spentFacts,
16319
- virtualStatus: chunk5MLC2HU3_cjs.toVirtualStatus(spentFacts),
16402
+ virtualStatus: chunkRZ2NGS6A_cjs.toVirtualStatus(spentFacts),
16320
16403
  ...spentBy ? { spentBy } : {},
16321
16404
  arkTxId: arkTxid
16322
16405
  });
16323
16406
  for (const id of vtxo.commitmentTxIds) {
16324
16407
  commitmentTxIds.add(id);
16325
16408
  }
16326
- const vtxoExpiry = chunk5MLC2HU3_cjs.toBatchExpiry(vtxo);
16409
+ const vtxoExpiry = chunkRZ2NGS6A_cjs.toBatchExpiry(vtxo);
16327
16410
  if (vtxoExpiry) {
16328
16411
  batchExpiry = Math.min(batchExpiry, vtxoExpiry);
16329
16412
  }
@@ -16336,7 +16419,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16336
16419
  isSwept: false,
16337
16420
  isPreconfirmed: true,
16338
16421
  commitmentTxIds: Array.from(commitmentTxIds),
16339
- ...chunk5MLC2HU3_cjs.parseLegacyExpiry(batchExpiry)
16422
+ ...chunkRZ2NGS6A_cjs.parseLegacyExpiry(batchExpiry)
16340
16423
  };
16341
16424
  changeVtxo = {
16342
16425
  txid: arkTxid,
@@ -16348,7 +16431,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16348
16431
  tapTree: offchainTapscript.encode(),
16349
16432
  value: Number(changeAmount),
16350
16433
  ...changeFacts,
16351
- virtualStatus: chunk5MLC2HU3_cjs.toVirtualStatus(changeFacts),
16434
+ virtualStatus: chunkRZ2NGS6A_cjs.toVirtualStatus(changeFacts),
16352
16435
  spentBy: "",
16353
16436
  status: {
16354
16437
  confirmed: false
@@ -16417,12 +16500,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16417
16500
  const spentVtxos = [];
16418
16501
  const inputArkTxIds = /* @__PURE__ */ new Set();
16419
16502
  const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
16420
- const vtxoInputs = inputs.filter(chunk5MLC2HU3_cjs.isVirtualCoin);
16503
+ const vtxoInputs = inputs.filter(chunkRZ2NGS6A_cjs.isVirtualCoin);
16421
16504
  const cm = await this.getContractManager();
16422
16505
  const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
16423
16506
  const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
16424
16507
  for (const input of inputs) {
16425
- if (chunk5MLC2HU3_cjs.isVirtualCoin(input)) {
16508
+ if (chunkRZ2NGS6A_cjs.isVirtualCoin(input)) {
16426
16509
  const outpoint = `${input.txid}:${input.vout}`;
16427
16510
  const vtxo = annotatedByKey.get(outpoint);
16428
16511
  if (!vtxo) {
@@ -16434,13 +16517,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16434
16517
  const settledFacts = { ...vtxo, isSpent: true };
16435
16518
  spentVtxos.push({
16436
16519
  ...settledFacts,
16437
- virtualStatus: chunk5MLC2HU3_cjs.toVirtualStatus(settledFacts),
16520
+ virtualStatus: chunkRZ2NGS6A_cjs.toVirtualStatus(settledFacts),
16438
16521
  settledBy: commitmentTxid
16439
16522
  });
16440
16523
  } else {
16441
16524
  let sourceAddress;
16442
16525
  try {
16443
- sourceAddress = chunk5MLC2HU3_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
16526
+ sourceAddress = chunkRZ2NGS6A_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
16444
16527
  this.network
16445
16528
  );
16446
16529
  } catch {
@@ -16498,9 +16581,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16498
16581
  }
16499
16582
  };
16500
16583
  function selectVirtualCoins(coins, targetAmount) {
16501
- const sortedCoins = coins.map(chunk5MLC2HU3_cjs.normalizeVtxo).sort((a, b) => {
16502
- const expiryA = chunk5MLC2HU3_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
16503
- const expiryB = chunk5MLC2HU3_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
16584
+ const sortedCoins = coins.map(chunkRZ2NGS6A_cjs.normalizeVtxo).sort((a, b) => {
16585
+ const expiryA = chunkRZ2NGS6A_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
16586
+ const expiryB = chunkRZ2NGS6A_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
16504
16587
  if (expiryA !== expiryB) {
16505
16588
  return expiryA - expiryB;
16506
16589
  }
@@ -16869,7 +16952,7 @@ var MessageBus = class {
16869
16952
  this.initialized = true;
16870
16953
  }
16871
16954
  async buildServices(config) {
16872
- const arkProvider = new chunk5MLC2HU3_cjs.RestArkProvider(config.arkServer.url);
16955
+ const arkProvider = new chunkRZ2NGS6A_cjs.RestArkProvider(config.arkServer.url);
16873
16956
  const storage = {
16874
16957
  walletRepository: this.walletRepository,
16875
16958
  contractRepository: this.contractRepository,
@@ -17115,6 +17198,9 @@ var MessageBus = class {
17115
17198
  });
17116
17199
  return;
17117
17200
  }
17201
+ if (response.error instanceof Error && !response.errorName) {
17202
+ response.errorName = response.error.name;
17203
+ }
17118
17204
  source.postMessage(response);
17119
17205
  }
17120
17206
  /**
@@ -17211,7 +17297,7 @@ var offboardNetworkNames = [
17211
17297
  function offboardDestinationScript(destinationAddress) {
17212
17298
  for (const networkName of offboardNetworkNames) {
17213
17299
  try {
17214
- const network = chunk5MLC2HU3_cjs.networks[networkName];
17300
+ const network = chunkRZ2NGS6A_cjs.networks[networkName];
17215
17301
  const addr = btcSigner.Address(network).decode(destinationAddress);
17216
17302
  return btcSigner.OutScript.encode(addr);
17217
17303
  } catch {
@@ -17275,7 +17361,7 @@ var Ramps = class {
17275
17361
  }
17276
17362
  amount = amount ?? totalAmount;
17277
17363
  const offchainAddress = await this.wallet.getAddress();
17278
- const offchainAddr = chunk5MLC2HU3_cjs.ArkAddress.decode(offchainAddress);
17364
+ const offchainAddr = chunkRZ2NGS6A_cjs.ArkAddress.decode(offchainAddress);
17279
17365
  const offchainScript = base.hex.encode(offchainAddr.pkScript);
17280
17366
  const outputFee = estimator.evalOffchainOutput({
17281
17367
  amount,
@@ -17335,7 +17421,7 @@ var Ramps = class {
17335
17421
  const filteredVtxos = [];
17336
17422
  let totalAmount = 0n;
17337
17423
  for (const vtxo of vtxos) {
17338
- const inputFee = estimator.evalOffchainInput(chunk5MLC2HU3_cjs.toOffchainInputFeeParams(vtxo));
17424
+ const inputFee = estimator.evalOffchainInput(chunkRZ2NGS6A_cjs.toOffchainInputFeeParams(vtxo));
17339
17425
  if (inputFee.satoshis >= vtxo.value) {
17340
17426
  continue;
17341
17427
  }
@@ -17708,6 +17794,49 @@ var WalletMessageHandler = class {
17708
17794
  payload: { address }
17709
17795
  });
17710
17796
  }
17797
+ case "GET_ARKADE_INFO": {
17798
+ const { payload } = message;
17799
+ const info = await this.readonlyWallet.getArkadeInfo(payload);
17800
+ return this.tagged({
17801
+ id,
17802
+ type: "ARKADE_INFO",
17803
+ payload: { info }
17804
+ });
17805
+ }
17806
+ case "INDEXER_GET_VTXOS": {
17807
+ const { opts } = message.payload;
17808
+ const reader = await this.readonlyWallet.getArkadeReader();
17809
+ return this.tagged({
17810
+ id,
17811
+ type: "INDEXER_VTXOS",
17812
+ payload: await reader.getVtxos(opts)
17813
+ });
17814
+ }
17815
+ case "INDEXER_GET_VIRTUAL_TXS": {
17816
+ const { txids, opts } = message.payload;
17817
+ const reader = await this.readonlyWallet.getArkadeReader();
17818
+ return this.tagged({
17819
+ id,
17820
+ type: "INDEXER_VIRTUAL_TXS",
17821
+ payload: await reader.getVirtualTxs(txids, opts)
17822
+ });
17823
+ }
17824
+ case "SUBMIT_TX": {
17825
+ const { signedArkTx, checkpointTxs } = message.payload;
17826
+ const broadcaster = await this.requireWallet().getArkadeBroadcaster();
17827
+ const result = await broadcaster.submitTx(signedArkTx, checkpointTxs);
17828
+ return this.tagged({
17829
+ id,
17830
+ type: "SUBMIT_TX_SUCCESS",
17831
+ payload: result
17832
+ });
17833
+ }
17834
+ case "FINALIZE_TX": {
17835
+ const { arkTxid, finalCheckpointTxs } = message.payload;
17836
+ const broadcaster = await this.requireWallet().getArkadeBroadcaster();
17837
+ await broadcaster.finalizeTx(arkTxid, finalCheckpointTxs);
17838
+ return this.tagged({ id, type: "FINALIZE_TX_SUCCESS" });
17839
+ }
17711
17840
  case "GET_BALANCE": {
17712
17841
  const balance = await this.handleGetBalance();
17713
17842
  return this.tagged({
@@ -18171,7 +18300,7 @@ var WalletMessageHandler = class {
18171
18300
  // Wallet methods
18172
18301
  async handleInitWallet({ payload }) {
18173
18302
  const { arkServerUrl } = payload;
18174
- this.indexerProvider = new chunkGVHUHTRH_cjs.RestIndexerProvider(arkServerUrl);
18303
+ this.indexerProvider = new chunkWQIWUTYS_cjs.RestIndexerProvider(arkServerUrl);
18175
18304
  await this.onWalletInitialized();
18176
18305
  }
18177
18306
  /**
@@ -18460,7 +18589,7 @@ var WalletMessageHandler = class {
18460
18589
  if (v.isUnrolled) {
18461
18590
  return withUnrolled;
18462
18591
  }
18463
- if (chunk5MLC2HU3_cjs.hasTerminalSpend(v)) {
18592
+ if (chunkRZ2NGS6A_cjs.hasTerminalSpend(v)) {
18464
18593
  return false;
18465
18594
  }
18466
18595
  if (includeRecoverable) {
@@ -18469,10 +18598,10 @@ var WalletMessageHandler = class {
18469
18598
  if (dustAmount != null && isSubdust(v, dustAmount)) {
18470
18599
  return false;
18471
18600
  }
18472
- if (chunk5MLC2HU3_cjs.isRecoverable(v)) {
18601
+ if (chunkRZ2NGS6A_cjs.isRecoverable(v)) {
18473
18602
  return false;
18474
18603
  }
18475
- if (chunk5MLC2HU3_cjs.isExpired(v)) {
18604
+ if (chunkRZ2NGS6A_cjs.isExpired(v)) {
18476
18605
  return false;
18477
18606
  }
18478
18607
  return true;
@@ -18570,7 +18699,7 @@ var WalletMessageHandler = class {
18570
18699
  if (!this.readonlyWallet) return null;
18571
18700
  const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
18572
18701
  const indexerProvider = this.indexerProvider;
18573
- const resolveTxCreatedAt = indexerProvider ? (txids) => chunk5MLC2HU3_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
18702
+ const resolveTxCreatedAt = indexerProvider ? (txids) => chunkRZ2NGS6A_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
18574
18703
  return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
18575
18704
  }
18576
18705
  async ensureContractEventBroadcasting() {
@@ -18599,6 +18728,13 @@ var WalletMessageHandler = class {
18599
18728
 
18600
18729
  // src/wallet/serviceWorker/wallet.ts
18601
18730
  var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
18731
+ var restoreErrorName = (response) => {
18732
+ const error = response.error;
18733
+ if (response.errorName && error instanceof Error && error.name !== response.errorName) {
18734
+ error.name = response.errorName;
18735
+ }
18736
+ return error;
18737
+ };
18602
18738
  var INIT_WAIT_BACKOFF_CAP_MS = 2e3;
18603
18739
  var MAX_INIT_WAITS = 8;
18604
18740
  var initWaitBackoffMs = (attempt) => Math.min(100 * 2 ** attempt, INIT_WAIT_BACKOFF_CAP_MS);
@@ -18621,6 +18757,14 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
18621
18757
  GET_USED_SIGNING_DESCRIPTORS: 2e4,
18622
18758
  ADVANCE_SIGNING_DESCRIPTOR_WATERMARK: 1e4,
18623
18759
  // Medium reads — may involve indexer queries
18760
+ // A live `/v1/info` fetch queued behind the same per-origin rate gate as
18761
+ // the indexer, not a repository read. Derived from the fetch's own abort
18762
+ // budget so the worker's snapshot fallback stays reachable before this
18763
+ // page deadline fires — lowering it below the budget would time the page
18764
+ // out while the worker is still seconds from answering from cache.
18765
+ GET_ARKADE_INFO: chunkRZ2NGS6A_cjs.INFO_FETCH_TIMEOUT_MS + 8e3,
18766
+ INDEXER_GET_VTXOS: 2e4,
18767
+ INDEXER_GET_VIRTUAL_TXS: 2e4,
18624
18768
  GET_VTXOS: 2e4,
18625
18769
  GET_SPENDABLE_VTXOS: 2e4,
18626
18770
  GET_BOARDING_UTXOS: 2e4,
@@ -18643,6 +18787,10 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
18643
18787
  SEND_BITCOIN: 5e4,
18644
18788
  SEND: 5e4,
18645
18789
  SETTLE: 5e4,
18790
+ // Broadcast: the server round-trip a spend ends in, so it belongs
18791
+ // with the writes rather than the reads above.
18792
+ SUBMIT_TX: 5e4,
18793
+ FINALIZE_TX: 5e4,
18646
18794
  ISSUE: 5e4,
18647
18795
  REISSUE: 5e4,
18648
18796
  BURN: 5e4,
@@ -18669,6 +18817,9 @@ var DEFAULT_MESSAGE_TIMEOUTS = {
18669
18817
  };
18670
18818
  var DEDUPABLE_REQUEST_TYPES = /* @__PURE__ */ new Set([
18671
18819
  "GET_ADDRESS",
18820
+ "GET_ARKADE_INFO",
18821
+ "INDEXER_GET_VTXOS",
18822
+ "INDEXER_GET_VIRTUAL_TXS",
18672
18823
  "GET_BALANCE",
18673
18824
  "GET_BOARDING_ADDRESS",
18674
18825
  "GET_BOARDING_UTXOS",
@@ -18760,7 +18911,7 @@ var initializeMessageBus = (serviceWorker, config, timeoutMs = 2e3) => {
18760
18911
  if (response?.id !== initCmd.id) return;
18761
18912
  cleanup();
18762
18913
  if (response.error) {
18763
- reject(response.error);
18914
+ reject(restoreErrorName(response));
18764
18915
  } else {
18765
18916
  resolve();
18766
18917
  }
@@ -18932,7 +19083,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
18932
19083
  }
18933
19084
  cleanup();
18934
19085
  if (response.error) {
18935
- reject(response.error);
19086
+ reject(restoreErrorName(response));
18936
19087
  } else {
18937
19088
  resolve(response);
18938
19089
  }
@@ -18958,7 +19109,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
18958
19109
  if (request.id !== response.id) return;
18959
19110
  if (response.error) {
18960
19111
  cleanup();
18961
- reject(response.error);
19112
+ reject(restoreErrorName(response));
18962
19113
  return;
18963
19114
  }
18964
19115
  if (isComplete(response)) {
@@ -19184,6 +19335,68 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
19184
19335
  throw new Error(`Failed to get boarding address: ${error}`);
19185
19336
  }
19186
19337
  }
19338
+ /**
19339
+ * Delegated to the worker, which holds the wallet that owns the connection.
19340
+ * The payload crosses raw — see {@link ResponseGetArkadeInfo} for why.
19341
+ */
19342
+ async getArkadeInfo(opts) {
19343
+ const message = {
19344
+ id: getRandomId(),
19345
+ tag: this.messageTag,
19346
+ type: "GET_ARKADE_INFO",
19347
+ // omitted entirely for the default read: wire-shape hygiene
19348
+ // toward workers built before the option existed. (Dedup is
19349
+ // unaffected either way — the key is JSON.stringify, which drops
19350
+ // undefined-valued properties.)
19351
+ ...opts?.requireLive ? { payload: { requireLive: true } } : {}
19352
+ };
19353
+ try {
19354
+ const response = await this.sendMessage(message);
19355
+ return response.payload.info;
19356
+ } catch (error) {
19357
+ throw new Error(`Failed to get arkade info: ${error}`, { cause: error });
19358
+ }
19359
+ }
19360
+ /**
19361
+ * An {@link ArkadeReader} that speaks to the worker rather than to the
19362
+ * server. The page holds no provider, so a caller that built its own from a
19363
+ * URL would open a second connection outside the worker's rate gate and
19364
+ * caches — this proxy is what keeps chain reads in one place.
19365
+ */
19366
+ async getArkadeReader() {
19367
+ return {
19368
+ getVtxos: async (opts) => {
19369
+ const message = {
19370
+ id: getRandomId(),
19371
+ tag: this.messageTag,
19372
+ type: "INDEXER_GET_VTXOS",
19373
+ payload: { opts }
19374
+ };
19375
+ try {
19376
+ const response = await this.sendMessage(message);
19377
+ const { vtxos, page } = response.payload;
19378
+ return { vtxos: vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo), page: page && { ...page } };
19379
+ } catch (error) {
19380
+ throw new Error(`Failed to get vtxos: ${error}`, { cause: error });
19381
+ }
19382
+ },
19383
+ getVirtualTxs: async (txids, opts) => {
19384
+ const message = {
19385
+ id: getRandomId(),
19386
+ tag: this.messageTag,
19387
+ type: "INDEXER_GET_VIRTUAL_TXS",
19388
+ payload: { txids, opts }
19389
+ };
19390
+ try {
19391
+ const response = await this.sendMessage(message);
19392
+ const { txs, page } = response.payload;
19393
+ return { txs: [...txs], page: page && { ...page } };
19394
+ } catch (error) {
19395
+ throw new Error(`Failed to get virtual txs: ${error}`, { cause: error });
19396
+ }
19397
+ }
19398
+ };
19399
+ }
19187
19400
  async getBalance() {
19188
19401
  const message = {
19189
19402
  id: getRandomId(),
@@ -19266,7 +19479,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
19266
19479
  };
19267
19480
  try {
19268
19481
  const response = await this.sendMessage(message);
19269
- return response.payload.vtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo);
19482
+ return response.payload.vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo);
19270
19483
  } catch (error) {
19271
19484
  throw new Error(`Failed to get vtxos: ${error}`);
19272
19485
  }
@@ -19291,7 +19504,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
19291
19504
  };
19292
19505
  try {
19293
19506
  const response = await this.sendMessage(message);
19294
- return response.payload.vtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo);
19507
+ return response.payload.vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo);
19295
19508
  } catch (error) {
19296
19509
  throw new Error(`Failed to get spendable vtxos: ${error}`);
19297
19510
  }
@@ -19422,7 +19635,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
19422
19635
  };
19423
19636
  try {
19424
19637
  const response = await sendContractMessage(message);
19425
- return response.payload.vtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo);
19638
+ return response.payload.vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo);
19426
19639
  } catch (e) {
19427
19640
  throw new Error("Failed to annotate vtxos");
19428
19641
  }
@@ -19840,6 +20053,43 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
19840
20053
  async signerForDescriptor(descriptor) {
19841
20054
  return resolveDescriptorSigner(descriptor, this.identity);
19842
20055
  }
20056
+ /**
20057
+ * An {@link ArkadeBroadcaster} proxied to the worker, which holds the
20058
+ * provider. Only `ServiceWorkerWallet` offers one: a readonly worker
20059
+ * refuses `SUBMIT_TX`/`FINALIZE_TX` outright, so exposing it on the
20060
+ * readonly class would promise something the boundary rejects.
20061
+ */
20062
+ async getArkadeBroadcaster() {
20063
+ return {
20064
+ submitTx: async (signedArkTx, checkpointTxs) => {
20065
+ const message = {
20066
+ id: getRandomId(),
20067
+ tag: this.messageTag,
20068
+ type: "SUBMIT_TX",
20069
+ payload: { signedArkTx, checkpointTxs }
20070
+ };
20071
+ try {
20072
+ const response = await this.sendMessage(message);
20073
+ return response.payload;
20074
+ } catch (error) {
20075
+ throw new Error(`Failed to submit tx: ${error}`, { cause: error });
20076
+ }
20077
+ },
20078
+ finalizeTx: async (arkTxid, finalCheckpointTxs) => {
20079
+ const message = {
20080
+ id: getRandomId(),
20081
+ tag: this.messageTag,
20082
+ type: "FINALIZE_TX",
20083
+ payload: { arkTxid, finalCheckpointTxs }
20084
+ };
20085
+ try {
20086
+ await this.sendMessage(message);
20087
+ } catch (error) {
20088
+ throw new Error(`Failed to finalize tx: ${error}`, { cause: error });
20089
+ }
20090
+ }
20091
+ };
20092
+ }
19843
20093
  async sendBitcoin(params) {
19844
20094
  const message = {
19845
20095
  id: getRandomId(),
@@ -20023,7 +20273,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
20023
20273
  };
20024
20274
  try {
20025
20275
  const response = await wallet.sendMessage(message);
20026
- return response.payload.vtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo);
20276
+ return response.payload.vtxos.map(chunkRZ2NGS6A_cjs.normalizeVtxo);
20027
20277
  } catch (e) {
20028
20278
  throw new Error(`Failed to get expiring vtxos: ${e}`);
20029
20279
  }
@@ -20135,12 +20385,12 @@ var OnchainWallet = class _OnchainWallet {
20135
20385
  * @returns Configured onchain wallet
20136
20386
  * @throws Error if the configured identity cannot produce a valid x-only public key
20137
20387
  */
20138
- static async create(identity, networkName = chunk5MLC2HU3_cjs.DEFAULT_NETWORK_NAME, provider) {
20388
+ static async create(identity, networkName = chunkRZ2NGS6A_cjs.DEFAULT_NETWORK_NAME, provider) {
20139
20389
  const pubkey = await identity.xOnlyPublicKey();
20140
20390
  if (!pubkey) {
20141
20391
  throw new Error("Invalid configured public key");
20142
20392
  }
20143
- const network = chunk5MLC2HU3_cjs.getNetwork(networkName);
20393
+ const network = chunkRZ2NGS6A_cjs.getNetwork(networkName);
20144
20394
  const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
20145
20395
  const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
20146
20396
  return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
@@ -20246,7 +20496,7 @@ var OnchainWallet = class _OnchainWallet {
20246
20496
  if (!inputs) {
20247
20497
  throw new Error("Fee estimation failed");
20248
20498
  }
20249
- let tx = new chunk5MLC2HU3_cjs.Transaction();
20499
+ let tx = new chunkRZ2NGS6A_cjs.Transaction();
20250
20500
  for (const input of inputs) {
20251
20501
  tx.addInput({
20252
20502
  txid: input.txid,
@@ -20304,7 +20554,7 @@ var OnchainWallet = class _OnchainWallet {
20304
20554
  * @throws If the parent has no anchor, or funding cannot be selected/signed
20305
20555
  */
20306
20556
  async bumpAnchor(parentHex, feeRate) {
20307
- const parent = chunk5MLC2HU3_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
20557
+ const parent = chunkRZ2NGS6A_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
20308
20558
  const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
20309
20559
  const child = await this.buildBumpPackage(parent, feeRate, coins);
20310
20560
  return [parent.hex, child.hex];
@@ -21211,7 +21461,7 @@ async function resolvePrevTxs(txids, source, onchain) {
21211
21461
  try {
21212
21462
  const { txs } = await source.getVirtualTxs(wanted);
21213
21463
  for (const psbt of txs) {
21214
- const tx = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
21464
+ const tx = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
21215
21465
  resolved.set(tx.id, tx.toBytes());
21216
21466
  }
21217
21467
  } catch (err) {
@@ -21244,7 +21494,7 @@ async function resolvePrevTxs(txids, source, onchain) {
21244
21494
  async function attachPrevArkTxs(tx, txids, source, onchain) {
21245
21495
  const pending = [];
21246
21496
  for (let i = 0; i < tx.inputsLength; i++) {
21247
- if (chunk5MLC2HU3_cjs.getArkPsbtFields(tx, i, chunk5MLC2HU3_cjs.PrevArkTxField).length === 0) pending.push(i);
21497
+ if (chunkRZ2NGS6A_cjs.getArkPsbtFields(tx, i, chunkRZ2NGS6A_cjs.PrevArkTxField).length === 0) pending.push(i);
21248
21498
  }
21249
21499
  if (pending.length === 0) return;
21250
21500
  const resolved = await resolvePrevTxs(
@@ -21253,13 +21503,13 @@ async function attachPrevArkTxs(tx, txids, source, onchain) {
21253
21503
  onchain
21254
21504
  );
21255
21505
  for (const i of pending) {
21256
- chunk5MLC2HU3_cjs.setArkPsbtField(tx, i, chunk5MLC2HU3_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
21506
+ chunkRZ2NGS6A_cjs.setArkPsbtField(tx, i, chunkRZ2NGS6A_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
21257
21507
  }
21258
21508
  }
21259
21509
  async function attachPrevoutTxs(tx, source) {
21260
21510
  const pending = [];
21261
21511
  for (let i = 0; i < tx.inputsLength; i++) {
21262
- if (chunk5MLC2HU3_cjs.getArkPsbtFields(tx, i, chunk5MLC2HU3_cjs.PrevoutTxField).length > 0) continue;
21512
+ if (chunkRZ2NGS6A_cjs.getArkPsbtFields(tx, i, chunkRZ2NGS6A_cjs.PrevoutTxField).length > 0) continue;
21263
21513
  const input = tx.getInput(i);
21264
21514
  if (!input?.txid) throw new PrevTxUnavailableError(`input ${i} has no outpoint`);
21265
21515
  pending.push({ index: i, txid: base.hex.encode(input.txid) });
@@ -21270,7 +21520,7 @@ async function attachPrevoutTxs(tx, source) {
21270
21520
  resolved.set(txid, await source.getRawTransaction(txid));
21271
21521
  }
21272
21522
  for (const { index, txid } of pending) {
21273
- chunk5MLC2HU3_cjs.setArkPsbtField(tx, index, chunk5MLC2HU3_cjs.PrevoutTxField, resolved.get(txid));
21523
+ chunkRZ2NGS6A_cjs.setArkPsbtField(tx, index, chunkRZ2NGS6A_cjs.PrevoutTxField, resolved.get(txid));
21274
21524
  }
21275
21525
  }
21276
21526
  async function withPrevTxs(coins, source, onchain) {
@@ -21296,7 +21546,7 @@ exports.BIP322 = void 0;
21296
21546
  async function sign2(message, identity, network) {
21297
21547
  const xOnlyPubKey = await identity.xOnlyPublicKey();
21298
21548
  const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
21299
- const toSpend = chunk5MLC2HU3_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
21549
+ const toSpend = chunkRZ2NGS6A_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
21300
21550
  const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
21301
21551
  const signed = await identity.sign(toSign, [0]);
21302
21552
  signed.finalizeIdx(0);
@@ -21354,7 +21604,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
21354
21604
  if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
21355
21605
  return false;
21356
21606
  }
21357
- const toSpend = chunk5MLC2HU3_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21607
+ const toSpend = chunkRZ2NGS6A_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21358
21608
  const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
21359
21609
  const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
21360
21610
  const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
@@ -21375,7 +21625,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
21375
21625
  }
21376
21626
  const sighashType = sigWithHash[sigWithHash.length - 1];
21377
21627
  const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
21378
- const toSpend = chunk5MLC2HU3_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21628
+ const toSpend = chunkRZ2NGS6A_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21379
21629
  const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
21380
21630
  const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
21381
21631
  const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
@@ -21428,7 +21678,7 @@ function encodeCompactSize(n) {
21428
21678
  return buf;
21429
21679
  }
21430
21680
  function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
21431
- const tx = new chunk5MLC2HU3_cjs.Transaction({ version: 0 });
21681
+ const tx = new chunkRZ2NGS6A_cjs.Transaction({ version: 0 });
21432
21682
  tx.addInput({
21433
21683
  txid: toSpend.id,
21434
21684
  index: 0,
@@ -21442,12 +21692,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
21442
21692
  });
21443
21693
  tx.addOutput({
21444
21694
  amount: 0n,
21445
- script: chunk5MLC2HU3_cjs.OP_RETURN_EMPTY_PKSCRIPT
21695
+ script: chunkRZ2NGS6A_cjs.OP_RETURN_EMPTY_PKSCRIPT
21446
21696
  });
21447
21697
  return tx;
21448
21698
  }
21449
21699
  function craftBIP322ToSignSimple(toSpend, pkScript) {
21450
- const tx = new chunk5MLC2HU3_cjs.Transaction({ version: 0 });
21700
+ const tx = new chunkRZ2NGS6A_cjs.Transaction({ version: 0 });
21451
21701
  tx.addInput({
21452
21702
  txid: toSpend.id,
21453
21703
  index: 0,
@@ -21459,7 +21709,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
21459
21709
  });
21460
21710
  tx.addOutput({
21461
21711
  amount: 0n,
21462
- script: chunk5MLC2HU3_cjs.OP_RETURN_EMPTY_PKSCRIPT
21712
+ script: chunkRZ2NGS6A_cjs.OP_RETURN_EMPTY_PKSCRIPT
21463
21713
  });
21464
21714
  return tx;
21465
21715
  }
@@ -21590,7 +21840,7 @@ var RestEmulatorProvider = class {
21590
21840
  }
21591
21841
  };
21592
21842
  function finalizeVirtualTx(type, psbtBase64) {
21593
- const tx = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
21843
+ const tx = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
21594
21844
  if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
21595
21845
  const input = tx.getInput(0);
21596
21846
  if (!input) {
@@ -21617,14 +21867,14 @@ var ExitPathError = class extends Error {
21617
21867
  reason;
21618
21868
  };
21619
21869
  function delayWeight(sequence) {
21620
- const t = chunk5MLC2HU3_cjs.sequenceToTimelock(sequence);
21870
+ const t = chunkRZ2NGS6A_cjs.sequenceToTimelock(sequence);
21621
21871
  return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
21622
21872
  }
21623
21873
  async function resolveUnilateralPath(params) {
21624
21874
  const { vtxo, scriptHex, contractRepository } = params;
21625
21875
  const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
21626
21876
  if (contract) {
21627
- const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type);
21877
+ const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type);
21628
21878
  if (!handler) {
21629
21879
  throw new ExitPathError(
21630
21880
  "no-handler",
@@ -21647,12 +21897,12 @@ async function resolveUnilateralPath(params) {
21647
21897
  paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
21648
21898
  return { selection: paths[0], label: `${contract.type}:unilateral` };
21649
21899
  }
21650
- const decoded = chunk5MLC2HU3_cjs.VtxoScript.decode(vtxo.tapTree);
21900
+ const decoded = chunkRZ2NGS6A_cjs.VtxoScript.decode(vtxo.tapTree);
21651
21901
  let best;
21652
21902
  for (const exit of decoded.exitPaths()) {
21653
21903
  const leaf = decoded.findLeaf(base.hex.encode(exit.script));
21654
21904
  if (!leaf) continue;
21655
- const sequence = chunk5MLC2HU3_cjs.timelockToSequence(exit.params.timelock);
21905
+ const sequence = chunkRZ2NGS6A_cjs.timelockToSequence(exit.params.timelock);
21656
21906
  const weight = delayWeight(sequence);
21657
21907
  if (!best || weight < best.weight) {
21658
21908
  best = { selection: { leaf, sequence }, weight };
@@ -21872,7 +22122,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21872
22122
  let totalAmount = 0n;
21873
22123
  const txWeightEstimator = TxWeightEstimator.create();
21874
22124
  for (const vtxo of vtxos) {
21875
- if (!chunk5MLC2HU3_cjs.canSweepOnchain(vtxo)) {
22125
+ if (!chunkRZ2NGS6A_cjs.canSweepOnchain(vtxo)) {
21876
22126
  throw new Error(
21877
22127
  `Vtxo ${vtxo.txid}:${vtxo.vout} cannot be swept onchain: it is not fully unrolled (use unroll first), or its exit output was already spent`
21878
22128
  );
@@ -21883,14 +22133,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21883
22133
  }
21884
22134
  const resolved = await resolveUnilateralPath({
21885
22135
  vtxo,
21886
- scriptHex: base.hex.encode(chunk5MLC2HU3_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
22136
+ scriptHex: base.hex.encode(chunkRZ2NGS6A_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
21887
22137
  contractRepository: wallet.contractRepository,
21888
22138
  walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
21889
22139
  currentTime: Date.now()
21890
22140
  });
21891
22141
  const spendingLeaf = resolved.selection.leaf;
21892
22142
  const sequence = resolved.selection.sequence;
21893
- const timelock = chunk5MLC2HU3_cjs.sequenceToTimelock(sequence);
22143
+ const timelock = chunkRZ2NGS6A_cjs.sequenceToTimelock(sequence);
21894
22144
  const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
21895
22145
  if (!elapsed) {
21896
22146
  throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
@@ -21903,7 +22153,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21903
22153
  sequence,
21904
22154
  witnessUtxo: {
21905
22155
  amount: BigInt(vtxo.value),
21906
- script: chunk5MLC2HU3_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
22156
+ script: chunkRZ2NGS6A_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
21907
22157
  },
21908
22158
  sighashType: btcSigner.SigHash.DEFAULT
21909
22159
  });
@@ -21913,7 +22163,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21913
22163
  btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
21914
22164
  );
21915
22165
  }
21916
- const tx = new chunk5MLC2HU3_cjs.Transaction({ version: 2 });
22166
+ const tx = new chunkRZ2NGS6A_cjs.Transaction({ version: 2 });
21917
22167
  for (const input of inputs) {
21918
22168
  tx.addInput(input);
21919
22169
  }
@@ -21996,7 +22246,7 @@ async function buildSignedSweep(params) {
21996
22246
  `uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
21997
22247
  );
21998
22248
  }
21999
- const tx = new chunk5MLC2HU3_cjs.Transaction({ version: 2 });
22249
+ const tx = new chunkRZ2NGS6A_cjs.Transaction({ version: 2 });
22000
22250
  tx.addInput({
22001
22251
  txid: vtxo.txid,
22002
22252
  index: vtxo.vout,
@@ -22021,7 +22271,7 @@ async function buildSignedSweep(params) {
22021
22271
  finalScriptWitness: [
22022
22272
  tapScriptSig[0][1],
22023
22273
  ...path.extraWitness,
22024
- chunk5MLC2HU3_cjs.scriptFromTapLeafScript(path.leaf),
22274
+ chunkRZ2NGS6A_cjs.scriptFromTapLeafScript(path.leaf),
22025
22275
  btcSigner.TaprootControlBlock.encode(controlBlock)
22026
22276
  ]
22027
22277
  });
@@ -22051,7 +22301,7 @@ async function resolveFeeRate(opts) {
22051
22301
  }
22052
22302
  async function selectExitVtxos(opts) {
22053
22303
  if (!opts.vtxos) return opts.wallet.getVtxos();
22054
- const res = await chunk5MLC2HU3_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
22304
+ const res = await chunkRZ2NGS6A_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
22055
22305
  const tapTrees = /* @__PURE__ */ new Map();
22056
22306
  const out = [];
22057
22307
  for (const vtxo of res.vtxos) {
@@ -22066,7 +22316,7 @@ async function selectExitVtxos(opts) {
22066
22316
  `no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
22067
22317
  );
22068
22318
  }
22069
- const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type);
22319
+ const handler = chunkQ5WQ4Y2I_cjs.contractHandlers.get(contract.type);
22070
22320
  if (!handler) {
22071
22321
  throw new Error(`no contract handler registered for type '${contract.type}'`);
22072
22322
  }
@@ -22096,7 +22346,7 @@ async function computeExitLayout(opts, feeRate) {
22096
22346
  if (pendingNodes.length > 0) {
22097
22347
  const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
22098
22348
  for (const psbt of txs) {
22099
- psbts.set(chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
22349
+ psbts.set(chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
22100
22350
  }
22101
22351
  }
22102
22352
  const childVsize = Number(
@@ -22132,7 +22382,7 @@ async function computeExitLayout(opts, feeRate) {
22132
22382
  try {
22133
22383
  const resolved = await resolveUnilateralPath({
22134
22384
  vtxo,
22135
- scriptHex: base.hex.encode(chunk5MLC2HU3_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
22385
+ scriptHex: base.hex.encode(chunkRZ2NGS6A_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
22136
22386
  contractRepository: wallet.contractRepository,
22137
22387
  walletPubKeyHex,
22138
22388
  currentTime: Date.now()
@@ -22151,7 +22401,7 @@ async function computeExitLayout(opts, feeRate) {
22151
22401
  });
22152
22402
  continue;
22153
22403
  }
22154
- const t = chunk5MLC2HU3_cjs.sequenceToTimelock(resolved.selection.sequence);
22404
+ const t = chunkRZ2NGS6A_cjs.sequenceToTimelock(resolved.selection.sequence);
22155
22405
  const delay = { type: t.type, value: Number(t.value) };
22156
22406
  infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
22157
22407
  sweeps.push({ vtxo, resolved, sweepFee, delay });
@@ -22552,7 +22802,7 @@ async function prepare(opts) {
22552
22802
  txid: sweep.vtxo.txid,
22553
22803
  vout: sweep.vtxo.vout,
22554
22804
  value: sweep.vtxo.value,
22555
- pkScript: chunk5MLC2HU3_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
22805
+ pkScript: chunkRZ2NGS6A_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
22556
22806
  },
22557
22807
  path: sweep.resolved.selection,
22558
22808
  outputAddress: opts.sweepAddress,
@@ -22640,7 +22890,7 @@ async function prepare(opts) {
22640
22890
  if (newFee <= splitterFee) break;
22641
22891
  splitterFee = newFee;
22642
22892
  }
22643
- const splitter = new chunk5MLC2HU3_cjs.Transaction({ version: 2 });
22893
+ const splitter = new chunkRZ2NGS6A_cjs.Transaction({ version: 2 });
22644
22894
  for (const coin of selected.inputs) {
22645
22895
  splitter.addInput({
22646
22896
  txid: coin.txid,
@@ -22784,41 +23034,41 @@ var UnilateralExit = {
22784
23034
  // src/arkade/index.ts
22785
23035
  var arkade_exports = {};
22786
23036
  chunk5BLDMQED_cjs.__export(arkade_exports, {
22787
- ARKADE_OP: () => chunkWIFL5QYZ_cjs.ARKADE_OP,
22788
- ARKADE_OPCODES: () => chunkWIFL5QYZ_cjs.ARKADE_OPCODES,
22789
- ARKADE_OPCODE_NAMES: () => chunkWIFL5QYZ_cjs.ARKADE_OPCODE_NAMES,
22790
- ARKADE_OPCODE_VALUES: () => chunkWIFL5QYZ_cjs.ARKADE_OPCODE_VALUES,
22791
- ARKADE_OPS: () => chunkWIFL5QYZ_cjs.ARKADE_OPS,
23037
+ ARKADE_OP: () => chunkQ5WQ4Y2I_cjs.ARKADE_OP,
23038
+ ARKADE_OPCODES: () => chunkQ5WQ4Y2I_cjs.ARKADE_OPCODES,
23039
+ ARKADE_OPCODE_NAMES: () => chunkQ5WQ4Y2I_cjs.ARKADE_OPCODE_NAMES,
23040
+ ARKADE_OPCODE_VALUES: () => chunkQ5WQ4Y2I_cjs.ARKADE_OPCODE_VALUES,
23041
+ ARKADE_OPS: () => chunkQ5WQ4Y2I_cjs.ARKADE_OPS,
22792
23042
  Arkade: () => Arkade,
22793
23043
  ArkadeContract: () => ArkadeContract,
22794
- ArkadeProgramScript: () => chunkWIFL5QYZ_cjs.ArkadeProgramScript,
22795
- ArkadeScript: () => chunkWIFL5QYZ_cjs.ArkadeScript,
23044
+ ArkadeProgramScript: () => chunkQ5WQ4Y2I_cjs.ArkadeProgramScript,
23045
+ ArkadeScript: () => chunkQ5WQ4Y2I_cjs.ArkadeScript,
22796
23046
  ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
22797
- BigNum: () => chunkWIFL5QYZ_cjs.bignum_exports,
23047
+ BigNum: () => chunkQ5WQ4Y2I_cjs.bignum_exports,
22798
23048
  OP: () => btcSigner.OP,
22799
- OPCODE_NAMES: () => chunkWIFL5QYZ_cjs.OPCODE_NAMES,
22800
- OPCODE_VALUES: () => chunkWIFL5QYZ_cjs.OPCODE_VALUES,
22801
- SUPPORTED_PROGRAM_VERSION: () => chunkWIFL5QYZ_cjs.SUPPORTED_PROGRAM_VERSION,
23049
+ OPCODE_NAMES: () => chunkQ5WQ4Y2I_cjs.OPCODE_NAMES,
23050
+ OPCODE_VALUES: () => chunkQ5WQ4Y2I_cjs.OPCODE_VALUES,
23051
+ SUPPORTED_PROGRAM_VERSION: () => chunkQ5WQ4Y2I_cjs.SUPPORTED_PROGRAM_VERSION,
22802
23052
  Script: () => btcSigner.Script,
22803
- arkadeScriptHash: () => chunkWIFL5QYZ_cjs.arkadeScriptHash,
22804
- arkadeWitnessHash: () => chunkWIFL5QYZ_cjs.arkadeWitnessHash,
22805
- asmToBytes: () => chunkWIFL5QYZ_cjs.asmToBytes,
22806
- bytesToASM: () => chunkWIFL5QYZ_cjs.bytesToASM,
22807
- computeArkadeScriptPublicKey: () => chunkWIFL5QYZ_cjs.computeArkadeScriptPublicKey,
23053
+ arkadeScriptHash: () => chunkQ5WQ4Y2I_cjs.arkadeScriptHash,
23054
+ arkadeWitnessHash: () => chunkQ5WQ4Y2I_cjs.arkadeWitnessHash,
23055
+ asmToBytes: () => chunkQ5WQ4Y2I_cjs.asmToBytes,
23056
+ bytesToASM: () => chunkQ5WQ4Y2I_cjs.bytesToASM,
23057
+ computeArkadeScriptPublicKey: () => chunkQ5WQ4Y2I_cjs.computeArkadeScriptPublicKey,
22808
23058
  createArkadeBatchHandler: () => createArkadeBatchHandler,
22809
- deserializeArkadeContractParams: () => chunkWIFL5QYZ_cjs.deserializeArkadeContractParams,
22810
- fromASM: () => chunkWIFL5QYZ_cjs.fromASM,
22811
- getOpcodeName: () => chunkWIFL5QYZ_cjs.getOpcodeName,
22812
- getOpcodeValue: () => chunkWIFL5QYZ_cjs.getOpcodeValue,
22813
- parseArtifact: () => chunkWIFL5QYZ_cjs.parseArtifact,
22814
- resolveAsm: () => chunkWIFL5QYZ_cjs.resolveAsm,
22815
- serializeArkadeContractParams: () => chunkWIFL5QYZ_cjs.serializeArkadeContractParams,
22816
- stringifyArtifact: () => chunkWIFL5QYZ_cjs.stringifyArtifact,
22817
- toASM: () => chunkWIFL5QYZ_cjs.toASM,
22818
- validateProgram: () => chunkWIFL5QYZ_cjs.validateProgram,
22819
- witnessRefToBytes: () => chunkWIFL5QYZ_cjs.witnessRefToBytes
23059
+ deserializeArkadeContractParams: () => chunkQ5WQ4Y2I_cjs.deserializeArkadeContractParams,
23060
+ fromASM: () => chunkQ5WQ4Y2I_cjs.fromASM,
23061
+ getOpcodeName: () => chunkQ5WQ4Y2I_cjs.getOpcodeName,
23062
+ getOpcodeValue: () => chunkQ5WQ4Y2I_cjs.getOpcodeValue,
23063
+ parseArtifact: () => chunkQ5WQ4Y2I_cjs.parseArtifact,
23064
+ resolveAsm: () => chunkQ5WQ4Y2I_cjs.resolveAsm,
23065
+ serializeArkadeContractParams: () => chunkQ5WQ4Y2I_cjs.serializeArkadeContractParams,
23066
+ stringifyArtifact: () => chunkQ5WQ4Y2I_cjs.stringifyArtifact,
23067
+ toASM: () => chunkQ5WQ4Y2I_cjs.toASM,
23068
+ validateProgram: () => chunkQ5WQ4Y2I_cjs.validateProgram,
23069
+ witnessRefToBytes: () => chunkQ5WQ4Y2I_cjs.witnessRefToBytes
22820
23070
  });
22821
- var isVtxoCoin = (input) => chunk5MLC2HU3_cjs.isVirtualCoin(input);
23071
+ var isVtxoCoin = (input) => chunkRZ2NGS6A_cjs.isVirtualCoin(input);
22822
23072
  function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
22823
23073
  let batchId;
22824
23074
  let sweepTapTreeRoot;
@@ -22839,23 +23089,23 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22839
23089
  );
22840
23090
  await arkProvider.confirmRegistration(intentId);
22841
23091
  batchId = event.id;
22842
- const sweepTapscript = chunk5MLC2HU3_cjs.CSVMultisigTapscript.encode({
23092
+ const sweepTapscript = chunkRZ2NGS6A_cjs.CSVMultisigTapscript.encode({
22843
23093
  timelock,
22844
- pubkeys: [chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
23094
+ pubkeys: [chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
22845
23095
  }).script;
22846
23096
  sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
22847
23097
  return { skip: false };
22848
23098
  },
22849
23099
  onTreeSigningStarted: async (event, vtxoTree) => {
22850
23100
  const signerPubKey = await session.getPublicKey();
22851
- const xonlySignerPubKey = chunkWIFL5QYZ_cjs.toXOnly(signerPubKey, "signer key");
23101
+ const xonlySignerPubKey = chunkQ5WQ4Y2I_cjs.toXOnly(signerPubKey, "signer key");
22852
23102
  const xOnlyPubkeys = event.cosignersPublicKeys.map(
22853
- (k) => base.hex.encode(chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
23103
+ (k) => base.hex.encode(chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
22854
23104
  );
22855
23105
  if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
22856
23106
  return { skip: true };
22857
23107
  }
22858
- const commitmentTx = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
23108
+ const commitmentTx = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
22859
23109
  validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
22860
23110
  if (recipients && recipients.length > 0) {
22861
23111
  validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
@@ -22887,7 +23137,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22887
23137
  if (connectorTree) {
22888
23138
  validateConnectorsTxGraph(event.commitmentTx, connectorTree);
22889
23139
  }
22890
- let commitmentPsbt = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
23140
+ let commitmentPsbt = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
22891
23141
  assertFinalCommitmentMatchesValidated(
22892
23142
  commitmentPsbt,
22893
23143
  validatedCommitmentTxid,
@@ -22922,7 +23172,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22922
23172
  boardingIndices.push(boardingIdx);
22923
23173
  continue;
22924
23174
  }
22925
- if (chunk5MLC2HU3_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
23175
+ if (chunkRZ2NGS6A_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
22926
23176
  continue;
22927
23177
  }
22928
23178
  if (connectorIndex >= connectorLeaves.length) {
@@ -22943,7 +23193,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22943
23193
  index: input.vout,
22944
23194
  witnessUtxo: {
22945
23195
  amount: BigInt(input.value),
22946
- script: chunk5MLC2HU3_cjs.VtxoScript.decode(input.tapTree).pkScript
23196
+ script: chunkRZ2NGS6A_cjs.VtxoScript.decode(input.tapTree).pkScript
22947
23197
  },
22948
23198
  sighashType: btcSigner.SigHash.DEFAULT,
22949
23199
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -23034,16 +23284,16 @@ var Arkade = class _Arkade {
23034
23284
  /** Connect and resolve the server key, checkpoint closure and (if present) the co-signer key. */
23035
23285
  static async connect(opts) {
23036
23286
  const info = await opts.arkade.getInfo();
23037
- const serverKey = chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
23038
- const checkpoint = chunk5MLC2HU3_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
23039
- const network = opts.network ?? chunk5MLC2HU3_cjs.DEFAULT_NETWORK;
23287
+ const serverKey = chunkQ5WQ4Y2I_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
23288
+ const checkpoint = chunkRZ2NGS6A_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
23289
+ const network = opts.network ?? chunkRZ2NGS6A_cjs.DEFAULT_NETWORK;
23040
23290
  let emulatorKey;
23041
23291
  if (opts.emulator) {
23042
- emulatorKey = base.hex.decode(chunk5MLC2HU3_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
23292
+ emulatorKey = base.hex.decode(chunkRZ2NGS6A_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
23043
23293
  }
23044
23294
  let userKey;
23045
23295
  if (opts.identity) {
23046
- userKey = chunkWIFL5QYZ_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
23296
+ userKey = chunkQ5WQ4Y2I_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
23047
23297
  }
23048
23298
  return new _Arkade({
23049
23299
  arkProvider: opts.arkade,
@@ -23069,7 +23319,7 @@ var Arkade = class _Arkade {
23069
23319
  * key respectively; explicit args always win.
23070
23320
  */
23071
23321
  contract(program, args = {}) {
23072
- const declared = (program.params ?? []).map(chunkWIFL5QYZ_cjs.inputName);
23322
+ const declared = (program.params ?? []).map(chunkQ5WQ4Y2I_cjs.inputName);
23073
23323
  if (declared.includes("server") && args.server === void 0) {
23074
23324
  args = { ...args, server: this.serverKey };
23075
23325
  }
@@ -23089,7 +23339,7 @@ var ArkadeContract = class _ArkadeContract {
23089
23339
  userKey: client.userKey,
23090
23340
  emulatorKey: client.emulatorKey
23091
23341
  };
23092
- this.vtxoScript = new chunkWIFL5QYZ_cjs.ArkadeProgramScript(program, args, this.keys);
23342
+ this.vtxoScript = new chunkQ5WQ4Y2I_cjs.ArkadeProgramScript(program, args, this.keys);
23093
23343
  this.tapTree = this.vtxoScript.encode();
23094
23344
  this.compiled = this.vtxoScript.compiled;
23095
23345
  }
@@ -23117,7 +23367,7 @@ var ArkadeContract = class _ArkadeContract {
23117
23367
  `ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
23118
23368
  );
23119
23369
  }
23120
- const typed = chunkWIFL5QYZ_cjs.deserializeArkadeContractParams(contract.params);
23370
+ const typed = chunkQ5WQ4Y2I_cjs.deserializeArkadeContractParams(contract.params);
23121
23371
  return new _ArkadeContract(client, typed.program, typed.args, {
23122
23372
  serverKey: typed.serverKey,
23123
23373
  userKey: typed.userKey,
@@ -23158,7 +23408,7 @@ var ArkadeContract = class _ArkadeContract {
23158
23408
  toContractParams() {
23159
23409
  return {
23160
23410
  type: "arkade",
23161
- params: chunkWIFL5QYZ_cjs.serializeArkadeContractParams({
23411
+ params: chunkQ5WQ4Y2I_cjs.serializeArkadeContractParams({
23162
23412
  program: this.program,
23163
23413
  args: this.args,
23164
23414
  serverKey: this.keys.serverKey,
@@ -23208,18 +23458,18 @@ var ArkadeContract = class _ArkadeContract {
23208
23458
  if (registered) {
23209
23459
  const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
23210
23460
  return (withVtxos?.vtxos ?? []).filter(
23211
- (v) => !chunk5MLC2HU3_cjs.hasTerminalSpend(v) && !v.isUnrolled
23461
+ (v) => !chunkRZ2NGS6A_cjs.hasTerminalSpend(v) && !v.isUnrolled
23212
23462
  );
23213
23463
  }
23214
23464
  }
23215
23465
  if (!this.client.indexer) {
23216
23466
  throw new Error("ArkadeContract.getUtxos: an indexer is required");
23217
23467
  }
23218
- const { vtxos } = await chunk5MLC2HU3_cjs.getNormalizedVtxos(this.client.indexer, {
23468
+ const { vtxos } = await chunkRZ2NGS6A_cjs.getNormalizedVtxos(this.client.indexer, {
23219
23469
  scripts: [scriptHex],
23220
23470
  spendableOnly: true
23221
23471
  });
23222
- return vtxos.filter((v) => !chunk5MLC2HU3_cjs.hasTerminalSpend(v) && !v.isUnrolled);
23472
+ return vtxos.filter((v) => !chunkRZ2NGS6A_cjs.hasTerminalSpend(v) && !v.isUnrolled);
23223
23473
  }
23224
23474
  /** Total spendable balance (requires an indexer). */
23225
23475
  async getBalance() {
@@ -23317,7 +23567,7 @@ var ArkadeTransactionBuilder = class {
23317
23567
  this.contract.client.checkpoint
23318
23568
  );
23319
23569
  if (coin.sourceTx) {
23320
- chunk5MLC2HU3_cjs.setArkPsbtField(arkTx, 0, chunk5MLC2HU3_cjs.PrevArkTxField, coin.sourceTx);
23570
+ chunkRZ2NGS6A_cjs.setArkPsbtField(arkTx, 0, chunkRZ2NGS6A_cjs.PrevArkTxField, coin.sourceTx);
23321
23571
  }
23322
23572
  if (this.fn.arkadeScript) {
23323
23573
  const indexer = this.contract.client.indexer;
@@ -23334,8 +23584,8 @@ var ArkadeTransactionBuilder = class {
23334
23584
  }
23335
23585
  const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
23336
23586
  if (condition.length > 0) {
23337
- chunk5MLC2HU3_cjs.setArkPsbtField(arkTx, 0, chunk5MLC2HU3_cjs.ConditionWitness, condition);
23338
- chunk5MLC2HU3_cjs.setArkPsbtField(checkpoints[0], 0, chunk5MLC2HU3_cjs.ConditionWitness, condition);
23587
+ chunkRZ2NGS6A_cjs.setArkPsbtField(arkTx, 0, chunkRZ2NGS6A_cjs.ConditionWitness, condition);
23588
+ chunkRZ2NGS6A_cjs.setArkPsbtField(checkpoints[0], 0, chunkRZ2NGS6A_cjs.ConditionWitness, condition);
23339
23589
  }
23340
23590
  const packets = [];
23341
23591
  if (this.assetSpecs.length > 0) {
@@ -23374,7 +23624,7 @@ var ArkadeTransactionBuilder = class {
23374
23624
  base.base64.encode(signedArk2.toPSBT()),
23375
23625
  signedCps.map((c) => base.base64.encode(c.toPSBT()))
23376
23626
  );
23377
- const txid = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
23627
+ const txid = chunkRZ2NGS6A_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
23378
23628
  return {
23379
23629
  txid,
23380
23630
  signedArkTx: res2.signedArkTx,
@@ -23384,8 +23634,14 @@ var ArkadeTransactionBuilder = class {
23384
23634
  if (!client.identity) {
23385
23635
  throw new Error("a signing identity is required for non-covenant spends");
23386
23636
  }
23637
+ const ark = client.arkProvider;
23638
+ if (!ark.submitTx || !ark.finalizeTx) {
23639
+ throw new Error(
23640
+ "broadcasting requires an `arkade` provider with `submitTx`/`finalizeTx` on the Arkade client"
23641
+ );
23642
+ }
23387
23643
  const signedArk = await this.signArk(arkTx, userInputs);
23388
- const res = await client.arkProvider.submitTx(
23644
+ const res = await ark.submitTx(
23389
23645
  base.base64.encode(signedArk.toPSBT()),
23390
23646
  checkpoints.map((c) => base.base64.encode(c.toPSBT()))
23391
23647
  );
@@ -23396,7 +23652,7 @@ var ArkadeTransactionBuilder = class {
23396
23652
  async ({ server }) => base.base64.encode((await client.identity.sign(server, [0])).toPSBT())
23397
23653
  )
23398
23654
  );
23399
- await client.arkProvider.finalizeTx(res.arkTxid, finalCps);
23655
+ await ark.finalizeTx(res.arkTxid, finalCps);
23400
23656
  return {
23401
23657
  txid: res.arkTxid,
23402
23658
  signedArkTx: res.finalArkTx,
@@ -23433,23 +23689,23 @@ var ArkadeTransactionBuilder = class {
23433
23689
  }
23434
23690
  buildAssetPacket() {
23435
23691
  const groups = this.assetSpecs.map((s) => {
23436
- const id = typeof s.assetId === "string" ? chunkGVHUHTRH_cjs.AssetId.fromString(s.assetId) : chunkGVHUHTRH_cjs.AssetId.fromBytes(s.assetId);
23437
- return chunkGVHUHTRH_cjs.AssetGroup.create(
23692
+ const id = typeof s.assetId === "string" ? chunkWQIWUTYS_cjs.AssetId.fromString(s.assetId) : chunkWQIWUTYS_cjs.AssetId.fromBytes(s.assetId);
23693
+ return chunkWQIWUTYS_cjs.AssetGroup.create(
23438
23694
  id,
23439
23695
  null,
23440
- s.inputs.map((i) => chunkGVHUHTRH_cjs.AssetInput.create(i.vin, i.amount)),
23441
- s.outputs.map((o) => chunkGVHUHTRH_cjs.AssetOutput.create(o.vout, o.amount)),
23442
- (s.metadata ?? []).map((m) => chunkGVHUHTRH_cjs.Metadata.create(m.key, m.value))
23696
+ s.inputs.map((i) => chunkWQIWUTYS_cjs.AssetInput.create(i.vin, i.amount)),
23697
+ s.outputs.map((o) => chunkWQIWUTYS_cjs.AssetOutput.create(o.vout, o.amount)),
23698
+ (s.metadata ?? []).map((m) => chunkWQIWUTYS_cjs.Metadata.create(m.key, m.value))
23443
23699
  );
23444
23700
  });
23445
- return chunkGVHUHTRH_cjs.Packet.create(groups);
23701
+ return chunkWQIWUTYS_cjs.Packet.create(groups);
23446
23702
  }
23447
23703
  witnessBytes(ref) {
23448
- return chunkWIFL5QYZ_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
23704
+ return chunkQ5WQ4Y2I_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
23449
23705
  }
23450
23706
  };
23451
23707
  function bindInputs(fn, callArgs) {
23452
- const names = (fn.def.inputs ?? []).map(chunkWIFL5QYZ_cjs.inputName);
23708
+ const names = (fn.def.inputs ?? []).map(chunkQ5WQ4Y2I_cjs.inputName);
23453
23709
  if (callArgs.length !== names.length) {
23454
23710
  throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
23455
23711
  }
@@ -23484,6 +23740,7 @@ var BIP21Error = /* @__PURE__ */ ((BIP21Error2) => {
23484
23740
  BIP21Error2["INVALID_ADDRESS"] = "Invalid address";
23485
23741
  return BIP21Error2;
23486
23742
  })(BIP21Error || {});
23743
+ var ARK_HRP = /^(?:t?ark|T?ARK)/;
23487
23744
  var BIP21 = class _BIP21 {
23488
23745
  /**
23489
23746
  * Create a BIP21 URI from the provided parameters.
@@ -23507,7 +23764,7 @@ var BIP21 = class _BIP21 {
23507
23764
  }
23508
23765
  queryParams[key] = value;
23509
23766
  } else if (key === "ark") {
23510
- if (typeof value === "string" && (value.startsWith("ark") || value.startsWith("tark"))) {
23767
+ if (typeof value === "string" && ARK_HRP.test(value)) {
23511
23768
  queryParams[key] = value;
23512
23769
  } else {
23513
23770
  console.warn("Invalid ARK address format");
@@ -23527,7 +23784,7 @@ var BIP21 = class _BIP21 {
23527
23784
  Object.entries(queryParams).map(([k, v]) => [k, String(v)])
23528
23785
  )
23529
23786
  ).toString() : "";
23530
- return `bitcoin:${address ? address.toLowerCase() : ""}${query}`;
23787
+ return `bitcoin:${address ?? ""}${query}`;
23531
23788
  }
23532
23789
  /**
23533
23790
  * Integer-sats amount encoded in a BIP21 URI (`amount=` is BTC), or
@@ -23560,7 +23817,7 @@ var BIP21 = class _BIP21 {
23560
23817
  const [address, query] = withoutPrefix.split("?");
23561
23818
  const params = {};
23562
23819
  if (address) {
23563
- params.address = address.toLowerCase();
23820
+ params.address = address;
23564
23821
  }
23565
23822
  if (query) {
23566
23823
  const queryParams = new URLSearchParams(query);
@@ -23576,7 +23833,7 @@ var BIP21 = class _BIP21 {
23576
23833
  }
23577
23834
  params[key] = amount;
23578
23835
  } else if (key === "ark") {
23579
- if (value.startsWith("ark") || value.startsWith("tark")) {
23836
+ if (ARK_HRP.test(value)) {
23580
23837
  params[key] = value;
23581
23838
  } else {
23582
23839
  console.warn("Invalid ARK address format");
@@ -23828,7 +24085,7 @@ function onchainRail() {
23828
24085
  function createDefaultPaymentRouter(wallet) {
23829
24086
  return new PaymentRouter({
23830
24087
  wallet,
23831
- prefs: { priority: ["ark", "lightning", "onchain"] }
24088
+ prefs: { priority: ["ark", "onchain"] }
23832
24089
  }).use(arkRail()).use(onchainRail());
23833
24090
  }
23834
24091
  /*! Bundled license information:
@@ -23939,6 +24196,7 @@ exports.arkTarget = arkTarget;
23939
24196
  exports.arkade_exports = arkade_exports;
23940
24197
  exports.assertFinalCommitmentMatchesValidated = assertFinalCommitmentMatchesValidated;
23941
24198
  exports.assertIntentIdUnique = assertIntentIdUnique;
24199
+ exports.assertRecipientArkadeAddress = assertRecipientArkadeAddress;
23942
24200
  exports.assertSendableAmount = assertSendableAmount;
23943
24201
  exports.assertSubmittedArkTxid = assertSubmittedArkTxid;
23944
24202
  exports.assertValidBatchExpiry = assertValidBatchExpiry;
@@ -24055,5 +24313,5 @@ exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
24055
24313
  exports.waitForIncomingFunds = waitForIncomingFunds;
24056
24314
  exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
24057
24315
  exports.withPrevTxs = withPrevTxs;
24058
- //# sourceMappingURL=chunk-EBYCTLET.cjs.map
24059
- //# sourceMappingURL=chunk-EBYCTLET.cjs.map
24316
+ //# sourceMappingURL=chunk-YEUXBECG.cjs.map
24317
+ //# sourceMappingURL=chunk-YEUXBECG.cjs.map