@arkade-os/sdk 0.4.68 → 0.4.69

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 (74) hide show
  1. package/README.md +33 -0
  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-DaZlVTbM.d.ts → asyncStorageTaskQueue-BgUJN-3X.d.ts} +1 -1
  9. package/dist/{asyncStorageTaskQueue-B2CcXIHU.d.cts → asyncStorageTaskQueue-Cstx6hS7.d.cts} +1 -1
  10. package/dist/{chunk-45FKMOJH.js → chunk-2PPL3O7Z.js} +3 -3
  11. package/dist/{chunk-45FKMOJH.js.map → chunk-2PPL3O7Z.js.map} +1 -1
  12. package/dist/{chunk-EJOFL5WH.cjs → chunk-5MLC2HU3.cjs} +3 -3
  13. package/dist/{chunk-EJOFL5WH.cjs.map → chunk-5MLC2HU3.cjs.map} +1 -1
  14. package/dist/{chunk-WCJVKFAP.cjs → chunk-EBYCTLET.cjs} +787 -479
  15. package/dist/chunk-EBYCTLET.cjs.map +1 -0
  16. package/dist/{chunk-PJR63FTK.cjs → chunk-GVHUHTRH.cjs} +17 -17
  17. package/dist/{chunk-PJR63FTK.cjs.map → chunk-GVHUHTRH.cjs.map} +1 -1
  18. package/dist/{chunk-4KCVS4ZN.cjs → chunk-HQ4DMGA4.cjs} +10 -10
  19. package/dist/{chunk-4KCVS4ZN.cjs.map → chunk-HQ4DMGA4.cjs.map} +1 -1
  20. package/dist/{chunk-4CMXV5SF.js → chunk-L5SCQYHF.js} +3 -3
  21. package/dist/{chunk-4CMXV5SF.js.map → chunk-L5SCQYHF.js.map} +1 -1
  22. package/dist/{chunk-G4I6PU5H.js → chunk-MNMPGEK2.js} +4 -4
  23. package/dist/{chunk-G4I6PU5H.js.map → chunk-MNMPGEK2.js.map} +1 -1
  24. package/dist/{chunk-VBHXBI7F.js → chunk-TA7XLEP2.js} +357 -50
  25. package/dist/chunk-TA7XLEP2.js.map +1 -0
  26. package/dist/{chunk-6YUACVX4.cjs → chunk-WIFL5QYZ.cjs} +49 -49
  27. package/dist/{chunk-6YUACVX4.cjs.map → chunk-WIFL5QYZ.cjs.map} +1 -1
  28. package/dist/{chunk-GQ4NMQGR.js → chunk-XLWDX7QZ.js} +4 -4
  29. package/dist/{chunk-GQ4NMQGR.js.map → chunk-XLWDX7QZ.js.map} +1 -1
  30. package/dist/{chunk-JGMSZIE4.cjs → chunk-XQPN5YP2.cjs} +17 -17
  31. package/dist/{chunk-JGMSZIE4.cjs.map → chunk-XQPN5YP2.cjs.map} +1 -1
  32. package/dist/{chunk-33Q2RFET.js → chunk-YG7T6LI3.js} +3 -3
  33. package/dist/{chunk-33Q2RFET.js.map → chunk-YG7T6LI3.js.map} +1 -1
  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-AomVWxO_.d.ts → delegate-BPdzTbwN.d.ts} +1 -1
  39. package/dist/{delegate-Bffc5f54.d.cts → delegate-DrwIar11.d.cts} +1 -1
  40. package/dist/{hdWalletCapable-DZdIVa23.d.ts → hdWalletCapable-D4WH35z0.d.cts} +49 -5
  41. package/dist/{hdWalletCapable-B5nRs3RH.d.cts → hdWalletCapable-DyxCiNVE.d.ts} +49 -5
  42. package/dist/{index-nfyQM33h.d.cts → index-BqhpAqqj.d.cts} +2 -2
  43. package/dist/{index-jouvy8FD.d.ts → index-TZJvbIaA.d.ts} +2 -2
  44. package/dist/{index-C7RZCfoY.d.cts → index-dWRqYSdS.d.cts} +53 -1
  45. package/dist/{index-C7RZCfoY.d.ts → index-dWRqYSdS.d.ts} +53 -1
  46. package/dist/index.cjs +294 -290
  47. package/dist/index.d.cts +25 -8
  48. package/dist/index.d.ts +25 -8
  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-D2vnpPBT.d.cts → taskRunner-CzYKyJ9c.d.cts} +1 -1
  59. package/dist/{taskRunner-DuwK9t8O.d.ts → taskRunner-D2fnbqYw.d.ts} +1 -1
  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 +14 -14
  65. package/dist/wallet/expo/index.d.cts +4 -4
  66. package/dist/wallet/expo/index.d.ts +4 -4
  67. package/dist/wallet/expo/index.js +5 -5
  68. package/dist/worker/expo/index.cjs +9 -9
  69. package/dist/worker/expo/index.d.cts +4 -4
  70. package/dist/worker/expo/index.d.ts +4 -4
  71. package/dist/worker/expo/index.js +5 -5
  72. package/package.json +1 -1
  73. package/dist/chunk-VBHXBI7F.js.map +0 -1
  74. package/dist/chunk-WCJVKFAP.cjs.map +0 -1
@@ -1,8 +1,8 @@
1
1
  'use strict';
2
2
 
3
- var chunkPJR63FTK_cjs = require('./chunk-PJR63FTK.cjs');
4
- var chunk6YUACVX4_cjs = require('./chunk-6YUACVX4.cjs');
5
- var chunkEJOFL5WH_cjs = require('./chunk-EJOFL5WH.cjs');
3
+ var chunkGVHUHTRH_cjs = require('./chunk-GVHUHTRH.cjs');
4
+ var chunkWIFL5QYZ_cjs = require('./chunk-WIFL5QYZ.cjs');
5
+ var chunk5MLC2HU3_cjs = require('./chunk-5MLC2HU3.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 = chunkEJOFL5WH_cjs.getArkPsbtFields(tx.root, 0, chunkEJOFL5WH_cjs.CosignerPublicKey).map(
191
+ const cosigners = chunk5MLC2HU3_cjs.getArkPsbtFields(tx.root, 0, chunk5MLC2HU3_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 = chunkEJOFL5WH_cjs.getArkPsbtFields(g.root, 0, chunkEJOFL5WH_cjs.CosignerPublicKey).map((c) => c.key);
243
+ const cosigners = chunk5MLC2HU3_cjs.getArkPsbtFields(g.root, 0, chunk5MLC2HU3_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
- chunkEJOFL5WH_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH);
326
+ chunk5MLC2HU3_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 = chunk6YUACVX4_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
435
+ network = chunkWIFL5QYZ_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 chunk6YUACVX4_cjs.descriptorIsOurs(descriptor, this.descriptor, utils_js.pubSchnorr(this.derivedKey));
533
+ return chunkWIFL5QYZ_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 = chunk6YUACVX4_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
582
+ const network = chunkWIFL5QYZ_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
- chunkEJOFL5WH_cjs.assertAllowedSighashTypes(txCpy, ALLOWED_SIGHASH2);
607
+ chunk5MLC2HU3_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 = chunk6YUACVX4_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
669
+ const network = chunkWIFL5QYZ_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 chunk6YUACVX4_cjs.descriptorIsOurs(descriptor, this.descriptor, this.indexZero.pubkey);
719
+ return chunkWIFL5QYZ_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 chunk6YUACVX4_cjs.deriveDescriptorLeafPubKey(this.descriptor);
881
+ return chunkWIFL5QYZ_cjs.deriveDescriptorLeafPubKey(this.descriptor);
882
882
  }
883
883
  async compressedPublicKey() {
884
- return chunk6YUACVX4_cjs.deriveDescriptorLeafCompressedPubKey(this.descriptor);
884
+ return chunkWIFL5QYZ_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 && chunk6YUACVX4_cjs.parseHDDescriptor(descriptor)) {
952
+ if (owner && chunkWIFL5QYZ_cjs.parseHDDescriptor(descriptor)) {
953
953
  return new DescriptorIdentity({ descriptor, signer: owner, base: identity });
954
954
  }
955
955
  let key;
956
956
  try {
957
- key = chunk6YUACVX4_cjs.deriveDescriptorLeafPubKey(descriptor);
957
+ key = chunkWIFL5QYZ_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 chunk6YUACVX4_cjs.parseHDDescriptor(descriptor) !== null;
1332
+ return chunkWIFL5QYZ_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 chunk6YUACVX4_cjs.identityDescriptor(wallet.identity);
1336
+ return allocated ?? await chunkWIFL5QYZ_cjs.identityDescriptor(wallet.identity);
1337
1337
  }
1338
1338
  async function provisionRefundKey(wallet) {
1339
- const descriptor = await chunk6YUACVX4_cjs.identityDescriptor(wallet.identity);
1339
+ const descriptor = await chunkWIFL5QYZ_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 } = chunkEJOFL5WH_cjs.ArkAddress.decode(address);
1349
+ const { pkScript } = chunk5MLC2HU3_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 = chunk6YUACVX4_cjs.deriveDescriptorLeafPubKey(descriptor);
1395
+ expected = chunkWIFL5QYZ_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 chunkEJOFL5WH_cjs.baseFetch(url, {
1614
+ const response = await chunk5MLC2HU3_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: chunkEJOFL5WH_cjs.Intent.encodeMessage(intent.message),
1621
+ message: chunk5MLC2HU3_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 chunkEJOFL5WH_cjs.rateGate.runHttp(url, () => chunkEJOFL5WH_cjs.baseFetch(url));
1641
+ const response = await chunk5MLC2HU3_cjs.rateGate.runHttp(url, () => chunk5MLC2HU3_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[chunkEJOFL5WH_cjs.DEFAULT_NETWORK_NAME], opts) {
1666
+ constructor(baseUrl = ESPLORA_URL[chunk5MLC2HU3_cjs.DEFAULT_NETWORK_NAME], opts) {
1667
1667
  this.baseUrl = baseUrl;
1668
1668
  this.pollingInterval = opts?.pollingInterval ?? 15e3;
1669
1669
  this.forcePolling = opts?.forcePolling ?? false;
@@ -1671,15 +1671,25 @@ var EsploraProvider = class {
1671
1671
  baseUrl;
1672
1672
  pollingInterval;
1673
1673
  forcePolling;
1674
+ /**
1675
+ * Live {@link watchAddresses} subscriptions, keyed by their address set.
1676
+ *
1677
+ * Concurrent watchers over the same addresses share one transport, so a
1678
+ * caller that opens watchers in a loop — or leaks them by abandoning
1679
+ * {@link waitForIncomingFunds} — costs one entry in a `Set` rather than
1680
+ * another WebSocket plus another full-history polling loop. Entries are
1681
+ * dropped once their last subscriber stops.
1682
+ */
1683
+ addressWatches = /* @__PURE__ */ new Map();
1674
1684
  async getCoins(address) {
1675
- const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
1685
+ const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/address/${address}/utxo`);
1676
1686
  if (!response.ok) {
1677
1687
  throw new Error(`Failed to fetch UTXOs: ${response.statusText}`);
1678
1688
  }
1679
1689
  return response.json();
1680
1690
  }
1681
1691
  async getFeeRate() {
1682
- const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
1692
+ const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/fee-estimates`);
1683
1693
  if (response.status === 404) {
1684
1694
  return void 0;
1685
1695
  }
@@ -1700,7 +1710,7 @@ var EsploraProvider = class {
1700
1710
  }
1701
1711
  }
1702
1712
  async getTxOutspends(txid) {
1703
- const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
1713
+ const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/outspends`);
1704
1714
  if (!response.ok) {
1705
1715
  const error = await response.text();
1706
1716
  throw new Error(`Failed to get transaction outspends: ${error}`);
@@ -1708,15 +1718,27 @@ var EsploraProvider = class {
1708
1718
  return response.json();
1709
1719
  }
1710
1720
  async getTransactions(address) {
1711
- const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
1721
+ const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/address/${address}/txs`);
1712
1722
  if (!response.ok) {
1713
1723
  const error = await response.text();
1714
1724
  throw new Error(`Failed to get transactions: ${error}`);
1715
1725
  }
1716
1726
  return response.json();
1717
1727
  }
1728
+ /**
1729
+ * Activity counts for an address, without its transactions — orders of
1730
+ * magnitude smaller than `/address/{addr}/txs`, which is what makes it
1731
+ * usable as a change probe for the polling fallback.
1732
+ */
1733
+ async getAddressStats(address) {
1734
+ const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/address/${address}`);
1735
+ if (!response.ok) {
1736
+ throw new Error(`Failed to get address stats: ${response.statusText}`);
1737
+ }
1738
+ return response.json();
1739
+ }
1718
1740
  async getRawTransaction(txid) {
1719
- const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/hex`);
1741
+ const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/hex`);
1720
1742
  if (!response.ok) {
1721
1743
  const error = await response.text();
1722
1744
  throw new Error(`Failed to get raw transaction ${txid}: ${error}`);
@@ -1724,7 +1746,7 @@ var EsploraProvider = class {
1724
1746
  return base.hex.decode((await response.text()).trim());
1725
1747
  }
1726
1748
  async getTxStatus(txid) {
1727
- const txresponse = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
1749
+ const txresponse = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/tx/${txid}`);
1728
1750
  if (!txresponse.ok) {
1729
1751
  throw new Error(txresponse.statusText);
1730
1752
  }
@@ -1732,7 +1754,7 @@ var EsploraProvider = class {
1732
1754
  if (!tx.status.confirmed) {
1733
1755
  return { confirmed: false };
1734
1756
  }
1735
- const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
1757
+ const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/tx/${txid}/status`);
1736
1758
  if (!response.ok) {
1737
1759
  throw new Error(`Failed to get transaction status: ${response.statusText}`);
1738
1760
  }
@@ -1746,50 +1768,227 @@ var EsploraProvider = class {
1746
1768
  blockHeight: data.block_height
1747
1769
  };
1748
1770
  }
1771
+ /**
1772
+ * Watch a set of addresses over the explorer's WebSocket, degrading to HTTP
1773
+ * polling whenever the socket is unavailable and returning to the socket as
1774
+ * soon as it can be re-established.
1775
+ *
1776
+ * Concurrent calls covering the same address set share one transport. The
1777
+ * returned function releases **this** subscription only; the transport is
1778
+ * torn down when the last subscriber releases it. Calling it more than once
1779
+ * is a no-op.
1780
+ *
1781
+ * @param addresses - Addresses to monitor; order is not significant
1782
+ * @param callback - Invoked with transactions seen after the watch started
1783
+ * @returns A function releasing this subscription
1784
+ * @remarks
1785
+ * The HTTP fallback fetches full address history per address per cycle,
1786
+ * which is dramatically more expensive than the socket — so callers should
1787
+ * release watches they no longer need rather than relying on sharing.
1788
+ * @see {@link waitForIncomingFunds} for the cancellation-aware wallet-level helper
1789
+ */
1749
1790
  async watchAddresses(addresses, callback) {
1750
- let intervalId = null;
1791
+ const key = [...addresses].sort().join("\0");
1792
+ let watch = this.addressWatches.get(key);
1793
+ if (!watch) {
1794
+ watch = this.createAddressWatch(addresses, () => this.addressWatches.delete(key));
1795
+ this.addressWatches.set(key, watch);
1796
+ }
1797
+ const subscriber = { callback };
1798
+ watch.subscribers.add(subscriber);
1799
+ const shared = watch;
1800
+ await shared.started;
1801
+ let released = false;
1802
+ return () => {
1803
+ if (released) return;
1804
+ released = true;
1805
+ shared.subscribers.delete(subscriber);
1806
+ if (shared.subscribers.size === 0) shared.teardown();
1807
+ };
1808
+ }
1809
+ /**
1810
+ * Bring up one shared address watch: a WebSocket subscription where the
1811
+ * explorer supports it, degrading to HTTP polling when it doesn't.
1812
+ *
1813
+ * @param addresses - Addresses this watch covers
1814
+ * @param onTeardown - Invoked when the watch retires, to drop the registry entry
1815
+ */
1816
+ createAddressWatch(addresses, onTeardown) {
1817
+ const subscribers = /* @__PURE__ */ new Set();
1751
1818
  const wsUrl = this.baseUrl.replace(/^http(s)?:/, "ws$1:") + "/v1/ws";
1752
- const poll = async () => {
1753
- const getAllTxs = async () => {
1754
- const txArrays = await Promise.all(
1755
- addresses.map((address) => this.getTransactions(address))
1756
- );
1757
- return txArrays.flat();
1819
+ let stopped = false;
1820
+ let timer = null;
1821
+ let pollStarted = false;
1822
+ let ws = null;
1823
+ let reconnectTimer = null;
1824
+ let reconnectFailures = 0;
1825
+ let pollSession = 0;
1826
+ const emit = (txs) => {
1827
+ if (stopped || txs.length === 0) return;
1828
+ for (const subscriber of [...subscribers]) {
1829
+ try {
1830
+ subscriber.callback(txs);
1831
+ } catch (error) {
1832
+ console.error("Address watch subscriber threw:", error);
1833
+ }
1834
+ }
1835
+ };
1836
+ const txKey2 = (tx) => `${tx.txid}_${tx.status.block_time}`;
1837
+ const getAllTxs = async () => {
1838
+ const txArrays = await Promise.all(
1839
+ addresses.map((address) => this.getTransactions(address))
1840
+ );
1841
+ return txArrays.flat();
1842
+ };
1843
+ const seen = /* @__PURE__ */ new Set();
1844
+ let baselined = false;
1845
+ let anchorHeight;
1846
+ const baseline = (async () => {
1847
+ const [history, tip] = await Promise.allSettled([getAllTxs(), this.getChainTip()]);
1848
+ if (history.status === "fulfilled") {
1849
+ for (const tx of history.value) seen.add(txKey2(tx));
1850
+ baselined = true;
1851
+ return;
1852
+ }
1853
+ console.warn(
1854
+ "Could not baseline watched addresses; the first poll pass will establish it instead:",
1855
+ history.reason
1856
+ );
1857
+ if (tip.status === "fulfilled") anchorHeight = tip.value.height;
1858
+ })();
1859
+ const report = (txs) => {
1860
+ const fresh = [];
1861
+ for (const tx of txs) {
1862
+ const key = txKey2(tx);
1863
+ if (seen.has(key)) continue;
1864
+ seen.add(key);
1865
+ fresh.push(tx);
1866
+ }
1867
+ if (fresh.length === 0) return;
1868
+ emit(fresh);
1869
+ };
1870
+ const startPolling = async () => {
1871
+ if (stopped || pollStarted) return;
1872
+ pollStarted = true;
1873
+ console.warn(
1874
+ `Esplora websocket unavailable (${wsUrl}); falling back to HTTP polling every ${this.pollingInterval}ms for ${addresses.length} address(es) while retrying the socket`
1875
+ );
1876
+ let failures = 0;
1877
+ const activityFingerprint = async () => {
1878
+ try {
1879
+ const stats = await Promise.all(
1880
+ addresses.map((address) => this.getAddressStats(address))
1881
+ );
1882
+ const counted = (activity) => typeof activity?.tx_count === "number" && typeof activity.funded_txo_count === "number" && typeof activity.spent_txo_count === "number";
1883
+ const usable = stats.every(
1884
+ (s) => counted(s?.chain_stats) && counted(s?.mempool_stats)
1885
+ );
1886
+ if (!usable) return void 0;
1887
+ if (stats.some((s) => s.mempool_stats.tx_count > 0)) return void 0;
1888
+ return stats.map(
1889
+ ({ chain_stats: chain }) => `${chain.tx_count}:${chain.funded_txo_count}:${chain.spent_txo_count}`
1890
+ ).join(",");
1891
+ } catch {
1892
+ return void 0;
1893
+ }
1894
+ };
1895
+ let lastFingerprint;
1896
+ const session = pollSession;
1897
+ const isCurrentLoop = () => !stopped && session === pollSession;
1898
+ const schedule = () => {
1899
+ if (!isCurrentLoop()) return;
1900
+ timer = setTimeout(tick, this.pollingInterval * 2 ** failures);
1758
1901
  };
1759
- const initialTxs = await getAllTxs();
1760
- const txKey2 = (tx) => `${tx.txid}_${tx.status.block_time}`;
1761
- const existingTxs = new Set(initialTxs.map(txKey2));
1762
- intervalId = setInterval(async () => {
1902
+ const tick = async () => {
1763
1903
  try {
1904
+ const fingerprint = await activityFingerprint();
1905
+ if (!isCurrentLoop()) return;
1906
+ if (fingerprint !== void 0 && fingerprint === lastFingerprint) {
1907
+ failures = 0;
1908
+ schedule();
1909
+ return;
1910
+ }
1764
1911
  const currentTxs = await getAllTxs();
1765
- const newTxs = currentTxs.filter((tx) => !existingTxs.has(txKey2(tx)));
1766
- if (newTxs.length > 0) {
1767
- newTxs.forEach((tx) => existingTxs.add(txKey2(tx)));
1768
- callback(newTxs);
1912
+ if (!isCurrentLoop()) return;
1913
+ lastFingerprint = fingerprint;
1914
+ if (baselined) {
1915
+ report(currentTxs);
1916
+ } else if (anchorHeight !== void 0) {
1917
+ const arrivedAfterStart = (tx) => !tx.status.confirmed || tx.status.block_height === void 0 || tx.status.block_height > anchorHeight;
1918
+ for (const tx of currentTxs) {
1919
+ if (!arrivedAfterStart(tx)) seen.add(txKey2(tx));
1920
+ }
1921
+ baselined = true;
1922
+ report(currentTxs);
1923
+ } else {
1924
+ console.warn(
1925
+ `Esplora address watch established its baseline late for ${addresses.length} address(es); deposits arriving before now may not have been reported`
1926
+ );
1927
+ for (const tx of currentTxs) seen.add(txKey2(tx));
1928
+ baselined = true;
1769
1929
  }
1930
+ failures = 0;
1770
1931
  } catch (error) {
1771
- console.error("Error in polling mechanism:", error);
1932
+ failures = Math.min(failures + 1, MAX_POLL_BACKOFF_EXPONENT);
1933
+ console.error("Error polling watched addresses:", error);
1772
1934
  }
1773
- }, this.pollingInterval);
1935
+ schedule();
1936
+ };
1937
+ await baseline;
1938
+ if (!isCurrentLoop()) return;
1939
+ await tick();
1774
1940
  };
1775
- let ws = null;
1776
- const stopFunc = () => {
1777
- if (ws) ws.close();
1778
- if (intervalId) clearInterval(intervalId);
1941
+ const stopPolling = () => {
1942
+ pollSession++;
1943
+ if (timer) {
1944
+ clearTimeout(timer);
1945
+ timer = null;
1946
+ }
1947
+ pollStarted = false;
1779
1948
  };
1780
- if (this.forcePolling) {
1781
- await poll();
1782
- return stopFunc;
1783
- }
1784
- try {
1785
- ws = new WebSocket(wsUrl);
1786
- ws.addEventListener("open", () => {
1949
+ const handleSocketFailure = () => {
1950
+ if (stopped) return Promise.resolve();
1951
+ scheduleReconnect();
1952
+ return startPolling();
1953
+ };
1954
+ const scheduleReconnect = () => {
1955
+ if (stopped || reconnectTimer !== null) return;
1956
+ const delay = RECONNECT_BASE_DELAY_MS * 2 ** Math.min(reconnectFailures, MAX_RECONNECT_BACKOFF_EXPONENT);
1957
+ reconnectFailures++;
1958
+ reconnectTimer = setTimeout(() => {
1959
+ reconnectTimer = null;
1960
+ connect();
1961
+ }, delay);
1962
+ };
1963
+ const connect = () => {
1964
+ if (stopped) return Promise.resolve();
1965
+ const previous = ws;
1966
+ ws = null;
1967
+ if (previous) {
1968
+ try {
1969
+ previous.close();
1970
+ } catch {
1971
+ }
1972
+ }
1973
+ let socket;
1974
+ try {
1975
+ socket = new WebSocket(wsUrl);
1976
+ } catch {
1977
+ return handleSocketFailure();
1978
+ }
1979
+ ws = socket;
1980
+ const isCurrent = () => !stopped && ws === socket;
1981
+ socket.addEventListener("open", () => {
1982
+ if (!isCurrent()) return;
1983
+ reconnectFailures = 0;
1787
1984
  const subscribeMsg = {
1788
1985
  "track-addresses": addresses
1789
1986
  };
1790
- ws.send(JSON.stringify(subscribeMsg));
1987
+ socket.send(JSON.stringify(subscribeMsg));
1988
+ stopPolling();
1791
1989
  });
1792
- ws.addEventListener("message", (event) => {
1990
+ socket.addEventListener("message", (event) => {
1991
+ if (!isCurrent()) return;
1793
1992
  try {
1794
1993
  const newTxs = [];
1795
1994
  const message = JSON.parse(event.data.toString());
@@ -1801,22 +2000,45 @@ var EsploraProvider = class {
1801
2000
  newTxs.push(...aux[address][type].filter(isExplorerTransaction));
1802
2001
  }
1803
2002
  }
1804
- if (newTxs.length > 0) callback(newTxs);
2003
+ report(newTxs);
1805
2004
  } catch (error) {
1806
2005
  console.error("Failed to process WebSocket message:", error);
1807
2006
  }
1808
2007
  });
1809
- ws.addEventListener("error", async () => {
1810
- await poll();
2008
+ socket.addEventListener("error", () => {
2009
+ if (isCurrent()) void handleSocketFailure();
1811
2010
  });
1812
- } catch {
1813
- if (intervalId) clearInterval(intervalId);
1814
- await poll();
1815
- }
1816
- return stopFunc;
2011
+ socket.addEventListener("close", () => {
2012
+ if (isCurrent()) void handleSocketFailure();
2013
+ });
2014
+ return Promise.resolve();
2015
+ };
2016
+ const teardown = () => {
2017
+ if (stopped) return;
2018
+ stopped = true;
2019
+ onTeardown();
2020
+ if (timer) {
2021
+ clearTimeout(timer);
2022
+ timer = null;
2023
+ }
2024
+ if (reconnectTimer !== null) {
2025
+ clearTimeout(reconnectTimer);
2026
+ reconnectTimer = null;
2027
+ }
2028
+ if (ws) {
2029
+ try {
2030
+ ws.close();
2031
+ } catch {
2032
+ }
2033
+ ws = null;
2034
+ }
2035
+ subscribers.clear();
2036
+ };
2037
+ const started = this.forcePolling ? startPolling() : connect().then(() => baseline);
2038
+ return { subscribers, teardown, started };
1817
2039
  }
1818
2040
  async getChainTip() {
1819
- const tipBlocks = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/blocks`);
2041
+ const tipBlocks = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/blocks`);
1820
2042
  if (!tipBlocks.ok) {
1821
2043
  throw new Error(`Failed to get chain tip: ${tipBlocks.statusText}`);
1822
2044
  }
@@ -1830,12 +2052,14 @@ var EsploraProvider = class {
1830
2052
  const hash = tip[0].id;
1831
2053
  return {
1832
2054
  height: tip[0].height,
2055
+ // `mediantime`, never `timestamp`: the latter is the header's own
2056
+ // `nTime`, and this field is specified as MTP.
1833
2057
  time: tip[0].mediantime,
1834
2058
  hash
1835
2059
  };
1836
2060
  }
1837
2061
  async broadcastPackage(parent, child) {
1838
- const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
2062
+ const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/txs/package`, {
1839
2063
  method: "POST",
1840
2064
  headers: {
1841
2065
  "Content-Type": "application/json"
@@ -1851,7 +2075,7 @@ var EsploraProvider = class {
1851
2075
  return result;
1852
2076
  }
1853
2077
  async broadcastTx(tx) {
1854
- const response = await chunkEJOFL5WH_cjs.baseFetch(`${this.baseUrl}/tx`, {
2078
+ const response = await chunk5MLC2HU3_cjs.baseFetch(`${this.baseUrl}/tx`, {
1855
2079
  method: "POST",
1856
2080
  headers: {
1857
2081
  "Content-Type": "text/plain"
@@ -1895,6 +2119,9 @@ var isExplorerTransaction = (tx) => {
1895
2119
  (vout) => typeof vout.scriptpubkey_address === "string" && typeof vout.value === "number"
1896
2120
  ) && typeof tx.status === "object" && typeof tx.status.confirmed === "boolean";
1897
2121
  };
2122
+ var MAX_POLL_BACKOFF_EXPONENT = 4;
2123
+ var RECONNECT_BASE_DELAY_MS = 1e3;
2124
+ var MAX_RECONNECT_BACKOFF_EXPONENT = 5;
1898
2125
  var getVarIntSize = (n) => {
1899
2126
  if (n < 253) return 1;
1900
2127
  if (n <= 65535) return 3;
@@ -2031,7 +2258,7 @@ function findP2AOutput(tx) {
2031
2258
  var CHILD_DUST_AMOUNT = 546;
2032
2259
  function buildAnchorChild(params) {
2033
2260
  const { parent, feeRate, fundingCoins, changeAddress, tapInternalKey, network } = params;
2034
- const child = new chunkEJOFL5WH_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
2261
+ const child = new chunk5MLC2HU3_cjs.Transaction({ version: 3, allowLegacyWitnessUtxo: true });
2035
2262
  child.addInput(findP2AOutput(parent));
2036
2263
  const estimator = TxWeightEstimator.create().addP2AInput();
2037
2264
  for (const _ of fundingCoins) {
@@ -2079,7 +2306,7 @@ function buildForfeitTx(inputs, forfeitPkScript, txLocktime) {
2079
2306
  );
2080
2307
  }
2081
2308
  function buildForfeitTxWithOutput(inputs, output, txLocktime) {
2082
- const tx = new chunkEJOFL5WH_cjs.Transaction({
2309
+ const tx = new chunk5MLC2HU3_cjs.Transaction({
2083
2310
  version: 3,
2084
2311
  lockTime: txLocktime
2085
2312
  });
@@ -2155,7 +2382,7 @@ function validateVtxoTxGraph(graph, roundTransaction, sweepTapTreeRoot) {
2155
2382
  if (previousScriptKey.length !== 32) {
2156
2383
  throw new Error(`parent output ${childIndex} has invalid script`);
2157
2384
  }
2158
- const cosigners = chunkEJOFL5WH_cjs.getArkPsbtFields(child.root, 0, chunkEJOFL5WH_cjs.CosignerPublicKey);
2385
+ const cosigners = chunk5MLC2HU3_cjs.getArkPsbtFields(child.root, 0, chunk5MLC2HU3_cjs.CosignerPublicKey);
2159
2386
  if (cosigners.length === 0) {
2160
2387
  throw ErrMissingCosignersPublicKeys;
2161
2388
  }
@@ -2213,7 +2440,7 @@ var EmulatorPacket = class _EmulatorPacket {
2213
2440
  return new _EmulatorPacket(entries);
2214
2441
  }
2215
2442
  static fromBytes(data) {
2216
- const reader = new chunkPJR63FTK_cjs.BufferReader(data);
2443
+ const reader = new chunkGVHUHTRH_cjs.BufferReader(data);
2217
2444
  const entryCount = reader.readCompactSize();
2218
2445
  const entries = [];
2219
2446
  for (let i = 0; i < entryCount; i++) {
@@ -2231,7 +2458,7 @@ var EmulatorPacket = class _EmulatorPacket {
2231
2458
  return _EmulatorPacket.PACKET_TYPE;
2232
2459
  }
2233
2460
  serialize() {
2234
- const writer = new chunkPJR63FTK_cjs.BufferWriter();
2461
+ const writer = new chunkGVHUHTRH_cjs.BufferWriter();
2235
2462
  writer.writeCompactSize(this.entries.length);
2236
2463
  for (const entry of this.entries) {
2237
2464
  writer.writeUint16LE(entry.vin);
@@ -2318,7 +2545,7 @@ var Extension = class _Extension {
2318
2545
  `expected magic prefix ${base.hex.encode(ARKADE_MAGIC)}, got ${base.hex.encode(payload.slice(0, Math.min(payload.length, ARKADE_MAGIC.length)))}`
2319
2546
  );
2320
2547
  }
2321
- const reader = new chunkPJR63FTK_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
2548
+ const reader = new chunkGVHUHTRH_cjs.BufferReader(payload.slice(ARKADE_MAGIC.length));
2322
2549
  const packets = [];
2323
2550
  while (reader.remaining() > 0) {
2324
2551
  const packetType = reader.readByte();
@@ -2392,7 +2619,7 @@ var Extension = class _Extension {
2392
2619
  */
2393
2620
  getAssetPacket() {
2394
2621
  for (const p of this.packets) {
2395
- if (p instanceof chunkPJR63FTK_cjs.Packet) {
2622
+ if (p instanceof chunkGVHUHTRH_cjs.Packet) {
2396
2623
  return p;
2397
2624
  }
2398
2625
  }
@@ -2430,8 +2657,8 @@ var Extension = class _Extension {
2430
2657
  };
2431
2658
  function parsePacket(packetType, data) {
2432
2659
  switch (packetType) {
2433
- case chunkPJR63FTK_cjs.Packet.PACKET_TYPE:
2434
- return chunkPJR63FTK_cjs.Packet.fromBytes(data);
2660
+ case chunkGVHUHTRH_cjs.Packet.PACKET_TYPE:
2661
+ return chunkGVHUHTRH_cjs.Packet.fromBytes(data);
2435
2662
  case EmulatorPacket.PACKET_TYPE:
2436
2663
  return EmulatorPacket.fromBytes(data);
2437
2664
  default:
@@ -2478,16 +2705,16 @@ function buildOpReturnScript(data) {
2478
2705
  }
2479
2706
  return script;
2480
2707
  }
2481
- var ErrOffchainOutputNotFound = (address) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
2482
- var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2708
+ var ErrOffchainOutputNotFound = (address) => new chunk5MLC2HU3_cjs.ServerResponseMismatchError(`offchain send output not found: ${address}`);
2709
+ var ErrInvalidAssetOutputAmount = (got, want, assetId) => new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
2483
2710
  `invalid asset output amount for ${assetId}: got ${got}, want ${want}`
2484
2711
  );
2485
- var ErrAssetGroupNotFound = (assetId) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(`asset group not found in batch leaf: ${assetId}`);
2486
- var ErrAssetOutputNotFound = (assetId, outputIndex) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
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(
2487
2714
  `asset output not found in asset group ${assetId} at index ${outputIndex}`
2488
2715
  );
2489
- var ErrOnchainOutputNotFound = (address) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
2490
- var ErrUnvalidatedOffchainOutput = (address) => new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2716
+ var ErrOnchainOutputNotFound = (address) => new chunk5MLC2HU3_cjs.ServerResponseMismatchError(`onchain output not found: ${address}`);
2717
+ var ErrUnvalidatedOffchainOutput = (address) => new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
2491
2718
  `offchain output ${address} cannot be validated: virtual output tree signing did not run`
2492
2719
  );
2493
2720
  var ErrInvalidOnchainOutputAmount = (address) => new Error(`invalid onchain output amount: ${address}`);
@@ -2496,7 +2723,7 @@ var ErrInvalidOffchainOutputAmount = (address) => new Error(`invalid offchain ou
2496
2723
  function assertFinalCommitmentMatchesValidated(finalCommitmentTx, validatedCommitmentTxid, context) {
2497
2724
  if (!validatedCommitmentTxid) return;
2498
2725
  if (finalCommitmentTx.id === validatedCommitmentTxid) return;
2499
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
2726
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
2500
2727
  `${context}: finalization commitment tx ${finalCommitmentTx.id} differs from the validated commitment tx ${validatedCommitmentTxid}`
2501
2728
  );
2502
2729
  }
@@ -2506,7 +2733,7 @@ function validateBatchRecipients(commitmentTx, vtxoTreeLeaves, recipients, netwo
2506
2733
  for (const recipient of recipients) {
2507
2734
  let arkAddress;
2508
2735
  try {
2509
- arkAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(recipient.address);
2736
+ arkAddress = chunk5MLC2HU3_cjs.ArkAddress.decode(recipient.address);
2510
2737
  } catch {
2511
2738
  validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
2512
2739
  continue;
@@ -2518,7 +2745,7 @@ function validateBatchRecipientsWithoutTree(commitmentTx, recipients, network) {
2518
2745
  const usedOnchainOutputs = /* @__PURE__ */ new Set();
2519
2746
  for (const recipient of recipients) {
2520
2747
  try {
2521
- chunkEJOFL5WH_cjs.ArkAddress.decode(recipient.address);
2748
+ chunk5MLC2HU3_cjs.ArkAddress.decode(recipient.address);
2522
2749
  } catch {
2523
2750
  validateOnchainRecipient(commitmentTx, recipient, network, usedOnchainOutputs);
2524
2751
  continue;
@@ -2751,7 +2978,7 @@ function assetMintResolver() {
2751
2978
  if (!tx.assets?.length || !tx.key.arkTxid) return void 0;
2752
2979
  const minted = tx.assets.filter((a) => {
2753
2980
  try {
2754
- return base.hex.encode(chunkPJR63FTK_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2981
+ return base.hex.encode(chunkGVHUHTRH_cjs.AssetId.fromString(a.assetId).txid) === tx.key.arkTxid;
2755
2982
  } catch {
2756
2983
  return false;
2757
2984
  }
@@ -2794,7 +3021,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2794
3021
  const existing = inputsByAssetId.get(asset.assetId);
2795
3022
  inputsByAssetId.set(asset.assetId, [
2796
3023
  ...existing ?? [],
2797
- chunkPJR63FTK_cjs.AssetInput.create(inputIndex, asset.amount)
3024
+ chunkGVHUHTRH_cjs.AssetInput.create(inputIndex, asset.amount)
2798
3025
  ]);
2799
3026
  }
2800
3027
  }
@@ -2806,7 +3033,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2806
3033
  const existing = outputsByAssetId.get(asset.assetId);
2807
3034
  outputsByAssetId.set(asset.assetId, [
2808
3035
  ...existing ?? [],
2809
- chunkPJR63FTK_cjs.AssetOutput.create(outputIndex, asset.amount)
3036
+ chunkGVHUHTRH_cjs.AssetOutput.create(outputIndex, asset.amount)
2810
3037
  ]);
2811
3038
  }
2812
3039
  }
@@ -2817,7 +3044,7 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2817
3044
  const existing = outputsByAssetId.get(asset.assetId);
2818
3045
  outputsByAssetId.set(asset.assetId, [
2819
3046
  ...existing ?? [],
2820
- chunkPJR63FTK_cjs.AssetOutput.create(outputIndex, asset.amount)
3047
+ chunkGVHUHTRH_cjs.AssetOutput.create(outputIndex, asset.amount)
2821
3048
  ]);
2822
3049
  }
2823
3050
  }
@@ -2826,11 +3053,11 @@ function createAssetPacket(assetInputs, receivers, changeReceiver) {
2826
3053
  for (const assetIdStr of allAssetIds) {
2827
3054
  const inputs = inputsByAssetId.get(assetIdStr);
2828
3055
  const outputs = outputsByAssetId.get(assetIdStr);
2829
- const assetId = chunkPJR63FTK_cjs.AssetId.fromString(assetIdStr);
2830
- const group = chunkPJR63FTK_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
3056
+ const assetId = chunkGVHUHTRH_cjs.AssetId.fromString(assetIdStr);
3057
+ const group = chunkGVHUHTRH_cjs.AssetGroup.create(assetId, null, inputs ?? [], outputs ?? [], []);
2831
3058
  groups.push(group);
2832
3059
  }
2833
- return chunkPJR63FTK_cjs.Packet.create(groups);
3060
+ return chunkGVHUHTRH_cjs.Packet.create(groups);
2834
3061
  }
2835
3062
  function selectCoinsWithAsset(coins, assetId, requiredAmount) {
2836
3063
  const coinsWithAsset = coins.filter((coin) => coin.assets?.some((a) => a.assetId === assetId));
@@ -2867,7 +3094,7 @@ function selectedCoinsToAssetInputs(selectedCoins) {
2867
3094
  }
2868
3095
  function toXOnlySignerHex(pubkeyHex) {
2869
3096
  const bytes = base.hex.decode(pubkeyHex);
2870
- if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunk6YUACVX4_cjs.toXOnly(bytes, "signer key"));
3097
+ if (bytes.length === 32 || bytes.length === 33) return base.hex.encode(chunkWIFL5QYZ_cjs.toXOnly(bytes, "signer key"));
2871
3098
  throw new Error(`invalid signer pubkey length: expected 32 or 33 bytes, got ${bytes.length}`);
2872
3099
  }
2873
3100
  function signerSetFromInfo(info) {
@@ -2914,13 +3141,13 @@ var toTimelock = (value) => ({
2914
3141
  var toSeconds = (t) => t.type === "seconds" ? t.value : t.value * NOMINAL_BLOCK_SECONDS;
2915
3142
  function assertTimelockInPolicy(timelock, policy, label, overrideOption) {
2916
3143
  if (policy.requireSeconds && timelock.type === "blocks") {
2917
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3144
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
2918
3145
  `${label} rejected: block-typed timelocks are not accepted (got ${timelock.value})`
2919
3146
  );
2920
3147
  }
2921
3148
  const seconds = toSeconds(timelock);
2922
3149
  if (seconds < policy.minSeconds) {
2923
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3150
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
2924
3151
  `${label} rejected: ${timelock.value} ${timelock.type} is below the ${policy.minSeconds}s floor; pass ${overrideOption}: ${seconds}n to Wallet.create to lower it`
2925
3152
  );
2926
3153
  }
@@ -2941,7 +3168,7 @@ function resolveBatchExpiryPolicy(network, overrides) {
2941
3168
  }
2942
3169
  function assertValidBatchExpiry(batchExpiry, policy) {
2943
3170
  if (policy.advertisedVtxoTreeExpiry !== void 0 && batchExpiry !== policy.advertisedVtxoTreeExpiry) {
2944
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3171
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
2945
3172
  `batch expiry rejected: ${batchExpiry} does not match the advertised vtxoTreeExpiry ${policy.advertisedVtxoTreeExpiry}`
2946
3173
  );
2947
3174
  }
@@ -2971,21 +3198,21 @@ function resolveCheckpointExitDelayPolicy(network, overrides) {
2971
3198
  function assertValidServerUnrollScript(checkpointTapscript, policy) {
2972
3199
  let script;
2973
3200
  try {
2974
- script = chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
3201
+ script = chunk5MLC2HU3_cjs.CSVMultisigTapscript.decode(base.hex.decode(checkpointTapscript));
2975
3202
  } catch (e) {
2976
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3203
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
2977
3204
  `checkpoint exit delay rejected: invalid checkpointTapscript from server (${e instanceof Error ? e.message : String(e)})`
2978
3205
  );
2979
3206
  }
2980
3207
  if (policy.advertisedForfeitPubkey !== void 0) {
2981
3208
  const { pubkeys } = script.params;
2982
3209
  if (pubkeys.length !== 1) {
2983
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3210
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
2984
3211
  `checkpoint exit delay rejected: checkpointTapscript must commit to exactly one pubkey, got ${pubkeys.length} [${pubkeys.map(base.hex.encode).join(", ")}]`
2985
3212
  );
2986
3213
  }
2987
3214
  if (!utils_js.equalBytes(pubkeys[0], policy.advertisedForfeitPubkey)) {
2988
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3215
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
2989
3216
  `checkpoint exit delay rejected: checkpointTapscript pubkey ${base.hex.encode(pubkeys[0])} does not match the advertised forfeitPubkey ${base.hex.encode(policy.advertisedForfeitPubkey)}`
2990
3217
  );
2991
3218
  }
@@ -3029,8 +3256,8 @@ function buildOffchainTx(inputs, outputs, serverUnrollScript) {
3029
3256
  function buildVirtualTx(inputs, outputs) {
3030
3257
  let lockTime = 0n;
3031
3258
  for (const input of inputs) {
3032
- const tapscript = chunkEJOFL5WH_cjs.decodeTapscript(chunkEJOFL5WH_cjs.scriptFromTapLeafScript(input.tapLeafScript));
3033
- if (chunkEJOFL5WH_cjs.CLTVMultisigTapscript.is(tapscript)) {
3259
+ const tapscript = chunk5MLC2HU3_cjs.decodeTapscript(chunk5MLC2HU3_cjs.scriptFromTapLeafScript(input.tapLeafScript));
3260
+ if (chunk5MLC2HU3_cjs.CLTVMultisigTapscript.is(tapscript)) {
3034
3261
  if (lockTime !== 0n) {
3035
3262
  if (isSeconds(lockTime) !== isSeconds(tapscript.params.absoluteTimelock)) {
3036
3263
  throw new Error("cannot mix seconds and blocks locktime");
@@ -3041,7 +3268,7 @@ function buildVirtualTx(inputs, outputs) {
3041
3268
  }
3042
3269
  }
3043
3270
  }
3044
- const tx = new chunkEJOFL5WH_cjs.Transaction({
3271
+ const tx = new chunk5MLC2HU3_cjs.Transaction({
3045
3272
  version: 3,
3046
3273
  lockTime: Number(lockTime)
3047
3274
  });
@@ -3051,12 +3278,12 @@ function buildVirtualTx(inputs, outputs) {
3051
3278
  index: input.vout,
3052
3279
  sequence: lockTime ? btcSigner.DEFAULT_SEQUENCE - 1 : void 0,
3053
3280
  witnessUtxo: {
3054
- script: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript,
3281
+ script: chunk5MLC2HU3_cjs.VtxoScript.decode(input.tapTree).pkScript,
3055
3282
  amount: BigInt(input.value)
3056
3283
  },
3057
3284
  tapLeafScript: [input.tapLeafScript]
3058
3285
  });
3059
- chunkEJOFL5WH_cjs.setArkPsbtField(tx, i, chunkEJOFL5WH_cjs.VtxoTaprootTree, input.tapTree);
3286
+ chunk5MLC2HU3_cjs.setArkPsbtField(tx, i, chunk5MLC2HU3_cjs.VtxoTaprootTree, input.tapTree);
3060
3287
  }
3061
3288
  for (const output of outputs) {
3062
3289
  tx.addOutput(output);
@@ -3065,8 +3292,8 @@ function buildVirtualTx(inputs, outputs) {
3065
3292
  return tx;
3066
3293
  }
3067
3294
  function buildCheckpointTx(vtxo, serverUnrollScript) {
3068
- const collaborativeClosure = chunkEJOFL5WH_cjs.decodeTapscript(chunkEJOFL5WH_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
3069
- const checkpointVtxoScript = new chunkEJOFL5WH_cjs.VtxoScript([
3295
+ const collaborativeClosure = chunk5MLC2HU3_cjs.decodeTapscript(chunk5MLC2HU3_cjs.scriptFromTapLeafScript(vtxo.tapLeafScript));
3296
+ const checkpointVtxoScript = new chunk5MLC2HU3_cjs.VtxoScript([
3070
3297
  serverUnrollScript.script,
3071
3298
  collaborativeClosure.script
3072
3299
  ]);
@@ -3142,7 +3369,7 @@ function verifyTapscriptSignatures(tx, inputIndex, requiredSigners, excludePubke
3142
3369
  const sighashType = signature.length === 65 ? signature[64] : btcSigner.SigHash.DEFAULT;
3143
3370
  const sig = signature.subarray(0, 64);
3144
3371
  if (!allowedSighashTypes.includes(sighashType)) {
3145
- const sighashName = chunkEJOFL5WH_cjs.formatSighash(sighashType);
3372
+ const sighashName = chunk5MLC2HU3_cjs.formatSighash(sighashType);
3146
3373
  throw new Error(
3147
3374
  `Unallowed sighash type ${sighashName} for input ${inputIndex}, pubkey ${pubKeyHex}.`
3148
3375
  );
@@ -3216,7 +3443,7 @@ function combineTapscriptSigs(signedTx, originalTx) {
3216
3443
  }
3217
3444
  function isValidArkAddress(address) {
3218
3445
  try {
3219
- chunkEJOFL5WH_cjs.ArkAddress.decode(address);
3446
+ chunk5MLC2HU3_cjs.ArkAddress.decode(address);
3220
3447
  return true;
3221
3448
  } catch (e) {
3222
3449
  return false;
@@ -3224,16 +3451,16 @@ function isValidArkAddress(address) {
3224
3451
  }
3225
3452
  function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, context) {
3226
3453
  if (serverCheckpointTxs.length !== expectedCheckpoints.length) {
3227
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3454
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3228
3455
  `${context} returned ${serverCheckpointTxs.length} checkpoints, expected ${expectedCheckpoints.length}`
3229
3456
  );
3230
3457
  }
3231
3458
  const byTxid = new Map(expectedCheckpoints.map((c) => [c.id, c]));
3232
3459
  return serverCheckpointTxs.map((encoded, index) => {
3233
- const server = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
3460
+ const server = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(encoded));
3234
3461
  const local = byTxid.get(server.id);
3235
3462
  if (!local) {
3236
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3463
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3237
3464
  `${context} checkpoint ${index} txid ${server.id} does not match any submitted checkpoint`
3238
3465
  );
3239
3466
  }
@@ -3243,14 +3470,14 @@ function matchServerCheckpoints(serverCheckpointTxs, expectedCheckpoints, contex
3243
3470
  }
3244
3471
  function assertSubmittedArkTxid(response, signedArkTx, context) {
3245
3472
  if (response.arkTxid !== signedArkTx.id) {
3246
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3473
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3247
3474
  `${context} returned ark txid ${response.arkTxid}, expected ${signedArkTx.id}`
3248
3475
  );
3249
3476
  }
3250
3477
  if (response.finalArkTx === void 0) return;
3251
- const finalTxid = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
3478
+ const finalTxid = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx)).id;
3252
3479
  if (finalTxid !== signedArkTx.id) {
3253
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3480
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3254
3481
  `${context} returned final ark tx ${finalTxid}, expected ${signedArkTx.id}`
3255
3482
  );
3256
3483
  }
@@ -3269,10 +3496,10 @@ function assertServerSignedLeaf(serverTx, localTx, inputIndex, serverPubkeyHex,
3269
3496
  [serverPubkeyHex],
3270
3497
  void 0,
3271
3498
  void 0,
3272
- payment_js.tapLeafHash(chunkEJOFL5WH_cjs.scriptFromTapLeafScript(leaf))
3499
+ payment_js.tapLeafHash(chunk5MLC2HU3_cjs.scriptFromTapLeafScript(leaf))
3273
3500
  );
3274
3501
  } catch (error) {
3275
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3502
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3276
3503
  `${context}: input ${inputIndex} is not signed by the server on the leaf being spent (${error instanceof Error ? error.message : String(error)})`
3277
3504
  );
3278
3505
  }
@@ -3281,20 +3508,20 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
3281
3508
  const byOutpoint = new Map(inputs.map((input) => [`${input.txid}:${input.vout}`, input]));
3282
3509
  for (const [index, checkpoint] of checkpoints.entries()) {
3283
3510
  if (checkpoint.inputsLength !== 1) {
3284
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3511
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3285
3512
  `${context}: checkpoint ${index} spends ${checkpoint.inputsLength} inputs, expected 1`
3286
3513
  );
3287
3514
  }
3288
3515
  const spent = checkpoint.getInput(0);
3289
3516
  if (!spent.txid || spent.index === void 0) {
3290
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3517
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3291
3518
  `${context}: checkpoint ${index} has no input outpoint`
3292
3519
  );
3293
3520
  }
3294
3521
  const outpoint = `${base.hex.encode(spent.txid)}:${spent.index}`;
3295
3522
  const input = byOutpoint.get(outpoint);
3296
3523
  if (!input) {
3297
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3524
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3298
3525
  `${context}: checkpoint ${index} spends ${outpoint}, which is not one of the requested virtual outputs`
3299
3526
  );
3300
3527
  }
@@ -3302,7 +3529,7 @@ function assertCheckpointsMatchInputs(checkpoints, inputs, unrollCandidates, con
3302
3529
  (unroll) => buildCheckpointTx(input, unroll).tx.id === checkpoint.id
3303
3530
  );
3304
3531
  if (!rebuilt) {
3305
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3532
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3306
3533
  `${context}: checkpoint ${index} txid ${checkpoint.id} differs from the checkpoint built locally for ${outpoint}`
3307
3534
  );
3308
3535
  }
@@ -3328,9 +3555,9 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
3328
3555
  const matched = matchServerCheckpoints(signedCheckpointTxs, offchainTx.checkpoints, "submitTx");
3329
3556
  matched.forEach(({ server }, index) => {
3330
3557
  try {
3331
- chunkEJOFL5WH_cjs.assertAllowedSighashTypes(server);
3558
+ chunk5MLC2HU3_cjs.assertAllowedSighashTypes(server);
3332
3559
  } catch (error) {
3333
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3560
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3334
3561
  `submitTx checkpoint ${index}: ${error instanceof Error ? error.message : String(error)}`
3335
3562
  );
3336
3563
  }
@@ -3338,12 +3565,12 @@ async function submitOffchainTx(provider, offchainTx, signer, hooks, options) {
3338
3565
  const verify = options?.verifyServerSignatures;
3339
3566
  if (verify) {
3340
3567
  if (response.finalArkTx === void 0) {
3341
- throw new chunkEJOFL5WH_cjs.ServerResponseMismatchError(
3568
+ throw new chunk5MLC2HU3_cjs.ServerResponseMismatchError(
3342
3569
  "submitTx: server returned no final ark tx to verify its signatures against"
3343
3570
  );
3344
3571
  }
3345
- const finalArkTx = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(response.finalArkTx));
3346
- const serverPubkeyHex = base.hex.encode(chunk6YUACVX4_cjs.toXOnly(verify.serverPubkey, "server key"));
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"));
3347
3574
  for (let i = 0; i < offchainTx.arkTx.inputsLength; i++) {
3348
3575
  assertServerSignedLeaf(
3349
3576
  finalArkTx,
@@ -3399,12 +3626,12 @@ function claimWithPreimageIdentity(identity, preimage) {
3399
3626
  return {
3400
3627
  ...identity,
3401
3628
  sign: async (tx, inputIndexes) => {
3402
- const signed = chunkEJOFL5WH_cjs.Transaction.fromPSBT(
3629
+ const signed = chunk5MLC2HU3_cjs.Transaction.fromPSBT(
3403
3630
  (await identity.sign(tx.clone(), inputIndexes)).toPSBT()
3404
3631
  );
3405
3632
  const indexes = inputIndexes ?? Array.from({ length: signed.inputsLength }, (_, i) => i);
3406
3633
  for (const index of indexes) {
3407
- chunkEJOFL5WH_cjs.setArkPsbtField(signed, index, chunkEJOFL5WH_cjs.ConditionWitness, [preimage]);
3634
+ chunk5MLC2HU3_cjs.setArkPsbtField(signed, index, chunk5MLC2HU3_cjs.ConditionWitness, [preimage]);
3408
3635
  }
3409
3636
  return signed;
3410
3637
  }
@@ -3596,7 +3823,7 @@ function extendCoinWithTapscript(boardingTapscript, utxo) {
3596
3823
  };
3597
3824
  }
3598
3825
  function deriveContractTapscripts(contract) {
3599
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
3826
+ const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type);
3600
3827
  if (!handler) {
3601
3828
  throw new Error(`No handler for contract type '${contract.type}'`);
3602
3829
  }
@@ -3667,7 +3894,7 @@ function getRandomId() {
3667
3894
  }
3668
3895
  function isValidArkAddress2(address) {
3669
3896
  try {
3670
- chunkEJOFL5WH_cjs.ArkAddress.decode(address);
3897
+ chunk5MLC2HU3_cjs.ArkAddress.decode(address);
3671
3898
  return true;
3672
3899
  } catch (e) {
3673
3900
  return false;
@@ -3695,7 +3922,7 @@ function assertRecipientArkAddress(encoded, address, context) {
3695
3922
  function assertTapTreeDerivesAddress(encoded, tapTree, address) {
3696
3923
  let derived;
3697
3924
  try {
3698
- derived = chunkEJOFL5WH_cjs.VtxoScript.decode(tapTree).pkScript;
3925
+ derived = chunk5MLC2HU3_cjs.VtxoScript.decode(tapTree).pkScript;
3699
3926
  } catch (e) {
3700
3927
  throw new Error(
3701
3928
  `Invalid tapTree for ${encoded}: ${e instanceof Error ? e.message : String(e)}`
@@ -3712,7 +3939,7 @@ function validateRecipients(recipients, dustAmount, context) {
3712
3939
  for (const recipient of recipients) {
3713
3940
  let address;
3714
3941
  try {
3715
- address = chunkEJOFL5WH_cjs.ArkAddress.decode(recipient.address);
3942
+ address = chunk5MLC2HU3_cjs.ArkAddress.decode(recipient.address);
3716
3943
  } catch (e) {
3717
3944
  throw new Error(`Invalid Arkade address: ${recipient.address}`);
3718
3945
  }
@@ -3737,7 +3964,7 @@ function validateRecipients(recipients, dustAmount, context) {
3737
3964
 
3738
3965
  // src/contracts/spendability.ts
3739
3966
  function isContractGenericallySpendable(contract) {
3740
- return chunk6YUACVX4_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
3967
+ return chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type)?.isGenericallySpendable?.(contract) === true;
3741
3968
  }
3742
3969
  function gatedContracts(contracts) {
3743
3970
  const gated = /* @__PURE__ */ new Map();
@@ -3750,7 +3977,7 @@ function gateExclusion(gated) {
3750
3977
  return (vtxo) => {
3751
3978
  const type = vtxo.script === void 0 ? void 0 : gated.get(vtxo.script);
3752
3979
  if (type === void 0) return void 0;
3753
- if (!chunk6YUACVX4_cjs.contractHandlers.has(type)) {
3980
+ if (!chunkWIFL5QYZ_cjs.contractHandlers.has(type)) {
3754
3981
  return `at ${vtxo.script} (contract type '${type}') has no handler registered in this build`;
3755
3982
  }
3756
3983
  return `at ${vtxo.script} (contract type '${type}') is not generically spendable`;
@@ -3786,7 +4013,7 @@ function selectPendingRecoveryOutpoints(contractsWithVtxos, signerSet, nowSecond
3786
4013
  continue;
3787
4014
  }
3788
4015
  for (const v of vtxos) {
3789
- if (!chunkEJOFL5WH_cjs.hasTerminalSpend(v) && !v.isSwept && !v.isUnrolled) {
4016
+ if (!chunk5MLC2HU3_cjs.hasTerminalSpend(v) && !v.isSwept && !v.isUnrolled) {
3790
4017
  out.add(`${v.txid}:${v.vout}`);
3791
4018
  }
3792
4019
  }
@@ -3821,10 +4048,10 @@ function byValueDescending(vtxos) {
3821
4048
  return [...vtxos].sort((a, b) => b.value - a.value);
3822
4049
  }
3823
4050
  async function fetchTimeHeight(wallet) {
3824
- return chunkEJOFL5WH_cjs.resolveTimeHeight(wallet.onchainProvider);
4051
+ return chunk5MLC2HU3_cjs.resolveTimeHeight(wallet.onchainProvider);
3825
4052
  }
3826
4053
  function canMigrateBySend(vtxo, now) {
3827
- if (!chunkEJOFL5WH_cjs.canSpendOffchain(vtxo, now)) return false;
4054
+ if (!chunk5MLC2HU3_cjs.canSpendOffchain(vtxo, now)) return false;
3828
4055
  return vtxo.expiresAt !== void 0 || vtxo.expiresAtHeight !== void 0;
3829
4056
  }
3830
4057
  function byExpiryAscending(vtxos, now) {
@@ -3832,7 +4059,7 @@ function byExpiryAscending(vtxos, now) {
3832
4059
  if (vtxo.isSwept) return -Infinity;
3833
4060
  if (vtxo.expiresAt !== void 0) return vtxo.expiresAt.getTime();
3834
4061
  if (vtxo.expiresAtHeight !== void 0) {
3835
- return chunkEJOFL5WH_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
4062
+ return chunk5MLC2HU3_cjs.isPastExpiry(vtxo, now) ? -Infinity : Infinity;
3836
4063
  }
3837
4064
  return Infinity;
3838
4065
  };
@@ -3859,7 +4086,7 @@ function priceSettlementInputs(vtxos, estimator) {
3859
4086
  const payable = [];
3860
4087
  const net = /* @__PURE__ */ new Map();
3861
4088
  for (const vtxo of vtxos) {
3862
- const inputFee = estimator.evalOffchainInput(chunkEJOFL5WH_cjs.toOffchainInputFeeParams(vtxo));
4089
+ const inputFee = estimator.evalOffchainInput(chunk5MLC2HU3_cjs.toOffchainInputFeeParams(vtxo));
3863
4090
  if (inputFee.satoshis >= vtxo.value) {
3864
4091
  continue;
3865
4092
  }
@@ -3885,7 +4112,7 @@ function deductOffchainOutputFee(subtotal, estimator, arkAddress) {
3885
4112
  }
3886
4113
  const outputFee = estimator.evalOffchainOutput({
3887
4114
  amount: subtotal,
3888
- script: base.hex.encode(chunkEJOFL5WH_cjs.ArkAddress.decode(arkAddress).pkScript)
4115
+ script: base.hex.encode(chunk5MLC2HU3_cjs.ArkAddress.decode(arkAddress).pkScript)
3889
4116
  });
3890
4117
  return subtotal - BigInt(outputFee.satoshis);
3891
4118
  }
@@ -3903,10 +4130,10 @@ var DEFAULT_SETTLEMENT_CONFIG = {
3903
4130
  };
3904
4131
  function getRecoverableVtxos(vtxos, dustAmount, now) {
3905
4132
  return vtxos.filter((vtxo) => {
3906
- if (chunkEJOFL5WH_cjs.canRecoverOnchain(vtxo, now)) {
4133
+ if (chunk5MLC2HU3_cjs.canRecoverOnchain(vtxo, now)) {
3907
4134
  return true;
3908
4135
  }
3909
- if (chunkEJOFL5WH_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
4136
+ if (chunk5MLC2HU3_cjs.canSpendOffchain(vtxo, now) && vtxo.isPreconfirmed && isSubdust(vtxo, dustAmount)) {
3910
4137
  return true;
3911
4138
  }
3912
4139
  return false;
@@ -3938,7 +4165,7 @@ function getRecoverableWithSubdust(vtxos, dustAmount, now) {
3938
4165
  function isVtxoExpiringSoon(vtxo, thresholdMs) {
3939
4166
  if (vtxo.isUnrolled) return false;
3940
4167
  const realThresholdMs = thresholdMs <= 100 ? DEFAULT_THRESHOLD_MS : thresholdMs;
3941
- const expiresAt = chunkEJOFL5WH_cjs.normalizeVtxo(vtxo).expiresAt;
4168
+ const expiresAt = chunk5MLC2HU3_cjs.normalizeVtxo(vtxo).expiresAt;
3942
4169
  if (expiresAt === void 0) return false;
3943
4170
  const now = Date.now();
3944
4171
  const batchExpiry = expiresAt.getTime();
@@ -3949,7 +4176,7 @@ function getExpiringAndRecoverableVtxos(vtxos, thresholdMs, dustAmount, now) {
3949
4176
  return vtxos.filter(
3950
4177
  // The leading exclusion covers the `isSubdust` arm too, which is a value
3951
4178
  // property and would otherwise re-admit an exited coin on its own.
3952
- (vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) || chunkEJOFL5WH_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount))
4179
+ (vtxo) => !vtxo.isUnrolled && (isVtxoExpiringSoon(vtxo, thresholdMs) || chunk5MLC2HU3_cjs.canRecoverOnchain(vtxo, now) || isSubdust(vtxo, dustAmount))
3953
4180
  );
3954
4181
  }
3955
4182
  function isMigrationCapable(wallet) {
@@ -4548,11 +4775,11 @@ var VtxoManager = class _VtxoManager {
4548
4775
  `Sweep not economical: output ${outputAmount} sats after ${fee} sats fee is below dust (${dustAmount} sats)`
4549
4776
  );
4550
4777
  }
4551
- const tx = new chunkEJOFL5WH_cjs.Transaction();
4778
+ const tx = new chunk5MLC2HU3_cjs.Transaction();
4552
4779
  for (const utxo of expiredUtxos) {
4553
- const utxoScript = chunkEJOFL5WH_cjs.VtxoScript.decode(utxo.tapTree);
4780
+ const utxoScript = chunk5MLC2HU3_cjs.VtxoScript.decode(utxo.tapTree);
4554
4781
  const utxoExitLeaf = utxoScript.leaves.find(
4555
- (leaf) => chunkEJOFL5WH_cjs.CSVMultisigTapscript.isScriptValid(chunkEJOFL5WH_cjs.scriptFromTapLeafScript(leaf)) === true
4782
+ (leaf) => chunk5MLC2HU3_cjs.CSVMultisigTapscript.isScriptValid(chunk5MLC2HU3_cjs.scriptFromTapLeafScript(leaf)) === true
4556
4783
  );
4557
4784
  if (!utxoExitLeaf) {
4558
4785
  throw new Error(
@@ -4567,7 +4794,7 @@ var VtxoManager = class _VtxoManager {
4567
4794
  amount: BigInt(utxo.value)
4568
4795
  },
4569
4796
  tapLeafScript: [utxoExitLeaf],
4570
- sequence: chunkEJOFL5WH_cjs.getSequence(utxoExitLeaf)
4797
+ sequence: chunk5MLC2HU3_cjs.getSequence(utxoExitLeaf)
4571
4798
  });
4572
4799
  }
4573
4800
  tx.addOutputAddress(boardingAddress, outputAmount, this.getNetwork());
@@ -4810,8 +5037,8 @@ var VtxoManager = class _VtxoManager {
4810
5037
  const cls = classifyAgainstSignerSet(serverPubKey, signerSet, nowSeconds);
4811
5038
  if (cls.status === "CURRENT") continue;
4812
5039
  const live = vtxos.filter((v) => !v.isUnrolled);
4813
- const recoverable = live.filter((v) => v.isSwept && !chunkEJOFL5WH_cjs.hasTerminalSpend(v));
4814
- const spendable = live.filter((v) => !chunkEJOFL5WH_cjs.hasTerminalSpend(v) && !v.isSwept);
5040
+ const recoverable = live.filter((v) => v.isSwept && !chunk5MLC2HU3_cjs.hasTerminalSpend(v));
5041
+ const spendable = live.filter((v) => !chunk5MLC2HU3_cjs.hasTerminalSpend(v) && !v.isSwept);
4815
5042
  const value = spendable.reduce((sum, v) => sum + v.value, 0);
4816
5043
  let recoverableCount = 0;
4817
5044
  let recoverableValue = 0;
@@ -4824,7 +5051,7 @@ var VtxoManager = class _VtxoManager {
4824
5051
  awaitingSweepCount = spendable.length;
4825
5052
  awaitingSweepValue = value;
4826
5053
  for (const v of spendable) {
4827
- const exp = chunkEJOFL5WH_cjs.toBatchExpiry(v);
5054
+ const exp = chunk5MLC2HU3_cjs.toBatchExpiry(v);
4828
5055
  if (exp !== void 0 && (nextSweepEta === void 0 || exp < nextSweepEta)) {
4829
5056
  nextSweepEta = exp;
4830
5057
  }
@@ -5085,7 +5312,7 @@ var VtxoManager = class _VtxoManager {
5085
5312
  /** Decodes the boarding tapscript exit path to extract the CSV timelock. */
5086
5313
  getBoardingTimelock() {
5087
5314
  const wallet = this.getSweepWallet();
5088
- const exitScript = chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(
5315
+ const exitScript = chunk5MLC2HU3_cjs.CSVMultisigTapscript.decode(
5089
5316
  base.hex.decode(wallet.boardingTapscript.exitScript)
5090
5317
  );
5091
5318
  return exitScript.params.timelock;
@@ -5216,8 +5443,8 @@ var VtxoManager = class _VtxoManager {
5216
5443
  * or doesn't carry the metadata.
5217
5444
  */
5218
5445
  extractSpentOutpoint(error) {
5219
- const ark = chunkEJOFL5WH_cjs.maybeArkError(error);
5220
- if (!chunkEJOFL5WH_cjs.isArkError(ark, chunkEJOFL5WH_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
5446
+ const ark = chunk5MLC2HU3_cjs.maybeArkError(error);
5447
+ if (!chunk5MLC2HU3_cjs.isArkError(ark, chunk5MLC2HU3_cjs.ArkErrorName.VTXO_ALREADY_SPENT)) return void 0;
5221
5448
  const raw = ark.metadata?.vtxo_outpoint;
5222
5449
  if (typeof raw !== "string") return void 0;
5223
5450
  const [txid, voutStr] = raw.split(":");
@@ -5407,7 +5634,7 @@ var VtxoManager = class _VtxoManager {
5407
5634
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
5408
5635
  break;
5409
5636
  }
5410
- const inputFee = estimator.evalOffchainInput(chunkEJOFL5WH_cjs.toOffchainInputFeeParams(v));
5637
+ const inputFee = estimator.evalOffchainInput(chunk5MLC2HU3_cjs.toOffchainInputFeeParams(v));
5411
5638
  if (inputFee.satoshis >= v.value) {
5412
5639
  continue;
5413
5640
  }
@@ -5427,7 +5654,7 @@ var VtxoManager = class _VtxoManager {
5427
5654
  const arkAddress = await this.wallet.getAddress();
5428
5655
  const outputFee = estimator.evalOffchainOutput({
5429
5656
  amount: totalAmount,
5430
- script: base.hex.encode(chunkEJOFL5WH_cjs.ArkAddress.decode(arkAddress).pkScript)
5657
+ script: base.hex.encode(chunk5MLC2HU3_cjs.ArkAddress.decode(arkAddress).pkScript)
5431
5658
  });
5432
5659
  totalAmount -= BigInt(outputFee.satoshis);
5433
5660
  if (totalAmount < dustAmount) return;
@@ -5507,7 +5734,7 @@ var ArkNote = class _ArkNote {
5507
5734
  this.value = value;
5508
5735
  this.HRP = HRP;
5509
5736
  const preimageHash = utils_js.sha256(this.preimage);
5510
- this.vtxoScript = new chunkEJOFL5WH_cjs.VtxoScript([noteTapscript(preimageHash)]);
5737
+ this.vtxoScript = new chunk5MLC2HU3_cjs.VtxoScript([noteTapscript(preimageHash)]);
5511
5738
  const leaf = this.vtxoScript.leaves[0];
5512
5739
  this.txid = base.hex.encode(new Uint8Array(preimageHash).reverse());
5513
5740
  this.tapTree = this.vtxoScript.encode();
@@ -5674,7 +5901,7 @@ var ArkadeCash = class _ArkadeCash {
5674
5901
  const privateKey = data.slice(1, 33);
5675
5902
  const serverPubKey = data.slice(33, 65);
5676
5903
  const sequence = new DataView(data.buffer, data.byteOffset + 65, 4).getUint32(0, false);
5677
- const csvTimelock = chunkEJOFL5WH_cjs.sequenceToTimelock(sequence);
5904
+ const csvTimelock = chunk5MLC2HU3_cjs.sequenceToTimelock(sequence);
5678
5905
  return new _ArkadeCash(privateKey, serverPubKey, csvTimelock, decoded.prefix);
5679
5906
  }
5680
5907
  toString() {
@@ -5682,7 +5909,7 @@ var ArkadeCash = class _ArkadeCash {
5682
5909
  data[0] = _ArkadeCash.Version;
5683
5910
  data.set(this._privateKey, 1);
5684
5911
  data.set(this._serverPubKey, 33);
5685
- const sequence = chunkEJOFL5WH_cjs.timelockToSequence(this.csvTimelock);
5912
+ const sequence = chunk5MLC2HU3_cjs.timelockToSequence(this.csvTimelock);
5686
5913
  new DataView(data.buffer, data.byteOffset + 65, 4).setUint32(0, sequence, false);
5687
5914
  const words = base.bech32m.toWords(data);
5688
5915
  return base.bech32m.encode(this.hrp, words, 1023);
@@ -5691,7 +5918,7 @@ var ArkadeCash = class _ArkadeCash {
5691
5918
  return SingleKey.fromPrivateKey(this._privateKey);
5692
5919
  }
5693
5920
  get vtxoScript() {
5694
- return new chunk6YUACVX4_cjs.DefaultVtxo.Script({
5921
+ return new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({
5695
5922
  pubKey: this._publicKey,
5696
5923
  serverPubKey: this._serverPubKey,
5697
5924
  csvTimelock: this.csvTimelock
@@ -5952,7 +6179,7 @@ async function captureExitBranch(params) {
5952
6179
  const nonCommitment = ordered.filter((c) => chainTxTypeToChainedExit(c.type) !== 1 /* Commitment */).map((c) => c.txid);
5953
6180
  if (nonCommitment.length > 0) {
5954
6181
  for (const psbt of await resolver.getVirtualTxs(nonCommitment)) {
5955
- psbtByTxid.set(chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
6182
+ psbtByTxid.set(chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
5956
6183
  }
5957
6184
  }
5958
6185
  }
@@ -5995,10 +6222,10 @@ var IndexerExitDataSource = class {
5995
6222
  while (hasMore) {
5996
6223
  const { chain: page, page: meta } = await this.indexer.getVtxoChain(
5997
6224
  { txid: vtxo.txid, vout: vtxo.vout },
5998
- { pageIndex, pageSize: chunkEJOFL5WH_cjs.DEFAULT_PAGE_SIZE }
6225
+ { pageIndex, pageSize: chunk5MLC2HU3_cjs.DEFAULT_PAGE_SIZE }
5999
6226
  );
6000
6227
  chain.push(...page);
6001
- hasMore = meta ? page.length === chunkEJOFL5WH_cjs.DEFAULT_PAGE_SIZE : false;
6228
+ hasMore = meta ? page.length === chunk5MLC2HU3_cjs.DEFAULT_PAGE_SIZE : false;
6002
6229
  pageIndex++;
6003
6230
  }
6004
6231
  return chain;
@@ -6010,12 +6237,12 @@ var IndexerExitDataSource = class {
6010
6237
  while (hasMore) {
6011
6238
  const { txs, page } = await this.indexer.getVirtualTxs(txids, {
6012
6239
  pageIndex,
6013
- pageSize: chunkEJOFL5WH_cjs.DEFAULT_PAGE_SIZE
6240
+ pageSize: chunk5MLC2HU3_cjs.DEFAULT_PAGE_SIZE
6014
6241
  });
6015
6242
  for (const psbt of txs) {
6016
- out.set(chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
6243
+ out.set(chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
6017
6244
  }
6018
- hasMore = page ? txs.length === chunkEJOFL5WH_cjs.DEFAULT_PAGE_SIZE : false;
6245
+ hasMore = page ? txs.length === chunk5MLC2HU3_cjs.DEFAULT_PAGE_SIZE : false;
6019
6246
  pageIndex++;
6020
6247
  }
6021
6248
  return out;
@@ -6036,7 +6263,7 @@ function chainedTxTypeToChainTxType(t) {
6036
6263
  }
6037
6264
  }
6038
6265
  function psbtInputTxids(psbtBase64) {
6039
- const tx = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
6266
+ const tx = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
6040
6267
  const ids = [];
6041
6268
  for (let i = 0; i < tx.inputsLength; i++) {
6042
6269
  const txid = tx.getInput(i).txid;
@@ -6395,10 +6622,10 @@ async function resolveArkInfo(arkProvider, walletRepository) {
6395
6622
  try {
6396
6623
  info = await arkProvider.getInfo();
6397
6624
  } catch (err) {
6398
- if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
6625
+ if (!chunk5MLC2HU3_cjs.isRetryableProviderError(err)) throw err;
6399
6626
  const snapshot = await loadArkInfoSnapshot(walletRepository);
6400
6627
  if (!snapshot) {
6401
- throw new chunkEJOFL5WH_cjs.ProviderUnavailableError(
6628
+ throw new chunk5MLC2HU3_cjs.ProviderUnavailableError(
6402
6629
  "Arkade server info is unavailable and no cached snapshot exists",
6403
6630
  { cause: err }
6404
6631
  );
@@ -6788,7 +7015,7 @@ function collectArkTxidsNeedingCreatedAt(vtxos) {
6788
7015
  return [...txids];
6789
7016
  }
6790
7017
  async function buildTransactionHistory(vtxos, allBoardingTxs, commitmentsToIgnore, resolveTxCreatedAt) {
6791
- const fromOldestVtxo = vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
7018
+ const fromOldestVtxo = vtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo).sort((a, b) => a.createdAt.getTime() - b.createdAt.getTime());
6792
7019
  const txidsNeedingCreatedAt = resolveTxCreatedAt ? collectArkTxidsNeedingCreatedAt(fromOldestVtxo) : [];
6793
7020
  const resolvedCreatedAt = resolveTxCreatedAt && txidsNeedingCreatedAt.length > 0 ? await resolveTxCreatedAt(txidsNeedingCreatedAt) : /* @__PURE__ */ new Map();
6794
7021
  const unmatchedSettledBoardingTxs = allBoardingTxs.filter(isSettledBoardingReceive).sort((a, b) => a.createdAt - b.createdAt);
@@ -6952,7 +7179,7 @@ var AssetManager = class extends ReadonlyAssetManager {
6952
7179
  const virtualCoins = await this.wallet.getSpendableVtxos({
6953
7180
  withRecoverable: false
6954
7181
  });
6955
- const controlAssetRef = params.controlAssetId ? chunkPJR63FTK_cjs.AssetRef.fromId(chunkPJR63FTK_cjs.AssetId.fromString(params.controlAssetId)) : null;
7182
+ const controlAssetRef = params.controlAssetId ? chunkGVHUHTRH_cjs.AssetRef.fromId(chunkGVHUHTRH_cjs.AssetId.fromString(params.controlAssetId)) : null;
6956
7183
  const coinSelection = selectVirtualCoins(virtualCoins, Number(this.wallet.dustAmount));
6957
7184
  let totalBtcSelected = 0n;
6958
7185
  const assetChanges = /* @__PURE__ */ new Map();
@@ -6965,8 +7192,8 @@ var AssetManager = class extends ReadonlyAssetManager {
6965
7192
  }
6966
7193
  }
6967
7194
  const groups = [];
6968
- const issuedAssetOutput = chunkPJR63FTK_cjs.AssetOutput.create(0, params.amount);
6969
- const issuedAssetGroup = chunkPJR63FTK_cjs.AssetGroup.create(
7195
+ const issuedAssetOutput = chunkGVHUHTRH_cjs.AssetOutput.create(0, params.amount);
7196
+ const issuedAssetGroup = chunkGVHUHTRH_cjs.AssetGroup.create(
6970
7197
  null,
6971
7198
  controlAssetRef,
6972
7199
  [],
@@ -6981,28 +7208,28 @@ var AssetManager = class extends ReadonlyAssetManager {
6981
7208
  for (const [inputIndex, assets] of assetInputs) {
6982
7209
  for (const asset of assets) {
6983
7210
  if (asset.assetId !== assetId) continue;
6984
- changeInputs.push(chunkPJR63FTK_cjs.AssetInput.create(inputIndex, asset.amount));
7211
+ changeInputs.push(chunkGVHUHTRH_cjs.AssetInput.create(inputIndex, asset.amount));
6985
7212
  }
6986
7213
  }
6987
7214
  groups.push(
6988
- chunkPJR63FTK_cjs.AssetGroup.create(
6989
- chunkPJR63FTK_cjs.AssetId.fromString(assetId),
7215
+ chunkGVHUHTRH_cjs.AssetGroup.create(
7216
+ chunkGVHUHTRH_cjs.AssetId.fromString(assetId),
6990
7217
  null,
6991
7218
  changeInputs,
6992
- [chunkPJR63FTK_cjs.AssetOutput.create(0, amount)],
7219
+ [chunkGVHUHTRH_cjs.AssetOutput.create(0, amount)],
6993
7220
  []
6994
7221
  )
6995
7222
  );
6996
7223
  }
6997
7224
  }
6998
7225
  const address = await this.wallet.getAddress();
6999
- const outputAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(address);
7226
+ const outputAddress = chunk5MLC2HU3_cjs.ArkAddress.decode(address);
7000
7227
  const outputs = [
7001
7228
  {
7002
7229
  script: outputAddress.pkScript,
7003
7230
  amount: BigInt(totalBtcSelected)
7004
7231
  },
7005
- Extension.create([chunkPJR63FTK_cjs.Packet.create(groups)]).txOut()
7232
+ Extension.create([chunkGVHUHTRH_cjs.Packet.create(groups)]).txOut()
7006
7233
  ];
7007
7234
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(
7008
7235
  coinSelection.inputs,
@@ -7010,7 +7237,7 @@ var AssetManager = class extends ReadonlyAssetManager {
7010
7237
  );
7011
7238
  return {
7012
7239
  arkTxId: arkTxid,
7013
- assetId: chunkPJR63FTK_cjs.AssetId.create(arkTxid, 0).toString()
7240
+ assetId: chunkGVHUHTRH_cjs.AssetId.create(arkTxid, 0).toString()
7014
7241
  };
7015
7242
  }
7016
7243
  /**
@@ -7082,16 +7309,16 @@ var AssetManager = class extends ReadonlyAssetManager {
7082
7309
  for (const [inputIndex, assets] of assetInputs) {
7083
7310
  for (const asset of assets) {
7084
7311
  if (asset.assetId !== params.assetId) continue;
7085
- reissueInputs.push(chunkPJR63FTK_cjs.AssetInput.create(inputIndex, asset.amount));
7312
+ reissueInputs.push(chunkGVHUHTRH_cjs.AssetInput.create(inputIndex, asset.amount));
7086
7313
  }
7087
7314
  }
7088
7315
  const totalAssetAmount = assetToReissueAmount + params.amount;
7089
- const reissueAssetIdObj = chunkPJR63FTK_cjs.AssetId.fromString(params.assetId);
7090
- const reissueAssetGroup = chunkPJR63FTK_cjs.AssetGroup.create(
7316
+ const reissueAssetIdObj = chunkGVHUHTRH_cjs.AssetId.fromString(params.assetId);
7317
+ const reissueAssetGroup = chunkGVHUHTRH_cjs.AssetGroup.create(
7091
7318
  reissueAssetIdObj,
7092
7319
  null,
7093
7320
  reissueInputs,
7094
- [chunkPJR63FTK_cjs.AssetOutput.create(0, totalAssetAmount)],
7321
+ [chunkGVHUHTRH_cjs.AssetOutput.create(0, totalAssetAmount)],
7095
7322
  []
7096
7323
  );
7097
7324
  const groups = [reissueAssetGroup];
@@ -7100,27 +7327,27 @@ var AssetManager = class extends ReadonlyAssetManager {
7100
7327
  for (const [inputIndex, assets] of assetInputs) {
7101
7328
  for (const asset of assets) {
7102
7329
  if (asset.assetId !== assetId) continue;
7103
- changeInputs.push(chunkPJR63FTK_cjs.AssetInput.create(inputIndex, asset.amount));
7330
+ changeInputs.push(chunkGVHUHTRH_cjs.AssetInput.create(inputIndex, asset.amount));
7104
7331
  }
7105
7332
  }
7106
7333
  groups.push(
7107
- chunkPJR63FTK_cjs.AssetGroup.create(
7108
- chunkPJR63FTK_cjs.AssetId.fromString(assetId),
7334
+ chunkGVHUHTRH_cjs.AssetGroup.create(
7335
+ chunkGVHUHTRH_cjs.AssetId.fromString(assetId),
7109
7336
  null,
7110
7337
  changeInputs,
7111
- [chunkPJR63FTK_cjs.AssetOutput.create(0, amount)],
7338
+ [chunkGVHUHTRH_cjs.AssetOutput.create(0, amount)],
7112
7339
  []
7113
7340
  )
7114
7341
  );
7115
7342
  }
7116
7343
  const address = await this.wallet.getAddress();
7117
- const outputAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(address);
7344
+ const outputAddress = chunk5MLC2HU3_cjs.ArkAddress.decode(address);
7118
7345
  const outputs = [
7119
7346
  {
7120
7347
  script: outputAddress.pkScript,
7121
7348
  amount: BigInt(totalBtcSelected)
7122
7349
  },
7123
- Extension.create([chunkPJR63FTK_cjs.Packet.create(groups)]).txOut()
7350
+ Extension.create([chunkGVHUHTRH_cjs.Packet.create(groups)]).txOut()
7124
7351
  ];
7125
7352
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
7126
7353
  return arkTxid;
@@ -7187,27 +7414,27 @@ var AssetManager = class extends ReadonlyAssetManager {
7187
7414
  for (const [inputIndex, assets] of assetInputs) {
7188
7415
  for (const asset of assets) {
7189
7416
  if (asset.assetId !== assetId) continue;
7190
- changeInputs.push(chunkPJR63FTK_cjs.AssetInput.create(inputIndex, asset.amount));
7417
+ changeInputs.push(chunkGVHUHTRH_cjs.AssetInput.create(inputIndex, asset.amount));
7191
7418
  }
7192
7419
  }
7193
7420
  groups.push(
7194
- chunkPJR63FTK_cjs.AssetGroup.create(
7195
- chunkPJR63FTK_cjs.AssetId.fromString(assetId),
7421
+ chunkGVHUHTRH_cjs.AssetGroup.create(
7422
+ chunkGVHUHTRH_cjs.AssetId.fromString(assetId),
7196
7423
  null,
7197
7424
  changeInputs,
7198
- amount > 0n ? [chunkPJR63FTK_cjs.AssetOutput.create(0, amount)] : [],
7425
+ amount > 0n ? [chunkGVHUHTRH_cjs.AssetOutput.create(0, amount)] : [],
7199
7426
  []
7200
7427
  )
7201
7428
  );
7202
7429
  }
7203
7430
  const address = await this.wallet.getAddress();
7204
- const outputAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(address);
7431
+ const outputAddress = chunk5MLC2HU3_cjs.ArkAddress.decode(address);
7205
7432
  const outputs = [
7206
7433
  {
7207
7434
  script: outputAddress.pkScript,
7208
7435
  amount: BigInt(totalBtcSelected)
7209
7436
  },
7210
- Extension.create([chunkPJR63FTK_cjs.Packet.create(groups)]).txOut()
7437
+ Extension.create([chunkGVHUHTRH_cjs.Packet.create(groups)]).txOut()
7211
7438
  ];
7212
7439
  const { arkTxid } = await this.wallet.buildAndSubmitOffchainTx(selectedCoins, outputs);
7213
7440
  return arkTxid;
@@ -7232,7 +7459,7 @@ function castMetadata(metadata) {
7232
7459
  } else {
7233
7460
  throw new Error("Invalid metadata value type");
7234
7461
  }
7235
- md.push(chunkPJR63FTK_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
7462
+ md.push(chunkGVHUHTRH_cjs.Metadata.create(textEncoder.encode(key), valueBytes));
7236
7463
  }
7237
7464
  return md;
7238
7465
  }
@@ -7253,10 +7480,10 @@ var DelegateManagerImpl = class {
7253
7480
  if (vtxos.length === 0) {
7254
7481
  return { delegated: [], failed: [] };
7255
7482
  }
7256
- const destinationScript = chunkEJOFL5WH_cjs.ArkAddress.decode(destination).pkScript;
7483
+ const destinationScript = chunk5MLC2HU3_cjs.ArkAddress.decode(destination).pkScript;
7257
7484
  const arkInfo = await this.arkInfoProvider.getInfo();
7258
7485
  const delegateInfo = await this.delegateProvider.getDelegateInfo();
7259
- const eligible = vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo).filter(
7486
+ const eligible = vtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo).filter(
7260
7487
  (v) => isAnnotated(v) && findDelegateTapLeaf(v, delegateInfo.pubkey) !== void 0
7261
7488
  );
7262
7489
  if (eligible.length === 0) {
@@ -7285,11 +7512,11 @@ var DelegateManagerImpl = class {
7285
7512
  const groupByExpiry = /* @__PURE__ */ new Map();
7286
7513
  let recoverableVtxos = [];
7287
7514
  for (const vtxo of eligible) {
7288
- if (chunkEJOFL5WH_cjs.canRecoverOnchain(vtxo, now)) {
7515
+ if (chunk5MLC2HU3_cjs.canRecoverOnchain(vtxo, now)) {
7289
7516
  recoverableVtxos.push(vtxo);
7290
7517
  continue;
7291
7518
  }
7292
- const expiry = chunkEJOFL5WH_cjs.toBatchExpiry(vtxo);
7519
+ const expiry = chunk5MLC2HU3_cjs.toBatchExpiry(vtxo);
7293
7520
  if (!expiry) continue;
7294
7521
  const dayKey = getDayTimestamp(expiry);
7295
7522
  groupByExpiry.set(dayKey, [...groupByExpiry.get(dayKey) ?? [], vtxo]);
@@ -7354,7 +7581,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7354
7581
  }
7355
7582
  if (!delegateAt) {
7356
7583
  const now = { timestamp: /* @__PURE__ */ new Date() };
7357
- const expiryTimestamp = vtxos.filter((coin) => !chunkEJOFL5WH_cjs.canRecoverOnchain(coin, now) && chunkEJOFL5WH_cjs.toBatchExpiry(coin)).reduce((min, coin) => Math.min(min, chunkEJOFL5WH_cjs.toBatchExpiry(coin)), Number.MAX_SAFE_INTEGER);
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);
7358
7585
  if (!expiryTimestamp || expiryTimestamp === Number.MAX_SAFE_INTEGER) {
7359
7586
  delegateAt = new Date(Date.now() + 1 * 60 * 1e3);
7360
7587
  } else {
@@ -7383,7 +7610,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7383
7610
  let amount = 0n;
7384
7611
  for (const coin of vtxos) {
7385
7612
  const inputFee = estimator.evalOffchainInput({
7386
- ...chunkEJOFL5WH_cjs.toOffchainInputFeeParams(coin),
7613
+ ...chunk5MLC2HU3_cjs.toOffchainInputFeeParams(coin),
7387
7614
  type: "vtxo"
7388
7615
  });
7389
7616
  if (inputFee.value >= coin.value) {
@@ -7397,7 +7624,7 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7397
7624
  const delegateFee = BigInt(Number(fee));
7398
7625
  if (delegateFee > 0n) {
7399
7626
  outputs.push({
7400
- script: chunkEJOFL5WH_cjs.ArkAddress.decode(delegateAddress).pkScript,
7627
+ script: chunk5MLC2HU3_cjs.ArkAddress.decode(delegateAddress).pkScript,
7401
7628
  amount: delegateFee
7402
7629
  });
7403
7630
  }
@@ -7430,10 +7657,10 @@ async function delegate(identity, delegateProvider, arkInfo, delegateInfo, vtxos
7430
7657
  destinationScript
7431
7658
  );
7432
7659
  const forfeitOutputScript = btcSigner.OutScript.encode(
7433
- btcSigner.Address(chunkEJOFL5WH_cjs.getNetwork(network)).decode(forfeitAddress)
7660
+ btcSigner.Address(chunk5MLC2HU3_cjs.getNetwork(network)).decode(forfeitAddress)
7434
7661
  );
7435
7662
  const forfeits = await Promise.all(
7436
- vtxos.filter((v) => !chunkEJOFL5WH_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
7663
+ vtxos.filter((v) => !chunk5MLC2HU3_cjs.canRecoverOnchain(v, { timestamp: /* @__PURE__ */ new Date() })).map(async (coin) => {
7437
7664
  const forfeit = await makeDelegateForfeitTx(
7438
7665
  coin,
7439
7666
  dust,
@@ -7458,7 +7685,7 @@ async function makeDelegateForfeitTx(input, connectorAmount, delegatePubkey, for
7458
7685
  index: input.vout,
7459
7686
  witnessUtxo: {
7460
7687
  amount: BigInt(input.value),
7461
- script: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript
7688
+ script: chunk5MLC2HU3_cjs.VtxoScript.decode(input.tapTree).pkScript
7462
7689
  },
7463
7690
  sighashType: btcSigner.SigHash.ALL_ANYONECANPAY,
7464
7691
  tapLeafScript: [delegateTapLeaf]
@@ -7516,7 +7743,7 @@ async function makeSignedDelegateIntent(identity, coins, outputs, onchainOutputs
7516
7743
  expire_at: 0,
7517
7744
  cosigners_public_keys: cosignerPubKeys
7518
7745
  };
7519
- const proof = chunkEJOFL5WH_cjs.Intent.create(message, coins, outputs);
7746
+ const proof = chunk5MLC2HU3_cjs.Intent.create(message, coins, outputs);
7520
7747
  const signedProof = await identity.sign(proof);
7521
7748
  return {
7522
7749
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -7534,10 +7761,10 @@ function getDayTimestamp(timestamp) {
7534
7761
  function findDelegateTapLeaf(vtxo, delegatePubkey) {
7535
7762
  if (!vtxo.tapTree) return void 0;
7536
7763
  const pk = delegatePubkey.length === 66 ? delegatePubkey.slice(2) : delegatePubkey;
7537
- const vtxoScript = chunkEJOFL5WH_cjs.VtxoScript.decode(vtxo.tapTree);
7764
+ const vtxoScript = chunk5MLC2HU3_cjs.VtxoScript.decode(vtxo.tapTree);
7538
7765
  return vtxoScript.leaves.find((tapLeaf) => {
7539
- const arkTapscript = chunkEJOFL5WH_cjs.decodeTapscript(chunkEJOFL5WH_cjs.scriptFromTapLeafScript(tapLeaf));
7540
- if (!chunkEJOFL5WH_cjs.MultisigTapscript.is(arkTapscript)) return false;
7766
+ const arkTapscript = chunk5MLC2HU3_cjs.decodeTapscript(chunk5MLC2HU3_cjs.scriptFromTapLeafScript(tapLeaf));
7767
+ if (!chunk5MLC2HU3_cjs.MultisigTapscript.is(arkTapscript)) return false;
7541
7768
  return arkTapscript.params.pubkeys.map(base.hex.encode).includes(pk);
7542
7769
  });
7543
7770
  }
@@ -7818,7 +8045,7 @@ function createManagedConnection(dbName, version, initDatabase2) {
7818
8045
  };
7819
8046
  }
7820
8047
  function scriptFromArkAddress(address) {
7821
- return base.hex.encode(chunkEJOFL5WH_cjs.ArkAddress.decode(address).pkScript);
8048
+ return base.hex.encode(chunk5MLC2HU3_cjs.ArkAddress.decode(address).pkScript);
7822
8049
  }
7823
8050
 
7824
8051
  // src/repositories/indexedDB/schema.ts
@@ -8313,7 +8540,7 @@ function validateVtxosForScript(vtxos, script, context) {
8313
8540
  }
8314
8541
  async function getVtxosForContract(repo, contract) {
8315
8542
  const vtxos = repo.getVtxosForScript ? await repo.getVtxosForScript(contract.script) : filterVtxosForScript(await repo.getVtxos(contract.address), contract.script);
8316
- return vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo);
8543
+ return vtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo);
8317
8544
  }
8318
8545
  async function saveVtxosForContract(repo, contract, vtxos) {
8319
8546
  if (repo.saveVtxosForScript) {
@@ -8455,7 +8682,7 @@ function decodeArkContract(encoded) {
8455
8682
  }
8456
8683
  function contractFromArkContract(encoded, options = {}) {
8457
8684
  const parsed = decodeArkContract(encoded);
8458
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(parsed.type);
8685
+ const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(parsed.type);
8459
8686
  if (!handler) {
8460
8687
  throw new Error(`No handler registered for contract type '${parsed.type}'`);
8461
8688
  }
@@ -8469,9 +8696,9 @@ function contractFromArkContract(encoded, options = {}) {
8469
8696
  metadata: options.metadata
8470
8697
  };
8471
8698
  }
8472
- function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunkEJOFL5WH_cjs.DEFAULT_NETWORK.hrp, options = {}) {
8699
+ function contractFromArkContractWithAddress(encoded, serverPubKey, addressPrefix = chunk5MLC2HU3_cjs.DEFAULT_NETWORK.hrp, options = {}) {
8473
8700
  const parsed = decodeArkContract(encoded);
8474
- const handler = chunk6YUACVX4_cjs.contractHandlers.getOrThrow(parsed.type);
8701
+ const handler = chunkWIFL5QYZ_cjs.contractHandlers.getOrThrow(parsed.type);
8475
8702
  const params = parsed.data;
8476
8703
  const vtxoScript = handler.createScript(params);
8477
8704
  return {
@@ -8725,9 +8952,9 @@ var ContractWatcher = class {
8725
8952
  this.connectionState = "connected";
8726
8953
  this.reconnectAttempts = 0;
8727
8954
  this.listenLoop().catch((e) => {
8728
- if (chunkEJOFL5WH_cjs.isEventSourceError(e)) {
8955
+ if (chunk5MLC2HU3_cjs.isEventSourceError(e)) {
8729
8956
  console.debug("ContractWatcher subscription disconnected; reconnecting");
8730
- } else if (!chunkEJOFL5WH_cjs.isEventSourceUnavailableError(e)) {
8957
+ } else if (!chunk5MLC2HU3_cjs.isEventSourceUnavailableError(e)) {
8731
8958
  console.error(e);
8732
8959
  }
8733
8960
  this.connectionState = "disconnected";
@@ -8739,7 +8966,7 @@ var ContractWatcher = class {
8739
8966
  this.scheduleReconnect();
8740
8967
  });
8741
8968
  } catch (error) {
8742
- if (!chunkEJOFL5WH_cjs.isEventSourceUnavailableError(error)) {
8969
+ if (!chunk5MLC2HU3_cjs.isEventSourceUnavailableError(error)) {
8743
8970
  console.error("ContractWatcher connection failed:", error);
8744
8971
  }
8745
8972
  this.connectionState = "disconnected";
@@ -8765,7 +8992,7 @@ var ContractWatcher = class {
8765
8992
  * slower; what it loses is push latency.
8766
8993
  */
8767
8994
  reportEventSourceUnavailable(error) {
8768
- if (!chunkEJOFL5WH_cjs.isEventSourceUnavailableError(error)) return false;
8995
+ if (!chunk5MLC2HU3_cjs.isEventSourceUnavailableError(error)) return false;
8769
8996
  if (!this.eventSourceReported) {
8770
8997
  this.eventSourceReported = true;
8771
8998
  console.warn(
@@ -8981,14 +9208,14 @@ var ContractWatcher = class {
8981
9208
  const timestamp = Date.now();
8982
9209
  if (update.newVtxos?.length) {
8983
9210
  this.processSubscriptionVtxos(
8984
- update.newVtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo),
9211
+ update.newVtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo),
8985
9212
  "vtxo_received",
8986
9213
  timestamp
8987
9214
  );
8988
9215
  }
8989
9216
  if (update.spentVtxos?.length) {
8990
9217
  this.processSubscriptionVtxos(
8991
- update.spentVtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo),
9218
+ update.spentVtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo),
8992
9219
  "vtxo_spent",
8993
9220
  timestamp
8994
9221
  );
@@ -9083,7 +9310,7 @@ var NON_TERMINAL_INTENT_STATES = ALL_INTENT_STATES.filter(
9083
9310
  (s) => !isTerminalIntentState(s)
9084
9311
  );
9085
9312
  function isConsumed(vtxo) {
9086
- return vtxo !== void 0 && chunkEJOFL5WH_cjs.hasTerminalSpend(vtxo);
9313
+ return vtxo !== void 0 && chunk5MLC2HU3_cjs.hasTerminalSpend(vtxo);
9087
9314
  }
9088
9315
  async function classifyIntent(intent, vtxosByOutpoint, now) {
9089
9316
  if (isTerminalIntentState(intent.state)) return void 0;
@@ -9126,7 +9353,7 @@ async function reconcileIntents(deps) {
9126
9353
  let vtxosByOutpoint = /* @__PURE__ */ new Map();
9127
9354
  if (outpoints.length > 0) {
9128
9355
  try {
9129
- const { vtxos } = await chunkEJOFL5WH_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
9356
+ const { vtxos } = await chunk5MLC2HU3_cjs.getNormalizedVtxos(deps.indexerProvider, { outpoints });
9130
9357
  vtxosByOutpoint = new Map(vtxos.map((v) => [outpointKey(v), v]));
9131
9358
  } catch (e) {
9132
9359
  console.error("reconcileIntents: failed to fetch input VTXO state", e);
@@ -9300,7 +9527,7 @@ var ContractManager = class _ContractManager {
9300
9527
  await this.reconcileWatched();
9301
9528
  this.markSyncOnline();
9302
9529
  } catch (err) {
9303
- if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
9530
+ if (!chunk5MLC2HU3_cjs.isRetryableProviderError(err)) throw err;
9304
9531
  this.markSyncDegraded(err);
9305
9532
  }
9306
9533
  this.initialized = true;
@@ -9432,7 +9659,7 @@ var ContractManager = class _ContractManager {
9432
9659
  const from = Math.max(0, watermark - lookAhead.size);
9433
9660
  const to = watermark + lookAhead.size;
9434
9661
  const deps = lookAhead.candidateDeps();
9435
- const handlers = chunk6YUACVX4_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk6YUACVX4_cjs.contractHandlers.get(t)).filter(hasCandidates);
9662
+ const handlers = chunkWIFL5QYZ_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkWIFL5QYZ_cjs.contractHandlers.get(t)).filter(hasCandidates);
9436
9663
  const band = /* @__PURE__ */ new Map();
9437
9664
  for (let index = from; index <= to; index++) {
9438
9665
  const descriptor = lookAhead.materialize(index);
@@ -9443,7 +9670,7 @@ var ContractManager = class _ContractManager {
9443
9670
  index,
9444
9671
  params: {
9445
9672
  ...candidate,
9446
- ...chunk6YUACVX4_cjs.speculativeReceiveMetadata(descriptor)
9673
+ ...chunkWIFL5QYZ_cjs.speculativeReceiveMetadata(descriptor)
9447
9674
  }
9448
9675
  });
9449
9676
  }
@@ -9505,7 +9732,7 @@ var ContractManager = class _ContractManager {
9505
9732
  });
9506
9733
  for (const entry of pending) entry.catchUpPending = false;
9507
9734
  } catch (err) {
9508
- if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
9735
+ if (!chunk5MLC2HU3_cjs.isRetryableProviderError(err)) throw err;
9509
9736
  this.markSyncDegraded(err);
9510
9737
  }
9511
9738
  }
@@ -9555,7 +9782,7 @@ var ContractManager = class _ContractManager {
9555
9782
  await this.fetchContractVxosFromIndexer([contract]);
9556
9783
  this.markSyncOnline();
9557
9784
  } catch (err) {
9558
- if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
9785
+ if (!chunk5MLC2HU3_cjs.isRetryableProviderError(err)) throw err;
9559
9786
  this.markSyncDegraded(err);
9560
9787
  }
9561
9788
  await this.watcher.addContract(contract);
@@ -9592,7 +9819,7 @@ var ContractManager = class _ContractManager {
9592
9819
  return result;
9593
9820
  }
9594
9821
  async upsertContractRow(params) {
9595
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(params.type);
9822
+ const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(params.type);
9596
9823
  if (!handler) {
9597
9824
  throw new Error(`No handler registered for contract type '${params.type}'`);
9598
9825
  }
@@ -9692,7 +9919,7 @@ var ContractManager = class _ContractManager {
9692
9919
  `scanContracts: batchSize must be a positive integer (got ${String(opts.batchSize)})`
9693
9920
  );
9694
9921
  }
9695
- const registered = chunk6YUACVX4_cjs.contractHandlers.getRegisteredTypes().map((t) => chunk6YUACVX4_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9922
+ const registered = chunkWIFL5QYZ_cjs.contractHandlers.getRegisteredTypes().map((t) => chunkWIFL5QYZ_cjs.contractHandlers.get(t)).filter(isDiscoverable);
9696
9923
  const discoverables = [
9697
9924
  ...registered.filter((h) => h.type === "boarding"),
9698
9925
  ...registered.filter((h) => h.type !== "boarding")
@@ -9827,7 +10054,7 @@ var ContractManager = class _ContractManager {
9827
10054
  await this.syncContracts({ contracts, pageSize });
9828
10055
  this.markSyncOnline();
9829
10056
  } catch (err) {
9830
- if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
10057
+ if (!chunk5MLC2HU3_cjs.isRetryableProviderError(err)) throw err;
9831
10058
  this.markSyncDegraded(err);
9832
10059
  }
9833
10060
  const vtxos = await this.getVtxosForContracts(contracts);
@@ -9848,7 +10075,7 @@ var ContractManager = class _ContractManager {
9848
10075
  }
9849
10076
  const tapscriptCache = tapscripts ?? /* @__PURE__ */ new Map();
9850
10077
  return vtxos.map(
9851
- (vtxo) => extendVirtualCoinForContract(chunkEJOFL5WH_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
10078
+ (vtxo) => extendVirtualCoinForContract(chunk5MLC2HU3_cjs.normalizeVtxo(vtxo), byScript, tapscriptCache)
9852
10079
  );
9853
10080
  }
9854
10081
  /** @inheritdoc */
@@ -9892,14 +10119,14 @@ var ContractManager = class _ContractManager {
9892
10119
  const byScript = new Map(contracts.map((contract) => [contract.script, contract]));
9893
10120
  const asking = vtxos.filter((vtxo) => {
9894
10121
  const contract = byScript.get(vtxo.script);
9895
- return contract !== void 0 && chunk6YUACVX4_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
10122
+ return contract !== void 0 && chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type)?.assertSpendableNow !== void 0;
9896
10123
  });
9897
10124
  if (asking.length === 0) return refused;
9898
10125
  const tip = await this.currentChainTip();
9899
10126
  const walletKey = await walletPubKey?.();
9900
10127
  for (const vtxo of asking) {
9901
10128
  const contract = byScript.get(vtxo.script);
9902
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
10129
+ const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type);
9903
10130
  if (!handler?.assertSpendableNow) continue;
9904
10131
  const context = {
9905
10132
  collaborative: true,
@@ -9914,7 +10141,7 @@ var ContractManager = class _ContractManager {
9914
10141
  // the next handler to answer a CSV question would meet a
9915
10142
  // TypeError instead of a `false`. Carry the coin only when it
9916
10143
  // really is one.
9917
- vtxo: chunkEJOFL5WH_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
10144
+ vtxo: chunk5MLC2HU3_cjs.isVirtualCoin(vtxo) && "status" in vtxo ? vtxo : void 0
9918
10145
  };
9919
10146
  try {
9920
10147
  await handler.assertSpendableNow(
@@ -10070,7 +10297,7 @@ var ContractManager = class _ContractManager {
10070
10297
  const { contractScript, collaborative = true, walletPubKey, vtxo } = options;
10071
10298
  const [contract] = await this.getContracts({ script: contractScript });
10072
10299
  if (!contract) return [];
10073
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
10300
+ const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type);
10074
10301
  if (!handler) return [];
10075
10302
  const script = handler.createScript(contract.params);
10076
10303
  const tip = await this.currentChainTip();
@@ -10098,7 +10325,7 @@ var ContractManager = class _ContractManager {
10098
10325
  const { contractScript, collaborative = true, walletPubKey } = options;
10099
10326
  const [contract] = await this.getContracts({ script: contractScript });
10100
10327
  if (!contract) return [];
10101
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
10328
+ const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type);
10102
10329
  if (!handler) return [];
10103
10330
  const script = handler.createScript(contract.params);
10104
10331
  const context = {
@@ -10154,7 +10381,7 @@ var ContractManager = class _ContractManager {
10154
10381
  }
10155
10382
  async refreshOutpoints(outpoints) {
10156
10383
  if (outpoints.length === 0) return;
10157
- const { vtxos } = await chunkEJOFL5WH_cjs.getNormalizedVtxos(this.config.indexerProvider, {
10384
+ const { vtxos } = await chunk5MLC2HU3_cjs.getNormalizedVtxos(this.config.indexerProvider, {
10158
10385
  outpoints
10159
10386
  });
10160
10387
  if (vtxos.length === 0) return;
@@ -10233,7 +10460,7 @@ var ContractManager = class _ContractManager {
10233
10460
  break;
10234
10461
  }
10235
10462
  } catch (err) {
10236
- if (!chunkEJOFL5WH_cjs.isRetryableProviderError(err)) throw err;
10463
+ if (!chunk5MLC2HU3_cjs.isRetryableProviderError(err)) throw err;
10237
10464
  this.markSyncDegraded(err);
10238
10465
  }
10239
10466
  this.emitEvent(event);
@@ -10312,7 +10539,7 @@ var ContractManager = class _ContractManager {
10312
10539
  */
10313
10540
  async reconcilePendingFrontier(contracts) {
10314
10541
  const scriptToContract = new Map(contracts.map((c) => [c.script, c]));
10315
- const vtxos = await chunkEJOFL5WH_cjs.getAllNormalizedVtxos(
10542
+ const vtxos = await chunk5MLC2HU3_cjs.getAllNormalizedVtxos(
10316
10543
  this.config.indexerProvider,
10317
10544
  contracts.map((c) => c.script),
10318
10545
  { pendingOnly: true }
@@ -10395,7 +10622,7 @@ var ContractManager = class _ContractManager {
10395
10622
  }
10396
10623
  return result;
10397
10624
  }
10398
- async fetchContractVtxosBulk(contracts, pageSize = chunkEJOFL5WH_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10625
+ async fetchContractVtxosBulk(contracts, pageSize = chunk5MLC2HU3_cjs.DEFAULT_PAGE_SIZE, syncWindow) {
10399
10626
  if (contracts.length === 0) {
10400
10627
  return { vtxosByScript: /* @__PURE__ */ new Map(), promoted: /* @__PURE__ */ new Map() };
10401
10628
  }
@@ -10411,7 +10638,7 @@ var ContractManager = class _ContractManager {
10411
10638
  before: syncWindow.before
10412
10639
  }
10413
10640
  } : {};
10414
- const vtxos = await chunkEJOFL5WH_cjs.getAllNormalizedVtxos(
10641
+ const vtxos = await chunk5MLC2HU3_cjs.getAllNormalizedVtxos(
10415
10642
  this.config.indexerProvider,
10416
10643
  contracts.map((c) => c.script),
10417
10644
  { ...windowOpts, pageSize }
@@ -10556,7 +10783,7 @@ var deserializeTapLeaf = (t) => {
10556
10783
  const s = base.hex.decode(t.s);
10557
10784
  return [cb, s];
10558
10785
  };
10559
- var deserializeVtxo = (o) => chunkEJOFL5WH_cjs.normalizeVtxo({
10786
+ var deserializeVtxo = (o) => chunk5MLC2HU3_cjs.normalizeVtxo({
10560
10787
  ...o,
10561
10788
  createdAt: new Date(o.createdAt),
10562
10789
  tapTree: base.hex.decode(o.tapTree),
@@ -11379,7 +11606,7 @@ var HDDescriptorProvider = class _HDDescriptorProvider {
11379
11606
  */
11380
11607
  materializeDescriptorAt(index) {
11381
11608
  const descriptor = this.identity.descriptor;
11382
- const network = chunk6YUACVX4_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
11609
+ const network = chunkWIFL5QYZ_cjs.isMainnetDescriptor(descriptor) ? descriptorsScure.networks.bitcoin : descriptorsScure.networks.testnet;
11383
11610
  const expansion = descriptorsScure.expand({ descriptor, network, index });
11384
11611
  const keyInfo = expansion.expansionMap?.["@0"];
11385
11612
  if (!keyInfo?.keyExpression) {
@@ -11527,7 +11754,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
11527
11754
  const provider = await resolveDescriptorProvider(config, setup.walletRepository);
11528
11755
  if (!provider) return void 0;
11529
11756
  const allowSilentFallback = (config.walletMode ?? "auto") === "auto";
11530
- const expectedContractType = setup.offchainTapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? "delegate" : "default";
11757
+ const expectedContractType = setup.offchainTapscript instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script ? "delegate" : "default";
11531
11758
  const factoryOpts = {
11532
11759
  walletRepository: setup.walletRepository,
11533
11760
  contractRepository: setup.contractRepository,
@@ -11728,7 +11955,7 @@ var WalletReceiveRotator = class _WalletReceiveRotator {
11728
11955
  };
11729
11956
  function deriveLeafPubkey(descriptor) {
11730
11957
  try {
11731
- return chunk6YUACVX4_cjs.deriveDescriptorLeafPubKey(descriptor);
11958
+ return chunkWIFL5QYZ_cjs.deriveDescriptorLeafPubKey(descriptor);
11732
11959
  } catch (e) {
11733
11960
  throw new NonRangeableDescriptorError(
11734
11961
  "Cannot derive leaf pubkey: descriptor is not a materialized, parsable tr(...) shape.",
@@ -11740,7 +11967,7 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11740
11967
  const pubKey = deriveLeafPubkey(descriptor);
11741
11968
  const tapscript = rebuildTapscript(current, pubKey);
11742
11969
  const serverPubKey = tapscript.options.serverPubKey;
11743
- const csvTimelock = chunkEJOFL5WH_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
11970
+ const csvTimelock = chunk5MLC2HU3_cjs.timelockToSequence(tapscript.options.csvTimelock).toString();
11744
11971
  const base$1 = {
11745
11972
  script: base.hex.encode(tapscript.pkScript),
11746
11973
  address: tapscript.address(hrp, serverPubKey).encode(),
@@ -11751,11 +11978,11 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11751
11978
  // index-0 key. Without it, spends produce unsigned PSBTs that the
11752
11979
  // server rejects with `INVALID_PSBT_INPUT (5): missing tapscript spend sig`.
11753
11980
  metadata: {
11754
- ...tagSource && { source: chunk6YUACVX4_cjs.WALLET_RECEIVE_SOURCE },
11981
+ ...tagSource && { source: chunkWIFL5QYZ_cjs.WALLET_RECEIVE_SOURCE },
11755
11982
  signingDescriptor: descriptor
11756
11983
  }
11757
11984
  };
11758
- const params = tapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? {
11985
+ const params = tapscript instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script ? {
11759
11986
  ...base$1,
11760
11987
  type: "delegate",
11761
11988
  params: {
@@ -11776,10 +12003,10 @@ function buildReceiveContract(current, descriptor, hrp, tagSource) {
11776
12003
  return { tapscript, params };
11777
12004
  }
11778
12005
  function rebuildTapscript(current, pubKey) {
11779
- if (current instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script) {
11780
- return new chunk6YUACVX4_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
12006
+ if (current instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script) {
12007
+ return new chunkWIFL5QYZ_cjs.DelegateVtxo.Script({ ...current.options, pubKey });
11781
12008
  }
11782
- return new chunk6YUACVX4_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
12009
+ return new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({ ...current.options, pubKey });
11783
12010
  }
11784
12011
  async function pickActiveReceive(contractRepository, serverPubKey, expectedType) {
11785
12012
  const candidates = await contractRepository.getContracts({
@@ -11788,7 +12015,7 @@ async function pickActiveReceive(contractRepository, serverPubKey, expectedType)
11788
12015
  });
11789
12016
  const serverPubKeyHex = base.hex.encode(serverPubKey);
11790
12017
  const matching = candidates.filter(
11791
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk6YUACVX4_cjs.WALLET_RECEIVE_SOURCE
12018
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkWIFL5QYZ_cjs.WALLET_RECEIVE_SOURCE
11792
12019
  ).sort((a, b) => {
11793
12020
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
11794
12021
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -11844,7 +12071,7 @@ function computeOffchainBalance(vtxos, caps) {
11844
12071
  }
11845
12072
  };
11846
12073
  for (const vtxo of vtxos) {
11847
- if (chunkEJOFL5WH_cjs.hasTerminalSpend(vtxo)) continue;
12074
+ if (chunk5MLC2HU3_cjs.hasTerminalSpend(vtxo)) continue;
11848
12075
  addAssets(owned, vtxo);
11849
12076
  if (vtxo.isUnrolled) {
11850
12077
  unrolled += vtxo.value;
@@ -11854,11 +12081,11 @@ function computeOffchainBalance(vtxos, caps) {
11854
12081
  pendingRecovery += vtxo.value;
11855
12082
  continue;
11856
12083
  }
11857
- if (chunkEJOFL5WH_cjs.canRecoverOnchain(vtxo, now)) {
12084
+ if (chunk5MLC2HU3_cjs.canRecoverOnchain(vtxo, now)) {
11858
12085
  recoverable += vtxo.value;
11859
12086
  continue;
11860
12087
  }
11861
- if (!chunkEJOFL5WH_cjs.canSpendOffchain(vtxo, now)) continue;
12088
+ if (!chunk5MLC2HU3_cjs.canSpendOffchain(vtxo, now)) continue;
11862
12089
  if (vtxo.isPreconfirmed) {
11863
12090
  preconfirmed += vtxo.value;
11864
12091
  } else {
@@ -12028,12 +12255,12 @@ var InputSignerRouter = class {
12028
12255
  };
12029
12256
 
12030
12257
  // src/wallet/wallet.ts
12031
- var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunkEJOFL5WH_cjs.DEFAULT_ARKADE_SERVER_URL;
12258
+ var getArkadeServerUrl = ({ arkServerUrl }) => arkServerUrl || chunk5MLC2HU3_cjs.DEFAULT_ARKADE_SERVER_URL;
12032
12259
  function intentProofJobs(coins) {
12033
12260
  if (coins.length === 0) return [];
12034
12261
  const coinJobs = coins.map((coin, i) => ({
12035
12262
  index: i + 1,
12036
- lookupScript: chunkEJOFL5WH_cjs.VtxoScript.decode(coin.tapTree).pkScript
12263
+ lookupScript: chunk5MLC2HU3_cjs.VtxoScript.decode(coin.tapTree).pkScript
12037
12264
  }));
12038
12265
  return [{ index: 0, lookupScript: coinJobs[0].lookupScript }, ...coinJobs];
12039
12266
  }
@@ -12065,7 +12292,7 @@ function dedupeTimelocks(timelocks) {
12065
12292
  const seen = /* @__PURE__ */ new Set();
12066
12293
  const deduped = [];
12067
12294
  for (const timelock of timelocks) {
12068
- const sequence = chunkEJOFL5WH_cjs.timelockToSequence(timelock).toString();
12295
+ const sequence = chunk5MLC2HU3_cjs.timelockToSequence(timelock).toString();
12069
12296
  if (seen.has(sequence)) continue;
12070
12297
  seen.add(sequence);
12071
12298
  deduped.push(timelock);
@@ -12082,7 +12309,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
12082
12309
  state: "active"
12083
12310
  });
12084
12311
  const newest = candidates.filter(
12085
- (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunk6YUACVX4_cjs.WALLET_RECEIVE_SOURCE
12312
+ (c) => c.params.serverPubKey === serverPubKeyHex && c.metadata?.source === chunkWIFL5QYZ_cjs.WALLET_RECEIVE_SOURCE
12086
12313
  ).sort((a, b) => {
12087
12314
  if (b.createdAt !== a.createdAt) return b.createdAt - a.createdAt;
12088
12315
  return signingDescriptorIndex(b.metadata?.signingDescriptor) - signingDescriptorIndex(a.metadata?.signingDescriptor);
@@ -12090,7 +12317,7 @@ async function resolveBoardingBootTapscript(contractRepository, serverPubKey, ba
12090
12317
  if (!newest?.params.pubKey) return baseline;
12091
12318
  try {
12092
12319
  const pubKey = base.hex.decode(newest.params.pubKey);
12093
- return new chunk6YUACVX4_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
12320
+ return new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({ ...baseline.options, pubKey });
12094
12321
  } catch (e) {
12095
12322
  console.warn("Skipping malformed boarding contract at boot", newest.script, e);
12096
12323
  return baseline;
@@ -12109,10 +12336,10 @@ function filterSnapshotVtxos(snapshot, filter, pendingSpendOutpoints) {
12109
12336
  if (vtxo.isUnrolled) {
12110
12337
  return !!f.withUnrolled;
12111
12338
  }
12112
- if (chunkEJOFL5WH_cjs.hasTerminalSpend(vtxo)) {
12339
+ if (chunk5MLC2HU3_cjs.hasTerminalSpend(vtxo)) {
12113
12340
  return false;
12114
12341
  }
12115
- if (!f.withRecoverable && chunkEJOFL5WH_cjs.canRecoverOnchain(vtxo, now)) {
12342
+ if (!f.withRecoverable && chunk5MLC2HU3_cjs.canRecoverOnchain(vtxo, now)) {
12116
12343
  return false;
12117
12344
  }
12118
12345
  return true;
@@ -12452,7 +12679,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12452
12679
  */
12453
12680
  static async setupWalletConfig(config, pubKey) {
12454
12681
  const arkadeServerUrl = getArkadeServerUrl(config);
12455
- const arkProvider = config.arkProvider || new chunkEJOFL5WH_cjs.RestArkProvider(arkadeServerUrl);
12682
+ const arkProvider = config.arkProvider || new chunk5MLC2HU3_cjs.RestArkProvider(arkadeServerUrl);
12456
12683
  let indexerProvider = config.indexerProvider;
12457
12684
  if (!indexerProvider) {
12458
12685
  let indexerUrl = config.indexerUrl;
@@ -12469,7 +12696,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12469
12696
  indexerUrl = arkadeServerUrl;
12470
12697
  }
12471
12698
  }
12472
- indexerProvider = new chunkPJR63FTK_cjs.RestIndexerProvider(indexerUrl);
12699
+ indexerProvider = new chunkGVHUHTRH_cjs.RestIndexerProvider(indexerUrl);
12473
12700
  }
12474
12701
  const walletRepository = config.storage?.walletRepository ?? new IndexedDBWalletRepository();
12475
12702
  const contractRepository = config.storage?.contractRepository ?? new IndexedDBContractRepository();
@@ -12478,7 +12705,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12478
12705
  source: serverInfoSource,
12479
12706
  lastOnlineAt: serverInfoLastOnlineAt
12480
12707
  } = await resolveArkInfo(arkProvider, walletRepository);
12481
- const network = chunkEJOFL5WH_cjs.getNetwork(info.network);
12708
+ const network = chunk5MLC2HU3_cjs.getNetwork(info.network);
12482
12709
  if ("descriptor" in config.identity) {
12483
12710
  const descriptor = config.identity.descriptor;
12484
12711
  const identityIsMainnet = !descriptor.includes("tpub");
@@ -12518,18 +12745,18 @@ var ReadonlyWallet = class _ReadonlyWallet {
12518
12745
  value: info.boardingExitDelay,
12519
12746
  type: info.boardingExitDelay < 512n ? "blocks" : "seconds"
12520
12747
  };
12521
- const serverPubKey = chunk6YUACVX4_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
12522
- const delegatePubKey = config.delegateProvider ? await config.delegateProvider.getDelegateInfo().then((info2) => chunk6YUACVX4_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : config.delegatorProvider ? await config.delegatorProvider.getDelegateInfo().then((info2) => chunk6YUACVX4_cjs.toXOnly(base.hex.decode(info2.pubkey), "delegate key")).catch(() => void 0) : void 0;
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;
12523
12750
  const offchainOptions = {
12524
12751
  pubKey,
12525
12752
  serverPubKey,
12526
12753
  csvTimelock: exitTimelock
12527
12754
  };
12528
- const offchainTapscript = !delegatePubKey ? new chunk6YUACVX4_cjs.DefaultVtxo.Script(offchainOptions) : new chunk6YUACVX4_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
12529
- const boardingTapscript = chunk6YUACVX4_cjs.BoardingContractHandler.createScript({
12755
+ const offchainTapscript = !delegatePubKey ? new chunkWIFL5QYZ_cjs.DefaultVtxo.Script(offchainOptions) : new chunkWIFL5QYZ_cjs.DelegateVtxo.Script({ ...offchainOptions, delegatePubKey });
12756
+ const boardingTapscript = chunkWIFL5QYZ_cjs.BoardingContractHandler.createScript({
12530
12757
  pubKey: base.hex.encode(pubKey),
12531
12758
  serverPubKey: base.hex.encode(serverPubKey),
12532
- csvTimelock: chunkEJOFL5WH_cjs.timelockToSequence(boardingTimelock).toString()
12759
+ csvTimelock: chunk5MLC2HU3_cjs.timelockToSequence(boardingTimelock).toString()
12533
12760
  });
12534
12761
  return {
12535
12762
  arkProvider,
@@ -12695,7 +12922,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12695
12922
  if (!filter?.withUnrolled) {
12696
12923
  logExcludedVtxos(
12697
12924
  "getSpendableVtxos",
12698
- snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunkEJOFL5WH_cjs.hasTerminalSpend(vtxo)),
12925
+ snapshot.flatMap((contract) => contract.vtxos).filter((vtxo) => vtxo.isUnrolled && !chunk5MLC2HU3_cjs.hasTerminalSpend(vtxo)),
12699
12926
  [() => UNROLLED_REASON]
12700
12927
  );
12701
12928
  }
@@ -12838,7 +13065,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12838
13065
  const response = await contractManager.getContractsWithVtxos();
12839
13066
  const allVtxos = response.flatMap((_) => _.vtxos);
12840
13067
  const { boardingTxs, commitmentsToIgnore } = await this.getBoardingTxs();
12841
- const resolveTxCreatedAt = (txids) => chunkEJOFL5WH_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
13068
+ const resolveTxCreatedAt = (txids) => chunk5MLC2HU3_cjs.fetchVtxoCreatedAtByTxid(this.indexerProvider, txids);
12842
13069
  return buildTransactionHistory(
12843
13070
  allVtxos,
12844
13071
  boardingTxs,
@@ -12932,7 +13159,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
12932
13159
  },
12933
13160
  isUnrolled: true,
12934
13161
  ...boardingFacts,
12935
- virtualStatus: chunkEJOFL5WH_cjs.toVirtualStatus(boardingFacts),
13162
+ virtualStatus: chunk5MLC2HU3_cjs.toVirtualStatus(boardingFacts),
12936
13163
  spentBy: "",
12937
13164
  createdAt: tx.status.confirmed ? new Date(tx.status.block_time * 1e3) : /* @__PURE__ */ new Date(0),
12938
13165
  script: scriptHex
@@ -12988,9 +13215,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
12988
13215
  async getBoardingTapscripts(allowedSigners) {
12989
13216
  const byScript = /* @__PURE__ */ new Map();
12990
13217
  const add = (s) => byScript.set(base.hex.encode(s.pkScript), s);
12991
- const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunk6YUACVX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13218
+ const boardingCsv = this.boardingTapscript.options.csvTimelock ?? chunkWIFL5QYZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
12992
13219
  add(
12993
- new chunk6YUACVX4_cjs.DefaultVtxo.Script({
13220
+ new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({
12994
13221
  pubKey: await this.identity.xOnlyPublicKey(),
12995
13222
  serverPubKey: this.boardingTapscript.options.serverPubKey,
12996
13223
  csvTimelock: boardingCsv
@@ -13005,7 +13232,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13005
13232
  for (const c of boardingContracts) {
13006
13233
  if (!allowed.has(toXOnlySignerHex(c.params.serverPubKey))) continue;
13007
13234
  try {
13008
- add(chunk6YUACVX4_cjs.BoardingContractHandler.createScript(c.params));
13235
+ add(chunkWIFL5QYZ_cjs.BoardingContractHandler.createScript(c.params));
13009
13236
  } catch (e) {
13010
13237
  console.warn("Skipping malformed boarding contract", c.script, e);
13011
13238
  }
@@ -13043,7 +13270,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13043
13270
  // Per-row CSV delay decoded from THIS tapscript's exit leaf —
13044
13271
  // not the wallet's current boarding timelock, which a signer
13045
13272
  // rotation may have changed.
13046
- csvTimelock: chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
13273
+ csvTimelock: chunk5MLC2HU3_cjs.CSVMultisigTapscript.decode(base.hex.decode(tapscript.exitScript)).params.timelock,
13047
13274
  coins: utxos
13048
13275
  });
13049
13276
  }
@@ -13176,7 +13403,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13176
13403
  /** Fetch Arkade transaction ids that are still pending final settlement. */
13177
13404
  async fetchPendingTxs() {
13178
13405
  const scripts = await this.getWalletScripts();
13179
- const vtxos = await chunkEJOFL5WH_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
13406
+ const vtxos = await chunk5MLC2HU3_cjs.getAllNormalizedVtxos(this.indexerProvider, scripts);
13180
13407
  return vtxos.filter(
13181
13408
  (vtxo) => (vtxo.isSpent || vtxo.isPreconfirmed && !vtxo.isSwept) && vtxo.arkTxId !== void 0
13182
13409
  ).map((_) => _.arkTxId);
@@ -13207,7 +13434,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13207
13434
  });
13208
13435
  for (const contract of contracts) {
13209
13436
  if (map.has(contract.script)) continue;
13210
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
13437
+ const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type);
13211
13438
  if (handler) {
13212
13439
  const script = handler.createScript(contract.params);
13213
13440
  map.set(contract.script, script);
@@ -13319,7 +13546,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13319
13546
  }
13320
13547
  });
13321
13548
  const baselinePubkey = await this.identity.xOnlyPublicKey();
13322
- const delegatePubKey = this.offchainTapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13549
+ const delegatePubKey = this.offchainTapscript instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
13323
13550
  const baselineSigners = [
13324
13551
  this.offchainTapscript.options.serverPubKey,
13325
13552
  ...[...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h))
@@ -13327,8 +13554,8 @@ var ReadonlyWallet = class _ReadonlyWallet {
13327
13554
  const seenBaselineScripts = /* @__PURE__ */ new Set();
13328
13555
  for (const serverPubKey of baselineSigners) {
13329
13556
  for (const csvTimelock of this.walletContractTimelocks) {
13330
- const csvTimelockStr = chunkEJOFL5WH_cjs.timelockToSequence(csvTimelock).toString();
13331
- const defaultScript = new chunk6YUACVX4_cjs.DefaultVtxo.Script({
13557
+ const csvTimelockStr = chunk5MLC2HU3_cjs.timelockToSequence(csvTimelock).toString();
13558
+ const defaultScript = new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({
13332
13559
  pubKey: baselinePubkey,
13333
13560
  serverPubKey,
13334
13561
  csvTimelock
@@ -13349,7 +13576,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13349
13576
  });
13350
13577
  }
13351
13578
  if (delegatePubKey) {
13352
- const delegateScript = new chunk6YUACVX4_cjs.DelegateVtxo.Script({
13579
+ const delegateScript = new chunkWIFL5QYZ_cjs.DelegateVtxo.Script({
13353
13580
  pubKey: baselinePubkey,
13354
13581
  serverPubKey,
13355
13582
  delegatePubKey,
@@ -13373,9 +13600,9 @@ var ReadonlyWallet = class _ReadonlyWallet {
13373
13600
  }
13374
13601
  }
13375
13602
  }
13376
- const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunk6YUACVX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13603
+ const boardingCsvTimelock = this.boardingTapscript.options.csvTimelock ?? chunkWIFL5QYZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13377
13604
  for (const serverPubKey of baselineSigners) {
13378
- const baselineBoarding = new chunk6YUACVX4_cjs.DefaultVtxo.Script({
13605
+ const baselineBoarding = new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({
13379
13606
  pubKey: baselinePubkey,
13380
13607
  serverPubKey,
13381
13608
  csvTimelock: boardingCsvTimelock
@@ -13388,7 +13615,7 @@ var ReadonlyWallet = class _ReadonlyWallet {
13388
13615
  params: {
13389
13616
  pubKey: base.hex.encode(baselineBoarding.options.pubKey),
13390
13617
  serverPubKey: base.hex.encode(serverPubKey),
13391
- csvTimelock: chunkEJOFL5WH_cjs.timelockToSequence(boardingCsvTimelock).toString()
13618
+ csvTimelock: chunk5MLC2HU3_cjs.timelockToSequence(boardingCsvTimelock).toString()
13392
13619
  },
13393
13620
  script: boardingScriptHex,
13394
13621
  address: baselineBoarding.address(this.network.hrp, serverPubKey).encode(),
@@ -13588,7 +13815,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13588
13815
  serverPubKey: this.offchainTapscript.options.serverPubKey,
13589
13816
  deprecatedSignerPubKeys: [...this._deprecatedSigners.keys()].map((h) => base.hex.decode(h)),
13590
13817
  csvTimelocks: this.walletContractTimelocks,
13591
- delegatePubKey: this.offchainTapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
13818
+ delegatePubKey: this.offchainTapscript instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0
13592
13819
  };
13593
13820
  }
13594
13821
  _signerRouter;
@@ -13833,7 +14060,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13833
14060
  const [row] = await manager.getContracts({ script: base.hex.encode(display.pkScript) });
13834
14061
  const persisted = row?.metadata?.signingDescriptor;
13835
14062
  if (typeof persisted === "string") return persisted;
13836
- return chunk6YUACVX4_cjs.identityDescriptor(this.identity);
14063
+ return chunkWIFL5QYZ_cjs.identityDescriptor(this.identity);
13837
14064
  }
13838
14065
  /**
13839
14066
  * Build, persist and shape one address of `type` owned by `descriptor` —
@@ -13849,7 +14076,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13849
14076
  async mintAddress(manager, type, descriptor, tagSource, allocated) {
13850
14077
  if (type === "boarding") {
13851
14078
  const built2 = this.buildBoardingContract(
13852
- chunk6YUACVX4_cjs.deriveDescriptorLeafPubKey(descriptor),
14079
+ chunkWIFL5QYZ_cjs.deriveDescriptorLeafPubKey(descriptor),
13853
14080
  descriptor,
13854
14081
  tagSource
13855
14082
  );
@@ -13894,11 +14121,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13894
14121
  * {@link buildReceiveContract}.
13895
14122
  */
13896
14123
  buildBoardingContract(pubKey, descriptor, tagSource) {
13897
- const tapscript = new chunk6YUACVX4_cjs.DefaultVtxo.Script({
14124
+ const tapscript = new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({
13898
14125
  ...this._boardingTapscript.options,
13899
14126
  pubKey
13900
14127
  });
13901
- const csvTimelock = tapscript.options.csvTimelock ?? chunk6YUACVX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
14128
+ const csvTimelock = tapscript.options.csvTimelock ?? chunkWIFL5QYZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
13902
14129
  return {
13903
14130
  tapscript,
13904
14131
  params: {
@@ -13906,13 +14133,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13906
14133
  params: {
13907
14134
  pubKey: base.hex.encode(pubKey),
13908
14135
  serverPubKey: base.hex.encode(tapscript.options.serverPubKey),
13909
- csvTimelock: chunkEJOFL5WH_cjs.timelockToSequence(csvTimelock).toString()
14136
+ csvTimelock: chunk5MLC2HU3_cjs.timelockToSequence(csvTimelock).toString()
13910
14137
  },
13911
14138
  script: base.hex.encode(tapscript.pkScript),
13912
14139
  address: tapscript.address(this.network.hrp, this.arkServerPublicKey).encode(),
13913
14140
  state: "active",
13914
14141
  metadata: {
13915
- ...tagSource && { source: chunk6YUACVX4_cjs.WALLET_RECEIVE_SOURCE },
14142
+ ...tagSource && { source: chunkWIFL5QYZ_cjs.WALLET_RECEIVE_SOURCE },
13916
14143
  signingDescriptor: descriptor
13917
14144
  }
13918
14145
  }
@@ -13941,7 +14168,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
13941
14168
  if (this._descriptorProvider instanceof HDDescriptorProvider) {
13942
14169
  return (await this.getContractManager()).getNextSigningDescriptor();
13943
14170
  }
13944
- return chunk6YUACVX4_cjs.identityDescriptor(this.identity);
14171
+ return chunkWIFL5QYZ_cjs.identityDescriptor(this.identity);
13945
14172
  }
13946
14173
  /**
13947
14174
  * @see HDAllocationCapable.advanceSigningDescriptorWatermark
@@ -14037,7 +14264,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14037
14264
  * the stable public API.
14038
14265
  */
14039
14266
  async rotateServerSigner(newServerPubKey, checkpointTapscript) {
14040
- const xonly = chunk6YUACVX4_cjs.toXOnly(newServerPubKey, "ark signer key");
14267
+ const xonly = chunkWIFL5QYZ_cjs.toXOnly(newServerPubKey, "ark signer key");
14041
14268
  const newServerUnrollScript = assertValidServerUnrollScript(
14042
14269
  checkpointTapscript,
14043
14270
  resolveCheckpointExitDelayPolicy(this.network, this.checkpointExitDelayPolicy)
@@ -14066,21 +14293,21 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14066
14293
  const [currentBoardingRow] = await manager.getContracts({
14067
14294
  script: currentBoardingScript
14068
14295
  });
14069
- const newOffchain = this.offchainTapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? new chunk6YUACVX4_cjs.DelegateVtxo.Script({
14296
+ const newOffchain = this.offchainTapscript instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script ? new chunkWIFL5QYZ_cjs.DelegateVtxo.Script({
14070
14297
  ...this.offchainTapscript.options,
14071
14298
  serverPubKey: xonly
14072
- }) : new chunk6YUACVX4_cjs.DefaultVtxo.Script({
14299
+ }) : new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({
14073
14300
  ...this.offchainTapscript.options,
14074
14301
  serverPubKey: xonly
14075
14302
  });
14076
- const newBoarding = new chunk6YUACVX4_cjs.DefaultVtxo.Script({
14303
+ const newBoarding = new chunkWIFL5QYZ_cjs.DefaultVtxo.Script({
14077
14304
  ...this._boardingTapscript.options,
14078
14305
  serverPubKey: xonly
14079
14306
  });
14080
- const offchainCsv = chunkEJOFL5WH_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
14307
+ const offchainCsv = chunk5MLC2HU3_cjs.timelockToSequence(newOffchain.options.csvTimelock).toString();
14081
14308
  const newOffchainScript = base.hex.encode(newOffchain.pkScript);
14082
14309
  const newOffchainAddress = newOffchain.address(this.network.hrp, xonly).encode();
14083
- if (newOffchain instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script) {
14310
+ if (newOffchain instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script) {
14084
14311
  await manager.createContract({
14085
14312
  type: "delegate",
14086
14313
  params: {
@@ -14108,13 +14335,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14108
14335
  metadata: currentOffchainRow?.metadata
14109
14336
  });
14110
14337
  }
14111
- const boardingCsv = newBoarding.options.csvTimelock ?? chunk6YUACVX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
14338
+ const boardingCsv = newBoarding.options.csvTimelock ?? chunkWIFL5QYZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK;
14112
14339
  await manager.createContract({
14113
14340
  type: "boarding",
14114
14341
  params: {
14115
14342
  pubKey: base.hex.encode(newBoarding.options.pubKey),
14116
14343
  serverPubKey: base.hex.encode(xonly),
14117
- csvTimelock: chunkEJOFL5WH_cjs.timelockToSequence(boardingCsv).toString()
14344
+ csvTimelock: chunk5MLC2HU3_cjs.timelockToSequence(boardingCsv).toString()
14118
14345
  },
14119
14346
  script: base.hex.encode(newBoarding.pkScript),
14120
14347
  address: newBoarding.address(this.network.hrp, xonly).encode(),
@@ -14147,14 +14374,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14147
14374
  _restoreInFlight;
14148
14375
  _addPendingSpends(inputs) {
14149
14376
  for (const input of inputs) {
14150
- if (chunkEJOFL5WH_cjs.isVirtualCoin(input)) {
14377
+ if (chunk5MLC2HU3_cjs.isVirtualCoin(input)) {
14151
14378
  this._pendingSpendOutpoints.add(`${input.txid}:${input.vout}`);
14152
14379
  }
14153
14380
  }
14154
14381
  }
14155
14382
  _removePendingSpends(inputs) {
14156
14383
  for (const input of inputs) {
14157
- if (chunkEJOFL5WH_cjs.isVirtualCoin(input)) {
14384
+ if (chunk5MLC2HU3_cjs.isVirtualCoin(input)) {
14158
14385
  this._pendingSpendOutpoints.delete(`${input.txid}:${input.vout}`);
14159
14386
  }
14160
14387
  }
@@ -14212,13 +14439,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14212
14439
  const manager = await this.getContractManager();
14213
14440
  const provider = this._descriptorProvider;
14214
14441
  const hd = provider instanceof HDDescriptorProvider;
14215
- const staticDescriptor = hd ? void 0 : await chunk6YUACVX4_cjs.identityDescriptor(this.identity);
14442
+ const staticDescriptor = hd ? void 0 : await chunkWIFL5QYZ_cjs.identityDescriptor(this.identity);
14216
14443
  const materialize = (index) => hd ? provider.materializeDescriptorAt(index) : staticDescriptor;
14217
- const delegatePubKey = this.offchainTapscript instanceof chunk6YUACVX4_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
14444
+ const delegatePubKey = this.offchainTapscript instanceof chunkWIFL5QYZ_cjs.DelegateVtxo.Script ? this.offchainTapscript.options.delegatePubKey : void 0;
14218
14445
  const arkInfo = await this.arkProvider.getInfo();
14219
- const currentSignerPubKey = chunk6YUACVX4_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
14446
+ const currentSignerPubKey = chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(arkInfo.signerPubkey), "ark signer key");
14220
14447
  const deprecatedSignerPubKeys = arkInfo.deprecatedSigners.map(
14221
- (s) => chunk6YUACVX4_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
14448
+ (s) => chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(s.pubkey), "deprecated signer key")
14222
14449
  );
14223
14450
  const deps = {
14224
14451
  indexerProvider: this.indexerProvider,
@@ -14233,7 +14460,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14233
14460
  csvTimelocks: this.walletContractTimelocks,
14234
14461
  // Boarding-exit CSV so the boarding handler can build its
14235
14462
  // candidate script (distinct from the unilateral-exit matrix).
14236
- boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunk6YUACVX4_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
14463
+ boardingTimelock: this.boardingTapscript.options.csvTimelock ?? chunkWIFL5QYZ_cjs.DefaultVtxo.Script.DEFAULT_TIMELOCK,
14237
14464
  delegatePubKey
14238
14465
  };
14239
14466
  const result = await manager.scanContracts({
@@ -14347,7 +14574,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14347
14574
  throw new Error("Invalid configured public key");
14348
14575
  }
14349
14576
  const setup = await ReadonlyWallet.setupWalletConfig(config, pubkey);
14350
- const forfeitPubkey = chunk6YUACVX4_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
14577
+ const forfeitPubkey = chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(setup.info.forfeitPubkey), "forfeit key");
14351
14578
  const forfeitAddress = btcSigner.Address(setup.network).decode(setup.info.forfeitAddress);
14352
14579
  const forfeitOutputScript = btcSigner.OutScript.encode(forfeitAddress);
14353
14580
  const checkpointExitDelayOverrides = {
@@ -14496,7 +14723,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14496
14723
  inputs: params.selectedVtxos,
14497
14724
  changeAmount: BigInt(changeAmount)
14498
14725
  };
14499
- const outputAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(params.address);
14726
+ const outputAddress = chunk5MLC2HU3_cjs.ArkAddress.decode(params.address);
14500
14727
  assertRecipientArkAddress(
14501
14728
  params.address,
14502
14729
  outputAddress,
@@ -14562,13 +14789,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14562
14789
  void this.logUngatedInputs("settle({ inputs })", params.inputs);
14563
14790
  }
14564
14791
  const offchainAddress = await this.getAddress();
14565
- const offchainPkScript = chunkEJOFL5WH_cjs.ArkAddress.decode(offchainAddress).pkScript;
14792
+ const offchainPkScript = chunk5MLC2HU3_cjs.ArkAddress.decode(offchainAddress).pkScript;
14566
14793
  const offchainOutputScript = base.hex.encode(offchainPkScript);
14567
14794
  if (!params) {
14568
14795
  const { fees, vtxoMaxAmount } = await this.arkProvider.getInfo();
14569
14796
  const estimator = new Estimator(fees.intentFee);
14570
14797
  let amount = 0;
14571
- const exitScript = chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(
14798
+ const exitScript = chunk5MLC2HU3_cjs.CSVMultisigTapscript.decode(
14572
14799
  base.hex.decode(this.boardingTapscript.exitScript)
14573
14800
  );
14574
14801
  const boardingTimelock = exitScript.params.timelock;
@@ -14597,7 +14824,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14597
14824
  if (filteredVtxos.length >= MAX_VTXOS_PER_SETTLEMENT) {
14598
14825
  break;
14599
14826
  }
14600
- const inputFee = estimator.evalOffchainInput(chunkEJOFL5WH_cjs.toOffchainInputFeeParams(vtxo));
14827
+ const inputFee = estimator.evalOffchainInput(chunk5MLC2HU3_cjs.toOffchainInputFeeParams(vtxo));
14601
14828
  if (inputFee.satoshis >= vtxo.value) {
14602
14829
  continue;
14603
14830
  }
@@ -14644,7 +14871,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14644
14871
  let script;
14645
14872
  let arkAddress;
14646
14873
  try {
14647
- arkAddress = chunkEJOFL5WH_cjs.ArkAddress.decode(output.address);
14874
+ arkAddress = chunk5MLC2HU3_cjs.ArkAddress.decode(output.address);
14648
14875
  } catch {
14649
14876
  arkAddress = void 0;
14650
14877
  }
@@ -14734,7 +14961,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14734
14961
  const abortController = new AbortController();
14735
14962
  let stream;
14736
14963
  let committedTxid;
14737
- const settleInputVtxos = params.inputs.filter(chunkEJOFL5WH_cjs.isVirtualCoin);
14964
+ const settleInputVtxos = params.inputs.filter(chunk5MLC2HU3_cjs.isVirtualCoin);
14738
14965
  const contractManager = await this.getContractManager();
14739
14966
  await contractManager.assertAnnotatable(settleInputVtxos);
14740
14967
  await contractManager.assertSpendableNow?.(
@@ -14846,7 +15073,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14846
15073
  async maybeRotateBoardingAfterBoard(inputs) {
14847
15074
  if (!this._descriptorProvider) return;
14848
15075
  const consumedBoarding = inputs.some(
14849
- (input) => typeof input !== "string" && !chunkEJOFL5WH_cjs.isVirtualCoin(input)
15076
+ (input) => typeof input !== "string" && !chunk5MLC2HU3_cjs.isVirtualCoin(input)
14850
15077
  );
14851
15078
  if (!consumedBoarding) return;
14852
15079
  try {
@@ -14870,7 +15097,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14870
15097
  let connectorIndex = 0;
14871
15098
  const connectorsLeaves = connectorsGraph?.leaves() || [];
14872
15099
  for (const input of inputs) {
14873
- if (!chunkEJOFL5WH_cjs.isVirtualCoin(input)) {
15100
+ if (!chunk5MLC2HU3_cjs.isVirtualCoin(input)) {
14874
15101
  for (let i = 0; i < settlementPsbt.inputsLength; i++) {
14875
15102
  const settlementInput = settlementPsbt.getInput(i);
14876
15103
  if (!settlementInput.txid || settlementInput.index === void 0) {
@@ -14901,7 +15128,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14901
15128
  }
14902
15129
  continue;
14903
15130
  }
14904
- if (chunkEJOFL5WH_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
15131
+ if (chunk5MLC2HU3_cjs.canRecoverOnchain(input, { timestamp: /* @__PURE__ */ new Date() }) || isSubdust({ value: input.value }, this.dustAmount)) {
14905
15132
  continue;
14906
15133
  }
14907
15134
  if (connectorsLeaves.length === 0) {
@@ -14929,7 +15156,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14929
15156
  index: input.vout,
14930
15157
  witnessUtxo: {
14931
15158
  amount: BigInt(input.value),
14932
- script: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript
15159
+ script: chunk5MLC2HU3_cjs.VtxoScript.decode(input.tapTree).pkScript
14933
15160
  },
14934
15161
  sighashType: btcSigner.SigHash.DEFAULT,
14935
15162
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -14948,7 +15175,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
14948
15175
  forfeitTx = await this._signerRouter.sign(forfeitTx, [
14949
15176
  {
14950
15177
  index: 0,
14951
- lookupScript: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript
15178
+ lookupScript: chunk5MLC2HU3_cjs.VtxoScript.decode(input.tapTree).pkScript
14952
15179
  }
14953
15180
  ]);
14954
15181
  signedForfeits.push(base.base64.encode(forfeitTx.toPSBT()));
@@ -15006,7 +15233,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15006
15233
  resolveBatchExpiryPolicy(this.network, this.batchExpiryPolicy)
15007
15234
  );
15008
15235
  await this.arkProvider.confirmRegistration(intentId);
15009
- const sweepTapscript = chunkEJOFL5WH_cjs.CSVMultisigTapscript.encode({
15236
+ const sweepTapscript = chunk5MLC2HU3_cjs.CSVMultisigTapscript.encode({
15010
15237
  timelock,
15011
15238
  pubkeys: [this.forfeitPubkey]
15012
15239
  }).script;
@@ -15021,10 +15248,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15021
15248
  throw new Error("Sweep tap tree root not set");
15022
15249
  }
15023
15250
  const xOnlyPublicKeys = event.cosignersPublicKeys.map(
15024
- (k) => base.hex.encode(chunk6YUACVX4_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
15251
+ (k) => base.hex.encode(chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
15025
15252
  );
15026
15253
  const signerPublicKey = await session.getPublicKey();
15027
- const xonlySignerPublicKey = chunk6YUACVX4_cjs.toXOnly(signerPublicKey, "signer key");
15254
+ const xonlySignerPublicKey = chunkWIFL5QYZ_cjs.toXOnly(signerPublicKey, "signer key");
15028
15255
  if (!xOnlyPublicKeys.includes(base.hex.encode(xonlySignerPublicKey))) {
15029
15256
  return { skip: true };
15030
15257
  }
@@ -15114,9 +15341,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15114
15341
  ...existing ?? {},
15115
15342
  intentTxId,
15116
15343
  registerProof: intent.proof,
15117
- registerProofMessage: chunkEJOFL5WH_cjs.Intent.encodeMessage(intent.message),
15344
+ registerProofMessage: chunk5MLC2HU3_cjs.Intent.encodeMessage(intent.message),
15118
15345
  deleteProof: deleteIntent.proof,
15119
- deleteProofMessage: chunkEJOFL5WH_cjs.Intent.encodeMessage(deleteIntent.message),
15346
+ deleteProofMessage: chunk5MLC2HU3_cjs.Intent.encodeMessage(deleteIntent.message),
15120
15347
  intentVtxos: inputs.map((i) => ({
15121
15348
  txid: i.txid,
15122
15349
  vout: i.vout
@@ -15148,7 +15375,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15148
15375
  try {
15149
15376
  return await this.arkProvider.registerIntent(intent);
15150
15377
  } catch (error) {
15151
- if (error instanceof chunkEJOFL5WH_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
15378
+ if (error instanceof chunk5MLC2HU3_cjs.ArkError && error.code === 0 && error.message.includes("duplicated input")) {
15152
15379
  const deleteIntent = await this.makeDeleteIntentSignature(inputs);
15153
15380
  await this.arkProvider.deleteIntent(deleteIntent);
15154
15381
  return this.arkProvider.registerIntent(intent);
@@ -15164,7 +15391,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15164
15391
  expire_at: 0,
15165
15392
  cosigners_public_keys: cosignerPubKeys
15166
15393
  };
15167
- const proof = chunkEJOFL5WH_cjs.Intent.create(message, coins, outputs);
15394
+ const proof = chunk5MLC2HU3_cjs.Intent.create(message, coins, outputs);
15168
15395
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
15169
15396
  return {
15170
15397
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -15176,7 +15403,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15176
15403
  type: "delete",
15177
15404
  expire_at: 0
15178
15405
  };
15179
- const proof = chunkEJOFL5WH_cjs.Intent.create(message, coins, []);
15406
+ const proof = chunk5MLC2HU3_cjs.Intent.create(message, coins, []);
15180
15407
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
15181
15408
  return {
15182
15409
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -15188,7 +15415,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15188
15415
  type: "get-pending-tx",
15189
15416
  expire_at: 0
15190
15417
  };
15191
- const proof = chunkEJOFL5WH_cjs.Intent.create(message, coins, []);
15418
+ const proof = chunk5MLC2HU3_cjs.Intent.create(message, coins, []);
15192
15419
  const signedProof = await this._signerRouter.sign(proof, intentProofJobs(coins));
15193
15420
  return {
15194
15421
  proof: base.base64.encode(signedProof.toPSBT()),
@@ -15209,7 +15436,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15209
15436
  if (!vtxos || vtxos.length === 0) {
15210
15437
  const scriptMap = await this.getScriptMap();
15211
15438
  const allExtended = [];
15212
- const fetchedVtxos = await chunkEJOFL5WH_cjs.getAllNormalizedVtxos(this.indexerProvider, [
15439
+ const fetchedVtxos = await chunk5MLC2HU3_cjs.getAllNormalizedVtxos(this.indexerProvider, [
15213
15440
  ...scriptMap.keys()
15214
15441
  ]);
15215
15442
  for (const vtxo of fetchedVtxos) {
@@ -15253,7 +15480,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15253
15480
  try {
15254
15481
  const checkpointTxs = pendingTx.signedCheckpointTxs.map((c) => {
15255
15482
  const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(c));
15256
- chunkEJOFL5WH_cjs.assertAllowedSighashTypes(tx);
15483
+ chunk5MLC2HU3_cjs.assertAllowedSighashTypes(tx);
15257
15484
  return tx;
15258
15485
  });
15259
15486
  assertCheckpointsMatchInputs(
@@ -15325,11 +15552,11 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15325
15552
  * against the current key alone would leave it pending forever.
15326
15553
  */
15327
15554
  checkpointUnrollCandidates(info) {
15328
- const current = chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
15555
+ const current = chunk5MLC2HU3_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
15329
15556
  const candidates = [this._serverUnrollScript, current];
15330
15557
  for (const deprecated of signerSetFromInfo(info).deprecated.keys()) {
15331
15558
  candidates.push(
15332
- chunkEJOFL5WH_cjs.CSVMultisigTapscript.encode({
15559
+ chunk5MLC2HU3_cjs.CSVMultisigTapscript.encode({
15333
15560
  ...current.params,
15334
15561
  pubkeys: [base.hex.decode(deprecated)]
15335
15562
  })
@@ -15420,7 +15647,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15420
15647
  if (vtxos.length === 0) {
15421
15648
  throw new Error("No VTXOs found for this arkadeCash");
15422
15649
  }
15423
- const myPkScript = chunkEJOFL5WH_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
15650
+ const myPkScript = chunk5MLC2HU3_cjs.ArkAddress.decode(await this.getAddress()).pkScript;
15424
15651
  let { spendable, unclaimed } = this.classifyCashVtxos(vtxos);
15425
15652
  let swept = 0;
15426
15653
  const drainable = vtxos.filter(
@@ -15496,7 +15723,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15496
15723
  const spendable = [];
15497
15724
  const unclaimed = [];
15498
15725
  for (const vtxo of vtxos) {
15499
- if (chunkEJOFL5WH_cjs.hasTerminalSpend(vtxo)) {
15726
+ if (chunk5MLC2HU3_cjs.hasTerminalSpend(vtxo)) {
15500
15727
  unclaimed.push(cashReport(vtxo, "already-spent"));
15501
15728
  } else if (vtxo.isUnrolled) {
15502
15729
  unclaimed.push(cashReport(vtxo, "exited"));
@@ -15518,7 +15745,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15518
15745
  const all = [];
15519
15746
  const seen = /* @__PURE__ */ new Set();
15520
15747
  for (let pageIndex = 0; ; pageIndex++) {
15521
- const { vtxos, page } = await chunkEJOFL5WH_cjs.getNormalizedVtxos(this.indexerProvider, {
15748
+ const { vtxos, page } = await chunk5MLC2HU3_cjs.getNormalizedVtxos(this.indexerProvider, {
15522
15749
  scripts,
15523
15750
  pageIndex,
15524
15751
  pageSize
@@ -15565,7 +15792,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15565
15792
  for (let i = 0; i < inputs.length; i += MAX_INPUTS_PER_INTENT) {
15566
15793
  const batch = inputs.slice(i, i + MAX_INPUTS_PER_INTENT);
15567
15794
  const message = { type: "get-pending-tx", expire_at: 0 };
15568
- const proof = chunkEJOFL5WH_cjs.Intent.create(message, batch, []);
15795
+ const proof = chunk5MLC2HU3_cjs.Intent.create(message, batch, []);
15569
15796
  const signedProof = await identity.sign(
15570
15797
  proof,
15571
15798
  Array.from({ length: batch.length + 1 }, (_, j) => j)
@@ -15587,7 +15814,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15587
15814
  try {
15588
15815
  const checkpointTxs = pendingTx.signedCheckpointTxs.map((checkpoint) => {
15589
15816
  const tx = btcSigner.Transaction.fromPSBT(base.base64.decode(checkpoint));
15590
- chunkEJOFL5WH_cjs.assertAllowedSighashTypes(tx);
15817
+ chunk5MLC2HU3_cjs.assertAllowedSighashTypes(tx);
15591
15818
  return tx;
15592
15819
  });
15593
15820
  assertCheckpointsMatchInputs(
@@ -15786,7 +16013,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15786
16013
  script: recipient.script,
15787
16014
  amount: BigInt(recipient.amount),
15788
16015
  // Already checked against the recipient address in `validateRecipients`.
15789
- ...recipient.tapTree ? { tapTree: chunkEJOFL5WH_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
16016
+ ...recipient.tapTree ? { tapTree: chunk5MLC2HU3_cjs.TapTreeCoder.decode(recipient.tapTree) } : {}
15790
16017
  }));
15791
16018
  const totalBtcOutput = outputs.reduce((sum, o) => sum + Number(o.amount), 0);
15792
16019
  let changeAmount = totalBtcSelected - totalBtcOutput;
@@ -15930,10 +16157,10 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
15930
16157
  const serverPubKey = this.arkServerPublicKey;
15931
16158
  const serverUnrollScript = this.serverUnrollScript;
15932
16159
  const arkAddress = offchainTapscript.address(this.network.hrp, serverPubKey);
15933
- const normalizedInputs = inputs.map(chunkEJOFL5WH_cjs.normalizeVtxo);
15934
- const at = now ?? await chunkEJOFL5WH_cjs.resolveTimeHeight(this.onchainProvider);
16160
+ const normalizedInputs = inputs.map(chunk5MLC2HU3_cjs.normalizeVtxo);
16161
+ const at = now ?? await chunk5MLC2HU3_cjs.resolveTimeHeight(this.onchainProvider);
15935
16162
  for (const input of normalizedInputs) {
15936
- if (!chunkEJOFL5WH_cjs.canSpendOffchain(input, at)) {
16163
+ if (!chunk5MLC2HU3_cjs.canSpendOffchain(input, at)) {
15937
16164
  throw new Error(
15938
16165
  `sendSelectedVtxosToSelf: input ${input.txid}:${input.vout} is not cooperatively spendable`
15939
16166
  );
@@ -16003,7 +16230,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16003
16230
  );
16004
16231
  const arkTxJobs = inputs.map((input, index) => ({
16005
16232
  index,
16006
- lookupScript: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript
16233
+ lookupScript: chunk5MLC2HU3_cjs.VtxoScript.decode(input.tapTree).pkScript
16007
16234
  }));
16008
16235
  const identity = this.identity;
16009
16236
  const signer = {
@@ -16089,14 +16316,14 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16089
16316
  const spentBy = checkpointIdByOutpoint.get(`${vtxo.txid}:${vtxo.vout}`);
16090
16317
  spentVtxos.push({
16091
16318
  ...spentFacts,
16092
- virtualStatus: chunkEJOFL5WH_cjs.toVirtualStatus(spentFacts),
16319
+ virtualStatus: chunk5MLC2HU3_cjs.toVirtualStatus(spentFacts),
16093
16320
  ...spentBy ? { spentBy } : {},
16094
16321
  arkTxId: arkTxid
16095
16322
  });
16096
16323
  for (const id of vtxo.commitmentTxIds) {
16097
16324
  commitmentTxIds.add(id);
16098
16325
  }
16099
- const vtxoExpiry = chunkEJOFL5WH_cjs.toBatchExpiry(vtxo);
16326
+ const vtxoExpiry = chunk5MLC2HU3_cjs.toBatchExpiry(vtxo);
16100
16327
  if (vtxoExpiry) {
16101
16328
  batchExpiry = Math.min(batchExpiry, vtxoExpiry);
16102
16329
  }
@@ -16109,7 +16336,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16109
16336
  isSwept: false,
16110
16337
  isPreconfirmed: true,
16111
16338
  commitmentTxIds: Array.from(commitmentTxIds),
16112
- ...chunkEJOFL5WH_cjs.parseLegacyExpiry(batchExpiry)
16339
+ ...chunk5MLC2HU3_cjs.parseLegacyExpiry(batchExpiry)
16113
16340
  };
16114
16341
  changeVtxo = {
16115
16342
  txid: arkTxid,
@@ -16121,7 +16348,7 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16121
16348
  tapTree: offchainTapscript.encode(),
16122
16349
  value: Number(changeAmount),
16123
16350
  ...changeFacts,
16124
- virtualStatus: chunkEJOFL5WH_cjs.toVirtualStatus(changeFacts),
16351
+ virtualStatus: chunk5MLC2HU3_cjs.toVirtualStatus(changeFacts),
16125
16352
  spentBy: "",
16126
16353
  status: {
16127
16354
  confirmed: false
@@ -16190,12 +16417,12 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16190
16417
  const spentVtxos = [];
16191
16418
  const inputArkTxIds = /* @__PURE__ */ new Set();
16192
16419
  const boardingRemovalsByAddress = /* @__PURE__ */ new Map();
16193
- const vtxoInputs = inputs.filter(chunkEJOFL5WH_cjs.isVirtualCoin);
16420
+ const vtxoInputs = inputs.filter(chunk5MLC2HU3_cjs.isVirtualCoin);
16194
16421
  const cm = await this.getContractManager();
16195
16422
  const annotatedVtxos = await cm.annotateVtxos(vtxoInputs);
16196
16423
  const annotatedByKey = new Map(annotatedVtxos.map((v) => [`${v.txid}:${v.vout}`, v]));
16197
16424
  for (const input of inputs) {
16198
- if (chunkEJOFL5WH_cjs.isVirtualCoin(input)) {
16425
+ if (chunk5MLC2HU3_cjs.isVirtualCoin(input)) {
16199
16426
  const outpoint = `${input.txid}:${input.vout}`;
16200
16427
  const vtxo = annotatedByKey.get(outpoint);
16201
16428
  if (!vtxo) {
@@ -16207,13 +16434,13 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16207
16434
  const settledFacts = { ...vtxo, isSpent: true };
16208
16435
  spentVtxos.push({
16209
16436
  ...settledFacts,
16210
- virtualStatus: chunkEJOFL5WH_cjs.toVirtualStatus(settledFacts),
16437
+ virtualStatus: chunk5MLC2HU3_cjs.toVirtualStatus(settledFacts),
16211
16438
  settledBy: commitmentTxid
16212
16439
  });
16213
16440
  } else {
16214
16441
  let sourceAddress;
16215
16442
  try {
16216
- sourceAddress = chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
16443
+ sourceAddress = chunk5MLC2HU3_cjs.VtxoScript.decode(input.tapTree).onchainAddress(
16217
16444
  this.network
16218
16445
  );
16219
16446
  } catch {
@@ -16271,9 +16498,9 @@ var Wallet2 = class _Wallet extends ReadonlyWallet {
16271
16498
  }
16272
16499
  };
16273
16500
  function selectVirtualCoins(coins, targetAmount) {
16274
- const sortedCoins = coins.map(chunkEJOFL5WH_cjs.normalizeVtxo).sort((a, b) => {
16275
- const expiryA = chunkEJOFL5WH_cjs.toBatchExpiry(a) || Number.MAX_SAFE_INTEGER;
16276
- const expiryB = chunkEJOFL5WH_cjs.toBatchExpiry(b) || Number.MAX_SAFE_INTEGER;
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;
16277
16504
  if (expiryA !== expiryB) {
16278
16505
  return expiryA - expiryB;
16279
16506
  }
@@ -16300,19 +16527,53 @@ function selectVirtualCoins(coins, targetAmount) {
16300
16527
  changeAmount
16301
16528
  };
16302
16529
  }
16303
- async function waitForIncomingFunds(wallet) {
16530
+ var AbortError = class extends Error {
16531
+ constructor(message = "Operation aborted") {
16532
+ super(message);
16533
+ this.name = "AbortError";
16534
+ }
16535
+ };
16536
+ function abortReason(signal) {
16537
+ const { reason } = signal;
16538
+ if (reason instanceof Error) return reason;
16539
+ return new AbortError(typeof reason === "string" ? reason : void 0);
16540
+ }
16541
+ async function waitForIncomingFunds(wallet, options) {
16542
+ const { signal, timeoutMs } = options ?? {};
16543
+ if (signal?.aborted) throw abortReason(signal);
16304
16544
  let stopFunc;
16305
16545
  let settled = false;
16306
- return new Promise((resolve) => {
16546
+ let timeoutId;
16547
+ let onAbort;
16548
+ return new Promise((resolve, reject) => {
16549
+ const settle = (deliver) => {
16550
+ if (settled) return;
16551
+ settled = true;
16552
+ if (timeoutId !== void 0) clearTimeout(timeoutId);
16553
+ if (onAbort) signal?.removeEventListener("abort", onAbort);
16554
+ stopFunc?.();
16555
+ deliver();
16556
+ };
16557
+ const cancel = (reason) => settle(() => reject(reason));
16558
+ if (signal) {
16559
+ onAbort = () => cancel(abortReason(signal));
16560
+ signal.addEventListener("abort", onAbort);
16561
+ }
16562
+ if (timeoutMs !== void 0) {
16563
+ timeoutId = setTimeout(
16564
+ () => cancel(new AbortError(`waitForIncomingFunds timed out after ${timeoutMs}ms`)),
16565
+ timeoutMs
16566
+ );
16567
+ }
16307
16568
  wallet.notifyIncomingFunds((funds) => {
16308
16569
  const hasFunds = funds.type === "utxo" ? funds.coins.length > 0 : funds.newVtxos.length > 0;
16309
16570
  if (settled || !hasFunds) return;
16310
- settled = true;
16311
- resolve(funds);
16312
- stopFunc?.();
16571
+ settle(() => resolve(funds));
16313
16572
  }).then((stop) => {
16314
16573
  stopFunc = stop;
16315
16574
  if (settled) stop();
16575
+ }).catch((error) => {
16576
+ cancel(error);
16316
16577
  });
16317
16578
  });
16318
16579
  }
@@ -16608,7 +16869,7 @@ var MessageBus = class {
16608
16869
  this.initialized = true;
16609
16870
  }
16610
16871
  async buildServices(config) {
16611
- const arkProvider = new chunkEJOFL5WH_cjs.RestArkProvider(config.arkServer.url);
16872
+ const arkProvider = new chunk5MLC2HU3_cjs.RestArkProvider(config.arkServer.url);
16612
16873
  const storage = {
16613
16874
  walletRepository: this.walletRepository,
16614
16875
  contractRepository: this.contractRepository,
@@ -16950,7 +17211,7 @@ var offboardNetworkNames = [
16950
17211
  function offboardDestinationScript(destinationAddress) {
16951
17212
  for (const networkName of offboardNetworkNames) {
16952
17213
  try {
16953
- const network = chunkEJOFL5WH_cjs.networks[networkName];
17214
+ const network = chunk5MLC2HU3_cjs.networks[networkName];
16954
17215
  const addr = btcSigner.Address(network).decode(destinationAddress);
16955
17216
  return btcSigner.OutScript.encode(addr);
16956
17217
  } catch {
@@ -17014,7 +17275,7 @@ var Ramps = class {
17014
17275
  }
17015
17276
  amount = amount ?? totalAmount;
17016
17277
  const offchainAddress = await this.wallet.getAddress();
17017
- const offchainAddr = chunkEJOFL5WH_cjs.ArkAddress.decode(offchainAddress);
17278
+ const offchainAddr = chunk5MLC2HU3_cjs.ArkAddress.decode(offchainAddress);
17018
17279
  const offchainScript = base.hex.encode(offchainAddr.pkScript);
17019
17280
  const outputFee = estimator.evalOffchainOutput({
17020
17281
  amount,
@@ -17074,7 +17335,7 @@ var Ramps = class {
17074
17335
  const filteredVtxos = [];
17075
17336
  let totalAmount = 0n;
17076
17337
  for (const vtxo of vtxos) {
17077
- const inputFee = estimator.evalOffchainInput(chunkEJOFL5WH_cjs.toOffchainInputFeeParams(vtxo));
17338
+ const inputFee = estimator.evalOffchainInput(chunk5MLC2HU3_cjs.toOffchainInputFeeParams(vtxo));
17078
17339
  if (inputFee.satoshis >= vtxo.value) {
17079
17340
  continue;
17080
17341
  }
@@ -17910,7 +18171,7 @@ var WalletMessageHandler = class {
17910
18171
  // Wallet methods
17911
18172
  async handleInitWallet({ payload }) {
17912
18173
  const { arkServerUrl } = payload;
17913
- this.indexerProvider = new chunkPJR63FTK_cjs.RestIndexerProvider(arkServerUrl);
18174
+ this.indexerProvider = new chunkGVHUHTRH_cjs.RestIndexerProvider(arkServerUrl);
17914
18175
  await this.onWalletInitialized();
17915
18176
  }
17916
18177
  /**
@@ -18199,7 +18460,7 @@ var WalletMessageHandler = class {
18199
18460
  if (v.isUnrolled) {
18200
18461
  return withUnrolled;
18201
18462
  }
18202
- if (chunkEJOFL5WH_cjs.hasTerminalSpend(v)) {
18463
+ if (chunk5MLC2HU3_cjs.hasTerminalSpend(v)) {
18203
18464
  return false;
18204
18465
  }
18205
18466
  if (includeRecoverable) {
@@ -18208,10 +18469,10 @@ var WalletMessageHandler = class {
18208
18469
  if (dustAmount != null && isSubdust(v, dustAmount)) {
18209
18470
  return false;
18210
18471
  }
18211
- if (chunkEJOFL5WH_cjs.isRecoverable(v)) {
18472
+ if (chunk5MLC2HU3_cjs.isRecoverable(v)) {
18212
18473
  return false;
18213
18474
  }
18214
- if (chunkEJOFL5WH_cjs.isExpired(v)) {
18475
+ if (chunk5MLC2HU3_cjs.isExpired(v)) {
18215
18476
  return false;
18216
18477
  }
18217
18478
  return true;
@@ -18309,7 +18570,7 @@ var WalletMessageHandler = class {
18309
18570
  if (!this.readonlyWallet) return null;
18310
18571
  const { boardingTxs, commitmentsToIgnore } = await this.readonlyWallet.getBoardingTxs();
18311
18572
  const indexerProvider = this.indexerProvider;
18312
- const resolveTxCreatedAt = indexerProvider ? (txids) => chunkEJOFL5WH_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
18573
+ const resolveTxCreatedAt = indexerProvider ? (txids) => chunk5MLC2HU3_cjs.fetchVtxoCreatedAtByTxid(indexerProvider, txids) : void 0;
18313
18574
  return buildTransactionHistory(vtxos, boardingTxs, commitmentsToIgnore, resolveTxCreatedAt);
18314
18575
  }
18315
18576
  async ensureContractEventBroadcasting() {
@@ -19005,7 +19266,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
19005
19266
  };
19006
19267
  try {
19007
19268
  const response = await this.sendMessage(message);
19008
- return response.payload.vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo);
19269
+ return response.payload.vtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo);
19009
19270
  } catch (error) {
19010
19271
  throw new Error(`Failed to get vtxos: ${error}`);
19011
19272
  }
@@ -19030,7 +19291,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
19030
19291
  };
19031
19292
  try {
19032
19293
  const response = await this.sendMessage(message);
19033
- return response.payload.vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo);
19294
+ return response.payload.vtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo);
19034
19295
  } catch (error) {
19035
19296
  throw new Error(`Failed to get spendable vtxos: ${error}`);
19036
19297
  }
@@ -19161,7 +19422,7 @@ var ServiceWorkerReadonlyWallet = class _ServiceWorkerReadonlyWallet {
19161
19422
  };
19162
19423
  try {
19163
19424
  const response = await sendContractMessage(message);
19164
- return response.payload.vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo);
19425
+ return response.payload.vtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo);
19165
19426
  } catch (e) {
19166
19427
  throw new Error("Failed to annotate vtxos");
19167
19428
  }
@@ -19762,7 +20023,7 @@ var ServiceWorkerWallet = class _ServiceWorkerWallet extends ServiceWorkerReadon
19762
20023
  };
19763
20024
  try {
19764
20025
  const response = await wallet.sendMessage(message);
19765
- return response.payload.vtxos.map(chunkEJOFL5WH_cjs.normalizeVtxo);
20026
+ return response.payload.vtxos.map(chunk5MLC2HU3_cjs.normalizeVtxo);
19766
20027
  } catch (e) {
19767
20028
  throw new Error(`Failed to get expiring vtxos: ${e}`);
19768
20029
  }
@@ -19874,12 +20135,12 @@ var OnchainWallet = class _OnchainWallet {
19874
20135
  * @returns Configured onchain wallet
19875
20136
  * @throws Error if the configured identity cannot produce a valid x-only public key
19876
20137
  */
19877
- static async create(identity, networkName = chunkEJOFL5WH_cjs.DEFAULT_NETWORK_NAME, provider) {
20138
+ static async create(identity, networkName = chunk5MLC2HU3_cjs.DEFAULT_NETWORK_NAME, provider) {
19878
20139
  const pubkey = await identity.xOnlyPublicKey();
19879
20140
  if (!pubkey) {
19880
20141
  throw new Error("Invalid configured public key");
19881
20142
  }
19882
- const network = chunkEJOFL5WH_cjs.getNetwork(networkName);
20143
+ const network = chunk5MLC2HU3_cjs.getNetwork(networkName);
19883
20144
  const onchainProvider = provider || new EsploraProvider(ESPLORA_URL[networkName]);
19884
20145
  const onchainP2TR = btcSigner.p2tr(pubkey, void 0, network);
19885
20146
  return new _OnchainWallet(identity, network, onchainP2TR, onchainProvider);
@@ -19985,7 +20246,7 @@ var OnchainWallet = class _OnchainWallet {
19985
20246
  if (!inputs) {
19986
20247
  throw new Error("Fee estimation failed");
19987
20248
  }
19988
- let tx = new chunkEJOFL5WH_cjs.Transaction();
20249
+ let tx = new chunk5MLC2HU3_cjs.Transaction();
19989
20250
  for (const input of inputs) {
19990
20251
  tx.addInput({
19991
20252
  txid: input.txid,
@@ -20043,7 +20304,7 @@ var OnchainWallet = class _OnchainWallet {
20043
20304
  * @throws If the parent has no anchor, or funding cannot be selected/signed
20044
20305
  */
20045
20306
  async bumpAnchor(parentHex, feeRate) {
20046
- const parent = chunkEJOFL5WH_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
20307
+ const parent = chunk5MLC2HU3_cjs.Transaction.fromRaw(base.hex.decode(parentHex));
20047
20308
  const coins = (await this.getCoins()).filter((c) => c.status.confirmed);
20048
20309
  const child = await this.buildBumpPackage(parent, feeRate, coins);
20049
20310
  return [parent.hex, child.hex];
@@ -20142,6 +20403,7 @@ var ListUnspentMethod = "blockchain.scripthash.listunspent";
20142
20403
  var MISSING_TRANSACTION = "missingtransaction";
20143
20404
  var MAX_FETCH_TRANSACTIONS_ATTEMPTS = 5;
20144
20405
  var BLOCK_HEADER_SIZE = 80;
20406
+ var MTP_WINDOW = 11;
20145
20407
  function parseBlockHeader(headerHex) {
20146
20408
  const headerBytes = base.hex.decode(headerHex);
20147
20409
  if (headerBytes.length !== BLOCK_HEADER_SIZE) {
@@ -20448,6 +20710,8 @@ var ElectrumOnchainProvider = class {
20448
20710
  ws;
20449
20711
  network;
20450
20712
  chain;
20713
+ mtpCache;
20714
+ mtpInflight;
20451
20715
  async getCoins(address) {
20452
20716
  const script = this.encodeAddress(address);
20453
20717
  const scriptHash = toScriptHash(script);
@@ -20703,15 +20967,58 @@ var ElectrumOnchainProvider = class {
20703
20967
  blockTime
20704
20968
  };
20705
20969
  }
20970
+ /** `time` is median-time-past, per {@link OnchainProvider.getChainTip};
20971
+ * Electrum serves raw headers and no MTP, so it is computed here. */
20706
20972
  async getChainTip() {
20707
20973
  const tip = await this.chain.subscribeHeaders();
20708
20974
  const { hash, timestamp } = parseBlockHeader(tip.hex);
20709
20975
  return {
20710
20976
  height: tip.height,
20711
- time: timestamp,
20977
+ time: await this.medianTimePast(tip.height, timestamp, hash),
20712
20978
  hash
20713
20979
  };
20714
20980
  }
20981
+ /**
20982
+ * Consensus's `GetMedianTimePast`, ending at and including `height`.
20983
+ *
20984
+ * Cached per tip HASH, not height: this runs on every balance read, and
20985
+ * hashing means a reorg at the same height recomputes rather than serving
20986
+ * the orphaned chain's median.
20987
+ */
20988
+ async medianTimePast(height, tipTime, hash) {
20989
+ if (this.mtpCache?.hash === hash) return this.mtpCache.mtp;
20990
+ if (this.mtpInflight?.hash === hash) return this.mtpInflight.mtp;
20991
+ const mtp = this.readMedianTimePast(height, tipTime, hash).finally(() => {
20992
+ this.mtpInflight = void 0;
20993
+ });
20994
+ this.mtpInflight = { hash, mtp };
20995
+ return mtp;
20996
+ }
20997
+ /** Degrades to the tip's `nTime` rather than throwing — a caller that
20998
+ * cannot read the tip at all is worse off. */
20999
+ async readMedianTimePast(height, tipTime, hash) {
21000
+ const heights = [];
21001
+ for (let h = height - 1; h >= 0 && heights.length < MTP_WINDOW - 1; h--) heights.push(h);
21002
+ if (heights.length === 0) return tipTime;
21003
+ let timestamps;
21004
+ try {
21005
+ const headers = await this.chain.fetchBlockHeaders(heights);
21006
+ timestamps = [
21007
+ tipTime,
21008
+ ...headers.map((header) => parseBlockHeader(header.hex).timestamp)
21009
+ ];
21010
+ } catch (e) {
21011
+ console.warn(
21012
+ "Failed to fetch the median-time-past window; using the tip's own time",
21013
+ e
21014
+ );
21015
+ return tipTime;
21016
+ }
21017
+ timestamps.sort((a, b) => a - b);
21018
+ const mtp = timestamps[Math.floor(timestamps.length / 2)];
21019
+ this.mtpCache = { hash, mtp };
21020
+ return mtp;
21021
+ }
20715
21022
  async watchAddresses(addresses, eventCallback) {
20716
21023
  const scripts = addresses.map((addr) => this.encodeAddress(addr));
20717
21024
  const scriptHashes = scripts.map(toScriptHash);
@@ -20904,7 +21211,7 @@ async function resolvePrevTxs(txids, source, onchain) {
20904
21211
  try {
20905
21212
  const { txs } = await source.getVirtualTxs(wanted);
20906
21213
  for (const psbt of txs) {
20907
- const tx = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
21214
+ const tx = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(psbt));
20908
21215
  resolved.set(tx.id, tx.toBytes());
20909
21216
  }
20910
21217
  } catch (err) {
@@ -20937,7 +21244,7 @@ async function resolvePrevTxs(txids, source, onchain) {
20937
21244
  async function attachPrevArkTxs(tx, txids, source, onchain) {
20938
21245
  const pending = [];
20939
21246
  for (let i = 0; i < tx.inputsLength; i++) {
20940
- if (chunkEJOFL5WH_cjs.getArkPsbtFields(tx, i, chunkEJOFL5WH_cjs.PrevArkTxField).length === 0) pending.push(i);
21247
+ if (chunk5MLC2HU3_cjs.getArkPsbtFields(tx, i, chunk5MLC2HU3_cjs.PrevArkTxField).length === 0) pending.push(i);
20941
21248
  }
20942
21249
  if (pending.length === 0) return;
20943
21250
  const resolved = await resolvePrevTxs(
@@ -20946,13 +21253,13 @@ async function attachPrevArkTxs(tx, txids, source, onchain) {
20946
21253
  onchain
20947
21254
  );
20948
21255
  for (const i of pending) {
20949
- chunkEJOFL5WH_cjs.setArkPsbtField(tx, i, chunkEJOFL5WH_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
21256
+ chunk5MLC2HU3_cjs.setArkPsbtField(tx, i, chunk5MLC2HU3_cjs.PrevArkTxField, resolved.get(txidAt(txids, i)));
20950
21257
  }
20951
21258
  }
20952
21259
  async function attachPrevoutTxs(tx, source) {
20953
21260
  const pending = [];
20954
21261
  for (let i = 0; i < tx.inputsLength; i++) {
20955
- if (chunkEJOFL5WH_cjs.getArkPsbtFields(tx, i, chunkEJOFL5WH_cjs.PrevoutTxField).length > 0) continue;
21262
+ if (chunk5MLC2HU3_cjs.getArkPsbtFields(tx, i, chunk5MLC2HU3_cjs.PrevoutTxField).length > 0) continue;
20956
21263
  const input = tx.getInput(i);
20957
21264
  if (!input?.txid) throw new PrevTxUnavailableError(`input ${i} has no outpoint`);
20958
21265
  pending.push({ index: i, txid: base.hex.encode(input.txid) });
@@ -20963,7 +21270,7 @@ async function attachPrevoutTxs(tx, source) {
20963
21270
  resolved.set(txid, await source.getRawTransaction(txid));
20964
21271
  }
20965
21272
  for (const { index, txid } of pending) {
20966
- chunkEJOFL5WH_cjs.setArkPsbtField(tx, index, chunkEJOFL5WH_cjs.PrevoutTxField, resolved.get(txid));
21273
+ chunk5MLC2HU3_cjs.setArkPsbtField(tx, index, chunk5MLC2HU3_cjs.PrevoutTxField, resolved.get(txid));
20967
21274
  }
20968
21275
  }
20969
21276
  async function withPrevTxs(coins, source, onchain) {
@@ -20989,7 +21296,7 @@ exports.BIP322 = void 0;
20989
21296
  async function sign2(message, identity, network) {
20990
21297
  const xOnlyPubKey = await identity.xOnlyPublicKey();
20991
21298
  const payment = btcSigner.p2tr(xOnlyPubKey, void 0, network);
20992
- const toSpend = chunkEJOFL5WH_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
21299
+ const toSpend = chunk5MLC2HU3_cjs.craftToSpendTx(message, payment.script, TAG_BIP322);
20993
21300
  const toSign = craftBIP322ToSignP2TR(toSpend, payment.script, xOnlyPubKey);
20994
21301
  const signed = await identity.sign(toSign, [0]);
20995
21302
  signed.finalizeIdx(0);
@@ -21047,7 +21354,7 @@ function verifyP2TR(message, witnessItems, pkScript, pubkey) {
21047
21354
  if (sighashType !== btcSigner.SigHash.DEFAULT && sighashType !== btcSigner.SigHash.ALL) {
21048
21355
  return false;
21049
21356
  }
21050
- const toSpend = chunkEJOFL5WH_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21357
+ const toSpend = chunk5MLC2HU3_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21051
21358
  const toSign = craftBIP322ToSignP2TR(toSpend, pkScript, pubkey);
21052
21359
  const sighash = toSign.preimageWitnessV1(0, [pkScript], sighashType, [0n]);
21053
21360
  const rawSig = sig.length === 65 ? sig.subarray(0, 64) : sig;
@@ -21068,7 +21375,7 @@ function verifyP2WPKH(message, witnessItems, pkScript, addressHash) {
21068
21375
  }
21069
21376
  const sighashType = sigWithHash[sigWithHash.length - 1];
21070
21377
  const derSig = sigWithHash.subarray(0, sigWithHash.length - 1);
21071
- const toSpend = chunkEJOFL5WH_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21378
+ const toSpend = chunk5MLC2HU3_cjs.craftToSpendTx(message, pkScript, TAG_BIP322);
21072
21379
  const toSign = craftBIP322ToSignSimple(toSpend, pkScript);
21073
21380
  const scriptCode = btcSigner.OutScript.encode({ type: "pkh", hash: addressHash });
21074
21381
  const sighash = toSign.preimageWitnessV0(0, scriptCode, sighashType, 0n);
@@ -21121,7 +21428,7 @@ function encodeCompactSize(n) {
21121
21428
  return buf;
21122
21429
  }
21123
21430
  function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
21124
- const tx = new chunkEJOFL5WH_cjs.Transaction({ version: 0 });
21431
+ const tx = new chunk5MLC2HU3_cjs.Transaction({ version: 0 });
21125
21432
  tx.addInput({
21126
21433
  txid: toSpend.id,
21127
21434
  index: 0,
@@ -21135,12 +21442,12 @@ function craftBIP322ToSignP2TR(toSpend, pkScript, tapInternalKey) {
21135
21442
  });
21136
21443
  tx.addOutput({
21137
21444
  amount: 0n,
21138
- script: chunkEJOFL5WH_cjs.OP_RETURN_EMPTY_PKSCRIPT
21445
+ script: chunk5MLC2HU3_cjs.OP_RETURN_EMPTY_PKSCRIPT
21139
21446
  });
21140
21447
  return tx;
21141
21448
  }
21142
21449
  function craftBIP322ToSignSimple(toSpend, pkScript) {
21143
- const tx = new chunkEJOFL5WH_cjs.Transaction({ version: 0 });
21450
+ const tx = new chunk5MLC2HU3_cjs.Transaction({ version: 0 });
21144
21451
  tx.addInput({
21145
21452
  txid: toSpend.id,
21146
21453
  index: 0,
@@ -21152,7 +21459,7 @@ function craftBIP322ToSignSimple(toSpend, pkScript) {
21152
21459
  });
21153
21460
  tx.addOutput({
21154
21461
  amount: 0n,
21155
- script: chunkEJOFL5WH_cjs.OP_RETURN_EMPTY_PKSCRIPT
21462
+ script: chunk5MLC2HU3_cjs.OP_RETURN_EMPTY_PKSCRIPT
21156
21463
  });
21157
21464
  return tx;
21158
21465
  }
@@ -21283,7 +21590,7 @@ var RestEmulatorProvider = class {
21283
21590
  }
21284
21591
  };
21285
21592
  function finalizeVirtualTx(type, psbtBase64) {
21286
- const tx = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
21593
+ const tx = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(psbtBase64));
21287
21594
  if (type === "INDEXER_CHAINED_TX_TYPE_TREE" /* TREE */) {
21288
21595
  const input = tx.getInput(0);
21289
21596
  if (!input) {
@@ -21310,14 +21617,14 @@ var ExitPathError = class extends Error {
21310
21617
  reason;
21311
21618
  };
21312
21619
  function delayWeight(sequence) {
21313
- const t = chunkEJOFL5WH_cjs.sequenceToTimelock(sequence);
21620
+ const t = chunk5MLC2HU3_cjs.sequenceToTimelock(sequence);
21314
21621
  return t.type === "blocks" ? Number(t.value) : Number(t.value) / 600;
21315
21622
  }
21316
21623
  async function resolveUnilateralPath(params) {
21317
21624
  const { vtxo, scriptHex, contractRepository } = params;
21318
21625
  const contract = contractRepository ? (await contractRepository.getContracts({ script: scriptHex }))[0] : void 0;
21319
21626
  if (contract) {
21320
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
21627
+ const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type);
21321
21628
  if (!handler) {
21322
21629
  throw new ExitPathError(
21323
21630
  "no-handler",
@@ -21340,12 +21647,12 @@ async function resolveUnilateralPath(params) {
21340
21647
  paths.sort((a, b) => delayWeight(a.sequence) - delayWeight(b.sequence));
21341
21648
  return { selection: paths[0], label: `${contract.type}:unilateral` };
21342
21649
  }
21343
- const decoded = chunkEJOFL5WH_cjs.VtxoScript.decode(vtxo.tapTree);
21650
+ const decoded = chunk5MLC2HU3_cjs.VtxoScript.decode(vtxo.tapTree);
21344
21651
  let best;
21345
21652
  for (const exit of decoded.exitPaths()) {
21346
21653
  const leaf = decoded.findLeaf(base.hex.encode(exit.script));
21347
21654
  if (!leaf) continue;
21348
- const sequence = chunkEJOFL5WH_cjs.timelockToSequence(exit.params.timelock);
21655
+ const sequence = chunk5MLC2HU3_cjs.timelockToSequence(exit.params.timelock);
21349
21656
  const weight = delayWeight(sequence);
21350
21657
  if (!best || weight < best.weight) {
21351
21658
  best = { selection: { leaf, sequence }, weight };
@@ -21565,7 +21872,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21565
21872
  let totalAmount = 0n;
21566
21873
  const txWeightEstimator = TxWeightEstimator.create();
21567
21874
  for (const vtxo of vtxos) {
21568
- if (!chunkEJOFL5WH_cjs.canSweepOnchain(vtxo)) {
21875
+ if (!chunk5MLC2HU3_cjs.canSweepOnchain(vtxo)) {
21569
21876
  throw new Error(
21570
21877
  `Vtxo ${vtxo.txid}:${vtxo.vout} cannot be swept onchain: it is not fully unrolled (use unroll first), or its exit output was already spent`
21571
21878
  );
@@ -21576,14 +21883,14 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21576
21883
  }
21577
21884
  const resolved = await resolveUnilateralPath({
21578
21885
  vtxo,
21579
- scriptHex: base.hex.encode(chunkEJOFL5WH_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
21886
+ scriptHex: base.hex.encode(chunk5MLC2HU3_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
21580
21887
  contractRepository: wallet.contractRepository,
21581
21888
  walletPubKeyHex: base.hex.encode(await wallet.identity.xOnlyPublicKey()),
21582
21889
  currentTime: Date.now()
21583
21890
  });
21584
21891
  const spendingLeaf = resolved.selection.leaf;
21585
21892
  const sequence = resolved.selection.sequence;
21586
- const timelock = chunkEJOFL5WH_cjs.sequenceToTimelock(sequence);
21893
+ const timelock = chunk5MLC2HU3_cjs.sequenceToTimelock(sequence);
21587
21894
  const elapsed = timelock.type === "blocks" ? chainTip.height >= txStatus.blockHeight + Number(timelock.value) : chainTip.time >= txStatus.blockTime + Number(timelock.value);
21588
21895
  if (!elapsed) {
21589
21896
  throw new Error(`no available exit path found for vtxo ${vtxo.txid}:${vtxo.vout}`);
@@ -21596,7 +21903,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21596
21903
  sequence,
21597
21904
  witnessUtxo: {
21598
21905
  amount: BigInt(vtxo.value),
21599
- script: chunkEJOFL5WH_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
21906
+ script: chunk5MLC2HU3_cjs.VtxoScript.decode(vtxo.tapTree).pkScript
21600
21907
  },
21601
21908
  sighashType: btcSigner.SigHash.DEFAULT
21602
21909
  });
@@ -21606,7 +21913,7 @@ async function prepareUnrollTransaction(wallet, vtxoTxIds, outputAddress) {
21606
21913
  btcSigner.TaprootControlBlock.encode(spendingLeaf[0]).length
21607
21914
  );
21608
21915
  }
21609
- const tx = new chunkEJOFL5WH_cjs.Transaction({ version: 2 });
21916
+ const tx = new chunk5MLC2HU3_cjs.Transaction({ version: 2 });
21610
21917
  for (const input of inputs) {
21611
21918
  tx.addInput(input);
21612
21919
  }
@@ -21689,7 +21996,7 @@ async function buildSignedSweep(params) {
21689
21996
  `uneconomic vtxo ${vtxo.txid}:${vtxo.vout}: value ${vtxo.value} - fee ${fee} < dust`
21690
21997
  );
21691
21998
  }
21692
- const tx = new chunkEJOFL5WH_cjs.Transaction({ version: 2 });
21999
+ const tx = new chunk5MLC2HU3_cjs.Transaction({ version: 2 });
21693
22000
  tx.addInput({
21694
22001
  txid: vtxo.txid,
21695
22002
  index: vtxo.vout,
@@ -21714,7 +22021,7 @@ async function buildSignedSweep(params) {
21714
22021
  finalScriptWitness: [
21715
22022
  tapScriptSig[0][1],
21716
22023
  ...path.extraWitness,
21717
- chunkEJOFL5WH_cjs.scriptFromTapLeafScript(path.leaf),
22024
+ chunk5MLC2HU3_cjs.scriptFromTapLeafScript(path.leaf),
21718
22025
  btcSigner.TaprootControlBlock.encode(controlBlock)
21719
22026
  ]
21720
22027
  });
@@ -21744,7 +22051,7 @@ async function resolveFeeRate(opts) {
21744
22051
  }
21745
22052
  async function selectExitVtxos(opts) {
21746
22053
  if (!opts.vtxos) return opts.wallet.getVtxos();
21747
- const res = await chunkEJOFL5WH_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
22054
+ const res = await chunk5MLC2HU3_cjs.getNormalizedVtxos(opts.wallet.indexerProvider, { outpoints: opts.vtxos });
21748
22055
  const tapTrees = /* @__PURE__ */ new Map();
21749
22056
  const out = [];
21750
22057
  for (const vtxo of res.vtxos) {
@@ -21759,7 +22066,7 @@ async function selectExitVtxos(opts) {
21759
22066
  `no contract registered for vtxo script ${vtxo.script} \u2014 register the contract before exiting`
21760
22067
  );
21761
22068
  }
21762
- const handler = chunk6YUACVX4_cjs.contractHandlers.get(contract.type);
22069
+ const handler = chunkWIFL5QYZ_cjs.contractHandlers.get(contract.type);
21763
22070
  if (!handler) {
21764
22071
  throw new Error(`no contract handler registered for type '${contract.type}'`);
21765
22072
  }
@@ -21789,7 +22096,7 @@ async function computeExitLayout(opts, feeRate) {
21789
22096
  if (pendingNodes.length > 0) {
21790
22097
  const txs = await resolver.getVirtualTxs(pendingNodes.map((n) => n.txid));
21791
22098
  for (const psbt of txs) {
21792
- psbts.set(chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
22099
+ psbts.set(chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(psbt)).id, psbt);
21793
22100
  }
21794
22101
  }
21795
22102
  const childVsize = Number(
@@ -21825,7 +22132,7 @@ async function computeExitLayout(opts, feeRate) {
21825
22132
  try {
21826
22133
  const resolved = await resolveUnilateralPath({
21827
22134
  vtxo,
21828
- scriptHex: base.hex.encode(chunkEJOFL5WH_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
22135
+ scriptHex: base.hex.encode(chunk5MLC2HU3_cjs.VtxoScript.decode(vtxo.tapTree).pkScript),
21829
22136
  contractRepository: wallet.contractRepository,
21830
22137
  walletPubKeyHex,
21831
22138
  currentTime: Date.now()
@@ -21844,7 +22151,7 @@ async function computeExitLayout(opts, feeRate) {
21844
22151
  });
21845
22152
  continue;
21846
22153
  }
21847
- const t = chunkEJOFL5WH_cjs.sequenceToTimelock(resolved.selection.sequence);
22154
+ const t = chunk5MLC2HU3_cjs.sequenceToTimelock(resolved.selection.sequence);
21848
22155
  const delay = { type: t.type, value: Number(t.value) };
21849
22156
  infos.push({ outpoint, value: vtxo.value, sweepFee, path: resolved.label, delay });
21850
22157
  sweeps.push({ vtxo, resolved, sweepFee, delay });
@@ -22245,7 +22552,7 @@ async function prepare(opts) {
22245
22552
  txid: sweep.vtxo.txid,
22246
22553
  vout: sweep.vtxo.vout,
22247
22554
  value: sweep.vtxo.value,
22248
- pkScript: chunkEJOFL5WH_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
22555
+ pkScript: chunk5MLC2HU3_cjs.VtxoScript.decode(sweep.vtxo.tapTree).pkScript
22249
22556
  },
22250
22557
  path: sweep.resolved.selection,
22251
22558
  outputAddress: opts.sweepAddress,
@@ -22333,7 +22640,7 @@ async function prepare(opts) {
22333
22640
  if (newFee <= splitterFee) break;
22334
22641
  splitterFee = newFee;
22335
22642
  }
22336
- const splitter = new chunkEJOFL5WH_cjs.Transaction({ version: 2 });
22643
+ const splitter = new chunk5MLC2HU3_cjs.Transaction({ version: 2 });
22337
22644
  for (const coin of selected.inputs) {
22338
22645
  splitter.addInput({
22339
22646
  txid: coin.txid,
@@ -22477,41 +22784,41 @@ var UnilateralExit = {
22477
22784
  // src/arkade/index.ts
22478
22785
  var arkade_exports = {};
22479
22786
  chunk5BLDMQED_cjs.__export(arkade_exports, {
22480
- ARKADE_OP: () => chunk6YUACVX4_cjs.ARKADE_OP,
22481
- ARKADE_OPCODES: () => chunk6YUACVX4_cjs.ARKADE_OPCODES,
22482
- ARKADE_OPCODE_NAMES: () => chunk6YUACVX4_cjs.ARKADE_OPCODE_NAMES,
22483
- ARKADE_OPCODE_VALUES: () => chunk6YUACVX4_cjs.ARKADE_OPCODE_VALUES,
22484
- ARKADE_OPS: () => chunk6YUACVX4_cjs.ARKADE_OPS,
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,
22485
22792
  Arkade: () => Arkade,
22486
22793
  ArkadeContract: () => ArkadeContract,
22487
- ArkadeProgramScript: () => chunk6YUACVX4_cjs.ArkadeProgramScript,
22488
- ArkadeScript: () => chunk6YUACVX4_cjs.ArkadeScript,
22794
+ ArkadeProgramScript: () => chunkWIFL5QYZ_cjs.ArkadeProgramScript,
22795
+ ArkadeScript: () => chunkWIFL5QYZ_cjs.ArkadeScript,
22489
22796
  ArkadeTransactionBuilder: () => ArkadeTransactionBuilder,
22490
- BigNum: () => chunk6YUACVX4_cjs.bignum_exports,
22797
+ BigNum: () => chunkWIFL5QYZ_cjs.bignum_exports,
22491
22798
  OP: () => btcSigner.OP,
22492
- OPCODE_NAMES: () => chunk6YUACVX4_cjs.OPCODE_NAMES,
22493
- OPCODE_VALUES: () => chunk6YUACVX4_cjs.OPCODE_VALUES,
22494
- SUPPORTED_PROGRAM_VERSION: () => chunk6YUACVX4_cjs.SUPPORTED_PROGRAM_VERSION,
22799
+ OPCODE_NAMES: () => chunkWIFL5QYZ_cjs.OPCODE_NAMES,
22800
+ OPCODE_VALUES: () => chunkWIFL5QYZ_cjs.OPCODE_VALUES,
22801
+ SUPPORTED_PROGRAM_VERSION: () => chunkWIFL5QYZ_cjs.SUPPORTED_PROGRAM_VERSION,
22495
22802
  Script: () => btcSigner.Script,
22496
- arkadeScriptHash: () => chunk6YUACVX4_cjs.arkadeScriptHash,
22497
- arkadeWitnessHash: () => chunk6YUACVX4_cjs.arkadeWitnessHash,
22498
- asmToBytes: () => chunk6YUACVX4_cjs.asmToBytes,
22499
- bytesToASM: () => chunk6YUACVX4_cjs.bytesToASM,
22500
- computeArkadeScriptPublicKey: () => chunk6YUACVX4_cjs.computeArkadeScriptPublicKey,
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,
22501
22808
  createArkadeBatchHandler: () => createArkadeBatchHandler,
22502
- deserializeArkadeContractParams: () => chunk6YUACVX4_cjs.deserializeArkadeContractParams,
22503
- fromASM: () => chunk6YUACVX4_cjs.fromASM,
22504
- getOpcodeName: () => chunk6YUACVX4_cjs.getOpcodeName,
22505
- getOpcodeValue: () => chunk6YUACVX4_cjs.getOpcodeValue,
22506
- parseArtifact: () => chunk6YUACVX4_cjs.parseArtifact,
22507
- resolveAsm: () => chunk6YUACVX4_cjs.resolveAsm,
22508
- serializeArkadeContractParams: () => chunk6YUACVX4_cjs.serializeArkadeContractParams,
22509
- stringifyArtifact: () => chunk6YUACVX4_cjs.stringifyArtifact,
22510
- toASM: () => chunk6YUACVX4_cjs.toASM,
22511
- validateProgram: () => chunk6YUACVX4_cjs.validateProgram,
22512
- witnessRefToBytes: () => chunk6YUACVX4_cjs.witnessRefToBytes
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
22513
22820
  });
22514
- var isVtxoCoin = (input) => chunkEJOFL5WH_cjs.isVirtualCoin(input);
22821
+ var isVtxoCoin = (input) => chunk5MLC2HU3_cjs.isVirtualCoin(input);
22515
22822
  function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message, session, arkProvider, emulator, network, recipients, batchExpiryPolicy) {
22516
22823
  let batchId;
22517
22824
  let sweepTapTreeRoot;
@@ -22532,23 +22839,23 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22532
22839
  );
22533
22840
  await arkProvider.confirmRegistration(intentId);
22534
22841
  batchId = event.id;
22535
- const sweepTapscript = chunkEJOFL5WH_cjs.CSVMultisigTapscript.encode({
22842
+ const sweepTapscript = chunk5MLC2HU3_cjs.CSVMultisigTapscript.encode({
22536
22843
  timelock,
22537
- pubkeys: [chunk6YUACVX4_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
22844
+ pubkeys: [chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(info.forfeitPubkey), "forfeit key")]
22538
22845
  }).script;
22539
22846
  sweepTapTreeRoot = payment_js.tapLeafHash(sweepTapscript);
22540
22847
  return { skip: false };
22541
22848
  },
22542
22849
  onTreeSigningStarted: async (event, vtxoTree) => {
22543
22850
  const signerPubKey = await session.getPublicKey();
22544
- const xonlySignerPubKey = chunk6YUACVX4_cjs.toXOnly(signerPubKey, "signer key");
22851
+ const xonlySignerPubKey = chunkWIFL5QYZ_cjs.toXOnly(signerPubKey, "signer key");
22545
22852
  const xOnlyPubkeys = event.cosignersPublicKeys.map(
22546
- (k) => base.hex.encode(chunk6YUACVX4_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
22853
+ (k) => base.hex.encode(chunkWIFL5QYZ_cjs.toXOnly(base.hex.decode(k), "cosigner key"))
22547
22854
  );
22548
22855
  if (!xOnlyPubkeys.includes(base.hex.encode(xonlySignerPubKey))) {
22549
22856
  return { skip: true };
22550
22857
  }
22551
- const commitmentTx = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
22858
+ const commitmentTx = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(event.unsignedCommitmentTx));
22552
22859
  validateVtxoTxGraph(vtxoTree, commitmentTx, sweepTapTreeRoot);
22553
22860
  if (recipients && recipients.length > 0) {
22554
22861
  validateBatchRecipients(commitmentTx, vtxoTree.leaves(), recipients, network);
@@ -22580,7 +22887,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22580
22887
  if (connectorTree) {
22581
22888
  validateConnectorsTxGraph(event.commitmentTx, connectorTree);
22582
22889
  }
22583
- let commitmentPsbt = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
22890
+ let commitmentPsbt = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(event.commitmentTx));
22584
22891
  assertFinalCommitmentMatchesValidated(
22585
22892
  commitmentPsbt,
22586
22893
  validatedCommitmentTxid,
@@ -22615,7 +22922,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22615
22922
  boardingIndices.push(boardingIdx);
22616
22923
  continue;
22617
22924
  }
22618
- if (chunkEJOFL5WH_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
22925
+ if (chunk5MLC2HU3_cjs.isRecoverable(input) || isSubdust(input, info.dust)) {
22619
22926
  continue;
22620
22927
  }
22621
22928
  if (connectorIndex >= connectorLeaves.length) {
@@ -22636,7 +22943,7 @@ function createArkadeBatchHandler(intentId, inputs, signer, signedProof, message
22636
22943
  index: input.vout,
22637
22944
  witnessUtxo: {
22638
22945
  amount: BigInt(input.value),
22639
- script: chunkEJOFL5WH_cjs.VtxoScript.decode(input.tapTree).pkScript
22946
+ script: chunk5MLC2HU3_cjs.VtxoScript.decode(input.tapTree).pkScript
22640
22947
  },
22641
22948
  sighashType: btcSigner.SigHash.DEFAULT,
22642
22949
  tapLeafScript: [input.forfeitTapLeafScript]
@@ -22727,16 +23034,16 @@ var Arkade = class _Arkade {
22727
23034
  /** Connect and resolve the server key, checkpoint closure and (if present) the co-signer key. */
22728
23035
  static async connect(opts) {
22729
23036
  const info = await opts.arkade.getInfo();
22730
- const serverKey = chunk6YUACVX4_cjs.toXOnly(base.hex.decode(info.signerPubkey), "ark signer key");
22731
- const checkpoint = chunkEJOFL5WH_cjs.CSVMultisigTapscript.decode(base.hex.decode(info.checkpointTapscript));
22732
- const network = opts.network ?? chunkEJOFL5WH_cjs.DEFAULT_NETWORK;
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;
22733
23040
  let emulatorKey;
22734
23041
  if (opts.emulator) {
22735
- emulatorKey = base.hex.decode(chunkEJOFL5WH_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
23042
+ emulatorKey = base.hex.decode(chunk5MLC2HU3_cjs.resolveEmulatorPubkey(network, opts.emulatorPubkey));
22736
23043
  }
22737
23044
  let userKey;
22738
23045
  if (opts.identity) {
22739
- userKey = chunk6YUACVX4_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
23046
+ userKey = chunkWIFL5QYZ_cjs.toXOnly(await opts.identity.xOnlyPublicKey(), "identity key");
22740
23047
  }
22741
23048
  return new _Arkade({
22742
23049
  arkProvider: opts.arkade,
@@ -22762,7 +23069,7 @@ var Arkade = class _Arkade {
22762
23069
  * key respectively; explicit args always win.
22763
23070
  */
22764
23071
  contract(program, args = {}) {
22765
- const declared = (program.params ?? []).map(chunk6YUACVX4_cjs.inputName);
23072
+ const declared = (program.params ?? []).map(chunkWIFL5QYZ_cjs.inputName);
22766
23073
  if (declared.includes("server") && args.server === void 0) {
22767
23074
  args = { ...args, server: this.serverKey };
22768
23075
  }
@@ -22782,7 +23089,7 @@ var ArkadeContract = class _ArkadeContract {
22782
23089
  userKey: client.userKey,
22783
23090
  emulatorKey: client.emulatorKey
22784
23091
  };
22785
- this.vtxoScript = new chunk6YUACVX4_cjs.ArkadeProgramScript(program, args, this.keys);
23092
+ this.vtxoScript = new chunkWIFL5QYZ_cjs.ArkadeProgramScript(program, args, this.keys);
22786
23093
  this.tapTree = this.vtxoScript.encode();
22787
23094
  this.compiled = this.vtxoScript.compiled;
22788
23095
  }
@@ -22810,7 +23117,7 @@ var ArkadeContract = class _ArkadeContract {
22810
23117
  `ArkadeContract.fromContract: expected contract type 'arkade', got '${contract.type}'`
22811
23118
  );
22812
23119
  }
22813
- const typed = chunk6YUACVX4_cjs.deserializeArkadeContractParams(contract.params);
23120
+ const typed = chunkWIFL5QYZ_cjs.deserializeArkadeContractParams(contract.params);
22814
23121
  return new _ArkadeContract(client, typed.program, typed.args, {
22815
23122
  serverKey: typed.serverKey,
22816
23123
  userKey: typed.userKey,
@@ -22851,7 +23158,7 @@ var ArkadeContract = class _ArkadeContract {
22851
23158
  toContractParams() {
22852
23159
  return {
22853
23160
  type: "arkade",
22854
- params: chunk6YUACVX4_cjs.serializeArkadeContractParams({
23161
+ params: chunkWIFL5QYZ_cjs.serializeArkadeContractParams({
22855
23162
  program: this.program,
22856
23163
  args: this.args,
22857
23164
  serverKey: this.keys.serverKey,
@@ -22901,18 +23208,18 @@ var ArkadeContract = class _ArkadeContract {
22901
23208
  if (registered) {
22902
23209
  const [withVtxos] = await manager.getContractsWithVtxos({ script: scriptHex });
22903
23210
  return (withVtxos?.vtxos ?? []).filter(
22904
- (v) => !chunkEJOFL5WH_cjs.hasTerminalSpend(v) && !v.isUnrolled
23211
+ (v) => !chunk5MLC2HU3_cjs.hasTerminalSpend(v) && !v.isUnrolled
22905
23212
  );
22906
23213
  }
22907
23214
  }
22908
23215
  if (!this.client.indexer) {
22909
23216
  throw new Error("ArkadeContract.getUtxos: an indexer is required");
22910
23217
  }
22911
- const { vtxos } = await chunkEJOFL5WH_cjs.getNormalizedVtxos(this.client.indexer, {
23218
+ const { vtxos } = await chunk5MLC2HU3_cjs.getNormalizedVtxos(this.client.indexer, {
22912
23219
  scripts: [scriptHex],
22913
23220
  spendableOnly: true
22914
23221
  });
22915
- return vtxos.filter((v) => !chunkEJOFL5WH_cjs.hasTerminalSpend(v) && !v.isUnrolled);
23222
+ return vtxos.filter((v) => !chunk5MLC2HU3_cjs.hasTerminalSpend(v) && !v.isUnrolled);
22916
23223
  }
22917
23224
  /** Total spendable balance (requires an indexer). */
22918
23225
  async getBalance() {
@@ -23010,7 +23317,7 @@ var ArkadeTransactionBuilder = class {
23010
23317
  this.contract.client.checkpoint
23011
23318
  );
23012
23319
  if (coin.sourceTx) {
23013
- chunkEJOFL5WH_cjs.setArkPsbtField(arkTx, 0, chunkEJOFL5WH_cjs.PrevArkTxField, coin.sourceTx);
23320
+ chunk5MLC2HU3_cjs.setArkPsbtField(arkTx, 0, chunk5MLC2HU3_cjs.PrevArkTxField, coin.sourceTx);
23014
23321
  }
23015
23322
  if (this.fn.arkadeScript) {
23016
23323
  const indexer = this.contract.client.indexer;
@@ -23027,8 +23334,8 @@ var ArkadeTransactionBuilder = class {
23027
23334
  }
23028
23335
  const condition = (def.tapscript.witness ?? []).map((w) => this.witnessBytes(w));
23029
23336
  if (condition.length > 0) {
23030
- chunkEJOFL5WH_cjs.setArkPsbtField(arkTx, 0, chunkEJOFL5WH_cjs.ConditionWitness, condition);
23031
- chunkEJOFL5WH_cjs.setArkPsbtField(checkpoints[0], 0, chunkEJOFL5WH_cjs.ConditionWitness, condition);
23337
+ chunk5MLC2HU3_cjs.setArkPsbtField(arkTx, 0, chunk5MLC2HU3_cjs.ConditionWitness, condition);
23338
+ chunk5MLC2HU3_cjs.setArkPsbtField(checkpoints[0], 0, chunk5MLC2HU3_cjs.ConditionWitness, condition);
23032
23339
  }
23033
23340
  const packets = [];
23034
23341
  if (this.assetSpecs.length > 0) {
@@ -23067,7 +23374,7 @@ var ArkadeTransactionBuilder = class {
23067
23374
  base.base64.encode(signedArk2.toPSBT()),
23068
23375
  signedCps.map((c) => base.base64.encode(c.toPSBT()))
23069
23376
  );
23070
- const txid = chunkEJOFL5WH_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
23377
+ const txid = chunk5MLC2HU3_cjs.Transaction.fromPSBT(base.base64.decode(res2.signedArkTx)).id;
23071
23378
  return {
23072
23379
  txid,
23073
23380
  signedArkTx: res2.signedArkTx,
@@ -23126,23 +23433,23 @@ var ArkadeTransactionBuilder = class {
23126
23433
  }
23127
23434
  buildAssetPacket() {
23128
23435
  const groups = this.assetSpecs.map((s) => {
23129
- const id = typeof s.assetId === "string" ? chunkPJR63FTK_cjs.AssetId.fromString(s.assetId) : chunkPJR63FTK_cjs.AssetId.fromBytes(s.assetId);
23130
- return chunkPJR63FTK_cjs.AssetGroup.create(
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(
23131
23438
  id,
23132
23439
  null,
23133
- s.inputs.map((i) => chunkPJR63FTK_cjs.AssetInput.create(i.vin, i.amount)),
23134
- s.outputs.map((o) => chunkPJR63FTK_cjs.AssetOutput.create(o.vout, o.amount)),
23135
- (s.metadata ?? []).map((m) => chunkPJR63FTK_cjs.Metadata.create(m.key, m.value))
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))
23136
23443
  );
23137
23444
  });
23138
- return chunkPJR63FTK_cjs.Packet.create(groups);
23445
+ return chunkGVHUHTRH_cjs.Packet.create(groups);
23139
23446
  }
23140
23447
  witnessBytes(ref) {
23141
- return chunk6YUACVX4_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
23448
+ return chunkWIFL5QYZ_cjs.witnessRefToBytes(ref, this.args, this.contract.args);
23142
23449
  }
23143
23450
  };
23144
23451
  function bindInputs(fn, callArgs) {
23145
- const names = (fn.def.inputs ?? []).map(chunk6YUACVX4_cjs.inputName);
23452
+ const names = (fn.def.inputs ?? []).map(chunkWIFL5QYZ_cjs.inputName);
23146
23453
  if (callArgs.length !== names.length) {
23147
23454
  throw new Error(`${fn.name}: expected ${names.length} argument(s), got ${callArgs.length}`);
23148
23455
  }
@@ -23533,6 +23840,7 @@ function createDefaultPaymentRouter(wallet) {
23533
23840
  exports.ARKADE_MAGIC = ARKADE_MAGIC;
23534
23841
  exports.ARKADE_SALTED_PREIMAGE_TAG = ARKADE_SALTED_PREIMAGE_TAG;
23535
23842
  exports.ARKADE_SWAP_PREIMAGE_TAG = ARKADE_SWAP_PREIMAGE_TAG;
23843
+ exports.AbortError = AbortError;
23536
23844
  exports.ActivityRegistry = ActivityRegistry;
23537
23845
  exports.AmbiguousRouteError = AmbiguousRouteError;
23538
23846
  exports.ArkNote = ArkNote;
@@ -23747,5 +24055,5 @@ exports.verifyTapscriptSignatures = verifyTapscriptSignatures;
23747
24055
  exports.waitForIncomingFunds = waitForIncomingFunds;
23748
24056
  exports.warnAndFilterVtxosForScript = warnAndFilterVtxosForScript;
23749
24057
  exports.withPrevTxs = withPrevTxs;
23750
- //# sourceMappingURL=chunk-WCJVKFAP.cjs.map
23751
- //# sourceMappingURL=chunk-WCJVKFAP.cjs.map
24058
+ //# sourceMappingURL=chunk-EBYCTLET.cjs.map
24059
+ //# sourceMappingURL=chunk-EBYCTLET.cjs.map